王希忠+++黃俊強
【摘要】漏洞挖掘是網(wǎng)絡(luò)攻防技術(shù)的重要組成部分。首先介紹了漏洞的概念、漏洞的成因、漏洞的主要分類以及漏洞挖掘一般流程,然后研究了補丁分析和測試技術(shù)兩種漏洞挖掘方法,重點對二進制補丁比較、白盒測試、黑盒測試等具體漏洞挖掘技術(shù)進行了分析,比較了各種漏洞挖掘技術(shù)的優(yōu)缺點。
【關(guān)鍵詞】漏洞;漏洞挖掘;測試技術(shù)
1引言
目前,無論從國家層面的網(wǎng)絡(luò)安全戰(zhàn)略還是社會層面的信息安全防護,安全漏洞已成為信息對抗雙方博弈的核心問題之一。然而,針對具體安全漏洞, 安全研究者往往進行大量的重復(fù)工作, 研究效率和效果上也有相當(dāng)?shù)木窒扌?。因此,?yīng)該加大對漏洞挖掘的研究力度,以便對各類漏洞采取更為主動合理的處理方式。
2漏洞的概念及分類
2.1什么是漏洞
任何系統(tǒng)和軟件的運行都會假定一個安全域,這個安全域是由安全策略規(guī)定的,在該域內(nèi)的任何操作都是安全的、可控的,一旦超出了該域或者違反了安全策略,系統(tǒng)或者軟件的運行就是不可控的、未知的。漏洞是由安全域切換到非安全域的觸發(fā)點,即在計算機安全領(lǐng)域因設(shè)計不周而導(dǎo)致的系統(tǒng)或軟件存在的缺陷,從而可以使攻擊者在非授權(quán)的情況下訪問或者破壞系統(tǒng)。漏洞是靜態(tài)的、被動的,但是可觸發(fā)的。
2.2漏洞的分類
每一個漏洞都有多個特征,而根據(jù)不同的特征可以將漏洞按照不同的方式分類。一般情況下,漏洞信息應(yīng)包括漏洞名稱、漏洞成因、漏洞級別、漏洞影響、受影響的系統(tǒng)、漏洞解決方案、漏洞利用類型和漏洞利用方法等。本文根據(jù)漏洞的成因?qū)β┒催M行分類,具體可分為:
緩沖區(qū)溢出錯誤(Buffer Overflow),未對輸入緩沖區(qū)的數(shù)據(jù)進行長度和格式的驗證;
輸入驗證錯誤(Input Validation Error),未對用戶輸入的數(shù)據(jù)進行合法性驗證;
邊界條件錯誤(Boundary Condition Error),未對邊界條件進行有效性驗證;
訪問驗證錯誤(Access Validation Error),訪問驗證存在邏輯上的錯誤;
意外條件錯誤(Exceptional Condition Error),程序邏輯未考慮意外和特例;
配置錯誤(Configuration Error),系統(tǒng)或軟件的參數(shù)或策略配置錯誤;
其他錯誤(Others)。
3漏洞挖掘技術(shù)的概念及分類
漏洞的研究主要分為漏洞挖掘與漏洞分析兩部分。漏洞挖掘技術(shù)是指對未知漏洞的探索,綜合應(yīng)用各種技術(shù)和工具,盡可能地找出軟件中的潛在漏洞。然而這并非一件很容易的事情,在很大程度上依賴于個人經(jīng)驗。根據(jù)分析對象的不同,漏洞挖掘技術(shù)可以分為基于源碼的漏洞挖掘技術(shù)和基于目標(biāo)代碼的漏洞挖掘技術(shù)。
基于源碼的漏洞挖掘的前提是必須能獲取源代碼,對于一些開源項目,通過分析其公布的源代碼,就可能找到存在的漏洞。例如對Linux系統(tǒng)的漏洞挖掘就可采用這種方法。使用源碼審核技術(shù),對軟件的源代碼進行掃描,針對不安全的庫函數(shù)使用以及內(nèi)存操作進行語義上的檢查,從而發(fā)現(xiàn)安全漏洞,靜態(tài)分析技術(shù)是其中的典型技術(shù)。
然而大多數(shù)的商業(yè)軟件其源碼很難獲得,不能從源碼的角度進行漏洞挖掘,只能采用基于目標(biāo)代碼的漏洞挖掘技術(shù)。對目標(biāo)碼進行分析涉及編譯器、指令系統(tǒng)、可執(zhí)行文件格式等多方面的知識,難度較大?;谀繕?biāo)代碼的漏洞挖掘首先將要分析的二進制目標(biāo)代碼反匯編,得到匯編代碼;然后對匯編代碼進行切片,即對某些上下文關(guān)聯(lián)密切有意義的代碼進行匯聚,降低其復(fù)雜性;最后通過分析功能模塊來判斷是否存在漏洞。
4漏洞挖掘一般流程
M. Sutton 等提出了模糊(Fuzzing)測試的一般流程,他將模糊測試的流程劃分為識別目標(biāo)、識別輸入、生成模糊測試數(shù)據(jù)、執(zhí)行模糊測試數(shù)據(jù)、監(jiān)視異常、確定可利用性等六個流程,如圖 1左側(cè)所示。文獻[4]提出的漏洞挖掘流程如圖1右側(cè)所示。
5常見的漏洞挖掘方法
目前,還不存在漏洞自動挖掘的解決方案,更沒有漏洞自動挖掘程序,只有一些漏洞挖掘的思路、方法和漏洞挖掘的輔助工具,主要以人工分析為主,漏洞挖掘在很大程度上是個人行為,漏洞挖掘的思路和方法因人而異,但漏洞挖掘的方法還是有跡可尋的,歸納起來,漏洞挖掘方法主要有二進制比對技術(shù)即補丁比較和測試技術(shù)兩種。
5.1二進制比對技術(shù)
二進制比對技術(shù)又可稱為補丁比對技術(shù),它主要是被用以挖掘已經(jīng)發(fā)現(xiàn)的漏洞,因此在一定意義上也可被認為是一種漏洞分析技術(shù)。由于安全公告中一般都不指明漏洞的確切位置和成因,使得漏洞的有效利用比較困難。但漏洞一般都有相應(yīng)的補丁,所以可以通過比較補丁前后的二進制文件,確定漏洞的位置和成因。補丁比較主要包括源碼補丁比較和二進制補丁比較兩種。
5.1.1 源碼補丁比較
源碼補丁比較主要是針對開源軟件或系統(tǒng),例如Linux等。當(dāng)有漏洞出現(xiàn)后官方會發(fā)布源碼補丁文件。采取逐行對比的方式,比較補丁前和補丁后的文本文件的異同處,以發(fā)現(xiàn)源碼的不同處,進而找到漏洞產(chǎn)生的原因。以下是一個有漏洞的程序:
#include
Int main(int argc, char*argv[])
{char buff[16];
if(argc>1)
{ Strcpy(buff, argv[1]);
}
printf(“buff is %s\n”, buff)
return();
}
下面是對上述程序修補漏洞后的版本:
#include
Int main(int argc, char*argv[])
{char buff[16];
if(argc>1)
{if(,strlen(argv[1]>15);
return();
strcpy(buff, argv[1]);
}
printf(“buff is %s\n”, buff);
return();
}
將兩個源程序進行對比以后可以得出如下結(jié)果:
If(strlen(argv[1])>15);
return();
可以看出,在程序的原版本中沒有判斷而直接進行字符串拷貝, 這就存在緩沖區(qū)溢出漏洞,而修補漏洞后的版本中增加的代碼是判斷傳入?yún)?shù)的字符長度,這就避免了此類緩沖區(qū)溢出漏洞。
由此可以看出,只要找到程序的不同之處,并代人源程序分析,就可以定位漏洞的位置并查明漏洞的機理。
5.1.2 二進制補丁比較
目前常用的二進制補丁比對方法主要分為三類。
(1) 基于文本的比對?;谖谋镜谋葘κ亲顬楹唵蔚囊环N補丁比對方式,通過對兩個二進制文件(補丁前和補丁后)進行對比,對文件比對中出現(xiàn)的任何一點差異,都不做處理地寫人結(jié)果之中。這種方法的后果是最后輸出的結(jié)果范圍很大,容易出現(xiàn)極多的誤報情況,漏洞定位精度極差,且結(jié)果不容易被漏洞分析人員理解,因此僅適用于文件中產(chǎn)生變化較少的情況。
(2) 基于匯編指令的比對?;趨R編指令的二進制文件比對是先對二進制文件進行反匯編,然后將兩個反匯編之后的文件進行對比,具有代表性的工具如eEye發(fā)布的EBDS (eEye Binary Diffing Suite)軟件工具中的Binary Diffing Starter。這種方式雖然較直接的二進制文本比對要進步,比對結(jié)果更容易被分析人員理解, 但是仍然存在輸出結(jié)果范圍大,誤報情況多和漏洞定位不精確的缺點。更重要的是基于匯編指令的補丁比對方法很容易受編譯器編譯優(yōu)化的影響,結(jié)果會變得非常復(fù)雜。
(3)基于結(jié)構(gòu)化的比對。基于結(jié)構(gòu)化比對的方法是Halva Flake在2004年提出的,這種方法的基本思想是:給定兩個待比對的文件A1和A2, 將A1和A2的所有函數(shù)用控制流圖來表示,通過比對兩個圖是否同構(gòu)來建立函數(shù)之間一對一的映射。該方法從邏輯結(jié)構(gòu)的層次上對補丁文件進行了分析,但當(dāng)待比對兩個二進制文件較大時,由于提取簽名信息、進行結(jié)構(gòu)化比對的運算量和存儲量非常巨大,程序的執(zhí)行效率非常低。D.Brumley等人在此基礎(chǔ)上,提出了基于程序控制流程圖(CFG )的約束規(guī)約分析方法,一定程度上提高了漏洞定位精度。總之,目前基于結(jié)構(gòu)化的補丁比對在執(zhí)行效率和漏洞定位的精確性方面還存在很大的發(fā)展空間。
5.2測試技術(shù)
5.2.1 白盒測試
白盒測試是基于源碼的測試技術(shù),直接面對程序中的數(shù)據(jù)和算法,進行控制流分析和數(shù)據(jù)流分析。在此需要說明的是,很多漏洞都是數(shù)據(jù)和算法共同造成的,并非單是數(shù)據(jù)或者算法的原因??刂屏鞣治鲆话阋贸龀绦虻目刂屏鲌D,就是程序的調(diào)用、跳轉(zhuǎn)結(jié)構(gòu),是程序從入口到出口的路徑圖。數(shù)據(jù)流分析一般是跟蹤數(shù)據(jù)的產(chǎn)生、傳輸、處理和存儲等。在安全性測試的應(yīng)用中,這兩種分析方法應(yīng)該結(jié)合。下面以針對數(shù)組越界的測試進行分析。
數(shù)組是程序語言中一種數(shù)據(jù)類型,它的數(shù)據(jù)在內(nèi)存中連續(xù)存放。數(shù)組變量所擁有的內(nèi)存空間可以在程序運行前確定,也可以在程序運行時動態(tài)決定。然而如果數(shù)組的賦值或引用長度超出分配長度,就會導(dǎo)致程序異常。這種異常一方面是由于程序員的錯誤編碼造成的,另一方面是由于一些弱函數(shù),例如strcpy、strcat、memcpy等造成的。這種情況下,要跟蹤數(shù)組變量的定義、賦值、引用等,此外還要考慮這些變量所在的環(huán)境和上下文,例如在strcpy之前,如果已經(jīng)作了長度檢測(比如調(diào)用了strlen), 就不會出現(xiàn)數(shù)組越界的情況。如果說針對C/C++的源碼對strcpy或strlen作跟蹤是屬于數(shù)據(jù)流分析的話,那么為了處理數(shù)組變量程序的各種調(diào)用和跳轉(zhuǎn)就屬于控制流分析了。如果源碼是C/ C++語言,需要進行預(yù)編譯、詞法分析和語法分析,得出控制流圖,然后在每個分支上跟蹤數(shù)組變量。
總之, 白盒測試是基于源碼的,也就是在人可以理解程序或者測試工具可以理解程序的條件下,對程序安全性進行測試。這種測試其實是一種對已有漏洞模式的匹配,只可能發(fā)現(xiàn)已知模式的漏洞,而對于未知模式無能為力。同時,這種測試還會產(chǎn)生誤報。對這種測試而言,了解的程序細節(jié)越詳細測試的結(jié)果也就越準確。本文認為,基于白盒測試技術(shù)的安全性測試關(guān)注的是數(shù)據(jù)操作和算法邏輯,對這兩方面進行跟蹤、抽象和分析,然后去匹配已知的不安全模式,而得出結(jié)論。
5.2.2 黑盒測試
在軟件的設(shè)計和開發(fā)過程中,無論是設(shè)計者還是開發(fā)者都會作一個隱含假設(shè),即軟件存在輸入域,用戶的輸入會限定在該輸入域中。然而在軟件的實際應(yīng)用中,沒有可以將用戶的輸入限制在一定范圍內(nèi)的機制,特別是一些惡意用戶,他們會通過各種方法尋找輸入域之外值,以期發(fā)現(xiàn)軟件的漏洞。黑盒測試就是利用各種輸入對程序進行探測,并對運行程序進行分析,以期發(fā)現(xiàn)系統(tǒng)漏洞的測試技術(shù)。這種測試技術(shù)僅僅需要運行的程序而不需要分析任何源代碼,測試者對軟件內(nèi)部一無所知,但是清楚地知道軟件能做什么,能夠?qū)Τ绦蚧谳斎牒洼敵龅年P(guān)聯(lián)性進行分析。
黑盒測試最關(guān)鍵的問題是測試數(shù)據(jù)的選取。既然知道軟件能做什么,那么也就大概知道該軟件的安全輸入域的范圍。所以測試最好是選擇軟件安全輸入域之外的數(shù)據(jù)。當(dāng)然這還是不夠的,測試人員必須有知識和經(jīng)驗的積累,例如,溢出漏洞在漏洞總量中占了很大比例,并且這類漏洞多是由特殊字符或者超長字符串導(dǎo)致的,如果分析總結(jié)以往溢出漏洞的利用方法,研究這些超長字符或者特殊字符串的構(gòu)造方式,同樣有利于測試數(shù)據(jù)的選取。endprint
黑盒測試的步驟是這樣的:首先,分析相同領(lǐng)域或者相似軟件的安全問題,歸納總結(jié)出一些規(guī)則或者模板;其次根據(jù)規(guī)則或模板構(gòu)造測試數(shù)據(jù)對軟件進行測試;再次驗證軟件輸出的正確性;最后確定一些疑似的漏洞點??傊?,黑盒測試屬于功能測試,對程序內(nèi)部不予考慮。這種測試更像是一次攻擊,也可以較直接地測出一些問題,但缺點是測試數(shù)據(jù)不好選擇,很難窮盡軟件的所有可能輸人。
5.2.3 灰盒測試
灰盒測試綜合了白盒測試和黑盒測試的優(yōu)點。灰盒測試表現(xiàn)為與黑盒測試相似的形式,然而測試者具有程序的先驗知識,它對于程序的結(jié)構(gòu)和數(shù)據(jù)流都有一定的認識。這種測試可以直接針對數(shù)據(jù)流中感興趣的邊界情況進行測試,從而比黑盒測試更高效。典型的灰盒測試有二進制分析,二進制分析往往首先通過逆向過程(ReversEngineering,RE )來獲得程序的先驗知識,然后通過反編譯器、反匯編器等輔助工具確定有可能出現(xiàn)漏洞的行,反向追蹤以確定是否有利用的可能性。常用的反匯編器有IDA Pro,反編譯器有Boomerang,調(diào)試器有OllyDbg、WinDbg等?;液袦y試具有比黑盒測試更好的覆蓋性,然而逆向工程非常復(fù)雜, 要求熟悉匯編語言、可執(zhí)行文件格式、編譯器操作、操作系統(tǒng)內(nèi)部原理以及其他各種各樣的底層技巧。
5.2.4結(jié)束語
無論是黑盒測試、白盒測試還是灰盒測試得到的都是一些漏洞的疑似點,至于這些疑似點是否是漏洞,還需要人工分析。但是使用這些技術(shù)來輔助發(fā)現(xiàn)漏洞是必要的,節(jié)省了大量的人力,將人員的精力轉(zhuǎn)移到分析幾個疑似漏洞點上。白盒測試的難點是如何有效分析軟件的數(shù)據(jù)操作和算法邏輯,如何判定一個漏洞; 黑盒測試的難點是測試數(shù)據(jù)的選取,這一部分需要經(jīng)驗和知識積累;灰盒測試的難度在于逆向工程非常復(fù)雜,對測試人員的專業(yè)水平要求較高。
6結(jié)束語
漏洞挖掘是網(wǎng)絡(luò)攻防技術(shù)的重要組成部分。本文介紹了漏洞的概念、漏洞的成因、漏洞挖掘流程等,重點研究了幾種常見的漏洞挖掘方法,各種方法都有其優(yōu)缺點,在實際的工作中,漏洞挖掘并不單純的只使用一種方法,而是多種分析技術(shù)相互結(jié)合、優(yōu)勢互補的綜合運用過程。
參考文獻
[1] 王豐輝. 漏洞相關(guān)技術(shù)研究[D]. 北京: 北京郵電大學(xué), 2009.
[2] 袁江. 基于CVE 知識庫的危急漏洞挖掘與分析技術(shù)研究[D]. 哈爾濱: 哈爾濱理工大學(xué), 2008.
[3] 遲強, 羅紅, 喬向東. 漏洞挖掘分析技術(shù)綜述[J]. 計算機與信息技術(shù), 2009(07).
[4] 徐良華, 孫玉龍,高豐等. 基于逆向工程的軟件漏洞挖掘技術(shù)[J]. 微計算機信息, 2006, 22(8-3).
[5] SUTTON M, GREEN A, AMINI P. Fuzzing: Bruce Force Vulnerability Discovery[M]. Addison-Wesley Professional, 2007.8-15.
[6] 文偉平, 吳興麗. 軟件安全漏洞挖掘的研究思路與發(fā)展趨勢[J]. 信息網(wǎng)絡(luò)安全, 2009, 27(10)78-81.
作者簡介:
王希忠(1968-),男,漢族,哈爾濱工程大學(xué)計算機應(yīng)用技術(shù)專業(yè),碩士研究生,現(xiàn)任黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院院長,研究員級高工,黑龍江省“數(shù)據(jù)安全與計算機安全”領(lǐng)軍人才梯隊帶頭人;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全、物聯(lián)網(wǎng)、信息系統(tǒng)風(fēng)險評估等。
黃俊強(1974-),男,漢族,沈陽工業(yè)學(xué)院,本科,黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院,信息安全測評中心主任,高級工程師;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全、風(fēng)險評估與等級保護測評。endprint
黑盒測試的步驟是這樣的:首先,分析相同領(lǐng)域或者相似軟件的安全問題,歸納總結(jié)出一些規(guī)則或者模板;其次根據(jù)規(guī)則或模板構(gòu)造測試數(shù)據(jù)對軟件進行測試;再次驗證軟件輸出的正確性;最后確定一些疑似的漏洞點??傊?,黑盒測試屬于功能測試,對程序內(nèi)部不予考慮。這種測試更像是一次攻擊,也可以較直接地測出一些問題,但缺點是測試數(shù)據(jù)不好選擇,很難窮盡軟件的所有可能輸人。
5.2.3 灰盒測試
灰盒測試綜合了白盒測試和黑盒測試的優(yōu)點。灰盒測試表現(xiàn)為與黑盒測試相似的形式,然而測試者具有程序的先驗知識,它對于程序的結(jié)構(gòu)和數(shù)據(jù)流都有一定的認識。這種測試可以直接針對數(shù)據(jù)流中感興趣的邊界情況進行測試,從而比黑盒測試更高效。典型的灰盒測試有二進制分析,二進制分析往往首先通過逆向過程(ReversEngineering,RE )來獲得程序的先驗知識,然后通過反編譯器、反匯編器等輔助工具確定有可能出現(xiàn)漏洞的行,反向追蹤以確定是否有利用的可能性。常用的反匯編器有IDA Pro,反編譯器有Boomerang,調(diào)試器有OllyDbg、WinDbg等?;液袦y試具有比黑盒測試更好的覆蓋性,然而逆向工程非常復(fù)雜, 要求熟悉匯編語言、可執(zhí)行文件格式、編譯器操作、操作系統(tǒng)內(nèi)部原理以及其他各種各樣的底層技巧。
5.2.4結(jié)束語
無論是黑盒測試、白盒測試還是灰盒測試得到的都是一些漏洞的疑似點,至于這些疑似點是否是漏洞,還需要人工分析。但是使用這些技術(shù)來輔助發(fā)現(xiàn)漏洞是必要的,節(jié)省了大量的人力,將人員的精力轉(zhuǎn)移到分析幾個疑似漏洞點上。白盒測試的難點是如何有效分析軟件的數(shù)據(jù)操作和算法邏輯,如何判定一個漏洞; 黑盒測試的難點是測試數(shù)據(jù)的選取,這一部分需要經(jīng)驗和知識積累;灰盒測試的難度在于逆向工程非常復(fù)雜,對測試人員的專業(yè)水平要求較高。
6結(jié)束語
漏洞挖掘是網(wǎng)絡(luò)攻防技術(shù)的重要組成部分。本文介紹了漏洞的概念、漏洞的成因、漏洞挖掘流程等,重點研究了幾種常見的漏洞挖掘方法,各種方法都有其優(yōu)缺點,在實際的工作中,漏洞挖掘并不單純的只使用一種方法,而是多種分析技術(shù)相互結(jié)合、優(yōu)勢互補的綜合運用過程。
參考文獻
[1] 王豐輝. 漏洞相關(guān)技術(shù)研究[D]. 北京: 北京郵電大學(xué), 2009.
[2] 袁江. 基于CVE 知識庫的危急漏洞挖掘與分析技術(shù)研究[D]. 哈爾濱: 哈爾濱理工大學(xué), 2008.
[3] 遲強, 羅紅, 喬向東. 漏洞挖掘分析技術(shù)綜述[J]. 計算機與信息技術(shù), 2009(07).
[4] 徐良華, 孫玉龍,高豐等. 基于逆向工程的軟件漏洞挖掘技術(shù)[J]. 微計算機信息, 2006, 22(8-3).
[5] SUTTON M, GREEN A, AMINI P. Fuzzing: Bruce Force Vulnerability Discovery[M]. Addison-Wesley Professional, 2007.8-15.
[6] 文偉平, 吳興麗. 軟件安全漏洞挖掘的研究思路與發(fā)展趨勢[J]. 信息網(wǎng)絡(luò)安全, 2009, 27(10)78-81.
作者簡介:
王希忠(1968-),男,漢族,哈爾濱工程大學(xué)計算機應(yīng)用技術(shù)專業(yè),碩士研究生,現(xiàn)任黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院院長,研究員級高工,黑龍江省“數(shù)據(jù)安全與計算機安全”領(lǐng)軍人才梯隊帶頭人;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全、物聯(lián)網(wǎng)、信息系統(tǒng)風(fēng)險評估等。
黃俊強(1974-),男,漢族,沈陽工業(yè)學(xué)院,本科,黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院,信息安全測評中心主任,高級工程師;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全、風(fēng)險評估與等級保護測評。endprint
黑盒測試的步驟是這樣的:首先,分析相同領(lǐng)域或者相似軟件的安全問題,歸納總結(jié)出一些規(guī)則或者模板;其次根據(jù)規(guī)則或模板構(gòu)造測試數(shù)據(jù)對軟件進行測試;再次驗證軟件輸出的正確性;最后確定一些疑似的漏洞點??傊?,黑盒測試屬于功能測試,對程序內(nèi)部不予考慮。這種測試更像是一次攻擊,也可以較直接地測出一些問題,但缺點是測試數(shù)據(jù)不好選擇,很難窮盡軟件的所有可能輸人。
5.2.3 灰盒測試
灰盒測試綜合了白盒測試和黑盒測試的優(yōu)點?;液袦y試表現(xiàn)為與黑盒測試相似的形式,然而測試者具有程序的先驗知識,它對于程序的結(jié)構(gòu)和數(shù)據(jù)流都有一定的認識。這種測試可以直接針對數(shù)據(jù)流中感興趣的邊界情況進行測試,從而比黑盒測試更高效。典型的灰盒測試有二進制分析,二進制分析往往首先通過逆向過程(ReversEngineering,RE )來獲得程序的先驗知識,然后通過反編譯器、反匯編器等輔助工具確定有可能出現(xiàn)漏洞的行,反向追蹤以確定是否有利用的可能性。常用的反匯編器有IDA Pro,反編譯器有Boomerang,調(diào)試器有OllyDbg、WinDbg等?;液袦y試具有比黑盒測試更好的覆蓋性,然而逆向工程非常復(fù)雜, 要求熟悉匯編語言、可執(zhí)行文件格式、編譯器操作、操作系統(tǒng)內(nèi)部原理以及其他各種各樣的底層技巧。
5.2.4結(jié)束語
無論是黑盒測試、白盒測試還是灰盒測試得到的都是一些漏洞的疑似點,至于這些疑似點是否是漏洞,還需要人工分析。但是使用這些技術(shù)來輔助發(fā)現(xiàn)漏洞是必要的,節(jié)省了大量的人力,將人員的精力轉(zhuǎn)移到分析幾個疑似漏洞點上。白盒測試的難點是如何有效分析軟件的數(shù)據(jù)操作和算法邏輯,如何判定一個漏洞; 黑盒測試的難點是測試數(shù)據(jù)的選取,這一部分需要經(jīng)驗和知識積累;灰盒測試的難度在于逆向工程非常復(fù)雜,對測試人員的專業(yè)水平要求較高。
6結(jié)束語
漏洞挖掘是網(wǎng)絡(luò)攻防技術(shù)的重要組成部分。本文介紹了漏洞的概念、漏洞的成因、漏洞挖掘流程等,重點研究了幾種常見的漏洞挖掘方法,各種方法都有其優(yōu)缺點,在實際的工作中,漏洞挖掘并不單純的只使用一種方法,而是多種分析技術(shù)相互結(jié)合、優(yōu)勢互補的綜合運用過程。
參考文獻
[1] 王豐輝. 漏洞相關(guān)技術(shù)研究[D]. 北京: 北京郵電大學(xué), 2009.
[2] 袁江. 基于CVE 知識庫的危急漏洞挖掘與分析技術(shù)研究[D]. 哈爾濱: 哈爾濱理工大學(xué), 2008.
[3] 遲強, 羅紅, 喬向東. 漏洞挖掘分析技術(shù)綜述[J]. 計算機與信息技術(shù), 2009(07).
[4] 徐良華, 孫玉龍,高豐等. 基于逆向工程的軟件漏洞挖掘技術(shù)[J]. 微計算機信息, 2006, 22(8-3).
[5] SUTTON M, GREEN A, AMINI P. Fuzzing: Bruce Force Vulnerability Discovery[M]. Addison-Wesley Professional, 2007.8-15.
[6] 文偉平, 吳興麗. 軟件安全漏洞挖掘的研究思路與發(fā)展趨勢[J]. 信息網(wǎng)絡(luò)安全, 2009, 27(10)78-81.
作者簡介:
王希忠(1968-),男,漢族,哈爾濱工程大學(xué)計算機應(yīng)用技術(shù)專業(yè),碩士研究生,現(xiàn)任黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院院長,研究員級高工,黑龍江省“數(shù)據(jù)安全與計算機安全”領(lǐng)軍人才梯隊帶頭人;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全、物聯(lián)網(wǎng)、信息系統(tǒng)風(fēng)險評估等。
黃俊強(1974-),男,漢族,沈陽工業(yè)學(xué)院,本科,黑龍江省電子信息產(chǎn)品監(jiān)督檢驗院,信息安全測評中心主任,高級工程師;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全、風(fēng)險評估與等級保護測評。endprint