張瀚方 周安民 賈鵬 劉露平 劉亮
摘 要:為了解決當(dāng)前模糊測(cè)試技術(shù)中變異存在一定的盲目性以及變異生成的樣本大多經(jīng)過相同的高頻路徑的問題,提出并實(shí)現(xiàn)了一種基于輕量級(jí)程序分析技術(shù)的二進(jìn)制程序模糊測(cè)試方法。首先對(duì)目標(biāo)二進(jìn)制程序進(jìn)行靜態(tài)分析來篩選在模糊測(cè)試過程中阻礙樣本文件深入程序內(nèi)部的比較指令;隨后對(duì)目標(biāo)文件進(jìn)行插樁來獲取比較指令中操作數(shù)的具體值,并根據(jù)該具體值為比較指令建立實(shí)時(shí)的比較進(jìn)度信息,通過比較進(jìn)度衡量樣本的重要程度;然后基于模糊測(cè)試過程中實(shí)時(shí)的路徑覆蓋信息為經(jīng)過稀有路徑的樣本增加其被挑選進(jìn)行變異的概率;最后根據(jù)比較進(jìn)度信息并結(jié)合啟發(fā)式策略有針對(duì)性地對(duì)樣本文件進(jìn)行變異,通過變異引導(dǎo)提高模糊測(cè)試中生成能夠繞過程序規(guī)約檢查的有效樣本的效率。實(shí)驗(yàn)結(jié)果表明, 所提方法發(fā)現(xiàn)crash及發(fā)現(xiàn)新路徑的能力均優(yōu)于模糊測(cè)試工具AFLDyninst。
關(guān)鍵詞:導(dǎo)向性模糊測(cè)試;反饋式模糊測(cè)試;二進(jìn)制模糊測(cè)試;程序插樁;漏洞挖掘
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)志碼:A
Abstract: In order to address the problem that the mutation in the current fuzzing has certain blindness and the samples generated by the mutation mostly pass through the same highfrequency paths, a binary fuzzing method based on lightweight program analysis technology was proposed and implemented. Firstly, the target binary program was statically analyzed to filter out the comparison instructions which hinder the sample files from penetrating deeply into the program during the fuzzing process. Secondly, the target binary program was instrumented to obtain the specific values of the operands in the comparison instructions, according to which the realtime comparison progress information for each comparison instruction was established, and the importance of each sample was measured according to the comparison progress information. Thirdly, the realtime path coverage information in the fuzzing process was used to increase the probability that the samples passing through rare paths were selected to be mutated. Finally, the input files were directed and mutated by the comparison progress information combining with a heuristic strategy to improve the efficiency of generating valid inputs that could bypass the comparison checks in the program. The experimental results show that the proposed method is better than the current binary fuzzing tool AFLDyninst both in finding crashes and discovering new paths.
英文關(guān)鍵詞Key words: directed fuzzing; feedback fuzzing; binary fuzzing; program instrumentation; vulnerability mining
0 引言
隨著計(jì)算機(jī)的廣泛使用和網(wǎng)絡(luò)技術(shù)的飛快發(fā)展,計(jì)算機(jī)軟件早已融入到人們的日常生活中,在金融、交通、醫(yī)療衛(wèi)生和國(guó)防科技等領(lǐng)域中發(fā)揮著重要作用。軟件數(shù)量日益增加,與之俱來的軟件安全問題也越發(fā)突出。軟件中存在的漏洞為攻擊者提供了可乘之機(jī),近年來攻擊者利用軟件漏洞實(shí)施攻擊的事件屢見不鮮,2017年wannacry勒索病毒利用永恒之藍(lán)漏洞進(jìn)行傳播,造成巨大經(jīng)濟(jì)損失[1];2018年黑客利用思科高危漏洞攻擊關(guān)鍵基礎(chǔ)設(shè)施,導(dǎo)致全球20萬臺(tái)交換機(jī)受到影響[2]。
由于軟件功能的增加,軟件的代碼量越來越大,代碼結(jié)構(gòu)越來越復(fù)雜,復(fù)雜的工作邏輯與數(shù)據(jù)處理過程導(dǎo)致軟件在運(yùn)行過程中極易產(chǎn)生bug,嚴(yán)重的則會(huì)引發(fā)安全漏洞。高效、自動(dòng)化的安全測(cè)試?yán)碚摵头椒▽?duì)軟件測(cè)試和安全檢測(cè)具有重要意義,也是計(jì)算機(jī)學(xué)科和網(wǎng)絡(luò)安全學(xué)科的一個(gè)重要研究方向。模糊測(cè)試是一種有效的軟件安全性檢測(cè)方法,其基本思想是通過不斷構(gòu)造不規(guī)則數(shù)據(jù)作為應(yīng)用程序的輸入,執(zhí)行并監(jiān)視應(yīng)用程序在處理輸入數(shù)據(jù)時(shí)是否發(fā)生崩潰等異常來發(fā)現(xiàn)應(yīng)用程序潛在的安全問題[3]。當(dāng)前,模糊測(cè)試技術(shù)已被谷歌[4]、微軟[5]等軟件公司用于軟件安全的測(cè)試。針對(duì)計(jì)算機(jī)軟件的模糊測(cè)試可以根據(jù)能否獲得應(yīng)用程序的源碼而分為針對(duì)開源軟件的源碼級(jí)別模糊測(cè)試和針對(duì)閉源軟件的二進(jìn)制級(jí)別模糊測(cè)試。由于大部分的軟件廠商出于知識(shí)產(chǎn)權(quán)保護(hù)和商業(yè)利益的考慮并不會(huì)開放其軟件源代碼,在針對(duì)二進(jìn)制程序的測(cè)試中可能存在輸入數(shù)據(jù)格式未知等情況,因此相比于源碼級(jí)別的模糊測(cè)試,二進(jìn)制級(jí)別的模糊測(cè)試難度更大,面向二進(jìn)制程序的軟件漏洞挖掘技術(shù)也是當(dāng)今研究的一個(gè)熱點(diǎn)[6]。
當(dāng)前在模糊測(cè)試領(lǐng)域,AFL(American Fuzzy Loop)[7]是最具有代表性的工具之一,它使用遺傳算法,并將代碼覆蓋信息作為反饋用于篩選子代。相對(duì)于傳統(tǒng)的模糊測(cè)試方法,AFL提高了模糊測(cè)試的效率;但是該工具仍存在一定的局限性,如變異生成的輸入文件大多會(huì)運(yùn)行到相同的高頻路徑[8-9],在面向二進(jìn)制程序的模糊測(cè)試中難以產(chǎn)生能夠通過程序規(guī)約檢查的有效用例,變異存在一定的盲目性,導(dǎo)致難以發(fā)現(xiàn)存在于程序深處的bug等。
針對(duì)于上述問題,本文提出了一種面向二進(jìn)制程序的導(dǎo)向性模糊測(cè)試方法,該方法在AFL原有遺傳算法的基礎(chǔ)上提高經(jīng)過稀有路徑的種子文件被選中的概率,考慮到程序規(guī)約檢查中的magic值校驗(yàn)檢查,該方法通過二進(jìn)制插樁技術(shù)并結(jié)合比較進(jìn)度信息來指導(dǎo)樣本變異以高效地生成能夠通過規(guī)約檢查從而觸發(fā)程序新路徑的變異樣本,提高模糊測(cè)試的效率。
1 研究現(xiàn)狀
在軟件安全檢測(cè)領(lǐng)域中,常用的漏洞挖掘方法有靜態(tài)分析、污點(diǎn)分析、符號(hào)執(zhí)行和模糊測(cè)試等方法。其中,靜態(tài)分析誤報(bào)率較高,隨著應(yīng)用程序功能的增多,代碼復(fù)雜度也日益增加,靜態(tài)分析方法越發(fā)難以發(fā)現(xiàn)應(yīng)用程序中存在的漏洞; 污點(diǎn)分析方法的主要問題是效率較低,需要消耗大量的計(jì)算資源; 符號(hào)執(zhí)行方法面臨路徑爆炸和約束求解困難等問題[10]; 相對(duì)于這些技術(shù),模糊測(cè)試自動(dòng)化程度高、原理簡(jiǎn)單并且誤報(bào)率極低,因此受到了越來越多的關(guān)注[11-12]。
近幾年來,針對(duì)于模糊測(cè)試的研究大多數(shù)是結(jié)合諸如符號(hào)執(zhí)行[13-14]、污點(diǎn)分析[15]等方法以幫助模糊測(cè)試生成有效測(cè)試用例,通過結(jié)合其他方法的優(yōu)勢(shì)提高模糊測(cè)試的檢測(cè)效果。
2 問題分析
在如下的應(yīng)用程序中包含了magic值字段檢查以及嵌套的if條件檢查,輸入文件只有在逐個(gè)繞過這些檢查的情況下才能觸發(fā)程序中所存在的bug,對(duì)于這樣的應(yīng)用程序AFL難以生成能夠成功觸發(fā)bug的樣本文件。在對(duì)該代碼進(jìn)行長(zhǎng)達(dá) 24h 的測(cè)試中,AFL并沒有產(chǎn)生任何能夠?qū)е鲁绦虬l(fā)生崩潰的測(cè)試用例。而在實(shí)際應(yīng)用中,程序往往會(huì)通過大量的magic值校驗(yàn)以對(duì)輸入文件進(jìn)行格式檢查。
在挑選樣本進(jìn)行變異時(shí),通過Check 2檢查的樣本文件相對(duì)于只繞過Check 1檢查的樣本文件更容易觸發(fā)程序中所存在的bug,樣本文件只有在繞過Check 1的基礎(chǔ)上才可能通過Check 2,因此通向Check 2的路徑相比通向Check 1的路徑更稀有。AFL會(huì)為每條路徑挑選文件體積小且執(zhí)行時(shí)間快的文件并將其標(biāo)記為favored,在挑選文件進(jìn)行變異時(shí),被標(biāo)記為favored的文件被選中的概率遠(yuǎn)遠(yuǎn)大于其他非favored的文件[21]。AFL的種子隊(duì)列只增不減,在所給程序中,每條路徑都可能存在其對(duì)應(yīng)的文件體積最小并且執(zhí)行時(shí)間最少的favored樣本,因此在樣本執(zhí)行過的路徑中可能會(huì)有多個(gè)favored文件,AFL沒有考慮稀有路徑使得這些樣本在變異時(shí)均會(huì)被選擇變異,但是,由于通過了Check 2的樣本更容易觸發(fā)程序中所存在的bug,增加通過Check 2校驗(yàn)的樣本被選中的概率顯然會(huì)增加樣本觸發(fā)bug的概率。
AFL使用代碼覆蓋信息作為反饋以篩選保留子代,在變異過程中生成的變異文件如果能夠覆蓋新的代碼將會(huì)被保留。對(duì)于magic值校驗(yàn)的情況,如Check 2需要將變異樣本的前5個(gè)字節(jié)設(shè)置為“MAGIC”字符串才能通過檢查,即使AFL在變異過程中已經(jīng)將變異樣本的前5個(gè)字節(jié)設(shè)置為“MAGIX”,由于最后一個(gè)字節(jié)不匹配將導(dǎo)致校驗(yàn)失敗,并沒有觸發(fā)新的代碼,AFL在這樣的情況下會(huì)舍棄該變異樣本。AFL舍棄掉部分字節(jié)匹配的樣本意味著之前達(dá)到部分字節(jié)匹配的變異工作對(duì)生成通過校驗(yàn)的樣本毫無幫助,然而在匹配到部分字節(jié)的樣本基礎(chǔ)上進(jìn)行變異,相對(duì)于在沒有匹配到任何一個(gè)字節(jié)的樣本基礎(chǔ)上進(jìn)行變異更容易通過校驗(yàn)。
本文考慮從兩個(gè)角度解決上述在模糊測(cè)試中所面臨的難題。首先在調(diào)度策略方面,將在原有AFL的基礎(chǔ)上進(jìn)一步增大經(jīng)過稀有路徑的樣本文件被挑選進(jìn)行變異以產(chǎn)生子代樣本文件的概率。另外,在變異時(shí)將結(jié)合一定的啟發(fā)式策略進(jìn)行引導(dǎo)并保留具有高比較進(jìn)度信息的樣本以供進(jìn)一步的變異。
3 導(dǎo)向性模糊測(cè)試方法
為了提高面向二進(jìn)制程序的模糊測(cè)試的效率,本文提出了一種面向二進(jìn)制程序的導(dǎo)向性模糊測(cè)試方法。其整體思路如圖1所示。與傳統(tǒng)AFL框架相比,該方法增加的策略有以下幾個(gè)方面:
1)對(duì)目標(biāo)二進(jìn)制文件進(jìn)行分析,提取其中含有的關(guān)鍵比較指令信息,并根據(jù)得到的指令信息有針對(duì)性地對(duì)目標(biāo)二進(jìn)制文件進(jìn)行插樁以在模糊測(cè)試過程中獲取比較進(jìn)度信息和比較指令中操作數(shù)的具體值;
2)在模糊測(cè)試過程中,在選擇種子文件進(jìn)行變異時(shí)優(yōu)先考慮經(jīng)過稀有路徑的樣本文件;
3)在模糊測(cè)試過程中,在代碼覆蓋情況沒有發(fā)生改變的條件下優(yōu)先保留比較進(jìn)度較高的樣本文件,一旦變異文件觸發(fā)或提高了比較進(jìn)度信息將保留該變異文件以供進(jìn)一步的變異,并且將使用比較進(jìn)度得到提高的比較指令中操作數(shù)的值對(duì)當(dāng)前樣本變異位置前后特定數(shù)量的字節(jié)進(jìn)行變異。
3.1 關(guān)鍵指令與比較進(jìn)度
大部分的應(yīng)用程序在執(zhí)行初期的規(guī)約檢查中往往會(huì)通過比較指令對(duì)輸入文件進(jìn)行格式檢查,可能包括大量magic值的檢查等校驗(yàn),其中比較指令主要是指如cmp、strncmp等對(duì)操作數(shù)進(jìn)行比較的指令。該類指令的執(zhí)行結(jié)果將會(huì)影響程序運(yùn)行的路徑,從而影響后續(xù)的代碼覆蓋情況,因此本方法主要關(guān)注比較指令。應(yīng)用程序中通常包含大量的比較指令,需要對(duì)其進(jìn)行合理的篩選,由于本文目標(biāo)是解決magic值校驗(yàn)的問題,所以在對(duì)比較指令進(jìn)行過濾篩選時(shí)將重點(diǎn)關(guān)注操作數(shù)包含有立即值的比較指令。
在對(duì)比較指令篩選后,需要根據(jù)其地址信息有針對(duì)性地對(duì)目標(biāo)二進(jìn)制文件進(jìn)行插樁,從而獲取比較指令中操作數(shù)的具體值并根據(jù)該具體值建立對(duì)應(yīng)的比較指令的比較進(jìn)度信息。每條比較指令的進(jìn)度信息為該比較指令中兩個(gè)操作數(shù)中所匹配的字節(jié)的數(shù)目。如圖2所示的示例中,magic值為“ELF+”,如果兩個(gè)操作數(shù)的值完全相同則將該比較指令的比較進(jìn)度設(shè)為0xFF,當(dāng)操作數(shù)的值為“EXFO”時(shí),此時(shí)兩個(gè)操作數(shù)中僅第1個(gè)字節(jié)和第3個(gè)字節(jié)相同,此時(shí)比較進(jìn)度將被設(shè)為0x2。
該比較進(jìn)度信息將會(huì)作為后續(xù)挑選樣本的一個(gè)重要參考信息。
3.2 種子文件選擇
為了在模糊測(cè)試過程中能夠優(yōu)先選擇經(jīng)過稀有路徑的樣本進(jìn)行變異,本文方法增加了經(jīng)過稀有路徑的樣本文件被選中的概率。由于稀有路徑需要根據(jù)程序在模糊測(cè)試過程中實(shí)時(shí)的測(cè)試情況才能確定,因此本文基于模糊測(cè)試過程中各樣本的路徑覆蓋信息實(shí)時(shí)計(jì)算挑選稀有路徑,通過實(shí)時(shí)的路徑信息為每個(gè)種子文件計(jì)算能量,能量越高的種子文件被選中的概率越大。該方法以路徑被樣本隊(duì)列中的樣本所執(zhí)行的累計(jì)次數(shù)判斷路徑是否稀有,考慮到在模糊測(cè)試過程中樣本執(zhí)行代碼片段越多則越可能觸發(fā)新路徑,因此在計(jì)算樣本的能量時(shí)將會(huì)計(jì)算各個(gè)分支的執(zhí)行情況從整體上來為種子文件分配能量。
首先記錄各分支路徑被種子隊(duì)列中的樣本文件所執(zhí)行的次數(shù),每個(gè)分支被執(zhí)行的次數(shù)等于各樣本文件所執(zhí)行該分支的次數(shù)的總和:
hitstimebranch=∑input∈queuehits(input,branch)(1)
其中queue屬于當(dāng)前的樣本隊(duì)列。根據(jù)分支執(zhí)行次數(shù)的總和可以判斷出哪些路徑為稀有路徑,為了讓模糊測(cè)試合理使用資源探索新路徑,通過為經(jīng)過稀有路徑的種子文件分配更多能量使得其被選中進(jìn)行變異的概率增大,能量計(jì)算公式如下:
E(input)=∑branch∈Bhits(input,branch)hitstimebranch(2)
其中:hitstimebranch是當(dāng)前branch路徑被樣本隊(duì)列所執(zhí)行的累計(jì)次數(shù)總和,而branch是當(dāng)前樣本文件所執(zhí)行到的任一分支,hits(input,branch)為當(dāng)前該樣本在執(zhí)行過程中執(zhí)行branch分支的次數(shù),B為當(dāng)前執(zhí)行到的所有程序路徑分支。如果路徑被執(zhí)行次數(shù)較多,則該路徑為高頻路徑,其獲得的能量比重減小。 一個(gè)樣本的能量比重為該樣本所執(zhí)行到的所有分支能量的總和。
3.3 變異引導(dǎo)
為了引導(dǎo)樣本文件進(jìn)行有效變異以產(chǎn)生能夠通過比較檢查指令的有效子代樣本文件,本文在AFL的基礎(chǔ)上進(jìn)行了3個(gè)方面的改進(jìn):首先是保留比較進(jìn)度有所增長(zhǎng)的樣本,其次是根據(jù)啟發(fā)式規(guī)則對(duì)樣本的特定位置進(jìn)行變異,最后是以比較指令中出現(xiàn)的立即數(shù)為取值范圍對(duì)樣本進(jìn)行變異。
在所給程序中,生成了繞過Check 1的樣本后,在對(duì)樣本文件進(jìn)行進(jìn)一步變異以生成通過Check 2校驗(yàn)的樣本時(shí),AFL會(huì)根據(jù)其變異規(guī)則對(duì)樣本文件進(jìn)行比特翻轉(zhuǎn)、算術(shù)操作等,由于AFL將覆蓋新代碼作為保留子代的條件,即使變異樣本已經(jīng)部分匹配到“MAGIC”值,代碼覆蓋情況并沒有改變,變異文件仍然會(huì)被舍棄,因此要求變異樣本文件的前5個(gè)字節(jié)必須完全匹配“MAGIC”才能被保留,在這樣的條件下,AFL要生成能夠通過Check 2的樣本最多需要28×5次變異。這樣嚴(yán)苛的條件導(dǎo)致AFL很難生成能夠成功通過Check 2的樣本。為了降低難度,本文通過引入比較進(jìn)度信息,在樣本變異過程中匹配到magic值校驗(yàn)中的任一字節(jié),即觸發(fā)了比較進(jìn)度后,將保留該變異文件進(jìn)行進(jìn)一步的變異,在進(jìn)一步的變異中,將保留具有高比較進(jìn)度信息的變異樣本,在這樣的條件下,要通過Check 2校驗(yàn)最多需要28×5次變異。通過引入比較進(jìn)度信息本方法將極大降低生成通過Check 2樣本的難度。
雖然為了通過規(guī)約檢查引入比較進(jìn)度后的變異難度已經(jīng)大幅度減小,但是在對(duì)樣本變異時(shí)需要進(jìn)行變異的字節(jié)位于樣本哪個(gè)偏移仍然是未知的,因此在實(shí)際情況中,變異出能夠通過Check 2檢查的樣本所需要的最多變異次數(shù)遠(yuǎn)遠(yuǎn)大于28×5,仍然存在很大難度。即使能夠準(zhǔn)確定位到需要變異的位置,但是面臨28×5次變異仍然是一個(gè)較大的開銷。為了進(jìn)一步提高變異的準(zhǔn)確率和有效性,本文采用一種簡(jiǎn)單的啟發(fā)式方法以減小變異范圍和搜尋空間。在變異過程中,一旦對(duì)樣本文件的某個(gè)偏移位置進(jìn)行變異后觸發(fā)或提高了比較指令的比較進(jìn)度信息,那么將認(rèn)為這個(gè)字節(jié)即為magic值校驗(yàn)檢查中的一個(gè)字節(jié),由于大部分的magic值是以連續(xù)字節(jié)的方式存放在輸入文件中供應(yīng)用程序進(jìn)行校驗(yàn)檢查的,因此位于該偏移位置前后的字節(jié)很有可能同樣是magic字節(jié),因此本方法將會(huì)在該變異位置前后的(sizeoperand-1)個(gè)字節(jié)優(yōu)先使用該比較進(jìn)度所對(duì)應(yīng)的比較指令中立即數(shù)的具體值逐字節(jié)對(duì)樣本文件進(jìn)行變異。如在所給程序中,在對(duì)樣本文件第1個(gè)字節(jié)進(jìn)行變異時(shí)將第1個(gè)字節(jié)變異為M后,比較進(jìn)度信息將被觸發(fā),本文方法將會(huì)使用“MAGIC”這5個(gè)字符逐字節(jié)對(duì)樣本文件的第2~第5個(gè)字節(jié)進(jìn)行變異,這將大幅度提高變異的準(zhǔn)確性,能夠快速生成通過Check 2的變異樣本文件從而觸發(fā)到Check 3的新路徑。
4 實(shí)驗(yàn)與分析
為了驗(yàn)證所提方法的有效性,本文實(shí)現(xiàn)了一個(gè)模糊測(cè)試系統(tǒng)RMFuzzer并對(duì)其進(jìn)行了實(shí)驗(yàn)評(píng)估。RMFuzzer使用二進(jìn)制插樁平臺(tái)Dyninst[22]以及模糊測(cè)試工具AFL進(jìn)行開發(fā),同時(shí)還使用IDA Pro(Interactive Disassembler Professional)及IDAPython輔助對(duì)二進(jìn)制程序進(jìn)行分析和相關(guān)指令信息的提取。在相同實(shí)驗(yàn)環(huán)境下與二進(jìn)制模糊測(cè)試工具AFLDyninst(該工具采用Dyninst插樁框架對(duì)二進(jìn)制文件進(jìn)行插樁,其模糊測(cè)試器為AFL)進(jìn)行對(duì)比。測(cè)試環(huán)境為Ubuntu 16.04 LTS32位系統(tǒng),Intel Xeon CPU E31231 v3處理器和8GB的內(nèi)存。實(shí)驗(yàn)采用了兩個(gè)數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)評(píng)估,其中包括LAVAM測(cè)試集以及現(xiàn)實(shí)生活中的實(shí)際應(yīng)用程序。
4.1 LAVAM測(cè)試集
LAVAM是一個(gè)人工構(gòu)造的含有大量bug的數(shù)據(jù)集,其采用了污點(diǎn)分析等技術(shù)向應(yīng)用程序中注入了大量難以被觸發(fā)的bug[23]。
在對(duì)RMFuzzer和AFLDyninst進(jìn)行對(duì)比實(shí)驗(yàn)時(shí),使用相同的文件作為初始種子,運(yùn)行時(shí)間為5h,由于模糊測(cè)試過程中變異存在一定的隨機(jī)性,因此前后共進(jìn)行了3輪測(cè)試,實(shí)驗(yàn)結(jié)果取3次實(shí)驗(yàn)的平均數(shù)據(jù)。在3次實(shí)驗(yàn)過程中,AFLDyninst均沒有產(chǎn)生任何能夠觸發(fā)crash的樣本文件,而RMFuzzer在4個(gè)應(yīng)用程序中均產(chǎn)生了觸發(fā)其中所存在的部分crash的樣本文件。實(shí)驗(yàn)結(jié)果如表1所示。從實(shí)驗(yàn)結(jié)果可以看出,在LAVAM測(cè)試集中,RMFuzzer能夠發(fā)現(xiàn)其中注入的bug,其測(cè)試效果明顯好于AFLDyninst。
5 結(jié)語
針對(duì)現(xiàn)有模糊測(cè)試技術(shù)存在的路徑覆蓋能力不足、變異存在一定盲目性等問題,本文提出了一種面向二進(jìn)制程序的導(dǎo)向性模糊測(cè)試方法,并基于該方法實(shí)現(xiàn)了模糊測(cè)試工具RMFuzzer。該方法主要從種子文件的調(diào)度策略以及變異策略上對(duì)模糊測(cè)試過程進(jìn)行了引導(dǎo),相對(duì)于其他將污點(diǎn)分析或符號(hào)執(zhí)行與模糊測(cè)試相結(jié)合的方法,本文方法采用輕量級(jí)的靜態(tài)分析方法與插樁技術(shù),因此通用性更高,同時(shí)節(jié)約計(jì)算資源。通過實(shí)驗(yàn)證明RMFuzzer無論是在發(fā)現(xiàn)crash的能力方面還是在路徑發(fā)現(xiàn)與代碼覆蓋方面均優(yōu)于當(dāng)前流行的模糊測(cè)試工具,但是該方法仍然存在一定的問題:
1)在進(jìn)行變異引導(dǎo)時(shí),本方法采用了一個(gè)啟發(fā)式的策略,一旦該變異位置提高了比較指令中的比較進(jìn)度就在該位置附近字節(jié)進(jìn)行變異,但是如果輸入文件中magic字段并不是連續(xù)存放的,那么這種啟發(fā)式策略將不再奏效。故進(jìn)一步的工作需要考慮如何解決這樣的問題。
2)其次,存在變異導(dǎo)致控制流改變而進(jìn)一步觸發(fā)比較進(jìn)度的情況,在這樣的情況下,本文提出的變異引導(dǎo)方法將不再適用,在之后的研究工作中,需要考慮如何能更準(zhǔn)確地對(duì)需要變異的文件位置進(jìn)行定位,提高變異引導(dǎo)的效率和準(zhǔn)確性。
3)本方法著重于解決應(yīng)用程序規(guī)約檢查中輸入文件的magic字段的檢查問題,在接下來的工作中應(yīng)進(jìn)一步研究如何生成能夠快速繞過其他類型的程序檢查的樣本以提高模糊測(cè)試的效率。
參考文獻(xiàn) (References)
[1] Wikipedia. WannaCry ransomware attack[EB/OL].[2018-03-10]. https://en.wikipedia.org/wiki/WannaCry_ransomware_attack.
[2] KHANDELWAL S. Critical flaw leaves thousands of Cisco switches vulnerable to remote hacking[EB/OL].[2018-03-10]. https://thehackernews.com/2018/04/ciscoswitcheshacking.html.
[3] MILLER B P, FREDRIKSEN L, SO B. An empirical study of the reliability of UNIX utilities[J]. Communications of the ACM, 1990, 33(12): 32-44.
[4] OSSFuzzContinuous fuzzing for open source software[EB/OL]. [2018-03-10]. https://github.com/google/ossfuzz.
[5] Microsoft security development lifecycle[EB/OL].[2018-03-10]. https://www.microsoft.com/enus/sdl/process/verification.aspx.
[6] SHOSHITAISHVILI Y, WANG R, SALLS C, et al. SOK: (State of) the art of war: offensive techniques in binary analysis[C]// Proceedings of the 2016 IEEE Symposium on Security and Privacyn Security and Privacy. Piscataway, NJ: IEEE, 2016: 138-157.
[7] ZALEWSKI M. American fuzzy lop (2.52b)[EB/OL]. [2018-03-10]. http://lcamtuf.coredump.cx/afl/.
[8] BHME M, PHAM V T, ROYCHOUDHURY A. Coveragebased greybox fuzzing as Markov chain[C]// Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM, 2016: 1032-1043.
[9] LEMIEUX C, SEN K. FairFuzz: a targeted mutation strategy for increasing greybox fuzz testing coverage[C]// Proceedings of the 2018 ACM/IEEE International Conference on Automated Software Engineering. Piscataway, NJ: IEEE, 2018: 475-485.
[10] CADAR C, SEN K. Symbolic execution for software testing: three decades later[J].Communications of the ACM, 2013, 56(2): 82-90.
[11] LIANG H L, PEI X X, JIA X D, et al. Fuzzing: state of the art[J]. IEEE Transactions on Reliability, 2018, 67(3): 1199-1218.
[12] GAN S T, ZHANG C, QIN X J, et al. CollAFL: path sensitive fuzzing[C]// Proceedings of the 2018 IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE, 2018: 679-696.
[13] PENG H, SHOSHITAISHVILI Y, PAYER M. TFuzz: fuzzing by program transformation[C]// Proceedings of the 2018 IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE, 2018: 697-710.
[14] PHAM V T, ROYCHOUDHURY A. Modelbased whitebox fuzzing for program binaries[C]// Proceedings of the 2016 IEEE/ACM International Conference on Automated Software Engineering. Piscataway, NJ: IEEE, 2016: 543-553.
[15] RAWAT S, JAIN V, KUMAR A, et al. VUzzer: applicationaware evolutionary fuzzing [EB/OL].[2018-03-20].https://mirror.explodie.org/3714.pdf.
[16] 張斌, 李孟君, 吳波, 等. 基于動(dòng)態(tài)污點(diǎn)分析的二進(jìn)制程序?qū)蛐阅:郎y(cè)試方法[J]. 現(xiàn)代電子技術(shù), 2014, 37(19): 89-94. (ZHANG B, LI M J, WU B, et al. Method of binary oriented fuzzy testing based on dynamic taint analysis [J]. Modern Electronics Technique, 2014, 37(19): 89-94.)
[17] 王鐵磊. 面向二進(jìn)制程序的漏洞挖掘關(guān)鍵技術(shù)研究[D]. 北京:北京大學(xué), 2011: 41-69. (WANG T L. Research on binaryexecutableoriented software vulnerability detection[D]. Beijing: Peking University, 2011: 41-69.)
[18] STEPHENS N, GROSEN J, SALLS C, et al. Driller: augmenting fuzzing through selective symbolic execution[EB/OL].[2018-03-20].http://www.cs.ucsb.edu/~chris/research/doc/ndss16_driller.pdf.
[19] LI Y K, CHEN B H, CHANDRAMOHAN M, et al. Steelix: programstate based binary fuzzing[C]// Proceedings of the 2017 Joint Meeting on Foundations of Software Engineering. New York: ACM, 2017: 627-637.
[20] CHEN P, CHEN H. Angora: efficient fuzzing by principled search[C]// Proceedings of the 2018 IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE, 2018: 697-710.
[21] ZALEWSKI M. Technical “whitepaper” for AFLfuzz[EB/OL]. [2018-03-20]. http://lcamtuf.coredump.cx/afl/technical_details.txt.
[22] Paradyn/DyninstWelcome[EB/OL]. [2018-03-20]. https://dyninst.org/.
[23] DOLANGAVITT B, HULIN P, KIRDA E, et al. LAVA: largescale automated vulnerability addition[C]// Proceedings of the 2016 IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE, 2016: 110-121.