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