計(jì)算機(jī)漏洞檢測(cè)分析論文
1漏洞的定義與特點(diǎn)
可以將漏洞定義為存在于一個(gè)系統(tǒng)內(nèi)的弱點(diǎn)或缺陷,這些弱點(diǎn)或缺陷導(dǎo)致系統(tǒng)對(duì)某一特定的威脅攻擊或危險(xiǎn)事件具有敏感性,或具有進(jìn)行攻擊威脅的可能性[1]。軟件漏洞產(chǎn)生通常是由于在軟件的設(shè)計(jì)和實(shí)現(xiàn)中由于開(kāi)發(fā)人員有意或無(wú)意的失誤造成是系統(tǒng)潛在的不安全性。漏洞可以劃分為功能性邏輯漏洞和安全性邏輯漏洞。功能性邏輯漏洞是指影響軟件的正常功能,例如執(zhí)行結(jié)果錯(cuò)誤、執(zhí)行流程錯(cuò)誤等。安全性邏輯漏洞是指通常情況下不影響軟件的正常功能,但如果漏洞被攻擊者成功利用后,有可能造成軟件運(yùn)行錯(cuò)誤甚至執(zhí)行惡意代碼,例如緩沖區(qū)溢出漏洞、網(wǎng)站中的跨站腳本漏洞(XSS)、SQL注入漏洞等[2]。
漏洞具有以下特點(diǎn):1)編程過(guò)程中出現(xiàn)邏輯錯(cuò)誤是很普遍的現(xiàn)象,這些錯(cuò)誤絕大多數(shù)都是由于疏忽造成的;2)數(shù)據(jù)處理(例如對(duì)變量賦值)比數(shù)值計(jì)算更容易出現(xiàn)邏輯錯(cuò)誤,過(guò)小和過(guò)大的程序模塊都比中等程序模塊更容易出現(xiàn)錯(cuò)誤;3)漏洞和具體的系統(tǒng)環(huán)境密切相關(guān)。在不同種類的軟、硬件設(shè)備中,同種設(shè)備的不同版本之間,由不同設(shè)備構(gòu)成的不同系統(tǒng)之間,以及同種系統(tǒng)在不同的設(shè)置條件下,都會(huì)存在各自不同的安全漏洞問(wèn)題;4)漏洞問(wèn)題與時(shí)間緊密相關(guān)。隨著時(shí)間的推移,舊的漏洞會(huì)不斷得到修補(bǔ)或糾正,新的漏洞會(huì)不斷出現(xiàn),因而漏洞問(wèn)題會(huì)長(zhǎng)期存在[3]。
2漏洞研究技術(shù)分類
根據(jù)研究對(duì)象的不同,漏洞挖掘技術(shù)可以分為基于源代碼的漏洞挖掘技術(shù)、基于目標(biāo)代碼的漏洞挖掘技術(shù)和混合漏洞挖掘技術(shù)三大類;谠创a的漏洞挖掘又稱為靜態(tài)檢測(cè),是通過(guò)對(duì)源代碼的分析,找到軟件中存在的漏洞。基于目標(biāo)代碼的漏洞挖掘又稱為動(dòng)態(tài)檢測(cè),首先將要分析的目標(biāo)程序進(jìn)行反匯編,得到匯編代碼;然后對(duì)匯編代碼進(jìn)行分析,來(lái)判斷是否存在漏洞;旌下┒赐诰蚣夹g(shù)是結(jié)合靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)的優(yōu)點(diǎn),對(duì)目標(biāo)程序進(jìn)行漏洞挖掘。
2.1靜態(tài)檢測(cè)技術(shù)
靜態(tài)檢測(cè)技術(shù)可以通過(guò)手工或源代碼分析工具輔助完成,主要針對(duì)源代碼結(jié)構(gòu)、跳轉(zhuǎn)條件、邊界條件、調(diào)用函數(shù)等進(jìn)行分析,查找目標(biāo)代碼中的不安全因素。例如,可以檢查源代碼中的Printf之類函數(shù),檢查是否對(duì)其使用條件進(jìn)行了限定,是否對(duì)邊界條件進(jìn)行了檢查。由于現(xiàn)代軟件源代碼數(shù)量龐大,不可能完全對(duì)其進(jìn)行人工審計(jì)。靜態(tài)分析技術(shù)具有以下特點(diǎn)[4]:首先,通過(guò)工具對(duì)源代碼進(jìn)行掃描,靜態(tài)檢測(cè)技術(shù)效率高,分析速度快;其次,靜態(tài)檢測(cè)技術(shù)可以通過(guò)設(shè)置不同的測(cè)試條件實(shí)現(xiàn)對(duì)代碼的全面掃描;再次,靜態(tài)檢測(cè)技術(shù)可以在一些開(kāi)源項(xiàng)目或在項(xiàng)目開(kāi)發(fā)階段進(jìn)行挖掘,及時(shí)修復(fù)系統(tǒng)中存在的漏洞。但這種方法必須獲得源代碼,并且需對(duì)目標(biāo)代碼進(jìn)行分析、編譯等。另一方面靜態(tài)檢測(cè)技術(shù)是通過(guò)對(duì)源代碼依據(jù)一定規(guī)則分析來(lái)實(shí)現(xiàn),因此要建立源代碼的特征庫(kù)和規(guī)則庫(kù)。隨著漏洞數(shù)量的增加,特征庫(kù)也隨之不斷擴(kuò)大,繼而帶來(lái)檢測(cè)效率不斷降低。由于靜態(tài)檢測(cè)技術(shù)是依據(jù)特征庫(kù)來(lái)進(jìn)行分析判斷,因此存在誤報(bào)和漏報(bào)的情況。文獻(xiàn)[5]中,將靜態(tài)檢測(cè)技術(shù)分為詞法分析、規(guī)則檢查和類型推導(dǎo)。詞法分析技術(shù)最早出現(xiàn)于BMAT技術(shù)中,這種方法只對(duì)語(yǔ)法進(jìn)行檢查,判斷詞法中是否存在漏洞,如果存在則根據(jù)知識(shí)庫(kù)進(jìn)行進(jìn)一步判斷。規(guī)則檢查通過(guò)檢查程序編制規(guī)則來(lái)判斷程序是否存在漏洞,如C語(yǔ)言中是否對(duì)變量進(jìn)行了初始化。規(guī)則檢查將這些規(guī)則以特定語(yǔ)法描述,然后再將程序行為進(jìn)行比對(duì)檢測(cè)。類型推導(dǎo)通過(guò)推導(dǎo)程序中變量和函數(shù)類型,來(lái)判斷變量和函數(shù)的訪問(wèn)是否符合類型規(guī)則;陬愋屯茖(dǎo)的靜態(tài)分析方法適用于控制流無(wú)關(guān)分析,但對(duì)于控制流相關(guān)的特性則需要引入類型限定詞和子類型[6]的概念來(lái)擴(kuò)展源語(yǔ)言的類型系統(tǒng),使得新類型系統(tǒng)在源語(yǔ)言的數(shù)據(jù)類型上加以擴(kuò)展并表示出類型之間的關(guān)系。針對(duì)現(xiàn)有漏洞靜態(tài)檢測(cè)方法中存在的誤報(bào)率和漏報(bào)率較高問(wèn)題,文獻(xiàn)[7]提出了一種基于數(shù)據(jù)安全狀態(tài)跟蹤和檢查的安全漏洞靜態(tài)檢測(cè)方法。該方法擴(kuò)展了漏洞狀態(tài)模型的狀態(tài)空間,設(shè)定多個(gè)安全屬性,通過(guò)安全屬性描述安全狀態(tài)。同時(shí),對(duì)漏洞狀態(tài)機(jī)中進(jìn)行合法性校驗(yàn),識(shí)別誤報(bào)的可能性。通過(guò)建立非可信數(shù)據(jù)識(shí)別系統(tǒng)中的漏報(bào)情況。
2.2動(dòng)態(tài)檢測(cè)技術(shù)
由于在實(shí)際檢測(cè)過(guò)程中,除開(kāi)源軟件以外,很難獲得被測(cè)系統(tǒng)的源代碼信息,因此限制了靜態(tài)檢測(cè)技術(shù)的應(yīng)用。動(dòng)態(tài)檢測(cè)技術(shù)是通過(guò)構(gòu)造非標(biāo)準(zhǔn)輸入數(shù)據(jù),調(diào)試運(yùn)行軟件系統(tǒng),根據(jù)系統(tǒng)功能或數(shù)據(jù)流向,檢查運(yùn)行結(jié)果的異常,以判斷被測(cè)軟件系統(tǒng)是否存在漏洞。動(dòng)態(tài)檢測(cè)技術(shù)通常以輸入接口或者運(yùn)行環(huán)境為入手點(diǎn),檢測(cè)系統(tǒng)中存在的漏洞。雖然動(dòng)態(tài)檢測(cè)技術(shù)具有準(zhǔn)確率高的優(yōu)點(diǎn),但是其效率卻十分低下,因?yàn)楦鞣N軟件系統(tǒng)本身的功能和流程有所不同,所以不能像靜態(tài)檢測(cè)技術(shù)那樣進(jìn)行統(tǒng)一的掃描,而應(yīng)該針對(duì)軟件系統(tǒng)的功能進(jìn)行動(dòng)態(tài)檢測(cè),這樣就勢(shì)必造成了效率的降低[4]。并且動(dòng)態(tài)檢測(cè)只能確定漏洞可能存在的范圍,需進(jìn)行進(jìn)一步的跟蹤和分析,通過(guò)經(jīng)驗(yàn)才能確定安全漏洞的類型和利用,因此難以應(yīng)用到大型軟件當(dāng)中。文獻(xiàn)[8]提出了一種動(dòng)態(tài)與靜態(tài)技術(shù)相結(jié)合的二進(jìn)制漏洞挖掘方法。該方法通過(guò)對(duì)二進(jìn)制文件反編譯,得到偽源代碼,然后設(shè)計(jì)了虛擬執(zhí)行環(huán)境VM。然后,通過(guò)VM,考察指令執(zhí)行狀態(tài),跟蹤寄存器的變化,解決了指針別名的問(wèn)題。通過(guò)記錄VM中虛擬內(nèi)存每條指令訪存地址,最后統(tǒng)計(jì)計(jì)算出每條訪存指令實(shí)際訪問(wèn)的變量地址,解決了變量精確識(shí)別的問(wèn)題。文獻(xiàn)[9]提出利用全系統(tǒng)模擬器作為動(dòng)態(tài)執(zhí)行環(huán)境,通過(guò)追蹤輸入數(shù)據(jù)處理路徑檢測(cè)溢出漏洞。該方面面向可執(zhí)行代碼,通過(guò)構(gòu)建全系統(tǒng)模擬器來(lái)進(jìn)行漏洞檢測(cè),將可執(zhí)行代碼動(dòng)態(tài)轉(zhuǎn)換成形式統(tǒng)一、便于分析追蹤的元指令表示形式。為解決動(dòng)態(tài)檢測(cè)代碼覆蓋率的'問(wèn)題,該方法制定了溢出漏洞的判定規(guī)則,歸納溢出形成條件,并結(jié)合系統(tǒng)狀態(tài)回退完成多路徑漏洞搜索,提高了檢測(cè)的覆蓋率。
2.3混合檢測(cè)技術(shù)
由于靜態(tài)檢測(cè)技術(shù)需要目標(biāo)程序源代碼,并具有檢測(cè)規(guī)模大、誤報(bào)率高的缺陷,而動(dòng)態(tài)檢測(cè)技術(shù)又存在覆蓋率低、效率低的缺陷。因此,近幾年,混合檢測(cè)技術(shù)發(fā)展迅速,它有效的結(jié)合了靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)的優(yōu)點(diǎn),避免了靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)的缺點(diǎn),有效地提高了檢測(cè)效率和準(zhǔn)確率;旌蠙z測(cè)技術(shù)表現(xiàn)為與動(dòng)態(tài)檢測(cè)技術(shù)相似的形式,然而測(cè)試者根據(jù)程序的先驗(yàn)知識(shí),在測(cè)試過(guò)程中有針對(duì)性的設(shè)計(jì)測(cè)試用例。這種測(cè)試可以直接針對(duì)數(shù)據(jù)流中感興趣的邊界情況進(jìn)行測(cè)試,從而比動(dòng)態(tài)檢測(cè)更高效。目前,混合檢測(cè)技術(shù)主要通過(guò)自動(dòng)化的漏洞挖掘器即Fuzzing檢測(cè)技術(shù)實(shí)現(xiàn)。漏洞挖掘器首先分析目標(biāo)軟件的運(yùn)行環(huán)境、功能和接口等,構(gòu)造畸形數(shù)據(jù),生成測(cè)試用例。然后,通過(guò)接口傳遞測(cè)試用例,運(yùn)行程序。最后,使用監(jiān)控程序監(jiān)視程序運(yùn)行,如果程序運(yùn)行出現(xiàn)異常則記錄程序運(yùn)行環(huán)境和輸入數(shù)據(jù)進(jìn)一步對(duì)異常信息進(jìn)行分析。不同漏洞挖掘器由于挖掘?qū)ο蟮牟煌,其結(jié)構(gòu)、挖掘方法都有很大的不同。目前主要有文件類型漏洞挖掘器、FTP漏洞挖掘器、Web漏洞挖掘器、操作系統(tǒng)漏洞挖掘器等。根據(jù)挖掘器構(gòu)造測(cè)試用例方式的不同,F(xiàn)uzzing技術(shù)可以分為兩類[4],DumbFuzzing和IntelligentFuzzing。DumbFuzzing檢測(cè)技術(shù)類似于黑盒測(cè)試完全根據(jù)隨機(jī)的輸入去發(fā)現(xiàn)問(wèn)題。這種方法實(shí)現(xiàn)簡(jiǎn)單,容易快速的觸發(fā)漏洞的錯(cuò)誤位置。由于沒(méi)有針對(duì)性,因此其效率低下。IntelligentFuzzing檢測(cè)技術(shù)通過(guò)研究目標(biāo)軟件的協(xié)議、輸入、文件格式等方面內(nèi)容,有針對(duì)性的構(gòu)造測(cè)試用例,能夠提高自動(dòng)化檢測(cè)的效率,因此這種方法能夠更加有效的進(jìn)行軟件安全漏洞挖掘。
3結(jié)束語(yǔ)
因?yàn)椴煌┒囱芯考夹g(shù)針對(duì)的研究目標(biāo)不同,所以具有不同的優(yōu)缺點(diǎn)。靜態(tài)檢測(cè)技術(shù)具有分析速度快,覆蓋全面的特點(diǎn),但其誤報(bào)率卻很高;而動(dòng)態(tài)檢測(cè)技術(shù)準(zhǔn)確率高,但其不能覆蓋程序的各個(gè)流程,具有較大的隨機(jī)性;混合檢測(cè)技術(shù)避免了上述兩種方法的缺點(diǎn),但由于目前檢測(cè)技術(shù)的局限性,仍有很多工作需要完成:
1)后門及訪問(wèn)控制缺陷檢測(cè)困難。由于后門及訪問(wèn)控制缺陷不會(huì)引起程序異常,并在邏輯上很難區(qū)分,所以常規(guī)漏洞檢測(cè)方法難以發(fā)現(xiàn)后門及邏輯上的缺陷;
2)檢測(cè)過(guò)程難以全部自動(dòng)化。目前,F(xiàn)uzzing技術(shù)需要根據(jù)經(jīng)驗(yàn)創(chuàng)建測(cè)試用例,并且自動(dòng)化的檢測(cè)結(jié)果需要根據(jù)經(jīng)驗(yàn)進(jìn)行進(jìn)一步分析,以確定漏洞是否存在以及如何利用。
【計(jì)算機(jī)漏洞檢測(cè)分析論文】相關(guān)文章:
1.計(jì)算機(jī)軟件中安全漏洞檢測(cè)方法研究
4.計(jì)算機(jī)病毒檢測(cè)技術(shù)探究論文