欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種二進(jìn)制程序漏洞的挖掘裝置和方法

文檔序號(hào):6365638閱讀:345來(lái)源:國(guó)知局
專利名稱:一種二進(jìn)制程序漏洞的挖掘裝置和方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種軟件安全技術(shù),確切地說(shuō),涉及ー種融合遺傳算法與動(dòng)態(tài)污染跟蹤的ニ進(jìn)制程序漏洞的挖掘裝置和方法,屬于ニ進(jìn)制程序安全漏洞檢測(cè)的技術(shù)領(lǐng)域。
背景技術(shù)
目前,在軟件安全研究領(lǐng)域中,經(jīng)常會(huì)對(duì)ニ進(jìn)制程序進(jìn)行安全分析,在安全分析過(guò)程中的ー個(gè)重要問(wèn)題是如 何快速生成有針對(duì)性的測(cè)試用例,用于觸發(fā)ニ進(jìn)制程序中可能存在的安全漏洞。現(xiàn)在,工程產(chǎn)業(yè)界普遍采用的方法是模糊測(cè)試Fuzz Testing(又稱為隨機(jī)數(shù)黑盒暴力測(cè)試法)。Fuzz Testing能夠自動(dòng)產(chǎn)生測(cè)試數(shù)據(jù),測(cè)試結(jié)果準(zhǔn)確,適用范圍廣;但是,生成測(cè)試輸入文件的路徑覆蓋率較低,且生成的測(cè)試用例多指向同一路徑,在測(cè)試輸入文件的生成過(guò)程中缺乏引導(dǎo)性,效率低,缺少測(cè)試輸入文件和程序異常之間的關(guān)聯(lián)關(guān)系,對(duì)人工的依賴較大,實(shí)施過(guò)程中的不確定因素也較多。目前的ニ進(jìn)制程序漏洞挖掘或檢測(cè)技術(shù)可以分為兩類靜態(tài)和動(dòng)態(tài),其中動(dòng)態(tài)方法是首先對(duì)ニ進(jìn)制程序的輸入文件進(jìn)行變異,然后加載該輸入文件,并通過(guò)監(jiān)控被測(cè)試ニ進(jìn)制程序的執(zhí)行過(guò)程來(lái)檢測(cè)該輸入文件是否會(huì)導(dǎo)致被測(cè)試ニ進(jìn)制程序的崩潰。動(dòng)態(tài)方法大都基于符號(hào)執(zhí)行技術(shù)與約束求解技木,因此,導(dǎo)致ニ進(jìn)制程序漏洞檢測(cè)的效率依賴于符號(hào)執(zhí)行技術(shù)的精確度和約束求解器的求解能力。如果被測(cè)試的ニ進(jìn)制程序含有復(fù)雜的條件分支和深度嵌套的循環(huán),則由輸入文件導(dǎo)致的ニ進(jìn)制程序的執(zhí)行路徑會(huì)非常長(zhǎng)。為了避免由符號(hào)執(zhí)行和約束求解技術(shù)帶來(lái)昂貴的計(jì)算代價(jià),基于符號(hào)執(zhí)行和約束求解的漏洞挖掘技術(shù)通常僅遍歷循環(huán)內(nèi)部的分支一次,或者把循環(huán)展開設(shè)定的次數(shù)(通常只展開一次)。這種為了節(jié)約計(jì)算上的代價(jià)而盲目截?cái)嘌h(huán)的結(jié)果,是很可能漏掉ー些重要的路徑,而這些路徑上就很可能包含潛在的安全漏洞。靜態(tài)方法不運(yùn)行被測(cè)試ニ進(jìn)制程序,因此不能獲取關(guān)于ニ進(jìn)制程序運(yùn)行過(guò)程中的相關(guān)信息,由此導(dǎo)致大多數(shù)的ニ進(jìn)制程序的靜態(tài)分析方法誤報(bào)率較高,如Splint有將近50%的誤報(bào)率,F(xiàn)lawfinder和RATS也都有較高的誤報(bào)率。隨著軟件規(guī)模的増加,軟件中的條件分支和循環(huán)的數(shù)目也呈現(xiàn)出不可避免的增長(zhǎng)趨勢(shì)。ニ進(jìn)制程序中的復(fù)雜的條件分支和深度嵌套的循環(huán)導(dǎo)致了嚴(yán)重的路徑爆炸問(wèn)題。而且,程序的輸入空間非常大,而能夠被惡意用戶控制的空間又非常小。上述這些原因都?jí)埣恿衰诉M(jìn)制程序漏洞挖掘的難度。綜合上述,目前,主流的靜態(tài)分析技術(shù)和動(dòng)態(tài)分析技術(shù)存在下述問(wèn)題(I)基于符號(hào)執(zhí)行與約束求解的動(dòng)態(tài)的ニ進(jìn)制程序漏洞挖掘技術(shù)面臨昂貴的計(jì)算代價(jià)。(2)基于符號(hào)執(zhí)行與約束求解的動(dòng)態(tài)的ニ進(jìn)制程序漏洞挖掘技術(shù)在搜集ニ進(jìn)制程序執(zhí)行路徑的約束條件時(shí)存在不完備性問(wèn)題,而且,目前的約束求解器很難對(duì)復(fù)雜的非線性約束條件求解獲得其精確解。(3)基于符號(hào)執(zhí)行與約束求解的動(dòng)態(tài)的ニ進(jìn)制程序漏洞挖掘技木通常會(huì)盲目地截?cái)嘌h(huán),從而很容易漏掉一些可能包含漏洞的程序路徑。(4)基于Fuzzing的動(dòng)態(tài)測(cè)試自動(dòng)生成的測(cè)試用例具有盲目性,生成的大量測(cè)試用例都指向同一路徑,缺乏指導(dǎo)性,其觸發(fā)二進(jìn)制程序中潛在的安全漏洞的效率低。(5)靜態(tài)分析的效率較高,且其分析屬于路徑敏感的。但是,其理論上存在較高的漏報(bào)率和 誤報(bào)率,難于準(zhǔn)確定位漏洞。而且,靜態(tài)分析大多需要在源代碼基礎(chǔ)上進(jìn)行分析,針對(duì)二進(jìn)制程序的靜態(tài)符號(hào)執(zhí)行技術(shù)也比較復(fù)雜,計(jì)算代價(jià)昂貴。因此,如何融合靜態(tài)分析技術(shù)與動(dòng)態(tài)分析技術(shù)的兩者優(yōu)點(diǎn),實(shí)現(xiàn)自動(dòng)化的二進(jìn)制程序漏洞挖掘,并提高二進(jìn)制程序漏洞的挖掘效率,已經(jīng)成為目前軟件安全領(lǐng)域內(nèi)的一個(gè)重要的研究課題。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的是提供一種融合遺傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序漏洞挖掘的裝置與方法,本發(fā)明利用遺傳算法的適應(yīng)度函數(shù)來(lái)指導(dǎo)測(cè)試用例的生成,同時(shí)利用動(dòng)態(tài)污染跟蹤模塊來(lái)縮小遺傳算法的搜索空間,加快遺傳算法的收斂速度,從而提高二進(jìn)制程序漏洞挖掘的效率和精確度。為了達(dá)到上述目的,本發(fā)明提供了一種融合遺傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序漏洞的挖掘裝置,其特征在于所述裝置設(shè)有順序連接的靜態(tài)分析模塊、調(diào)試器模塊、遺傳算法模塊、測(cè)試輸入生成模塊和異常監(jiān)控模塊,以及位于調(diào)試器模塊、遺傳算法模塊之間的動(dòng)態(tài)污染跟蹤模塊;其中靜態(tài)分析模塊,基于交互式反匯編器專業(yè)版IDAPro (Interactive DisassemblerProfessional)開發(fā)實(shí)現(xiàn)的該模塊用于提取被測(cè)試的二進(jìn)制程序中的控制流結(jié)構(gòu)、基本塊的起始地址和危險(xiǎn)函數(shù)的調(diào)用地址,并將這些信息傳送給調(diào)試器模塊作為配置信息;即該模塊通過(guò)分析二進(jìn)制程序中的跳轉(zhuǎn)指令,獲取二進(jìn)制程序基本塊的起始地址和基本塊之間的跳轉(zhuǎn)關(guān)系;然后利用IDAPix)提供的庫(kù)函數(shù)獲取二進(jìn)制程序中的危險(xiǎn)函數(shù)的調(diào)用地址;調(diào)試器模塊,作為該裝置的基礎(chǔ)平臺(tái),用于監(jiān)控被測(cè)試二進(jìn)制程序的執(zhí)行過(guò)程,并記錄相關(guān)信息根據(jù)靜態(tài)分析模塊提供的配置信息,識(shí)別和攔截Windows底層的應(yīng)用程序編程接口 API (Application Programming Interface)函數(shù),獲取被測(cè)試二進(jìn)制程序打開輸入文件的位置和記錄由輸入文件導(dǎo)致的被測(cè)試二進(jìn)制程序執(zhí)行過(guò)的基本塊、輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的執(zhí)行軌跡及該被測(cè)試二進(jìn)制程序中危險(xiǎn)函數(shù)的執(zhí)行次數(shù);讀取二進(jìn)制程序中寄存器和堆棧內(nèi)的數(shù)據(jù),計(jì)算并更新二進(jìn)制程序中的寄存器變量和內(nèi)存變量的數(shù)值;實(shí)現(xiàn)對(duì)給定的內(nèi)存地址對(duì)被測(cè)試二進(jìn)制程序下斷點(diǎn)的功能;然后調(diào)試器模塊將上述計(jì)算獲取的信息傳送給遺傳算法模塊,用于計(jì)算輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值;動(dòng)態(tài)污染跟蹤模塊,用于實(shí)現(xiàn)單字節(jié)水平細(xì)粒度的動(dòng)態(tài)污染跟蹤,識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并將該關(guān)鍵字節(jié)作為遺傳算法模塊交叉和變異的空間,提高遺傳算法的收斂速度該模塊為被測(cè)試二進(jìn)制程序的輸入數(shù)據(jù)中每個(gè)字節(jié)都賦予一個(gè)唯一標(biāo)簽,再跟蹤該標(biāo)簽在被測(cè)試二進(jìn)制程序中的傳遞過(guò)程;且在跟蹤輸入數(shù)據(jù)傳遞過(guò)程中,既考慮數(shù)據(jù)間的傳遞依賴關(guān)系,也考慮不同變量間的控制依賴關(guān)系;同時(shí)識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并把關(guān)鍵字節(jié)信息提供給遺傳算法模塊,用作遺傳算法模塊的交叉和變異的空間;
遺傳算法模塊,負(fù)責(zé)根據(jù)調(diào)試器模塊提供的包括每個(gè)輸入文件所覆蓋被測(cè)試ニ進(jìn)制程序的基本塊與其對(duì)應(yīng)的ニ進(jìn)制程序執(zhí)行軌跡和其中危險(xiǎn)函數(shù)的執(zhí)行次數(shù),以及動(dòng)態(tài)污染跟蹤模塊識(shí)別出來(lái)的關(guān)鍵字節(jié),計(jì)算每個(gè)輸入文件對(duì)應(yīng)的被測(cè)試ニ進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和該輸入文件對(duì)應(yīng)的危險(xiǎn)函數(shù)的執(zhí)行次數(shù),然后計(jì)算每個(gè)輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值,并將該適應(yīng)度函數(shù)值傳遞給測(cè)試輸入生成模塊,用于生成新的輸入文件而進(jìn)行下一輪測(cè)試;而且,如果輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值較高,則輸入文件可能導(dǎo)致被測(cè)試ニ進(jìn)制程序覆蓋的基本塊較多、導(dǎo)致被測(cè)試ニ進(jìn)制程序的執(zhí)行路徑為“稀少路徑”或?qū)е卤粶y(cè)試ニ進(jìn)制程序執(zhí)行的危險(xiǎn)函數(shù)次數(shù)較多;當(dāng)輸入文件的上述三個(gè)數(shù)值都較高時(shí),該輸入文件就非常可能觸發(fā)其對(duì)應(yīng)的被測(cè)試ニ進(jìn)制程序潛在的安全漏洞;測(cè)試輸入生成模塊,負(fù)責(zé)根據(jù)來(lái)自遺傳算法模塊的每個(gè)輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值的大小對(duì)被測(cè)試ニ進(jìn)制程序的輸入文件進(jìn)行排序,然后根據(jù)用戶設(shè)置的規(guī)模,選擇適應(yīng)度函數(shù)值高的輸入文件送至調(diào)試器模塊進(jìn)行下一輪測(cè)試,因適應(yīng)度函數(shù)值高的輸入文件更容易觸發(fā)被測(cè)試ニ進(jìn)制程序潛在的安全漏洞;異常監(jiān)控模塊,用于監(jiān)控每個(gè)輸入文件中的被測(cè)試ニ進(jìn)制程序的執(zhí)行過(guò)程,若出現(xiàn)異常,則記錄導(dǎo)致該被測(cè)試ニ進(jìn)制程序出現(xiàn)異常的輸入文件,并記錄異常在被測(cè)試ニ進(jìn)制程序中的出現(xiàn)位置、異常類型和異常出現(xiàn)的上下文信息。所述危險(xiǎn)函數(shù)是包括內(nèi)存分配、內(nèi)存拷貝、字符串和ー些含有格式化參數(shù)的多種函數(shù);所述關(guān)鍵字節(jié)是在輸入文件中污染被測(cè)試ニ進(jìn)制程序中危險(xiǎn)函數(shù)的參數(shù)值的字節(jié),也被稱為該被測(cè)試的ニ進(jìn)制程序所對(duì)應(yīng)的輸入文件中的關(guān)鍵字節(jié)。所述遺傳算法模塊中的適應(yīng)度函數(shù)的計(jì)算公式是Fitness (X) = W1Xbbc^W2X Icovx+w3 XrIndex X Iog(Dx),式中,變量x為輸入文件,bbcx、Icovx和Dx分別為該輸入文件X對(duì)應(yīng)的被測(cè)試ニ進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù),其中,bbcx用于使遺傳算法模塊生成新的被測(cè)試的輸入文件導(dǎo)致被測(cè)試ニ進(jìn)制程序覆蓋更多的基本塊,Icovx用于使得遺傳算法模塊生成新的被測(cè)試的輸入文件所產(chǎn)生的執(zhí)行路徑盡可能不同,實(shí)現(xiàn)路徑覆蓋最大化,Dx用于使得遺傳算法模塊生成新的被測(cè)試的輸入文件導(dǎo)致被測(cè)試ニ進(jìn)制程序執(zhí)行較多次數(shù)的危險(xiǎn)函數(shù);Wl,w2,W3分別為上述bbcx、Icovx和Dx三個(gè)因素的權(quán)重,其取值范圍都是
, rlndex為取值范圍是
的調(diào)解系數(shù)。所述遺傳算法模塊執(zhí)行的交叉和變異的遺傳操作對(duì)象只是被測(cè)試ニ進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并不是整個(gè)輸入文件,以便縮小遺傳算法交叉和變異的空間,提高遺傳算法的收斂速度,進(jìn)而提高ニ進(jìn)制程序漏洞挖掘的效率。為了達(dá)到上述目的,本發(fā)明還提供了一種采用融合遺傳算法與動(dòng)態(tài)污染跟蹤的ニ進(jìn)制程序漏洞的挖掘裝置的檢測(cè)方法,其特征在于,所述方法融合了靜態(tài)分析和動(dòng)態(tài)分析兩者優(yōu)點(diǎn),使得人們只關(guān)注于感興趣的程序代碼并進(jìn)行后續(xù)分析;該方法包括下列操作步驟(I)根據(jù)被測(cè)試ニ進(jìn)制程序類型,用戶事先準(zhǔn)備ー份標(biāo)準(zhǔn)的測(cè)試文件井隨機(jī)修改 其中的若干字節(jié)生成輸入文件,且由用戶控制該輸入文件的規(guī)模大??;(2)靜態(tài)分析模塊對(duì)輸入文件中的被測(cè)試ニ進(jìn)制程序進(jìn)行靜態(tài)分析,獲取被測(cè)試ニ進(jìn)制程序基本塊的起始地址、基本塊之間的跳轉(zhuǎn)信息和危險(xiǎn)函數(shù)的調(diào)用地址;再將這些信息將作為配置信息傳遞至調(diào)試器模塊;
(3)調(diào)試器模塊對(duì)來(lái)自靜態(tài)分析模塊的配置信息計(jì)算每個(gè)輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù);(4)為縮小遺傳算法的交叉和變異空間,動(dòng)態(tài)污染跟蹤模塊識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并把這些關(guān)鍵字節(jié)按照每個(gè)關(guān)鍵字節(jié)相對(duì)于輸入文件頭的各自偏移地址寫入于一個(gè)數(shù)組后,再送至遺傳算法模塊;以供遺傳算法模塊針對(duì)該數(shù)組進(jìn)行交叉和變異;然后把交叉和變異后的數(shù)組按照每個(gè)字節(jié)相對(duì)于輸入文件頭的偏移地址寫入輸入文件中,作為遺傳算法交叉和變異后生成的新的被測(cè)試的輸入文件,以便縮小遺傳算法的搜索空間,加快遺傳算 法的收斂速度,提高二進(jìn)制程序漏洞的挖掘效率;(5)遺傳算法模塊根據(jù)從調(diào)試器模塊獲取的每個(gè)輸入文件對(duì)應(yīng)的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù),以及由動(dòng)態(tài)污染跟蹤識(shí)別的關(guān)鍵字節(jié),計(jì)算每個(gè)輸入文件所對(duì)應(yīng)的適應(yīng)度函數(shù)值;以便使用適應(yīng)度函數(shù)指導(dǎo)被測(cè)試輸入文件的生成,避免動(dòng)態(tài)測(cè)試方法生成被測(cè)試文件的盲目性;(6)測(cè)試輸入生成模塊對(duì)每個(gè)輸入文件按照其適應(yīng)度函數(shù)值的大小進(jìn)行排序,并按照用戶設(shè)置的規(guī)模選取適應(yīng)度函數(shù)值高的輸入文件送至調(diào)試器模塊進(jìn)行下一輪的測(cè)試;(7)異常監(jiān)控模塊加載被測(cè)試二進(jìn)制程序和來(lái)自步驟(6)的輸入文件后,監(jiān)控被測(cè)試二進(jìn)制程序打開每個(gè)輸入文件后的執(zhí)行過(guò)程,如果被測(cè)試二進(jìn)制程序出現(xiàn)異常,則記錄導(dǎo)致被測(cè)試二進(jìn)制程序出現(xiàn)異常的輸入文件,以及該異常在被測(cè)試二進(jìn)制程序中的出現(xiàn)位置、異常類型和異常位置的上下文信息。所屬步驟(4)中,動(dòng)態(tài)污染跟蹤模塊首先執(zhí)行的初始化操作包括下述內(nèi)容(41)對(duì)被測(cè)試的二進(jìn)制程序執(zhí)行初始化操作使用線程同步鎖,以保證每個(gè)線程在訪問(wèn)某個(gè)資源時(shí),確保在同一時(shí)刻其他線程不能夠訪問(wèn)該資源,并保證污點(diǎn)跟蹤時(shí)實(shí)現(xiàn)讀寫的同步;(42)注冊(cè)系統(tǒng)回調(diào)函數(shù),使用能對(duì)二進(jìn)制程序進(jìn)行動(dòng)態(tài)插樁的工具Pin的Hook鉤子機(jī)制來(lái)捕獲與過(guò)濾與輸入文件相關(guān)的系統(tǒng)API的輸入?yún)?shù)與返回結(jié)果,用于實(shí)現(xiàn)對(duì)被測(cè)試二進(jìn)制程序動(dòng)態(tài)初始化的輸入監(jiān)控;(43)遍歷被測(cè)試的二進(jìn)制程序的導(dǎo)出表和加載的動(dòng)態(tài)鏈接庫(kù)的導(dǎo)出表,通過(guò)自定義的“危險(xiǎn)函數(shù)輔助規(guī)則”,在被測(cè)試二進(jìn)制程序調(diào)用的危險(xiǎn)函數(shù)入口處與結(jié)束處插入監(jiān)視代碼。所屬步驟(4)中,動(dòng)態(tài)污染跟蹤模塊在完成初始化后執(zhí)行的操作內(nèi)容是利用Pin的例程插樁能力來(lái)掛鉤Windows的系統(tǒng)函數(shù),并抽取其中內(nèi)存位置和讀入內(nèi)存中的字節(jié)數(shù),作為被測(cè)試二進(jìn)制程序的污染源;然后,從被測(cè)試二進(jìn)制程序入口地址開始以基本塊為單位讀取指令;當(dāng)監(jiān)測(cè)到被測(cè)試二進(jìn)制程序打開輸入文件時(shí),開始執(zhí)行動(dòng)態(tài)跟蹤污染每次加載新的指令塊時(shí),首先監(jiān)測(cè)被測(cè)試二進(jìn)制程序是否動(dòng)態(tài)加載新的動(dòng)態(tài)鏈接庫(kù),如果是,則遍歷新的動(dòng)態(tài)鏈接庫(kù)的導(dǎo)出表,再與危險(xiǎn)函數(shù)掛鉤和插入監(jiān)測(cè)代碼,以保證動(dòng)態(tài)跟蹤的時(shí)效,有效避免靜態(tài)分析時(shí)只能針對(duì)單個(gè)輸入文件的局限性;如果否,則繼續(xù)加載新的指令塊并執(zhí)行相應(yīng)操作。因x86的指令結(jié)構(gòu)涉及的操作數(shù)都是32位,所述動(dòng)態(tài)污染跟蹤模塊的監(jiān)測(cè)對(duì)象是基于32位的操作系統(tǒng);且為了防止在實(shí)際測(cè)試中擴(kuò)大污染數(shù)據(jù)和嚴(yán)重影響動(dòng)態(tài)污染跟蹤模塊的工作精度,動(dòng)態(tài)污染跟蹤模塊跟蹤污染的精確度定位為Byte級(jí),即每8個(gè)Bit為ー個(gè)污染単元,并將所有標(biāo)志寄存器按其實(shí)際作用重新単獨(dú)定義。本發(fā)明與現(xiàn)有技術(shù)相比較的創(chuàng)新優(yōu)勢(shì)在于
本發(fā)明利用遺傳算法的適應(yīng)度函數(shù)來(lái)指導(dǎo)生成測(cè)試輸入文件,并在構(gòu)造適應(yīng)度函數(shù)的過(guò)程中,考慮了被測(cè)試ニ進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù)等相關(guān)信息,使用適應(yīng)度函數(shù)引導(dǎo)測(cè)試輸入文件的生成,避免了傳統(tǒng)的動(dòng)態(tài)測(cè)試技術(shù)生成測(cè)試輸入文件的盲目性。本發(fā)明在構(gòu)造適應(yīng)度函數(shù)的過(guò)程中,考慮了被測(cè)試ニ進(jìn)制程序的最小執(zhí)行路徑信息,使毎次生成的測(cè)試輸入文件盡可能地執(zhí)行不同的路徑,以使測(cè)試輸入文件覆蓋的路徑盡可能最大化。本發(fā)明利用動(dòng)態(tài)污染跟蹤來(lái)識(shí)別被測(cè)試ニ進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),用作遺傳算法交叉和變異的空間,以縮小遺傳算法的運(yùn)行空間,加快遺傳算法生成針對(duì)性測(cè)試輸入文件的速度,提高了ニ進(jìn)制程序漏洞挖掘的效率。本發(fā)明融合ニ進(jìn)制程序靜態(tài)分析和動(dòng)態(tài)分析的兩者優(yōu)點(diǎn),主要采用動(dòng)態(tài)方法生成測(cè)試輸入文件,同時(shí)又利用靜態(tài)分析方法提取被測(cè)試ニ進(jìn)制程序的相關(guān)信息,又利用遺傳算法模塊對(duì)獲取的有關(guān)被測(cè)試ニ進(jìn)制程序的相關(guān)信息進(jìn)行靜態(tài)分析和計(jì)算每個(gè)測(cè)試輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值,然后使用適應(yīng)度函數(shù)值來(lái)引導(dǎo)生成測(cè)試輸入文件,避免動(dòng)態(tài)生成測(cè)試輸入文件的盲目性,使得生成的測(cè)試輸入文件具有較強(qiáng)的針對(duì)性,能夠快速觸發(fā)被測(cè)試ニ進(jìn)制程序中潛在的漏洞,因此,本發(fā)明具有很好的推廣應(yīng)用前景。


圖I是本發(fā)明融合遺傳算法與動(dòng)態(tài)污染跟蹤的ニ進(jìn)制程序漏洞挖掘的裝置的結(jié)構(gòu)組成與其操作流程方框圖。圖2是本發(fā)明裝置的遺傳算法模塊對(duì)識(shí)別出的關(guān)鍵字節(jié)操作示意圖。圖3是本發(fā)明裝置的遺傳算法模塊的交叉和變異操作示意圖。圖4是本發(fā)明裝置中的動(dòng)態(tài)污染跟蹤模塊的操作流程方框圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)ー步的詳細(xì)描述。參見圖1,先介紹本發(fā)明融合遺傳算法與動(dòng)態(tài)污染跟蹤的ニ進(jìn)制程序漏洞挖掘的裝置的結(jié)構(gòu)組成該裝置設(shè)有順序連接的靜態(tài)分析模塊、調(diào)試器模塊、遺傳算法模塊、測(cè)試輸入生成模塊和異常監(jiān)控模塊,以及位于調(diào)試器模塊、遺傳算法模塊之間的動(dòng)態(tài)污染跟蹤模塊;其中靜態(tài)分析模塊,該模塊是基于交互式反匯編器專業(yè)版IDAPro(InteractiveDisassembler Professional)開發(fā)實(shí)現(xiàn)的,用于提取被測(cè)試ニ進(jìn)制程序中的控制流結(jié)構(gòu)、基本塊信息和危險(xiǎn)函數(shù)的調(diào)用地址;該模塊通過(guò)分析ニ進(jìn)制程序中的跳轉(zhuǎn)指令,獲取ニ進(jìn)制程序的基本塊和控制流結(jié)構(gòu),再利用IDAPiX)提供的庫(kù)函數(shù)獲取ニ進(jìn)制程序中的危險(xiǎn)函數(shù)的調(diào)用地址,并將這些信息傳送給調(diào)試器模塊作為配置信息。
調(diào)試器模塊,作為該裝置的基礎(chǔ)平臺(tái),用于監(jiān)控被測(cè)試二進(jìn)制程序的執(zhí)行過(guò)程,并記錄相關(guān)執(zhí)行信息;該模塊主要功能包括根據(jù)靜態(tài)分析模塊提供的配置信息,識(shí)別和攔截Windows 底層的應(yīng)用程序編程接口 API (Application Programming Interface)函數(shù),獲取被測(cè)試二進(jìn)制程序打開輸入文件的位置;并記錄由輸入文件導(dǎo)致的被測(cè)試二進(jìn)制程序執(zhí)行過(guò)的基本塊、輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的執(zhí)行軌跡及該被測(cè)試二進(jìn)制程序中危險(xiǎn)函數(shù)的執(zhí)行次數(shù);讀取二進(jìn)制程序中寄存器和堆棧內(nèi)的數(shù)據(jù),計(jì)算并更新二進(jìn)制程序中的寄存器變量和內(nèi)存變量的數(shù)值;實(shí)現(xiàn)對(duì)給定的內(nèi)存地址對(duì)被測(cè)試二進(jìn)制程序下斷點(diǎn)的功能;然后調(diào)試器模塊將上述計(jì)算獲取的信息傳送給遺傳算法模塊,用于計(jì)算輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值。動(dòng)態(tài)污染跟蹤模塊,用于實(shí)現(xiàn)單字節(jié)水平細(xì)粒度的動(dòng)態(tài)污染跟蹤,識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并將該關(guān)鍵字節(jié)作為遺傳算法模塊交叉和變異的空間,提高遺傳算法的收斂速度該模塊為被測(cè)試二進(jìn)制程序的輸入數(shù)據(jù)中每個(gè)字節(jié)都賦予一個(gè)唯一標(biāo)簽,再跟蹤該標(biāo)簽在被測(cè)試二進(jìn)制程序中的傳遞過(guò)程;且在跟蹤輸入數(shù)據(jù)傳遞過(guò)程中,既考慮數(shù)據(jù)間的傳遞依賴關(guān)系,也考慮不同變量間的控制依賴關(guān)系;同時(shí)識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié)(所謂關(guān)鍵字節(jié)是在輸入文件中污染被測(cè)試二進(jìn)制程序中危險(xiǎn)函數(shù)的參數(shù)值的字節(jié),而危險(xiǎn)函數(shù)是包括內(nèi)存分配、內(nèi)存拷貝、字符串和一些含有格式化參數(shù)的多種函數(shù)),并把關(guān)鍵字節(jié)信息提供給遺傳算法模塊,用作遺傳算法模塊的交叉和變異的空間。遺傳算法模塊,負(fù)責(zé)根據(jù)調(diào)試器模塊提供的包括每個(gè)輸入文件所覆蓋被測(cè)試二進(jìn)制程序的基本塊與其對(duì)應(yīng)的二進(jìn)制程序執(zhí)行軌跡和其中危險(xiǎn)函數(shù)的執(zhí)行次數(shù),以及動(dòng)態(tài)污染跟蹤模塊識(shí)別出來(lái)的關(guān)鍵字節(jié),計(jì)算每個(gè)輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和該輸入文件對(duì)應(yīng)的危險(xiǎn)函數(shù)的執(zhí)行次數(shù),然后計(jì)算每個(gè)輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值,并將該適應(yīng)度函數(shù)值傳遞給測(cè)試輸入生成模塊,用于生成新的輸入文件而進(jìn)行下一輪測(cè)試;而且,如果輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值較高,則輸入文件可能導(dǎo)致被測(cè)試二進(jìn)制程序覆蓋的基本塊較多、導(dǎo)致被測(cè)試二進(jìn)制程序的執(zhí)行路徑為“稀少路徑”或?qū)е卤粶y(cè)試二進(jìn)制程序執(zhí)行的危險(xiǎn)函數(shù)次數(shù)較多;當(dāng)輸入文件的上述三個(gè)數(shù)值都較高時(shí),該輸入文件就非??赡苡|發(fā)其對(duì)應(yīng)的被測(cè)試二進(jìn)制程序潛在的安全漏洞;所述遺傳算法模塊執(zhí)行的交叉和變異的遺傳操作對(duì)象只是被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并不是整個(gè)輸入文件,以便縮小遺傳算法交叉和變異的空間,提高遺傳算法的收斂速度,進(jìn)而提高二進(jìn)制程序漏洞挖掘的效率。該遺傳算法模塊中的適應(yīng)度函數(shù)的計(jì)算公式是Fitness (x) = W1Xbbcx+w2X lcovx+w3XrlndexX log(Dx),式中,變量 x 為輸入文件,bbcx、Icovx和Dx分別為該輸入文件X對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù),其中,bbcx用于使遺傳算法模塊生成新的被測(cè)試的輸入文件導(dǎo)致被測(cè)試二進(jìn)制程序覆蓋更多的基本塊,Icovx用于使得遺傳算法模塊生成新的被測(cè)試的輸入文件所產(chǎn)生的執(zhí)行路徑盡可能不同,實(shí)現(xiàn)路徑覆蓋最大化,Dx用于使得遺傳算法模塊生成新的被測(cè)試的輸入文件導(dǎo)致被測(cè)試二進(jìn)制程序執(zhí)行較多次數(shù)的危險(xiǎn)函數(shù);W1,W2,W3分別為上述bbcx、Icovx和Dx三個(gè)因素的權(quán)重,其取值范圍都是[O, I] ,rlndex為取值范圍是
的調(diào)解系數(shù)。 測(cè)試輸入生成模塊,負(fù)責(zé)根據(jù)來(lái)自遺傳算法模塊的每個(gè)輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值的大小對(duì)被測(cè)試二進(jìn)制程序的輸入文件進(jìn)行排序,然后根據(jù)用戶設(shè)置的規(guī)模,選擇適應(yīng)度函數(shù)值高的輸入文件送至調(diào)試器模塊進(jìn)行下一輪測(cè)試,因適應(yīng)度函數(shù)值高的輸入文件更容易觸發(fā)被測(cè)試二進(jìn)制程序潛在的安全漏洞。異常監(jiān)控模塊,用于監(jiān)控每個(gè)輸入文件中的被測(cè)試二進(jìn)制程序的執(zhí)行過(guò)程,若出現(xiàn)異常,則記錄導(dǎo)致該被測(cè)試二進(jìn)制程序出現(xiàn)異常的輸入文件,并記錄異常在被測(cè)試二進(jìn)制程序中的出現(xiàn)位置、異常類型和異常出現(xiàn)的上下文信息。本發(fā)明還提供融合遺傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序漏洞的挖掘裝置檢測(cè)二進(jìn)制程序的漏洞的挖掘方法,是融合遺傳算法與動(dòng)態(tài)污染跟蹤分析方法兩者優(yōu)點(diǎn)為避免動(dòng)態(tài)測(cè)試方法盲目生成測(cè)試數(shù)據(jù),使用遺傳算法的適應(yīng)度函數(shù)指導(dǎo)生成測(cè)試用例,同時(shí)為了縮小遺傳算法交叉和變異的空間,使用動(dòng)態(tài)污染跟蹤模塊識(shí)別出測(cè)試輸入文件中的關(guān)鍵字節(jié),并把關(guān)鍵字節(jié)信息按照關(guān)鍵字節(jié)相對(duì)于輸入文件頭的偏移地址寫入到一個(gè)數(shù)組中;由遺傳算法模塊針對(duì)該數(shù)組進(jìn)行交叉和變異,使得人們只關(guān)注于感興趣的程序代碼并進(jìn)行后續(xù)分析,從而縮小遺傳算法的搜索空間,加快遺傳算法的收斂速度,提高被測(cè)試二進(jìn)制程序漏洞挖掘的效率。該方法的操作步驟如下本發(fā)明還提供了一種采用融合遺傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序的漏洞挖掘裝置的檢測(cè)方法該方法融合了漏洞挖掘技術(shù)的靜態(tài)分析和動(dòng)態(tài)分析的兩者優(yōu)點(diǎn),使得人們只需關(guān)注于其感興趣的程序代碼,并作進(jìn)一步的分析。該方法包括下列操作步驟步驟1,根據(jù)被測(cè)試二進(jìn)制程序類型,用戶事先準(zhǔn)備一份標(biāo)準(zhǔn)的測(cè)試文件并隨機(jī)修改其中的若干字節(jié)生成輸入文件,且由用戶控制該輸入文件的規(guī)模大小。步驟2,靜態(tài)分析模塊對(duì)輸入文件中的被測(cè)試二進(jìn)制程序進(jìn)行靜態(tài)分析,獲取被測(cè)試二進(jìn)制程序基本塊的起始地址、基本塊之間的跳轉(zhuǎn)信息和危險(xiǎn)函數(shù)的調(diào)用地址;再將這些信息將作為配置信息傳遞至調(diào)試器模塊。步驟3,調(diào)試器模塊對(duì)從靜態(tài)分析模塊來(lái)的配置信息計(jì)算每個(gè)輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù)。步驟4,為縮小遺傳算法的交叉和變異空間,動(dòng)態(tài)污染跟蹤模塊識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并把這些關(guān)鍵字節(jié)按照每個(gè)關(guān)鍵字節(jié)相對(duì)于輸入文件頭的各自偏移地址寫入于一個(gè)數(shù)組后,再送至遺傳算法模塊;以供遺傳算法模塊針對(duì)該數(shù)組進(jìn)行交叉和變異;然后把交叉和變異后的數(shù)組按照每個(gè)字節(jié)相對(duì)于輸入文件頭的偏移地址寫入輸入文件中,作為遺傳算法交叉和變異后生成的新的被測(cè)試的輸入文件,以便縮小遺傳算法的搜索空間,加快遺傳算法的收斂速度,提高二進(jìn)制程序漏洞的挖掘效率。參見圖4,介紹動(dòng)態(tài)污染跟蹤模塊在該步驟4中執(zhí)行的具體操作內(nèi)容動(dòng)態(tài)污染跟蹤模塊首先執(zhí)行下述三項(xiàng)初始化操作(41)對(duì)被測(cè)試的二進(jìn)制程序執(zhí)行初始化操作使用線程同步鎖,以保證每個(gè)線程在訪問(wèn)某個(gè)資源的同時(shí),能夠確保同一時(shí)刻沒有其他線程在訪問(wèn)同一資源,并保證污點(diǎn)跟蹤時(shí)實(shí)現(xiàn)讀寫的同步; (42)注冊(cè)系統(tǒng)回調(diào)函數(shù),使用能對(duì)二進(jìn)制程序進(jìn)行動(dòng)態(tài)插樁的工具Pin的Hook鉤子機(jī)制來(lái)捕獲與過(guò)濾與輸入文件相關(guān)的系統(tǒng)API的輸入?yún)?shù)與返回結(jié)果,用于實(shí)現(xiàn)對(duì)被測(cè)試二進(jìn)制程序動(dòng)態(tài)初始化的輸入監(jiān)控;
(43)遍歷被測(cè)試的ニ進(jìn)制程序的導(dǎo)出表和加載的動(dòng)態(tài)鏈接庫(kù)的導(dǎo)出表,通過(guò)自定義的“危險(xiǎn)函數(shù)輔助規(guī)則”,在被測(cè)試ニ進(jìn)制程序調(diào)用的危險(xiǎn)函數(shù)入口處與結(jié)束處插入監(jiān)視代碼。 初始化結(jié)束后,本發(fā)明裝置就開始從被測(cè)試ニ進(jìn)制程序的入口地址處以基本塊為單位讀取指令。因動(dòng)態(tài)污染跟蹤模塊是建立于Pin (Pin是ー種可以動(dòng)態(tài)進(jìn)行插樁的框架)的基礎(chǔ)上。故動(dòng)態(tài)污染跟蹤模塊在完成初始化后,執(zhí)行的操作內(nèi)容是利用Pin的例程插樁能力來(lái)掛鉤Windows的系統(tǒng)函數(shù)(例如NtCreatFile、NtReadFile等),并抽取其中內(nèi)存位置和讀入內(nèi)存中的字節(jié)數(shù),作為被測(cè)試ニ進(jìn)制程序的污染源。然后,從被測(cè)試ニ進(jìn)制程序入ロ地址開始以基本塊為單位讀取指令;當(dāng)監(jiān)測(cè)到被測(cè)試ニ進(jìn)制程序的輸入有效(例如打開了指定的輸入文件)吋,開始執(zhí)行動(dòng)態(tài)跟蹤污染毎次加載新的指令塊時(shí),首先監(jiān)測(cè)被測(cè)試ニ進(jìn)制程序是否動(dòng)態(tài)加載新的動(dòng)態(tài)鏈接庫(kù),如果是,則遍歷新的動(dòng)態(tài)鏈接庫(kù)的導(dǎo)出表,再與危險(xiǎn)函數(shù)掛鉤和插入監(jiān)測(cè)代碼,以保證動(dòng)態(tài)跟蹤的時(shí)效,有效避免靜態(tài)分析時(shí)只能針對(duì)單個(gè)輸入文件的局限性;如果否,則繼續(xù)加載新的指令塊并執(zhí)行相應(yīng)操作。下面繼續(xù)介紹動(dòng)態(tài)污染跟蹤模塊執(zhí)行的操作步驟步驟4a,解析當(dāng)前指令中使用到的寄存器和內(nèi)存位置,分別存為指令類型鏈表、指令源鏈表和指令目的鏈表。步驟4b,判斷指令類型是否為該裝置能夠處理的指令類型包括常用指令、算木指令、控制指令、跳轉(zhuǎn)指令等,共100多種。步驟4c,進(jìn)行動(dòng)態(tài)污染跟蹤和動(dòng)態(tài)執(zhí)行時(shí)的規(guī)則判斷,根據(jù)危險(xiǎn)函數(shù)的列表監(jiān)控是否有輸入文件中的字節(jié)傳遞到危險(xiǎn)函數(shù)中,如果有,則記錄該字節(jié)相對(duì)于輸入文件頭的偏移地址,動(dòng)態(tài)污點(diǎn)跟蹤以Byte為單位。步驟4d,監(jiān)視跳轉(zhuǎn)是否成功執(zhí)行,并判斷跳轉(zhuǎn)是否和輸入數(shù)據(jù)相關(guān)。步驟4f,記錄標(biāo)志寄存器的變化情況,若污染數(shù)據(jù)屬于互相關(guān)聯(lián)的,則在出現(xiàn)分支時(shí),直接從標(biāo)志寄存器數(shù)據(jù)結(jié)構(gòu)中讀取相關(guān)信息。步驟4e,輸出被測(cè)試ニ進(jìn)制程序的污染源的起始地址和結(jié)束地址,動(dòng)態(tài)污染跟蹤模塊識(shí)別出的關(guān)鍵字節(jié)。動(dòng)態(tài)污染跟蹤模塊是基于x86匯編指令集實(shí)現(xiàn)的,故其的動(dòng)態(tài)污染跟蹤是從識(shí)別指令類型開始的。本發(fā)明只選擇了常用的指令集進(jìn)行動(dòng)態(tài)污染跟蹤分析。根據(jù)實(shí)際測(cè)試分祈,Windows平臺(tái)下的編譯器編譯普通程序只用到約300條匯編指令類型,在剔除不常用的匯編指令和浮點(diǎn)運(yùn)算指令后(該類指令對(duì)動(dòng)態(tài)污染分析結(jié)果的精確度影響不大),剩下的指令是進(jìn)行污染跟蹤系統(tǒng)必須要解析的匯編指令。又因x86的指令結(jié)構(gòu)涉及的操作數(shù)都是32位,因此動(dòng)態(tài)污染跟蹤模塊的監(jiān)測(cè)對(duì)象是基于32位的操作系統(tǒng);且在動(dòng)態(tài)污染跟蹤模塊的實(shí)際測(cè)試中,常常發(fā)現(xiàn)若在32位中某一位或幾位是污點(diǎn)吋,就把整個(gè)32位標(biāo)記為污染數(shù)據(jù)的辦法,通常就無(wú)形地?cái)U(kuò)大了污染數(shù)據(jù),嚴(yán)重影響了動(dòng)態(tài)污染跟蹤系統(tǒng)的精確度。為了防止在實(shí)際測(cè)試中出現(xiàn)這種情況,動(dòng)態(tài)污染跟蹤模塊跟蹤污染的精確度定位為Byte級(jí),也就是每8個(gè)bit為ー個(gè)污染單元,并將所有標(biāo)志寄存器按其實(shí)際作用重新単獨(dú)定義。步驟5,遺傳算法模塊根據(jù)從調(diào)試器模塊獲取的每個(gè)輸入文件對(duì)應(yīng)的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù),以及由動(dòng)態(tài)污染跟蹤識(shí)別的關(guān)鍵字節(jié),計(jì)算每個(gè)輸入文件所對(duì)應(yīng)的適應(yīng)度函數(shù)值;以便使用適應(yīng)度函數(shù)指導(dǎo)被測(cè)試輸入文件的生成,避免動(dòng)態(tài)測(cè)試方法生成被測(cè)試文件的盲目性。步驟6,測(cè)試輸入生成模塊對(duì)每個(gè)輸入文件按照其適應(yīng)度函數(shù)值的大小進(jìn)行排序,并按照用戶設(shè)置的規(guī)模選取適應(yīng)度函數(shù)值高的輸入文件送至調(diào)試器模塊進(jìn)行下一輪的測(cè)試。步驟7,異常監(jiān)控模塊加載被測(cè)試二進(jìn)制程序和來(lái)自步驟(6)的輸入文件后,監(jiān)控被測(cè)試二進(jìn)制程序打開每個(gè)輸入文件后的執(zhí)行過(guò)程,如果被測(cè)試二進(jìn)制程序出現(xiàn)異常,則記錄導(dǎo)致被測(cè)試二進(jìn)制程序出現(xiàn)異常的輸入文件,以及該異常在被測(cè)試二進(jìn)制程序中的出現(xiàn)位置、異常類型和異常位置的上下文信息。下面介紹影響動(dòng)態(tài)污染跟蹤系統(tǒng)結(jié)果精確度的匯編指令列表
權(quán)利要求
1.一種融合傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序漏洞挖掘的裝置,其特征在于所述裝置設(shè)有順序連接的靜態(tài)分析模塊、調(diào)試器模塊、遺傳算法模塊、測(cè)試輸入生成模塊和異常監(jiān)控模塊,以及位于調(diào)試器模塊、遺傳算法模塊之間的動(dòng)態(tài)污染跟蹤模塊;其中 靜態(tài)分析模塊,基于交互式反匯編器專業(yè)版IDAPiX)開發(fā)實(shí)現(xiàn)的該模塊,用于提取被測(cè)試二進(jìn)制程序中的控制流結(jié)構(gòu)、基本塊的起始地址和危險(xiǎn)函數(shù)的調(diào)用地址,并將這些信息傳送給調(diào)試器模塊作為配置信息;即該模塊通過(guò)分析二進(jìn)制程序中的跳轉(zhuǎn)指令,獲取二進(jìn)制程序基本塊的起始地址和基本塊之間的跳轉(zhuǎn)關(guān)系;然后利用IDAPro的庫(kù)函數(shù)獲取_■進(jìn)制程序中的危險(xiǎn)函數(shù)的調(diào)用地址; 調(diào)試器模塊,作為該裝置的基礎(chǔ)平臺(tái),用于監(jiān)控被測(cè)試二進(jìn)制程序的執(zhí)行過(guò)程,并記錄相關(guān)信息根據(jù)靜態(tài)分析模塊提供的配置信息,識(shí)別和攔截Windows底層的應(yīng)用程序編程接口 API函數(shù),獲取被測(cè)試二進(jìn)制程序打開輸入文件的位置和記錄由輸入文件導(dǎo)致的被測(cè)試二進(jìn)制程序執(zhí)行過(guò)的基本塊、輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的執(zhí)行軌跡及該被測(cè)試二進(jìn)制程序中危險(xiǎn)函數(shù)的執(zhí)行次數(shù);讀取二進(jìn)制程序中寄存器和堆棧內(nèi)的數(shù)據(jù),計(jì)算并更新二進(jìn)制程序中的寄存器變量和內(nèi)存變量的數(shù)值;實(shí)現(xiàn)對(duì)給定的內(nèi)存地址對(duì)被測(cè)試二進(jìn)制程序下斷點(diǎn)的功能;然后調(diào)試器模塊將上述計(jì)算獲取的信息傳送給遺傳算法模塊,用于計(jì)算輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值; 動(dòng)態(tài)污染跟蹤模塊,用于實(shí)現(xiàn)單字節(jié)水平細(xì)粒度的動(dòng)態(tài)污染跟蹤,識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并將該關(guān)鍵字節(jié)作為遺傳算法模塊交叉和變異的空間,提高遺傳算法的收斂速度該模塊為被測(cè)試二進(jìn)制程序的輸入數(shù)據(jù)中每個(gè)字節(jié)都賦予一個(gè)唯一標(biāo)簽,再跟蹤該標(biāo)簽在被測(cè)試二進(jìn)制程序中的傳遞過(guò)程;且在跟蹤輸入數(shù)據(jù)傳遞過(guò)程中,既考慮數(shù)據(jù)間的傳遞依賴關(guān)系,也考慮不同變量間的控制依賴關(guān)系;同時(shí)識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并把關(guān)鍵字節(jié)信息提供給遺傳算法模塊,用作遺傳算法模塊的交叉和變異的空間; 遺傳算法模塊,負(fù)責(zé)根據(jù)調(diào)試器模塊提供的包括每個(gè)輸入文件所覆蓋被測(cè)試二進(jìn)制程序的基本塊與其對(duì)應(yīng)的二進(jìn)制程序執(zhí)行軌跡和其中危險(xiǎn)函數(shù)的執(zhí)行次數(shù),以及動(dòng)態(tài)污染跟蹤模塊識(shí)別出來(lái)的關(guān)鍵字節(jié),計(jì)算每個(gè)輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和該輸入文件對(duì)應(yīng)的危險(xiǎn)函數(shù)的執(zhí)行次數(shù),然后計(jì)算每個(gè)輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值,并將該適應(yīng)度函數(shù)值傳遞給測(cè)試輸入生成模塊,用于生成新的輸入文件而進(jìn)行下一輪測(cè)試;而且,如果輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值較高,則輸入文件可能導(dǎo)致被測(cè)試二進(jìn)制程序覆蓋的基本塊較多、導(dǎo)致被測(cè)試二進(jìn)制程序的執(zhí)行路徑為“稀少路徑”或?qū)е卤粶y(cè)試二進(jìn)制程序執(zhí)行的危險(xiǎn)函數(shù)次數(shù)較多;當(dāng)輸入文件的上述三個(gè)數(shù)值都較高時(shí),該輸入文件就非??赡苡|發(fā)其對(duì)應(yīng)的被測(cè)試二進(jìn)制程序潛在的安全漏洞; 測(cè)試輸入生成模塊,負(fù)責(zé)根據(jù)來(lái)自遺傳算法模塊的每個(gè)輸入文件對(duì)應(yīng)的適應(yīng)度函數(shù)值的大小對(duì)被測(cè)試二進(jìn)制程序的輸入文件進(jìn)行排序,然后根據(jù)用戶設(shè)置的規(guī)模,選擇適應(yīng)度函數(shù)值高的輸入文件送至調(diào)試器模塊進(jìn)行下一輪測(cè)試,因適應(yīng)度函數(shù)值高的輸入文件更容易觸發(fā)被測(cè)試二進(jìn)制程序潛在的安全漏洞; 異常監(jiān)控模塊,用于監(jiān)控每個(gè)輸入文件中的被測(cè)試二進(jìn)制程序的執(zhí)行過(guò)程,若出現(xiàn)異常,則記錄導(dǎo)致該被測(cè)試二進(jìn)制程序出現(xiàn)異常的輸入文件,并記錄異常在被測(cè)試二進(jìn)制程序中的出現(xiàn)位置、異常類型和異常出現(xiàn)的上下文信息。
2.根據(jù)權(quán)利要求I所述裝置,其特征在于所述危險(xiǎn)函數(shù)是包括內(nèi)存分配、內(nèi)存拷貝、字符串和一些含有格式化參數(shù)的多種函數(shù);所述關(guān)鍵字節(jié)是在輸入文件中污染被測(cè)試二進(jìn)制程序中危險(xiǎn)函數(shù)的參數(shù)值的字節(jié),也被稱為該被測(cè)試的二進(jìn)制程序所對(duì)應(yīng)的輸入文件中的關(guān)鍵字節(jié)。
3.根據(jù)權(quán)利要求I所述裝置,其特征在于所述遺傳算法模塊中的適應(yīng)度函數(shù)的計(jì)算公式是Fitness(x) = W1Xbbcx+w2X lcovx+w3XrlndexX log(Dx),式中,變量 x 為輸入文件,bbcx、Icovx和Dx分別為該輸入文件X對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù),其中,bbcx用于使遺傳算法模塊生成新的被測(cè)試的輸入文件導(dǎo)致被測(cè)試二進(jìn)制程序覆蓋更多的基本塊,Icovx用于使得遺傳算法模塊生成新的被測(cè)試的輸入文件所產(chǎn)生的執(zhí) 行路徑盡可能不同,實(shí)現(xiàn)路徑覆蓋最大化,Dx用于使得遺傳算法模塊生成新的被測(cè)試的輸入文件導(dǎo)致被測(cè)試二進(jìn)制程序執(zhí)行較多次數(shù)的危險(xiǎn)函數(shù);W1, w2, W3分別為上述bbcx、Icovx和Dx三個(gè)因素的權(quán)重,其取值范圍都是[O, I], rlndex為取值范圍是
的調(diào)解系數(shù)。
4.根據(jù)權(quán)利要求I所述的裝置,其特征在于所述遺傳算法模塊執(zhí)行的交叉和變異的遺傳操作對(duì)象只是被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并不是整個(gè)輸入文件,以便縮小遺傳算法交叉和變異的空間,提高遺傳算法的收斂速度,進(jìn)而提高二進(jìn)制程序漏洞挖掘的效率。
5.一種采用融合遺傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序的漏洞挖掘裝置的檢測(cè)方法,其特征在于,所述方法融合了靜態(tài)分析和動(dòng)態(tài)分析兩者優(yōu)點(diǎn),使得人們只關(guān)注于感興趣的程序代碼并進(jìn)行后續(xù)分析;該方法包括下列操作步驟 (1)根據(jù)被測(cè)試的二進(jìn)制程序類型,用戶事先準(zhǔn)備一份標(biāo)準(zhǔn)的測(cè)試文件并隨機(jī)修改其中的若干字節(jié)生成輸入文件,且由用戶控制該輸入文件的規(guī)模大小; (2)靜態(tài)分析模塊對(duì)輸入文件中的被測(cè)試二進(jìn)制程序進(jìn)行靜態(tài)分析,獲取被測(cè)試二進(jìn)制程序基本塊的起始地址、基本塊之間的跳轉(zhuǎn)信息和危險(xiǎn)函數(shù)的調(diào)用地址;再將這些信息將作為配置信息傳遞至調(diào)試器模塊; (3)調(diào)試器模塊對(duì)來(lái)自靜態(tài)分析模塊的配置信息計(jì)算每個(gè)輸入文件對(duì)應(yīng)的被測(cè)試二進(jìn)制程序的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù); (4)為縮小遺傳算法的交叉和變異空間,動(dòng)態(tài)污染跟蹤模塊識(shí)別被測(cè)試二進(jìn)制程序?qū)?yīng)的輸入文件中的關(guān)鍵字節(jié),并把這些關(guān)鍵字節(jié)按照每個(gè)關(guān)鍵字節(jié)相對(duì)于輸入文件頭的各自偏移地址寫入于一個(gè)數(shù)組后,再送至遺傳算法模塊;以供遺傳算法模塊針對(duì)該數(shù)組進(jìn)行交叉和變異;然后把交叉和變異后的數(shù)組按照每個(gè)字節(jié)相對(duì)于輸入文件頭的偏移地址寫入輸入文件中,作為遺傳算法交叉和變異后生成的新的被測(cè)試的輸入文件,以便縮小遺傳算法的搜索空間,加快遺傳算法的收斂速度,提高二進(jìn)制程序漏洞的挖掘效率; (5)遺傳算法模塊根據(jù)從調(diào)試器模塊獲取的每個(gè)輸入文件對(duì)應(yīng)的基本塊覆蓋率、最小執(zhí)行路徑信息和危險(xiǎn)函數(shù)的執(zhí)行次數(shù),以及由動(dòng)態(tài)污染跟蹤識(shí)別的關(guān)鍵字節(jié),計(jì)算每個(gè)輸入文件所對(duì)應(yīng)的適應(yīng)度函數(shù)值;以便使用適應(yīng)度函數(shù)指導(dǎo)被測(cè)試輸入文件的生成,避免動(dòng)態(tài)測(cè)試方法生成被測(cè)試文件的盲目性; (6)測(cè)試輸入生成模塊對(duì)每個(gè)輸入文件按照其適應(yīng)度函數(shù)值的大小進(jìn)行排序,并按照用戶設(shè)置的規(guī)模選取適應(yīng)度函數(shù)值高的輸入文件送至調(diào)試器模塊進(jìn)行下一輪的測(cè)試;(7)異常監(jiān)控模塊加載被測(cè)試二進(jìn)制程序和來(lái)自步驟¢)的輸入文件后,監(jiān)控被測(cè)試二進(jìn)制程序打開每個(gè)輸入文件后的執(zhí)行過(guò)程,如果被測(cè)試二進(jìn)制程序出現(xiàn)異常,則記錄導(dǎo)致被測(cè)試二進(jìn)制程序出現(xiàn)異常的輸入文件,以及該異常在被測(cè)試二進(jìn)制程序中的出現(xiàn)位置、異常類型和異常位置的上下文信息。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于所屬步驟(4)中,動(dòng)態(tài)污染跟蹤模塊首先執(zhí)行的初始化操作包括下述內(nèi)容 (41)對(duì)被測(cè)試的二進(jìn)制程序執(zhí)行初始化操作使用線程同步鎖,以保證每個(gè)線程在訪問(wèn)某個(gè)資源時(shí),確保在同一時(shí)刻其他線程不能夠訪問(wèn)該資源,并保證污點(diǎn)跟蹤時(shí)實(shí)現(xiàn)讀寫 的同步; (42)注冊(cè)系統(tǒng)回調(diào)函數(shù),使用能對(duì)二進(jìn)制程序進(jìn)行動(dòng)態(tài)插樁的工具Pin的Hook鉤子機(jī)制來(lái)捕獲與過(guò)濾與輸入文件相關(guān)的系統(tǒng)API的輸入?yún)?shù)與返回結(jié)果,用于實(shí)現(xiàn)對(duì)被測(cè)試二進(jìn)制程序動(dòng)態(tài)初始化的輸入監(jiān)控; (43)遍歷被測(cè)試的二進(jìn)制程序的導(dǎo)出表和加載的動(dòng)態(tài)鏈接庫(kù)的導(dǎo)出表,通過(guò)自定義的“危險(xiǎn)函數(shù)輔助規(guī)則”,在被測(cè)試二進(jìn)制程序調(diào)用的危險(xiǎn)函數(shù)入口處與結(jié)束處插入監(jiān)視代碼。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于所屬步驟(4)中,動(dòng)態(tài)污染跟蹤模塊在完成初始化后執(zhí)行的操作內(nèi)容是利用Pin的例程插樁能力來(lái)掛鉤Windows的系統(tǒng)函數(shù),并抽取其中內(nèi)存位置和讀入內(nèi)存中的字節(jié)數(shù),作為被測(cè)試二進(jìn)制程序的污染源;然后,從被測(cè)試二進(jìn)制程序入口地址開始以基本塊為單位讀取指令;當(dāng)監(jiān)測(cè)到被測(cè)試二進(jìn)制程序打開輸入文件時(shí),開始執(zhí)行動(dòng)態(tài)跟蹤污染每次加載新的指令塊時(shí),首先監(jiān)測(cè)被測(cè)試二進(jìn)制程序是否動(dòng)態(tài)加載新的動(dòng)態(tài)鏈接庫(kù),如果是,則遍歷新的動(dòng)態(tài)鏈接庫(kù)的導(dǎo)出表,再與危險(xiǎn)函數(shù)掛鉤和插入監(jiān)測(cè)代碼,以保證動(dòng)態(tài)跟蹤的時(shí)效,有效避免靜態(tài)分析時(shí)只能針對(duì)單個(gè)輸入文件的局限性;如果否,則繼續(xù)加載新的指令塊并執(zhí)行相應(yīng)操作。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于因x86的指令結(jié)構(gòu)涉及的操作數(shù)都是32位,所述動(dòng)態(tài)污染跟蹤模塊的監(jiān)測(cè)對(duì)象是基于32位的操作系統(tǒng);且為了防止在實(shí)際測(cè)試中擴(kuò)大污染數(shù)據(jù)和嚴(yán)重影響動(dòng)態(tài)污染跟蹤模塊的工作精度,動(dòng)態(tài)污染跟蹤模塊跟蹤污染的精確度定位為Byte級(jí),即每8個(gè)Bit為一個(gè)污染單元,并將所有標(biāo)志寄存器按其實(shí)際作用重新單獨(dú)定義。
全文摘要
一種融合遺傳算法與動(dòng)態(tài)污染跟蹤的二進(jìn)制程序漏洞的挖掘裝置與方法,該裝置設(shè)有順序連接的靜態(tài)分析模塊、調(diào)試器模塊、遺傳算法模塊、測(cè)試輸入生成模塊和異常監(jiān)控模塊,以及位于調(diào)試器模塊、遺傳算法模塊之間的動(dòng)態(tài)污染跟蹤模塊;該裝置利用遺傳算法的適應(yīng)度函數(shù)指導(dǎo)生成測(cè)試用例,設(shè)計(jì)了多目標(biāo)的適應(yīng)度函數(shù),從定量角度評(píng)價(jià)測(cè)試用例的好壞;再用動(dòng)態(tài)污染跟蹤識(shí)別出輸入文件中的關(guān)鍵字節(jié),縮小遺傳算法的搜索空間。該裝置結(jié)合遺傳算法和動(dòng)態(tài)污染跟蹤兩者優(yōu)點(diǎn),指導(dǎo)生成測(cè)試用例,故生成的測(cè)試用例針對(duì)性強(qiáng),生成的測(cè)試數(shù)據(jù)準(zhǔn)確度和效率都高,且把定性分析與定量計(jì)算相結(jié)合,避免了基于符號(hào)執(zhí)行與約束求解技術(shù)的二進(jìn)制程序測(cè)試中的路徑爆炸問(wèn)題。
文檔編號(hào)G06F21/22GK102622558SQ20121005164
公開日2012年8月1日 申請(qǐng)日期2012年3月1日 優(yōu)先權(quán)日2012年3月1日
發(fā)明者崔寶江, 梁曉兵 申請(qǐng)人:北京郵電大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
卢龙县| 盘锦市| 依兰县| 兴海县| 正蓝旗| 祁门县| 湖口县| 沂源县| 朝阳县| 邯郸市| 霍山县| 文化| 施秉县| 庆云县| 大邑县| 承德县| 监利县| 道真| 嘉峪关市| 左云县| 睢宁县| 宜丰县| 石首市| 定兴县| 博客| 灌阳县| 二连浩特市| 凤台县| 昌都县| 菏泽市| 西安市| 泾阳县| 潼关县| 八宿县| 施秉县| 双辽市| 女性| 德安县| 无极县| 万山特区| 民县|