本發(fā)明涉及一種基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng)和方法,屬于軟件工程和信息安全領(lǐng)域。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,計(jì)算機(jī)技術(shù)得到了迅速的普及,但是由此也產(chǎn)生了很多的安全問題。其中,漏洞是威脅網(wǎng)絡(luò)安全的最重要因素。由于漏洞的存在,黑客或不法分子可以竊取用戶信息,提升系統(tǒng)權(quán)限,嚴(yán)重威脅用戶乃至國家的安全。尤其是一些0day漏洞,由于還沒有及時(shí)的進(jìn)行修復(fù),更加威脅著網(wǎng)絡(luò)的安全。
針對(duì)一次次的安全問題,國家也逐漸將安全問題提上了日程,并給予足夠的重視。中國信息安全測(cè)評(píng)中心提供的“國家漏洞庫”已經(jīng)投入運(yùn)行,中央網(wǎng)絡(luò)安全和信息化領(lǐng)導(dǎo)小組成立,運(yùn)營(yíng)商和互聯(lián)網(wǎng)巨頭關(guān)于網(wǎng)絡(luò)安全立法的討論,這些都標(biāo)志著信息安全的工作任重道遠(yuǎn)。
漏洞挖掘和分析是有效查找漏洞的關(guān)鍵。漏洞挖掘方法主要分為靜態(tài)分析和動(dòng)態(tài)分析,由于現(xiàn)實(shí)生活中大部分軟件不提供源碼,動(dòng)態(tài)分析的重要性就得到了體現(xiàn)。最常用的動(dòng)態(tài)分析方法有動(dòng)態(tài)污點(diǎn)分析技術(shù)、符號(hào)執(zhí)行技術(shù)和模糊測(cè)試技術(shù)等。通過結(jié)合多種動(dòng)態(tài)漏洞挖掘分析方法和技術(shù),能夠更好的設(shè)計(jì)漏洞挖掘系統(tǒng),實(shí)現(xiàn)漏洞發(fā)現(xiàn)和確認(rèn)。
隨著信息安全和漏洞挖掘技術(shù)的快速發(fā)展,目前漏洞挖掘算法計(jì)算量大、算法復(fù)雜性高,以某個(gè)二進(jìn)制應(yīng)用程序作為測(cè)試目標(biāo)的漏洞挖掘測(cè)試常常要運(yùn)行好幾個(gè)月,十分耗時(shí)。如何有效的提高動(dòng)態(tài)漏洞的效率成為了迫切需要解決的問題。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明的目的在于提供一種基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng)與方法,高效地完成整個(gè)測(cè)試任務(wù)。
DCR(Decompose,Computation,Reduce)是一種新的并行編程模型和運(yùn)行支撐環(huán)境,該并行編程模型將整個(gè)計(jì)算過程簡(jiǎn)化為分解、計(jì)算和規(guī)約三個(gè)部分,運(yùn)行支持環(huán)境提供了動(dòng)態(tài)負(fù)載均衡、計(jì)算規(guī)模動(dòng)態(tài)變化、節(jié)點(diǎn)失效自動(dòng)處理的功能。通過調(diào)度節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)的配合,實(shí)現(xiàn)面向計(jì)算密集型應(yīng)用的并行化處理平臺(tái)。
考慮到漏洞挖掘過程中的效率問題和并行化處理的特點(diǎn),有效的將兩種技術(shù)結(jié)合起來,將DCR并行化運(yùn)算技術(shù)運(yùn)用到動(dòng)態(tài)漏洞挖掘的過程中,充分利用現(xiàn)有計(jì)算資源和存儲(chǔ)資源,有效提高了動(dòng)態(tài)漏洞挖掘分析過程的自動(dòng)化和智能化,有效提升了漏洞挖掘的效率。
本發(fā)明采用的技術(shù)方案為:
一種基于DCR的動(dòng)態(tài)漏洞挖掘方法,其步驟為:
1)依據(jù)DCR并行化計(jì)算的結(jié)構(gòu)特征對(duì)漏洞挖掘系統(tǒng)進(jìn)行重構(gòu),重構(gòu)后的漏洞挖掘系統(tǒng)包括調(diào)度節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn);
2)根據(jù)輸入的初始任務(wù)中的種子測(cè)試用例生成測(cè)試任務(wù)放到所述調(diào)度節(jié)點(diǎn)的任務(wù)隊(duì)列中;
3)所述調(diào)度節(jié)點(diǎn)的任務(wù)管理和分配模塊將所述任務(wù)隊(duì)列中的任務(wù)分配給空閑的計(jì)算節(jié)點(diǎn);
4)所述計(jì)算節(jié)點(diǎn)執(zhí)行相應(yīng)的測(cè)試任務(wù),執(zhí)行結(jié)束后,將產(chǎn)生的新的測(cè)試用例和導(dǎo)致目標(biāo)程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給所述調(diào)度節(jié)點(diǎn)的規(guī)約模塊;
5)所述規(guī)約模塊對(duì)收到的所有計(jì)算結(jié)果進(jìn)行規(guī)約,并將所有新產(chǎn)生的測(cè)試用例組織成測(cè)試任務(wù)傳遞給所述任務(wù)隊(duì)列,將導(dǎo)致程序崩潰的測(cè)試用例保存下來;
6)重復(fù)步驟3)~5),直至所述任務(wù)隊(duì)列為空;然后根據(jù)保存的致程序崩潰的測(cè)試用例確定該目標(biāo)程序存在的漏洞。
進(jìn)一步的,所述計(jì)算節(jié)點(diǎn)通過使用動(dòng)態(tài)污點(diǎn)分析方法獲取輸入數(shù)據(jù)在該目標(biāo)程序中的執(zhí)行路徑,然后將路徑符號(hào)化并根據(jù)執(zhí)行軌跡提取執(zhí)行路徑中的約束條件得到一約束條件集合,然后對(duì)該約束條件集合進(jìn)行求解計(jì)算并生成新的測(cè)試用例。
進(jìn)一步的,所述計(jì)算節(jié)點(diǎn)將該目標(biāo)程序的所有執(zhí)行路徑抽象成一棵執(zhí)行樹,即將該目標(biāo)程序的所有跳轉(zhuǎn)分支作為樹的節(jié)點(diǎn),執(zhí)行樹的每條路徑表示程序的一次執(zhí)行。
進(jìn)一步的,所述計(jì)算節(jié)點(diǎn)根據(jù)該執(zhí)行樹執(zhí)行相應(yīng)的測(cè)試任務(wù),其方法為:設(shè)所述計(jì)算節(jié)點(diǎn)執(zhí)行測(cè)試用例a時(shí),該目標(biāo)程序的執(zhí)行路徑為i,然后由該測(cè)試用例a產(chǎn)生新的測(cè)試用例時(shí),從該測(cè)試用例a的深度d以下的深度開始提取約束條件集合并求解計(jì)算,從當(dāng)前深度以下的分支開始,每次對(duì)一個(gè)分支節(jié)點(diǎn)條件取反其他條件不變,產(chǎn)生新的測(cè)試用例;最終遍歷該目標(biāo)程序的整棵執(zhí)行樹的所有可行路徑;執(zhí)行結(jié)束后,將產(chǎn)生的全部新的測(cè)試用例和導(dǎo)致目標(biāo)程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給所述調(diào)度節(jié)點(diǎn)的規(guī)約模塊。
一種基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng),其特征在于,包括調(diào)度節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn);所述調(diào)度節(jié)點(diǎn)中設(shè)有任務(wù)隊(duì)列、任務(wù)管理和分配模塊和規(guī)約模塊;
所述任務(wù)隊(duì)列,用于存儲(chǔ)未執(zhí)行的測(cè)試任務(wù);
所述任務(wù)管理和分配模塊,用于將所述任務(wù)隊(duì)列中的任務(wù)分配給空閑的計(jì)算節(jié)點(diǎn);
所述計(jì)算節(jié)點(diǎn)執(zhí)行相應(yīng)的測(cè)試任務(wù),執(zhí)行結(jié)束后,將產(chǎn)生的新的測(cè)試用例和導(dǎo)致目標(biāo)程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給所述規(guī)約模塊;
所述規(guī)約模塊對(duì)收到的所有計(jì)算結(jié)果進(jìn)行規(guī)約,并將所有新產(chǎn)生的測(cè)試用例組織成測(cè)試任務(wù)傳遞給所述任務(wù)隊(duì)列,將導(dǎo)致程序崩潰的測(cè)試用例保存下來,用于確定該目標(biāo)程序是否存在的漏洞。
本發(fā)明首先需要外部提供初始任務(wù),存儲(chǔ)到任務(wù)隊(duì)列后,任務(wù)管理和分配模塊對(duì)測(cè)試任務(wù)進(jìn)行管理和調(diào)度,并兼顧節(jié)點(diǎn)控制和管理,任務(wù)會(huì)被分配到漏洞挖掘計(jì)算節(jié)點(diǎn),執(zhí)行結(jié)束后規(guī)約模塊會(huì)對(duì)所有的計(jì)算結(jié)果進(jìn)行規(guī)約,將產(chǎn)生的新的測(cè)試任務(wù)輸入到任務(wù)隊(duì)列,將導(dǎo)致程序崩潰的測(cè)試用例保存下來。
具體來說,本發(fā)明采用的技術(shù)方案如下:
一種基于DCR平臺(tái)的動(dòng)態(tài)漏洞挖掘系統(tǒng),是根據(jù)漏洞挖掘系統(tǒng)模型設(shè)計(jì)實(shí)現(xiàn)的,對(duì)比DCR迭代計(jì)算過程,將動(dòng)態(tài)漏洞挖掘過程分解為成分解、計(jì)算和規(guī)約三個(gè)功能結(jié)構(gòu),對(duì)漏洞挖掘系統(tǒng)進(jìn)行重構(gòu),并根據(jù)漏洞挖掘計(jì)算節(jié)點(diǎn)功能圖對(duì)漏洞挖掘節(jié)點(diǎn)程序模塊進(jìn)行功能設(shè)計(jì)。從功能模塊上,這種基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng)包括初始任務(wù)、任務(wù)隊(duì)列、任務(wù)管理和分配模塊、漏洞挖掘計(jì)算節(jié)點(diǎn)和規(guī)約模塊;所述初始任務(wù)由外部提供,即提供初始測(cè)試用例,同時(shí)明確被測(cè)試的二進(jìn)制程序(即目標(biāo)程序);所述任務(wù)隊(duì)列保存所有還未執(zhí)行的任務(wù)(包括初始任務(wù)中未完成的和所有后續(xù)生成的新的沒有執(zhí)行的任務(wù));所述任務(wù)管理和分配模塊根據(jù)任務(wù)和計(jì)算節(jié)點(diǎn)動(dòng)態(tài)分配管理調(diào)度任務(wù);所述漏洞挖掘計(jì)算節(jié)點(diǎn)根據(jù)測(cè)試任務(wù)進(jìn)行相應(yīng)漏洞挖掘計(jì)算操作并生成新的測(cè)試用例;所述規(guī)約模塊對(duì)所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果進(jìn)行規(guī)約整理。
漏洞挖掘系統(tǒng)模型結(jié)合了漏洞挖掘系統(tǒng)和DCR并行化運(yùn)算的特點(diǎn),依據(jù)DCR并行化計(jì)算的結(jié)構(gòu)特征對(duì)漏洞挖掘系統(tǒng)結(jié)構(gòu)重構(gòu),設(shè)計(jì)符合DCR并行化環(huán)境的模型,由于在并行化的環(huán)境中將漏洞挖掘任務(wù)分派到不同的節(jié)點(diǎn),并不斷生成新的測(cè)試用例,需要根據(jù)路徑動(dòng)態(tài)生成和控制方法管理用例的生成,實(shí)現(xiàn)被測(cè)試程序所有可能路徑的遍歷,且不重復(fù)遍歷。
首先在漏洞挖掘計(jì)算節(jié)點(diǎn)根據(jù)漏洞挖掘系統(tǒng)模型部署安裝漏洞挖掘計(jì)算任務(wù)的程序模塊,然后運(yùn)行基于DCR平臺(tái)的動(dòng)態(tài)漏洞挖掘系統(tǒng),其實(shí)現(xiàn)步驟如下:
1)通過外部輸入提供初始任務(wù),主要指種子測(cè)試用例,將初始任務(wù)放到任務(wù)隊(duì)列中,同時(shí)明確被測(cè)試的二進(jìn)制程序,將二進(jìn)制程序路徑提供給系統(tǒng);
2)基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng)環(huán)境初始化,主要包含計(jì)算節(jié)點(diǎn)連接、管理和測(cè)試等方面;
3)任務(wù)管理和分配模塊對(duì)任務(wù)隊(duì)列中的任務(wù)進(jìn)行管理,統(tǒng)計(jì)連接成功的空閑的計(jì)算節(jié)點(diǎn),將任務(wù)分配給空閑的漏洞挖掘計(jì)算節(jié)點(diǎn),同時(shí)兼顧運(yùn)行并行化運(yùn)算過程中的節(jié)點(diǎn)控制和管理;
4)漏洞挖掘計(jì)算節(jié)點(diǎn)執(zhí)行相應(yīng)的測(cè)試任務(wù),執(zhí)行結(jié)束后,將產(chǎn)生的新的測(cè)試用例和可以導(dǎo)致程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給規(guī)約模塊;
5)規(guī)約模塊統(tǒng)計(jì)所有完成測(cè)試任務(wù)的漏洞挖掘計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果進(jìn)行規(guī)約,將所有的新的測(cè)試用例組織成測(cè)試任務(wù)傳遞給任務(wù)隊(duì)列,將可以導(dǎo)致程序崩潰的測(cè)試用例保存下來;
6)重復(fù)步驟3)直到任務(wù)隊(duì)列為空。
本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于:
(1)將動(dòng)態(tài)漏洞挖掘技術(shù)和DCR并行化運(yùn)算技術(shù)結(jié)合,設(shè)計(jì)實(shí)現(xiàn)基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng)和方法,利用并行化計(jì)算解決漏洞挖掘過程中的效率問題,同時(shí)充分利用現(xiàn)有計(jì)算資源和存儲(chǔ)資源,實(shí)現(xiàn)了整個(gè)測(cè)試過程的并行化和自動(dòng)化。
(2)在設(shè)計(jì)漏洞挖掘計(jì)算模型過程中融合多種動(dòng)態(tài)漏洞挖掘方法,通過結(jié)合使用動(dòng)態(tài)污點(diǎn)分析、符號(hào)執(zhí)行和模糊測(cè)試技術(shù),吸取多種技術(shù)的優(yōu)點(diǎn),增加了生成測(cè)試用例的有效性。同時(shí),在漏洞挖掘過程中增加路徑動(dòng)態(tài)生成和控制技術(shù),能夠有效的遍歷程序的所有可能路徑并有效避免重復(fù)測(cè)試用例的生成。
附圖說明
圖1為本發(fā)明的漏洞挖掘系統(tǒng)模型設(shè)計(jì)圖;
圖2為本發(fā)明的漏洞挖掘計(jì)算節(jié)點(diǎn)功能圖;
圖3為本發(fā)明的路徑動(dòng)態(tài)生成和控制方法示例圖。
具體實(shí)施方式
下面結(jié)合說明書附圖,對(duì)本發(fā)明的具體實(shí)施方式做詳細(xì)描述。
將動(dòng)態(tài)漏洞挖掘技術(shù)與DCR并行化運(yùn)算技術(shù)結(jié)合,首先需要分析動(dòng)態(tài)漏洞挖掘的特點(diǎn),然后提取可以并行化的功能模塊,即設(shè)計(jì)漏洞挖掘計(jì)算模型,抽取一次測(cè)試執(zhí)行過程。動(dòng)態(tài)漏洞挖掘系統(tǒng)是結(jié)合動(dòng)態(tài)污點(diǎn)分析、符號(hào)執(zhí)行和模糊測(cè)試三種方法實(shí)現(xiàn),通過使用動(dòng)態(tài)污點(diǎn)分析獲取輸入數(shù)據(jù)在被測(cè)試程序中的執(zhí)行路徑,然后利用符號(hào)執(zhí)行技術(shù)將路徑符號(hào)化并提取執(zhí)行路徑中的約束條件,對(duì)約束條件集合進(jìn)行求解計(jì)算并生成新的測(cè)試用例。新生成的測(cè)試用例重新作為輸入傳遞給整個(gè)動(dòng)態(tài)漏洞挖掘系統(tǒng)。動(dòng)態(tài)漏洞挖掘系統(tǒng)在動(dòng)態(tài)執(zhí)行二進(jìn)制程序的過程中不斷探測(cè)程序新的路徑,不斷生成新的測(cè)試用例并驗(yàn)證。DCR并行化運(yùn)算技術(shù)將計(jì)算模型分為分解、計(jì)算和規(guī)約三部分,結(jié)合漏洞挖掘系統(tǒng)的實(shí)現(xiàn)過程,本發(fā)明將DCR和漏洞挖掘系統(tǒng)結(jié)合,設(shè)計(jì)動(dòng)態(tài)漏洞挖掘計(jì)算模型實(shí)現(xiàn)分為分解和計(jì)算功能,然后在規(guī)約模塊通過規(guī)約計(jì)算節(jié)點(diǎn)的輸出結(jié)果實(shí)現(xiàn)整個(gè)迭代過程。
圖1是本發(fā)明的漏洞挖掘系統(tǒng)模型設(shè)計(jì)圖。漏洞挖掘系統(tǒng)模型結(jié)合了漏洞挖掘系統(tǒng)和DCR并行化運(yùn)算的特點(diǎn),依據(jù)DCR并行化計(jì)算的結(jié)構(gòu)特征對(duì)漏洞挖掘系統(tǒng)結(jié)構(gòu)重構(gòu),設(shè)計(jì)符合DCR并行化環(huán)境的模型。DCR并行化計(jì)算中主要包括調(diào)度節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn),調(diào)度節(jié)點(diǎn)完成任務(wù)分解和分派,計(jì)算節(jié)點(diǎn)完成子空間計(jì)算。結(jié)合DCR的迭代計(jì)算過程,可以將動(dòng)態(tài)漏洞挖掘系統(tǒng)重構(gòu)成任務(wù)分配管理、漏洞挖掘計(jì)算和結(jié)果規(guī)約三個(gè)功能。從模塊構(gòu)成上,基于DCR平臺(tái)的漏洞挖掘系統(tǒng)主要包括初始任務(wù)、任務(wù)隊(duì)列、任務(wù)管理和分配模塊、漏洞挖掘計(jì)算節(jié)點(diǎn)和規(guī)約模塊。其中,初始任務(wù)由外部提供,即提供初始測(cè)試用例,同時(shí)明確被測(cè)試的二進(jìn)制程序(即目標(biāo)程序);任務(wù)隊(duì)列保存所有生成的還未執(zhí)行的任務(wù);任務(wù)管理和分配模塊根據(jù)任務(wù)和連接成功的空閑計(jì)算節(jié)點(diǎn)列表動(dòng)態(tài)管理調(diào)度任務(wù);漏洞挖掘計(jì)算節(jié)點(diǎn)則根據(jù)測(cè)試任務(wù)進(jìn)行相應(yīng)漏洞挖掘計(jì)算操作,生成新的測(cè)試用例;規(guī)約模塊對(duì)所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果進(jìn)行規(guī)約整理,包括將產(chǎn)生的新的測(cè)試用例生成測(cè)試任務(wù)輸入到任務(wù)隊(duì)列中,以及將產(chǎn)生的導(dǎo)致被測(cè)試程序崩潰的測(cè)試用例保存下來。
整個(gè)系統(tǒng)的實(shí)現(xiàn)步驟如下:
1)通過外部輸入提供初始任務(wù),主要指種子測(cè)試用例,將初始任務(wù)放到任務(wù)隊(duì)列中,同時(shí)明確被測(cè)試的二進(jìn)制程序,將二進(jìn)制程序路徑提供給系統(tǒng);
2)基于DCR的動(dòng)態(tài)漏洞挖掘系統(tǒng)環(huán)境初始化,主要包含計(jì)算節(jié)點(diǎn)連接、管理和測(cè)試等方面;
3)任務(wù)管理和分配模塊對(duì)任務(wù)隊(duì)列中的任務(wù)進(jìn)行管理,統(tǒng)計(jì)連接成功的空閑的計(jì)算節(jié)點(diǎn),將任務(wù)分配給漏洞挖掘計(jì)算節(jié)點(diǎn),同時(shí)兼顧運(yùn)行并行化運(yùn)算過程中的節(jié)點(diǎn)控制和管理;
4)漏洞挖掘計(jì)算節(jié)點(diǎn)執(zhí)行相應(yīng)的測(cè)試任務(wù),執(zhí)行結(jié)束后,將產(chǎn)生的新的測(cè)試用例和可以導(dǎo)致程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給規(guī)約模塊;
5)規(guī)約模塊統(tǒng)計(jì)所有完成測(cè)試任務(wù)的漏洞挖掘計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果并進(jìn)行規(guī)約操作,將所有的新的測(cè)試用例組織成測(cè)試任務(wù)傳遞給任務(wù)隊(duì)列,將可以導(dǎo)致程序崩潰的測(cè)試用例保存下來;
6)重復(fù)步驟3)直到任務(wù)隊(duì)列為空。
漏洞挖掘計(jì)算節(jié)點(diǎn)是實(shí)現(xiàn)漏洞挖掘測(cè)試的最主要部分,它結(jié)合了動(dòng)態(tài)污點(diǎn)分析、符號(hào)執(zhí)行和模糊測(cè)試技術(shù)。首先將測(cè)試用例標(biāo)記成污點(diǎn)數(shù)據(jù),使用動(dòng)態(tài)污點(diǎn)分析技術(shù)記錄污點(diǎn)數(shù)據(jù)在程序中的執(zhí)行軌跡;然后根據(jù)執(zhí)行軌跡提取路徑約束條件,通過符號(hào)執(zhí)行技術(shù),進(jìn)行約束求解,計(jì)算并生成新的用于測(cè)試程序其他路徑的測(cè)試用例,最終這些生成的測(cè)試用例都需要使用模糊測(cè)試技術(shù),重新作為輸入傳遞給被測(cè)試二進(jìn)制程序進(jìn)行驗(yàn)證,如果導(dǎo)致程序崩潰,則需要保存下來用于進(jìn)一步分析。漏洞挖掘節(jié)點(diǎn)執(zhí)行的是一次測(cè)試過程,即污點(diǎn)分析、符號(hào)執(zhí)行生成新的測(cè)試用例,然后進(jìn)行驗(yàn)證,整個(gè)漏洞挖掘系統(tǒng)的迭代過程融入到DCR并行化平臺(tái)中,在一次測(cè)試結(jié)束后通過規(guī)約模塊將輸出結(jié)果進(jìn)行規(guī)約,將新的測(cè)試用例形成測(cè)試任務(wù)儲(chǔ)存到任務(wù)隊(duì)列,將導(dǎo)致程序崩潰的測(cè)試用例單獨(dú)保存下來用于進(jìn)一步分析。
由于基于DCR的漏洞挖掘系統(tǒng)是基于并行化平臺(tái)設(shè)計(jì)的,各模塊部署在不同的計(jì)算機(jī)節(jié)點(diǎn)上,各模塊之間的交互也需要通過文件傳遞信息。本發(fā)明的漏洞挖掘計(jì)算節(jié)點(diǎn)功能圖如圖2所示,可以分成三部分:
1)輸入文件
設(shè)計(jì)輸入文件格式,包含測(cè)試用例集合及選項(xiàng)參數(shù)。選項(xiàng)參數(shù)的設(shè)計(jì)是為了方便將整個(gè)漏洞挖掘計(jì)算模型集成到并行化計(jì)算系統(tǒng)中。選項(xiàng)參數(shù)主要包括針對(duì)二進(jìn)制程序的初始測(cè)試深度、測(cè)試任務(wù)標(biāo)識(shí)符、漏洞挖掘技術(shù)節(jié)點(diǎn)執(zhí)行測(cè)試任務(wù)格式、臨時(shí)文件保存目錄等。將輸入文件和被測(cè)試二進(jìn)制程序輸入給漏洞挖掘計(jì)算節(jié)點(diǎn)完成計(jì)算操作,同時(shí)這些選項(xiàng)參數(shù)作為漏洞挖掘計(jì)算節(jié)點(diǎn)中運(yùn)行漏洞挖掘程序的參數(shù)。
2)漏洞挖掘計(jì)算節(jié)點(diǎn)
漏洞挖掘計(jì)算節(jié)點(diǎn)主要執(zhí)行漏洞挖掘過程,結(jié)合動(dòng)態(tài)污點(diǎn)分析、符號(hào)執(zhí)行和模糊測(cè)試技術(shù),提取出一次計(jì)算模型,部署到節(jié)點(diǎn),然后通過整個(gè)計(jì)算的不斷迭代完成整個(gè)測(cè)試。首先利用動(dòng)態(tài)污點(diǎn)分析技術(shù)獲得程序動(dòng)態(tài)執(zhí)行軌跡,然后利用符號(hào)執(zhí)行技術(shù)提取約束條件集合求解計(jì)算生成新的測(cè)試用例,將這些測(cè)試用例保存,最后輸入給被測(cè)試程序進(jìn)行驗(yàn)證,將可以導(dǎo)致程序崩潰的測(cè)試用例保存用于進(jìn)一步分析。
3)輸出文件
在設(shè)計(jì)漏洞挖掘計(jì)算模式時(shí),需要考慮整個(gè)計(jì)算過程的可迭代性,因此輸入文件格式需要與輸出文件格式一致,包括新生成的測(cè)試用例集合和選項(xiàng)參數(shù)。從輸出文件中可以提取測(cè)試用例及此測(cè)試用例對(duì)應(yīng)的選項(xiàng)參數(shù),經(jīng)過規(guī)約模塊的規(guī)約功能,可以組織成相同結(jié)構(gòu)的輸入文件作為測(cè)試任務(wù),傳遞給漏洞挖掘計(jì)算節(jié)點(diǎn)。
在整個(gè)漏洞測(cè)試中,由于將一次測(cè)試過程分解出來,通過不斷迭代實(shí)現(xiàn)整個(gè)測(cè)試。在這個(gè)過程中,需要引入路徑動(dòng)態(tài)生成和控制方法,保證能夠遍歷程序跳轉(zhuǎn)樹中所有可達(dá)分支,同時(shí)不產(chǎn)生重復(fù)的測(cè)試用例。
圖3為本發(fā)明路徑動(dòng)態(tài)生成和控制方法的示例圖。本發(fā)明把目標(biāo)程序的所有執(zhí)行路徑抽象成一棵樹,即將所有跳轉(zhuǎn)分支作為樹的節(jié)點(diǎn),樹的每條路徑表示程序的一次執(zhí)行,通過改變輸入數(shù)據(jù)達(dá)到控制分支節(jié)點(diǎn)進(jìn)而控制執(zhí)行路徑的目的。本發(fā)明的路徑動(dòng)態(tài)生成和控制方法主要是在整個(gè)測(cè)試過程中通過改變輸入遍歷程序的所有可能路徑,即遍歷程序的整個(gè)程序執(zhí)行樹且不重復(fù)遍歷。具體實(shí)現(xiàn)方法如下:假設(shè)輸入初始用例時(shí)(初始深度為1),程序的執(zhí)行路徑是1-3-7。在由此用例產(chǎn)生新的測(cè)試用例時(shí),從當(dāng)前深度以下的深度開始提取約束條件集合并求解計(jì)算,從當(dāng)前深度以下的分支開始,每次對(duì)一個(gè)分支節(jié)點(diǎn)條件取反其他條件不變,最終獲得遍歷1-2-5(深度為2)和1-3-6(深度為3)兩條路徑的測(cè)試用例。同理,將路徑1-2-5(初始深度為2)分支節(jié)點(diǎn)條件取反后得到路徑1-2-4,初始深度為3。最終遍歷程序的整棵執(zhí)行樹的所有可行路徑,同時(shí)不產(chǎn)生重復(fù)用例。因此在分解出的一次漏洞測(cè)試過程中,只能從當(dāng)前深度往下開始探索并查找新的測(cè)試路徑,并保存每個(gè)測(cè)試用例的測(cè)試深度,有效的防止重復(fù)路徑的探測(cè)。路徑動(dòng)態(tài)生成和控制方法主要是將思路引入到整個(gè)測(cè)試過程中,通過記錄初始測(cè)試深度和對(duì)分支節(jié)點(diǎn)條件取反,逐步遍歷程序的所有可能路徑。為實(shí)現(xiàn)整個(gè)過程,在設(shè)計(jì)漏洞挖掘計(jì)算節(jié)點(diǎn)功能圖的時(shí)候,在輸入文件中增加了初始測(cè)試深度選項(xiàng),即每一個(gè)測(cè)試用例都要對(duì)于一個(gè)測(cè)試深度,然后在漏洞挖掘程序中,在當(dāng)前測(cè)試深度之后才通過取反操作生成新的測(cè)試用例。最終使整個(gè)迭代過程不會(huì)生成遍歷相同路徑的測(cè)試用例。
本發(fā)明未詳細(xì)闡述部分屬于本領(lǐng)域技術(shù)人員的公知技術(shù)。
以上所述,僅為本發(fā)明中的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi),可理解想到的變換或替換,都應(yīng)涵蓋在本發(fā)明的包含范圍之內(nèi),因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。