1.一種基于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è)試用例保存下來(lái);
6)重復(fù)步驟3)~5),直至所述任務(wù)隊(duì)列為空;然后根據(jù)保存的致程序崩潰的測(cè)試用例確定該目標(biāo)程序存在的漏洞。
2.如權(quán)利要求1所述的方法,其特征在于,所述計(jì)算節(jié)點(diǎn)通過(guò)使用動(dòng)態(tài)污點(diǎn)分析方法獲取輸入數(shù)據(jù)在該目標(biāo)程序中的執(zhí)行路徑,然后將路徑符號(hào)化并根據(jù)執(zhí)行軌跡提取執(zhí)行路徑中的約束條件得到一約束條件集合,然后對(duì)該約束條件集合進(jìn)行求解計(jì)算并生成新的測(cè)試用例。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述計(jì)算節(jié)點(diǎn)將該目標(biāo)程序的所有執(zhí)行路徑抽象成一棵執(zhí)行樹(shù),即將該目標(biāo)程序的所有跳轉(zhuǎn)分支作為樹(shù)的節(jié)點(diǎn),執(zhí)行樹(shù)的每條路徑表示程序的一次執(zhí)行。
4.如權(quán)利要求3所述的方法,其特征在于,所述計(jì)算節(jié)點(diǎn)根據(jù)該執(zhí)行樹(shù)執(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以下的深度開(kāi)始提取約束條件集合并求解計(jì)算,從當(dāng)前深度以下的分支開(kāi)始,每次對(duì)一個(gè)分支節(jié)點(diǎn)條件取反其他條件不變,產(chǎn)生新的測(cè)試用例;最終遍歷該目標(biāo)程序的整棵執(zhí)行樹(shù)的所有可行路徑;執(zhí)行結(jié)束后,將產(chǎn)生的全部新的測(cè)試用例和導(dǎo)致目標(biāo)程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給所述調(diào)度節(jié)點(diǎn)的規(guī)約模塊。
5.一種基于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è)試用例保存下來(lái),用于確定該目標(biāo)程序是否存在的漏洞。
6.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述計(jì)算節(jié)點(diǎn)通過(guò)使用動(dòng)態(tài)污點(diǎn)分析方法獲取輸入數(shù)據(jù)在該目標(biāo)程序中的執(zhí)行路徑,然后將路徑符號(hào)化并根據(jù)執(zhí)行軌跡提取執(zhí)行路徑中的約束條件得到一約束條件集合,然后對(duì)該約束條件集合進(jìn)行求解計(jì)算并生成新的測(cè)試用例。
7.如權(quán)利要求5或6所述的系統(tǒng),其特征在于,所述計(jì)算節(jié)點(diǎn)將該目標(biāo)程序的所有執(zhí)行路徑抽象成一棵執(zhí)行樹(shù),即將該目標(biāo)程序的所有跳轉(zhuǎn)分支作為樹(shù)的節(jié)點(diǎn),執(zhí)行樹(shù)的每條路徑表示程序的一次執(zhí)行。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述計(jì)算節(jié)點(diǎn)根據(jù)該執(zhí)行樹(shù)執(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以下的深度開(kāi)始提取約束條件集合并求解計(jì)算,從當(dāng)前深度以下的分支開(kāi)始,每次對(duì)一個(gè)分支節(jié)點(diǎn)條件取反其他條件不變,產(chǎn)生新的測(cè)試用例;最終遍歷該目標(biāo)程序的整棵執(zhí)行樹(shù)的所有可行路徑;執(zhí)行結(jié)束后,將產(chǎn)生的全部新的測(cè)試用例和導(dǎo)致目標(biāo)程序崩潰的測(cè)試用例作為計(jì)算結(jié)果傳遞給所述調(diào)度節(jié)點(diǎn)的規(guī)約模塊。