【 摘 要 】 隨著計(jì)算機(jī)在各行各業(yè)的大量普及,滿足各種應(yīng)用需求的應(yīng)用程序越來越多,在程序?qū)嶋H開發(fā)過程中,由于軟件規(guī)模及復(fù)雜程度的提高,不可避免地會出現(xiàn)安全漏洞,造成安全漏洞因素有很多。論文將主要針對源代碼方面的安全漏洞進(jìn)行分析和研究。
【 關(guān)鍵詞 】 源代碼;安全漏洞;漏洞檢查;靜態(tài)分析
【 中圖分類號 】 TP309.2
【 文獻(xiàn)標(biāo)識碼 】 A
Analysis and Research on Common Source Code Security Vulnerabilities
Li Xin
(Institute of Electric Power Research, Guangxi Power Grid Company Limited GuangxiNanning 530023)
【 Abstract 】 With the popularization of computers in all walks of life, to meet various application needs more and more applications in the program, the actual development process, the software scale and complexity, inevitably there will be security vulnerabilities caused by security vulnerabilities, there are many factors, in this article, we will focus on the source of security vulnerabilities the code for the analysis and research.
【 Keywords 】 source code; security vulnerability; vulnerability checking; static analysis
1 引言
隨著軟件工程及網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,目前在計(jì)算機(jī)領(lǐng)域,應(yīng)用軟件的規(guī)模、數(shù)量都非常大,在軟件開發(fā)過程中,漏洞的產(chǎn)生是不可避免的,漏洞的存在會嚴(yán)重威脅系統(tǒng)的安全穩(wěn)定運(yùn)行,使病毒、惡意代碼輕易的入侵系統(tǒng),導(dǎo)致用戶的損失。尤其是在軍事、經(jīng)濟(jì)等領(lǐng)域,對于軟件安全有著更高的要求,會因?yàn)檐浖┒炊斐蔀?zāi)難性的后果及巨大的經(jīng)濟(jì)損失。為了避免安全漏洞的產(chǎn)生,在軟件開發(fā)過程中,要對漏洞的類型、特點(diǎn)及如何防范有一個(gè)全面的了解,進(jìn)而避免漏洞的產(chǎn)生。論文將簡單介紹源代碼安全漏洞的基本概念及危害性,并重點(diǎn)對典型的幾個(gè)漏洞進(jìn)行分析。
2 漏洞的類型
源代碼漏洞根據(jù)不同的分類方法,有不同的類型和數(shù)量,對程序可能造成的影響也不同。通過對漏洞進(jìn)行分類,能夠使我們很容易地對漏洞進(jìn)行全面描述,如成因、作用等。理論上我們可以用一個(gè)分類屬性來表達(dá)漏洞的一個(gè)本質(zhì)特征,而為漏洞的每個(gè)屬性賦值的過程,就是給漏洞在該維屬性上分類的過程。源代碼的漏洞主要有XSS漏洞、CSRF漏洞、Info漏洞、Json-Hijacking漏洞、注入缺陷漏洞、并非漏洞、高危端口漏洞等,下面我們以注入缺陷及XSS漏洞為例,對其進(jìn)行簡單分析。
2.1 注入缺陷
源代碼中存在的注入缺陷能夠使攻擊者通過操縱輸入來實(shí)現(xiàn)改變應(yīng)用程序的行為,這種行為上的改變可以使攻擊者避開程序的訪問控制,使其能夠創(chuàng)建、修改、刪除或閱讀應(yīng)用程序可以訪問的任何信息。注入缺陷是一般都是由于開發(fā)者在源代碼中的假設(shè)(被一個(gè)應(yīng)用程序處理的輸入字符串不包含語法)而造成的,這個(gè)假設(shè)會導(dǎo)致有效輸入確認(rèn)的缺失。注入缺陷主要包括系統(tǒng)調(diào)用、Shell命令和SQL注入。在這里我們主要對SQL注入攻擊進(jìn)行分析。
SQL注入是目前黑客對數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一,一般可分為SQL操縱、代碼注入、函數(shù)調(diào)用注入和緩沖區(qū)溢出四種攻擊方法。在程序的使用過程中為了方便快捷的管理相關(guān)數(shù)據(jù),就需要應(yīng)用到數(shù)據(jù)庫,數(shù)據(jù)庫可以便于程序快速的對相關(guān)數(shù)據(jù)信息進(jìn)行存儲、分類及查詢。當(dāng)用戶使用程序時(shí),程序可以自動通過對數(shù)據(jù)庫的查詢,將所獲取的信息按照一定格式反饋給用戶,同時(shí)用戶也是通過交互式的對話框提交給程序數(shù)據(jù),從而使程序按照用戶想要的信息進(jìn)行查詢,反饋給用戶想要的信息。通過控制傳遞給程序數(shù)據(jù)庫操作語句的關(guān)鍵變量來獲得惡意控制程序數(shù)據(jù)庫,從而獲取有用信息或者制造惡意破壞的,甚至是控制用戶計(jì)算機(jī)系統(tǒng)的漏洞,就稱之為“SQL注入漏洞”。
SQL注入漏洞完全是利用了將包含了某種目的的SQL語句,通過關(guān)鍵變量插入到程序中正常的數(shù)據(jù)庫操作語句里。程序一旦發(fā)生注入漏洞,就會引發(fā)一系列安全隱患。SQL注入漏洞是不分語言的,用任何語言開發(fā)的程序,只要是會涉及到對數(shù)據(jù)庫的操作,就可能會存在SQL注入漏洞。雖然有時(shí)會因?yàn)榫帉懻Z言的要求或者程序設(shè)置環(huán)境的不同,導(dǎo)致SQL注入漏洞難以被常用方法所利用,但是總會找到方法進(jìn)行突破。
通過對造成SQL注入漏洞原因的總結(jié)分析,具體包括六個(gè)原因:1)類型處理不當(dāng);2)數(shù)據(jù)庫配置不安全;3)查詢集處理不合理;4)錯(cuò)誤處理不恰當(dāng);5)轉(zhuǎn)義字符處理不當(dāng);6)多個(gè)提交處理不當(dāng)。[2]
源代碼中存在SQL注入漏洞,在軟件、系統(tǒng)應(yīng)用過程中會造成幾個(gè)方面的危害:1)敏感數(shù)據(jù)被惡意獲?。?)網(wǎng)絡(luò)釣魚;3)被獲取WEB用戶的網(wǎng)頁內(nèi)容;4)受到CSRF攻擊;5)用戶的鍵盤擊鍵數(shù)據(jù)被盜;6)成為WEB僵尸。下面我們舉一個(gè)最簡單的例子,對漏洞的利用方式進(jìn)行了解:
假設(shè)在一個(gè)登錄界面,要求用戶輸入用戶名及密碼,但是由于開發(fā)人員失誤將用戶名及密碼直接拼接在了SQL查詢語句中:
Mysql_query(“select * from user where
(email=$emailand
Password=$password)”)
在存在這一漏洞的情況下,攻擊者只需要構(gòu)造Password為‘空or‘1=‘1的非法輸入,就可將實(shí)際執(zhí)行的SQL語句變?yōu)椋?/p>
Mysql_query(“select * from user where
(email=attack@abc.comand
Password=‘‘or‘1=‘1)”)
在這個(gè)例子中,SQL漏洞是由于開發(fā)人員直接將用戶輸入當(dāng)做可信部分直接和SQL語句拼接而造成的。
在實(shí)際應(yīng)用過程中對于SQL漏洞的防御手段主要包括:1)使用參數(shù)化的過濾性語句;2)避免使用解釋程序,因?yàn)檫@是黑客借以執(zhí)行非法命令的手段;3)避免出現(xiàn)一些詳細(xì)的錯(cuò)誤消息,要使用一種標(biāo)準(zhǔn)的輸入確認(rèn)機(jī)制來驗(yàn)證所有輸入數(shù)據(jù)的長度、類型、語句、企業(yè)規(guī)則等;4)使用專業(yè)的漏洞掃描工具;5)在程序開發(fā)的所有階段都對代碼進(jìn)行安全檢查。[3]
2.2 跨站腳本漏洞
跨站腳本攻擊(XSS)是一種被動的安全攻擊方式。攻擊者通過在看上去安全可靠的鏈接中嵌入惡意代碼,當(dāng)用戶點(diǎn)擊這一鏈接時(shí),嵌入的惡意代碼作為用戶請求進(jìn)行提交,并在用戶電腦上運(yùn)行,這一漏洞常常被用來竊取用戶信息。由于網(wǎng)絡(luò)環(huán)境的復(fù)雜程度及跨站腳本攻擊方式的多樣性,導(dǎo)致這類攻擊很難得到徹底防御。
攻擊者通過跨站腳本漏洞可實(shí)現(xiàn)幾種目的:1)盜取用戶賬號、密碼;2)控制企業(yè)數(shù)據(jù),讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù);3)盜竊企業(yè)重要的資料;4)進(jìn)行非法轉(zhuǎn)賬;5)強(qiáng)制發(fā)送電子郵件;6)安裝木馬、后門程序;7)控制受害者機(jī)器向其它網(wǎng)站發(fā)起攻擊。下面我們以實(shí)例來分析如何利用跨站腳本漏洞:
在正常情況下,WEB應(yīng)用與數(shù)據(jù)庫之間的正常調(diào)用鏈接方式為:
$comments=db.get_comments(news-id):
“;
Foreach($comments as $c){
Echo“
1.”.$c.”
”;
}
echo”echo””;
如果在這段源代碼中插入一條惡意JS腳本,如:
當(dāng)插入的這一惡意腳本被調(diào)用,就形成了XSS攻擊。
目前針對跨站腳本漏洞的防范措施主要包括:1)防堵跨站腳本漏洞;2)Cookie防盜;3)盡量使用POST而非GET提交表單;4)嚴(yán)格檢查Refer;5;將單步流程改為多步;6)引入用戶交互;7)只在允許Anonymous訪問的地方使用動態(tài)的JavaScript;8)對于用戶提交信息中的img等link進(jìn)行檢查是否有重定向本站,不是真的圖片文件等可疑操作。
2.3 跨站請求偽造(CSRF)漏洞
CSRF漏洞與XSS具有很大的相似性,區(qū)別在于XSS是利用客戶端存在的缺陷,而CSRF是利用網(wǎng)絡(luò)服務(wù)器上存在的漏洞。通過這一漏洞,攻擊者可強(qiáng)迫已登錄的受害者發(fā)送請求,這就意味著,攻擊者可代表用戶執(zhí)行商品購買、轉(zhuǎn)賬、運(yùn)行惡意軟件等操作。對于CSRF的預(yù)防非常困難,為了降低這一漏洞造成的影響,對于軟件開發(fā)者,可通過幾個(gè)措施:1)設(shè)定短暫的可信用戶會話時(shí)間;2)每次提出一個(gè)可信行為時(shí),對發(fā)出請求的用戶進(jìn)行驗(yàn)證;3)在應(yīng)用程序中刪除所有的XSS脆弱性,這是因?yàn)楣粽咄ㄟ^XSS漏洞可獲取需要的所以信息。[4]
3 漏洞分析及檢測
為了最大限度地降低源代碼中存在的漏洞,在開發(fā)過程中要及時(shí)的對漏洞進(jìn)行分析和檢測,目前主要是應(yīng)用到靜態(tài)分析和動態(tài)分析兩種技術(shù)。
3.1 靜態(tài)分析技術(shù)
靜態(tài)分析方法是對源代碼進(jìn)行直接掃描,提取出代碼中的關(guān)鍵語法,通過解釋其語義,理解程序行為,根據(jù)預(yù)先設(shè)定的漏洞特征、安全規(guī)則等對漏洞進(jìn)行檢測。側(cè)重點(diǎn)在于源代碼的內(nèi)部特征,在分析過程中關(guān)鍵技術(shù)主要包括幾個(gè)方面。
3.1.1流分析
在流分析技術(shù)環(huán)節(jié),主要是分為控制流和數(shù)據(jù)流,其中控制流分析是要得出代碼中控制流走向的信息,即控制流圖??刂屏鞣治鲫P(guān)心的是代碼的控制結(jié)構(gòu)信息;而數(shù)據(jù)流則是要得出程序中數(shù)據(jù)流動的信息,也就是程序中變量的相關(guān)信息。
3.1.2符號執(zhí)行
通過符號執(zhí)行能夠?qū)⒊绦蜣D(zhuǎn)化為一組約束,同時(shí)對程序模擬執(zhí)行過程中的狀態(tài)是否出錯(cuò)進(jìn)行檢查。
3.1.3模型檢測
在給定被測系統(tǒng)的模型和目標(biāo)屬性的描述后,可自動的對被測系統(tǒng)的狀態(tài)空間進(jìn)行窮盡搜索,以檢測目標(biāo)屬性是否被滿足。
3.2 動態(tài)分析方法
動態(tài)分析方法是在代碼運(yùn)行的狀態(tài)下,通過對代碼運(yùn)行情況進(jìn)行監(jiān)測、或根據(jù)測試用例結(jié)果對漏洞進(jìn)行檢測。與靜態(tài)分析方法相比,其最大優(yōu)勢在于其分析結(jié)果精確度高,這種方法的關(guān)鍵技術(shù)主要是:
模糊測試。模糊測試是基于缺陷注入的一種自動軟件測試技術(shù),通過將大量精心構(gòu)造的數(shù)據(jù)作為應(yīng)用程序的輸入,通過觀察程序是否出現(xiàn)異常來判斷應(yīng)用程序中可能存在的漏洞。
動態(tài)污染傳播。這一技術(shù)也被稱為動態(tài)信息流分析方法,是通過在程序運(yùn)行時(shí)標(biāo)記變量、存儲單位等信息,對攻擊路徑進(jìn)行跟蹤,從而獲得存在漏洞信息。[5]
4 結(jié)束語
源代碼漏洞無處不在,在開發(fā)過程中,軟件開發(fā)人員應(yīng)高度重視漏洞這一問題,根據(jù)軟件開發(fā)源代碼安全指南等規(guī)范標(biāo)準(zhǔn)進(jìn)行代碼編寫。我們只是對源代碼中具有代表性的漏洞進(jìn)行了簡單分析,了解其侵入原理及防范。源代碼安全漏洞的防治修復(fù)是一項(xiàng)持續(xù)不斷的工作,需要開發(fā)人員不斷對其完善修復(fù),同時(shí)用戶在程序應(yīng)用過程中也應(yīng)加強(qiáng)漏洞防范措施,避免應(yīng)漏洞的存在造成的損失。
參考文獻(xiàn)
[1] 朱圣才,徐御,王火劍.常見源代碼安全漏洞分析與研究[J].信息網(wǎng)絡(luò)安全,2014,(02):49-52
[2] 趙暉.面向軍工應(yīng)用軟件的源代碼漏洞分析系統(tǒng)的研究與實(shí)現(xiàn)[C].北京交通大學(xué),2015-7-14
[3] 葉亮.基于安全規(guī)則的源代碼分析方法研究[C].華中科技大學(xué),2013-10-13.
[4] 王躍.源代碼安全漏洞檢測方法研究[C].華中科技大學(xué),2013-27-41.
[5] 周誠,張濤,馬媛媛,李偉偉.一種高效檢測源代碼安全漏洞的代碼審查方法[J].現(xiàn)代電子技術(shù),2015,(05):83-86.
作者簡介:
黎新(1987-),男,漢族,工程師,研究生,碩士學(xué)位;主要研究方向和關(guān)注領(lǐng)域:信息安全。
客服熱線:400-656-5456??客服專線:010-56265043??電子郵箱:longyuankf@126.com
電信與信息服務(wù)業(yè)務(wù)經(jīng)營許可證:京icp證060024號
Dragonsource.com Inc. All Rights Reserved