摘 要:在軟件開發(fā)及應(yīng)用中,由于具有可復(fù)現(xiàn)性,模糊測(cè)試能夠幫助發(fā)現(xiàn)漏洞和有針對(duì)性地對(duì)漏洞成因進(jìn)行分析。為了解決模糊測(cè)試過程的效率及測(cè)試力度等問題,提出了軟件漏洞模糊測(cè)試的關(guān)鍵分支探索及熱點(diǎn)更新算法。該方法通過捕獲、分析和利用受檢程序在處理測(cè)試用例時(shí)的執(zhí)行位置的關(guān)鍵信息,以指導(dǎo)模糊測(cè)試過程的探索方向和測(cè)試用例的生成。實(shí)驗(yàn)結(jié)果表明,提出的方法相較于傳統(tǒng)隨機(jī)發(fā)散的模糊測(cè)試方法在漏洞發(fā)現(xiàn)能力上有較大提升,在Otfcc、Swftools等14個(gè)開源程序中發(fā)現(xiàn)了100余個(gè)未被公布的漏洞,為模糊測(cè)試用于軟件漏洞檢測(cè)提供了新的可靠途徑。
關(guān)鍵詞:模糊測(cè)試;代碼分析;關(guān)鍵分支;漏洞檢測(cè)
中圖分類號(hào):TP301 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1001-3695(2024)07-036-2179-05
doi: 10.19734/j.issn.1001-3695.2023.11.0508
Algorithm of key branch exploration and hotspot update for software vulnerability fuzzy testing
Abstract:In software development and application, due to its reproducibility, fuzzy testing can help identify vulnerabilities and analyze the causes of vulnerabilities in a targeted manner. In order to address the issues of efficiency and testing intensity in the fuzzy testing process, this paper proposed a key branch exploration and hotspot update algorithm for software vulnerability fuzzy testing. This method guided the exploration direction of the fuzzy testing process and the generation of test cases by capturing, analyzing, and utilizing key information on the execution position of the inspected program when processing test cases. The experimental results show that the proposed method has a significant improvement in vulnerability detection ability compared to the traditional randomly divergent fuzzy testing methods, and more than 100 undisclosed vulnerabilities were found in 14 open source programs such as Otfcc and Swftools which providing a new and reliable approach for using fuzzy testing to detect software vulnerability.
Key words:fuzzy testing; code analysis; key branch; vulnerability detection
0 引言
模糊測(cè)試是一種通過向系統(tǒng)注入隨機(jī)或異常數(shù)據(jù)來(lái)發(fā)現(xiàn)應(yīng)用程序或系統(tǒng)中的潛在漏洞和軟件缺陷的測(cè)試方法,已廣泛應(yīng)用于Web應(yīng)用程序、移動(dòng)應(yīng)用程序、網(wǎng)絡(luò)協(xié)議、操作系統(tǒng)與內(nèi)核、數(shù)據(jù)庫(kù)系統(tǒng)、物聯(lián)網(wǎng)設(shè)備等領(lǐng)域的缺陷或潛在漏洞檢測(cè)[1~6]。 作為典型的模糊測(cè)試工具,Google推出的基于代碼覆蓋率的AFL,使用測(cè)試用例所能觸發(fā)到的受檢程序功能代碼與整體代碼(插樁得到部分)的比值來(lái)衡量當(dāng)前測(cè)試用例發(fā)現(xiàn)漏洞、程序安全違例事件的潛力,藉此考察測(cè)試用例是否應(yīng)當(dāng)保留,以用作后續(xù)突變產(chǎn)生新測(cè)試用例的母本,其核心思想在于基于測(cè)試所能覆蓋到的代碼體量占比越大,發(fā)現(xiàn)程序脆弱點(diǎn)的可能性越大[7]?;谠摲椒ǖ哪:郎y(cè)試工具在過去很長(zhǎng)時(shí)間被Google、Microsoft、Adobe等諸多公司或廠商付諸應(yīng)用,實(shí)踐證明了其有效性。一方面,AFL在編譯受檢程序時(shí)進(jìn)行插樁處理,為每個(gè)插樁單元生成一個(gè)隨機(jī)標(biāo)識(shí)符來(lái)唯一標(biāo)識(shí)當(dāng)前程序位置[8],同時(shí)通過捕獲受檢程序的分支執(zhí)行情況來(lái)實(shí)現(xiàn)代碼覆蓋率的檢測(cè)。另一方面,AFL測(cè)試用例的生成采用樣本突變方式,其原生的突變操作包括byteflip 、bitflip、arithmetic inc/dec、interesting values、user extras、auto extras、random bytes、insert bytes、cross over等類型,執(zhí)行測(cè)試用例后會(huì)記錄該用例的執(zhí)行路徑覆蓋情況,并且評(píng)估該測(cè)試用例,指導(dǎo)后續(xù)新的用例的生成[9]。
實(shí)際上,傳統(tǒng)隨機(jī)發(fā)散的模糊測(cè)試方法存在著一些不足,例如過于依賴代碼覆蓋率的樣本質(zhì)量評(píng)估指標(biāo),由于不能進(jìn)入某些程序保護(hù)邏輯等原因,導(dǎo)致同樣具備漏洞存在可能的部分程序代碼的探索用時(shí)較長(zhǎng),或者測(cè)試力度不足以觸發(fā)程序異常所帶來(lái)的漏報(bào)率[10]??赡軒?lái)測(cè)試代碼覆蓋率問題的一段代碼如下:
其中,第3行的if條件分支中的代碼體量相對(duì)該處else分支的代碼體量而言更大,在衡量測(cè)試用例質(zhì)量的代碼覆蓋率關(guān)鍵指標(biāo)上表現(xiàn)更優(yōu),存在使得模糊測(cè)試的測(cè)試方向傾向于分支條件為true的部分,而忽略了導(dǎo)致對(duì)該處分支條件為false的分支的發(fā)現(xiàn),或者由于測(cè)試強(qiáng)度不足以觸發(fā)這一分支下的錯(cuò)誤(crash)而導(dǎo)致的發(fā)現(xiàn)效率低、漏報(bào)等情況。
Dinesh等人[11]認(rèn)為程序模糊化對(duì)閉源二進(jìn)制文件安全分析是可行的,基于代碼覆蓋率引導(dǎo)對(duì)二進(jìn)制文件進(jìn)行模糊化重寫,并保證其在性能上與編譯器插入的二進(jìn)制文件相同。佘庚達(dá)等人[12]基于二進(jìn)制程序靜態(tài)分析提出了用于驅(qū)動(dòng)程序運(yùn)行信息監(jiān)控和漏洞挖掘的模糊測(cè)試工具。Li等人[13]考慮到傳統(tǒng)模糊測(cè)試方法面向多字節(jié)保護(hù)邏輯時(shí),單字節(jié)枚舉正確有利于測(cè)試,但因?yàn)闊o(wú)法體現(xiàn)代碼覆蓋率指標(biāo),導(dǎo)致諸多生成的測(cè)試用例無(wú)法針對(duì)這些保護(hù)邏輯進(jìn)行測(cè)試而使效率低下,所以對(duì)相關(guān)位置代碼進(jìn)行重寫,使得保護(hù)邏輯字段首字節(jié)的枚舉正確性得以反映在用于指導(dǎo)fuzzer變異的代碼覆蓋率上,并將該有效樣本送入下一輪的迭代再生成。Lemieux等人[14]提出一種自動(dòng)識(shí)別稀有分支的方法,并結(jié)合一種新穎的突變掩碼創(chuàng)建算法,該算法將突變偏向于生成命中給定稀有分支的輸入。Ganesh等人[15]利用動(dòng)態(tài)污點(diǎn)追蹤來(lái)識(shí)別原始種子輸入文件中影響關(guān)鍵程序攻擊點(diǎn)所用值的區(qū)域,然后對(duì)這些區(qū)域進(jìn)行模糊處理,生成新的測(cè)試輸入文件,這些文件保留了原始種子輸入文件的底層語(yǔ)法結(jié)構(gòu),并指出此技術(shù)對(duì)于測(cè)試具有復(fù)雜、高度結(jié)構(gòu)化輸入文件格式的程序效果顯著。Ma等人[16]提出一種基于遺傳算法和BI-LST神經(jīng)網(wǎng)絡(luò)的模糊測(cè)試樣本生成框架,以獲得一個(gè)同時(shí)具有代碼覆蓋率和漏洞挖掘能力的樣本集,用于程序的關(guān)鍵執(zhí)行路徑,重點(diǎn)關(guān)注了路徑深度探索能力評(píng)估指標(biāo),使探索能夠發(fā)現(xiàn)原本無(wú)法發(fā)現(xiàn)的漏洞??偟膩?lái)說,諸多研究方法仍然體現(xiàn)了如何在模糊測(cè)試過程中完成對(duì)受檢程序內(nèi)部代碼的快速探索,以快速提升測(cè)試所能覆蓋到的更廣泛的代碼,以及如何生成高效、高質(zhì)量的測(cè)試用例是模糊測(cè)試技術(shù)在實(shí)踐中存在的挑戰(zhàn)。
本文借鑒AFL,通過對(duì)樣本突變操作所生成新的測(cè)試用例的質(zhì)量評(píng)估,保留具備更高潛力(主要體現(xiàn)在代碼覆蓋率上)的樣本,并作為用于后續(xù)突變生成新的測(cè)試用例的母本的思路,提出面向軟件漏洞模糊測(cè)試的關(guān)鍵分支探索及熱點(diǎn)更新算法及應(yīng)用方法,旨在解決針對(duì)受檢程序內(nèi)部關(guān)鍵分支的識(shí)別及其快速探索,以及高質(zhì)量測(cè)試用例生成方法等問題。將程序保護(hù)邏輯及其相關(guān)指令作為關(guān)鍵特征分支,結(jié)合合法樣本和非法樣本兩類樣本,在受檢程序內(nèi)部的處理過程中捕獲關(guān)鍵分支位置特征信息。通過比對(duì)這些指令位置的操作數(shù)、寄存器等執(zhí)行信息的差異,篩查并快速探索價(jià)值相對(duì)較高的關(guān)鍵分支,進(jìn)而使用程序局部性原理結(jié)合測(cè)試用例的評(píng)估結(jié)果與突變位置構(gòu)建樣本突變熱點(diǎn)位記錄模塊,為樣本突變階段生成測(cè)試用例提供指導(dǎo)。
1 面向關(guān)鍵分支的軟件漏洞模糊測(cè)試模型
為了有效地提升代碼探索效率及漏洞檢測(cè)能力,構(gòu)建面向關(guān)鍵分支的軟件漏洞模糊測(cè)試模型,如圖1所示,主要包括關(guān)鍵分支篩選、分支內(nèi)部快速探索和突變熱點(diǎn)區(qū)域記錄三個(gè)模塊。首先,關(guān)鍵分支篩選負(fù)責(zé)完成對(duì)受檢程序內(nèi)部關(guān)鍵分支的篩選,利用靜態(tài)分析并結(jié)合受檢程序?qū)y(cè)試用例的處理過程,具體地執(zhí)行上下文信息,完成對(duì)程序敏感代碼或執(zhí)行檢查的識(shí)別與定位。該模塊的輸出結(jié)果僅保留滿足篩選條件的部分,即被認(rèn)為對(duì)接收輸入合法性敏感的、具有較高探索價(jià)值的分支選擇指令。其次,分支內(nèi)部快速探索是結(jié)合關(guān)鍵分支篩選模塊的處理結(jié)果,負(fù)責(zé)對(duì)程序內(nèi)部分支的快速探索,該探索過程中會(huì)對(duì)受檢程序內(nèi)部運(yùn)行進(jìn)行干預(yù),目的在于提升受檢程序內(nèi)部分支的發(fā)現(xiàn)效率,同時(shí),期望檢測(cè)出程序內(nèi)部更加隱蔽的漏洞,這是因?yàn)槟承└与[蔽、難以檢出的安全漏洞更常與非常規(guī)程序執(zhí)行流程或不正確的狀態(tài)轉(zhuǎn)換相關(guān)。最后,突變熱點(diǎn)區(qū)域記錄是在單個(gè)測(cè)試用例執(zhí)行結(jié)束后的樣本評(píng)估時(shí)執(zhí)行,主要是利用當(dāng)前測(cè)試用例的執(zhí)行結(jié)果表現(xiàn),根據(jù)程序局部性原理,去評(píng)估當(dāng)前樣本的突變位置在代碼覆蓋率、誘發(fā)受檢程序出現(xiàn)安全違例事件的可能性等潛力設(shè)置樣本熱點(diǎn)位圖,樣本熱點(diǎn)位圖中的熱度信息可為后續(xù)樣本突變階段的突變操作位置提供指導(dǎo)。
2 關(guān)鍵分支篩選
關(guān)鍵分支是指那些對(duì)接受輸入合法性較為敏感的部分分支,所對(duì)應(yīng)的選擇指令典型的有checksum、magic bytes check等[17]。對(duì)于接收輸入的合法性敏感,意味著這部分相應(yīng)的內(nèi)容在面向輸入合法性存在差異的內(nèi)容時(shí),程序內(nèi)部的執(zhí)行上下文會(huì)存在不同程度的差異,進(jìn)而表現(xiàn)出程序行為的差異。輸入合法性是指程序預(yù)期進(jìn)行處理的內(nèi)容。模糊測(cè)試的基礎(chǔ)思想正是通過生成大量的畸形數(shù)據(jù),增加輸入非法樣本的可能產(chǎn)生比例,進(jìn)而期望這些內(nèi)容能夠?qū)е鲁绦虺霈F(xiàn)安全違例事件。分支篩選的目的,一方面是為了避免測(cè)試工作負(fù)擔(dān)呈現(xiàn)指數(shù)型爆炸式增長(zhǎng),在犧牲部分探索價(jià)值不高的位置換取測(cè)試整體效率的提升;另一方面,價(jià)值不高的內(nèi)容并非真正丟棄,模糊測(cè)試的基本方法仍可能覆蓋未被選中的部分并完成測(cè)試。
首先,對(duì)關(guān)鍵分支位置的特征進(jìn)行提取,由于其實(shí)施特征通常以cmp/轉(zhuǎn)移指令、test/轉(zhuǎn)移指令的方式出現(xiàn),所以使用靜態(tài)分析對(duì)滿足條件的內(nèi)容進(jìn)行初步篩選。其次,為了確定那些對(duì)于接收輸入合法性敏感的位置,通過提交給受檢程序二類樣本(合法樣本和非法樣本),根據(jù)轉(zhuǎn)移指令je的邏輯,檢測(cè)受檢程序?qū)@些樣本的實(shí)際執(zhí)行過程中具體的相關(guān)執(zhí)行上下文的差異進(jìn)行進(jìn)一步篩查。要注意的是,je的實(shí)施邏輯與標(biāo)志寄存器的內(nèi)容高度相關(guān)。
算法1 關(guān)鍵分支篩選
算法1的第1、2行輸入合法和非法兩類樣本并交付給受檢程序執(zhí)行,如果執(zhí)行到靜態(tài)分析初步篩選得出的關(guān)鍵分支標(biāo)志轉(zhuǎn)移指令所在位置時(shí),記錄相應(yīng)的標(biāo)志寄存器內(nèi)容。記錄的內(nèi)容以hash表形式存放,鍵值以指令地址計(jì)算得出。第4行中,記錄對(duì)非法與合法兩類樣本都覆蓋的內(nèi)容。后續(xù)算法將對(duì)當(dāng)前的檢查點(diǎn)(spot)進(jìn)行特征檢查,以je指令為例,對(duì)于合法樣本和非法樣本,算法會(huì)記錄它們執(zhí)行到檢查點(diǎn)時(shí)的標(biāo)志寄存器內(nèi)容,并檢查與je指令相關(guān)的標(biāo)志位。如果存在差異(第7行),既當(dāng)前的檢查點(diǎn)是一個(gè)對(duì)于輸入合法性比較敏感的校驗(yàn)位置,具有較高的探索價(jià)值,因此將其保存進(jìn)入關(guān)鍵分支篩選結(jié)果checkPointArray,并作為算法輸出。
3 分支內(nèi)部快速探索
3.1 分支干預(yù)與探索
分支內(nèi)部快速探索旨在完成受檢程序內(nèi)部快速探索的目的。通常,一些難以檢測(cè)的安全漏洞常常與非常規(guī)程序執(zhí)行流程或不正確的狀態(tài)轉(zhuǎn)換有關(guān)。因此,針對(duì)關(guān)鍵分支篩選模塊的執(zhí)行結(jié)果(即敏感位),分支內(nèi)部快速模塊干預(yù)程序的運(yùn)行,即在這些位置對(duì)相應(yīng)寄存器內(nèi)容設(shè)定反值,以更改程序執(zhí)行分支的陷入方向。通常,這些敏感位置與程序的執(zhí)行分支選擇密切相關(guān)。對(duì)受檢程序內(nèi)部的快速探索如圖2所示。
干預(yù)可以視為非常規(guī)程序執(zhí)行流程或不正確的狀態(tài)轉(zhuǎn)換。如果在受檢程序的后續(xù)執(zhí)行過程中發(fā)生崩潰,則修復(fù)相應(yīng)的樣本。傳統(tǒng)模糊測(cè)試工具在評(píng)估樣本質(zhì)量時(shí)通常會(huì)保留表現(xiàn)優(yōu)秀的測(cè)試用例作為后續(xù)突變的母本,同時(shí)丟棄表現(xiàn)差的樣本。實(shí)際上,表現(xiàn)差的樣本也具有突變母本的某些特質(zhì),因此,這類樣本也可以作為操作對(duì)象,并且不會(huì)干擾主測(cè)試的進(jìn)程。
算法2 分支內(nèi)部快速探索
算法2的第2行,pickPosToTwist方法隨機(jī)選擇執(zhí)行程序干預(yù)的位置,該操作可以先行降低后續(xù)可能啟動(dòng)的樣本修復(fù)所導(dǎo)致的修復(fù)開銷。第7行checkPointArray是通過算法1得出,與程序的執(zhí)行分支轉(zhuǎn)移和輸入的合法性密切相關(guān)。選取通過關(guān)鍵分支篩選得出的敏感位置進(jìn)行控制流程的干預(yù),可以快速探索受檢程序內(nèi)部的邏輯,以及檢出那些與非常規(guī)程序執(zhí)行流程或不正確狀態(tài)轉(zhuǎn)換相關(guān)的、隱蔽性較好的漏洞。在實(shí)施干預(yù)分支陷入方向后,如果受檢程序?qū)Ξ?dāng)前測(cè)試用例的執(zhí)行效果有提升(如crash或測(cè)試代碼覆蓋率有提升),則啟動(dòng)樣本修復(fù)模塊進(jìn)行后續(xù)操作,否則視當(dāng)前所干預(yù)的分支為冗余操作,通過執(zhí)行第31行的rollback方法標(biāo)記相應(yīng)的分支轉(zhuǎn)移位置,后續(xù)不再對(duì)其進(jìn)行干預(yù),該操作同樣可以降低后續(xù)可能啟動(dòng)的樣本修復(fù)所導(dǎo)致的資源開銷。
3.2 樣本修復(fù)
樣本修復(fù)模塊與分支內(nèi)部快速探索模塊協(xié)同工作,用于在快速探索模塊中對(duì)關(guān)鍵分支轉(zhuǎn)移位置實(shí)施干擾,并且修復(fù)因干預(yù)導(dǎo)致效益提升的樣本。采用受限性引用符號(hào)執(zhí)行技術(shù),即僅針對(duì)實(shí)施干預(yù)部分的節(jié)點(diǎn)實(shí)施技術(shù)應(yīng)用,這是由快速探索模塊的策略決定的[18]??焖偬剿髂K中,pickPosToTwist方法對(duì)干預(yù)位置的選擇是隨機(jī)的,也就是對(duì)checkPointArray中隨機(jī)挑選部分位置實(shí)施干預(yù),并非全部實(shí)施干預(yù),使得符號(hào)執(zhí)行應(yīng)用過程中的求解工作量減少。
另一方面,算法2中的rollback方法對(duì)于無(wú)表現(xiàn)提升的干預(yù)位置進(jìn)行回退操作,其目的也在于降低符號(hào)執(zhí)行應(yīng)用過程中的求解工作量。針對(duì)分支轉(zhuǎn)移位置checkPoint cp進(jìn)行干預(yù)的過程,如圖3所示,原執(zhí)行分支在該位置的轉(zhuǎn)移目的分支被干預(yù)。如果對(duì)checkPoint cp實(shí)施干預(yù)未帶來(lái)測(cè)試用例表現(xiàn)的提升,則執(zhí)行rollback方法進(jìn)行回退,因此不存在對(duì)該點(diǎn)的干預(yù)后果承擔(dān)修復(fù)資源開銷的情況。如果對(duì)checkPoint cp實(shí)施干預(yù)帶來(lái)測(cè)試用例表現(xiàn)的提升,則需要進(jìn)行修復(fù),此時(shí)符號(hào)執(zhí)行技術(shù)所需要修復(fù)的部分僅是相關(guān)的躍遷路徑(branch_src, branch_dst),從而降低符號(hào)執(zhí)行的求解復(fù)雜度。
4 突變熱點(diǎn)區(qū)域記錄
程序的執(zhí)行,在一段時(shí)間內(nèi)只限于程序中的某一部分,因此對(duì)于單次突變時(shí)選擇的突變位置,如果在測(cè)試階段執(zhí)行結(jié)束后,樣本質(zhì)量評(píng)估階段表現(xiàn)優(yōu)異,則確認(rèn)該突變位置有價(jià)值。為了標(biāo)記這些突變位置,采取對(duì)輸入用例的每個(gè)字節(jié)位置設(shè)置唯一標(biāo)識(shí)符的方案,在突變過程中記錄相應(yīng)的突變位置。在樣本評(píng)估階段,根據(jù)執(zhí)行結(jié)果的表現(xiàn),將當(dāng)前突變位置及其附近幾個(gè)單元視為熱度區(qū)域,構(gòu)建樣本熱點(diǎn)位圖,為后續(xù)的突變環(huán)節(jié)提供指導(dǎo),幫助突變模塊生成更高質(zhì)量的測(cè)試用例,從而提高測(cè)試的效率。
算法3 突變熱點(diǎn)更新
算法3根據(jù)突變位置的表現(xiàn)來(lái)更新熱點(diǎn)區(qū)域,可以為后續(xù)的突變環(huán)節(jié)提供指導(dǎo),使測(cè)試主要用在執(zhí)行高效的突變操作上。其中,updateHotzone方法用于更新熱點(diǎn)區(qū)域,它根據(jù)所關(guān)注的幾種運(yùn)行結(jié)果狀態(tài),有以下三種更新:
a)如果執(zhí)行結(jié)果包含crash,則說明當(dāng)前選中的樣本Hotzone的突變位置curMutatePos作為樣本突變階段的操作對(duì)象,存在相關(guān)字段的突變,導(dǎo)致程序測(cè)試過程出現(xiàn)crash,因此當(dāng)前突變位置的熱度會(huì)相應(yīng)地提升。
b)如果執(zhí)行結(jié)果顯示本次測(cè)試過程覆蓋了新的代碼路徑,則說明當(dāng)前選中的樣本Hotzone的突變位置curMutatePos作為樣本突變階段的操作對(duì)象,對(duì)于提升代碼覆蓋率有探索價(jià)值,因此當(dāng)前突變位置的熱度會(huì)相應(yīng)地提升。
c)如果執(zhí)行結(jié)果顯示本次測(cè)試過程對(duì)受檢程序的代碼覆蓋率沒有提升,則說明當(dāng)前選中的樣本Hotzone的突變位置curMutatePos作為樣本突變階段的操作對(duì)象,對(duì)于提升代碼覆蓋率沒有探索價(jià)值,因此當(dāng)前突變位置的熱度會(huì)相應(yīng)地下降。
5 實(shí)驗(yàn)結(jié)果與分析
實(shí)驗(yàn)環(huán)境是6核3.0 GHz的Intel i5-12500H CPU,16 GB RAM,Ubuntu LTS 18.04操作系統(tǒng)。實(shí)驗(yàn)選用Otfcc、Swftools、Xpdf、Swfmill、PNGdec等16個(gè)開源應(yīng)用。初始樣本的收集來(lái)自對(duì)應(yīng)項(xiàng)目的以往issue的相關(guān)POC文件,以及網(wǎng)絡(luò)收集的作為輸入的樣本集,樣本集的收集階段能夠很好地提升測(cè)試任務(wù)的起點(diǎn)。
a)采用本文方法在14個(gè)目標(biāo)程序中測(cè)試發(fā)現(xiàn)了100余個(gè)未被公布的漏洞,均已獲得了CVE 編號(hào)(見https://cve.mitre.org/)。方法在檢測(cè)錯(cuò)誤數(shù)(crash)、去重后錯(cuò)誤數(shù)(unique)、錯(cuò)誤檢出效率(EDE)以及是否執(zhí)行樣本修復(fù)(repaired?)方面的情況如表1所示,其中,錯(cuò)誤檢出效率是指在對(duì)應(yīng)測(cè)試應(yīng)用中每小時(shí)發(fā)現(xiàn)的錯(cuò)誤數(shù)量。
b)本文方法對(duì)受檢應(yīng)用進(jìn)行模糊檢測(cè)后發(fā)現(xiàn)的新漏洞(部分)及其安全等級(jí)和所屬漏洞類型如表2所示,其中所涉及的漏洞類型包括heap buffer overflow、use after free、stack overflow、global buffer overflow、FPE、memory leak、segmentation violation等。
c)實(shí)驗(yàn)將本文方法與隨機(jī)發(fā)散的模糊測(cè)試方法AFL[7]及其優(yōu)化方案FairFuzz[14]進(jìn)行了對(duì)比。檢測(cè)出的去重(unique)后的漏洞情況如表3所示,從整體(覆蓋了發(fā)現(xiàn)漏洞的14個(gè)受檢目標(biāo)程序)的漏洞發(fā)現(xiàn)情況來(lái)看,針對(duì)已檢出的漏洞類型,本文方法在檢出能力上均有所提升。在測(cè)試時(shí)間段內(nèi),相較于隨機(jī)發(fā)散的AFL和FairFuzz方法未能檢出use after free這類與程序操作的先后順序、執(zhí)行邏輯強(qiáng)相關(guān)的漏洞,本文方法則有著很好的檢出效果。其原因在于,盡管一些難以檢測(cè)的安全漏洞常常與非常規(guī)程序執(zhí)行流程或不正確的狀態(tài)轉(zhuǎn)換有關(guān),而本文方法利用關(guān)鍵分支篩選得出這些敏感位置并進(jìn)行干預(yù),繼而通過分支內(nèi)部快速探索算法,對(duì)這類特殊邏輯相關(guān)的漏洞卻有較好的檢出能力提升。
另外,以O(shè)tfcc測(cè)試項(xiàng)目為例,對(duì)比本文方法與AFL和FairFuzz的隨測(cè)試時(shí)間發(fā)展的測(cè)試結(jié)果,如圖2所示,在漏洞發(fā)現(xiàn)情況以及unique漏洞發(fā)現(xiàn)情況的評(píng)估指標(biāo)上,本文方法的表現(xiàn)均優(yōu)于AFL和FairFuzz。在測(cè)試用時(shí)50 h內(nèi),隨著測(cè)試用時(shí)的增加,模糊測(cè)試的深度與廣度都會(huì)相應(yīng)加大,檢出的錯(cuò)誤或漏洞也呈遞增趨勢(shì)。由于代碼內(nèi)部邏輯作為類樹結(jié)構(gòu)在實(shí)際中不能全覆蓋,同時(shí),因?yàn)槔碚撋嫌袩o(wú)窮多的隨機(jī)輸入組合,使得模糊測(cè)試在理論上不會(huì)停止,但隨著測(cè)試用時(shí)的投入,新發(fā)現(xiàn)的概率會(huì)越來(lái)越少,即在測(cè)試用時(shí)16 h之后的檢出漏洞數(shù)增長(zhǎng)趨勢(shì)變緩。通常在測(cè)試過程中,距離上次發(fā)現(xiàn)新的代碼分支或程序異常已經(jīng)過去5 h(即時(shí)間限制)、達(dá)到預(yù)設(shè)的測(cè)試用例數(shù)、達(dá)到預(yù)設(shè)的代碼覆蓋率或路徑覆蓋率、發(fā)現(xiàn)預(yù)設(shè)數(shù)量的漏洞或錯(cuò)誤,或者資源消耗達(dá)到預(yù)設(shè)極限等就可以終止測(cè)試[19]。
6 結(jié)束語(yǔ)
本文主要通過篩選并評(píng)估受檢程序內(nèi)部存在的諸多分支,篩選有價(jià)值位置進(jìn)行探索,對(duì)篩選位置所涉及的分支挖掘更高的漏洞發(fā)現(xiàn)能力。這些具有探索價(jià)值較高的分支,受限于傳統(tǒng)模糊測(cè)試方法在測(cè)試用例上的突變隨機(jī)性,不能總是在測(cè)試過程中被納入測(cè)試范圍,通過分支內(nèi)部快速探索模塊中的干預(yù)分支選擇方式完成對(duì)這些分支的測(cè)試。在模糊器生成測(cè)試用例階段,根據(jù)測(cè)試用例的執(zhí)行結(jié)果更新并維護(hù)樣本突變熱點(diǎn)區(qū)域,指導(dǎo)測(cè)試用例突變操作所作用的位置,向那些能帶來(lái)效益提升的位置傾斜。實(shí)驗(yàn)結(jié)果驗(yàn)證了本文方法的有效性,相比于AFL和FairFuzz均有較大的漏洞發(fā)現(xiàn)能力的提升。不足之處在于,通過構(gòu)建樣本突變熱點(diǎn)區(qū)域的方式指導(dǎo)突變操作的位置,雖然去除了傳統(tǒng)模糊測(cè)試方法的隨機(jī)性,但可能使得一些低頻、被判定探索價(jià)值低的程序邏輯被測(cè)試忽略,因此可能存在一定的漏報(bào)。樣本突變熱點(diǎn)區(qū)域的多樣性及熱點(diǎn)能力細(xì)分是下一步研究的方向。
參考文獻(xiàn):
[1]Kumar R,Baz A,Alhakami H,et al. A hybrid fuzzy rule-based multi-criteria framework for sustainable-security assessment of Web application [J]. Ain Shams Engineering Journal,2021,12(2): 2227-2240.
[2]Weng Le,F(xiàn)eng Chao, Shi Zhiyuan,et al. FASSFuzzer—an automated vulnerability detection system for android system services [J]. Journal of Computers(Taiwan),2022,33(2): 189-200.
[3]Liu Xinyao, Cui Baojiang, Fu Junsong,et al. HFuzz: towards automa-tic fuzzing testing of NB-IoT core network protocols implementations [J]. Future Generation Computer Systems,2020,108: 390-400.
[4]肖天,江智昊,唐鵬,等. 基于深度強(qiáng)化學(xué)習(xí)的高性能導(dǎo)向性模糊測(cè)試方案 [J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào),2023,9(2): 132-142. (Xiao Tian,Jiang Zhihao,Tang Peng,et al. High-performance directional fuzzing scheme based on deep reinforcement learning [J]. Chinese Journal of Network and Information Security,2023,9(2): 132-142.)
[5]盧昊良,鄒燕燕,彭躍,等. 基于物聯(lián)網(wǎng)設(shè)備局部仿真的反饋式模糊測(cè)試技術(shù) [J]. 信息安全學(xué)報(bào),2023,8(1): 78-92.(Lu Hao-liang,Zou Yanyan,Peng Yue,et al. Feedback-driven fuzzing techno-logy based on partial simulation of IoT devices [J]. Journal of Cyber Security,2023,8(1): 78-92.)
[6]Trippel T,Shin K G,Chernyakhovsky A,et al. Fuzzing hardware like software [C]// Proc of the 31st USENIX Security Symposium. Berkeley,CA: USENIX Association,2022: 3237-3254.
[7]Fioraldi A,Mantovani A,Maier D,et al. Dissecting American fuzzy lop: a FuzzBench evaluation [J]. ACM Trans on Software Engineering and Methodology,2023,32(2): 1-26.
[8]王明哲,姜宇,孫家廣. 模糊測(cè)試中的靜態(tài)插樁技術(shù) [J]. 計(jì)算機(jī)研究與發(fā)展,2023,60(2): 262-273.(Wang Mingzhe,Jiang Yu,Sun Jiaguang. Static instrumentation techniques in fuzzing testing [J]. Journal of Computer Research and Development,2023,60(2): 262-273.)
[9]劉盈盈,楊秋輝,姚邦國(guó),等. 基于依賴模型的REST接口測(cè)試用例生成方法研究 [J]. 計(jì)算機(jī)科學(xué),2023,50(9): 101-107.(Liu Yingying,Yang Qiuhui,Yao Bangguo,et al. Study on REST API test case generation method based on dependency model [J]. Computer Science,2023,50(9): 101-107.)
[10]李賀,張超,楊鑫,等. 操作系統(tǒng)內(nèi)核模糊測(cè)試技術(shù)綜述 [J]. 小型微型計(jì)算機(jī)系統(tǒng),2019,40(9): 1994-1999.(Li He,Zhang Chao,Yang Xin,et al. Survey of OS kernel fuzzing [J]. Journal of Chinese Computer System,2019,40(9): 1994-1999.)
[11]Dinesh S,Burow N,Xu Dongyan,et al. RetroWrite: statically instrumenting cots binaries for fuzzing and sanitization [C]// Proc of the 41st IEEE Symposium on Security and Privacy. Piscataway,NJ: IEEE Press,2020: 1497-1511.
[12]佘庚達(dá),付才,岑澤威,等. 基于適應(yīng)度和輸入約束模型的內(nèi)核驅(qū)動(dòng)漏洞挖掘 [J]. 計(jì)算機(jī)應(yīng)用研究,2023,40(7): 2151-2156.(She Gengda,F(xiàn)u Cai,Cen Zewei,et al. Kernel driver vulnerability mining based on fitness and input constraint model [J]. Application Research of Computers,2023,40(7): 2151-2156.)
[13]Li Yuekang, Chen Bihuan, Chandramohan M,et al. Steelix: program-state based binary fuzzing [C]// Proc of the 11th Joint Meeting on Foundations of Software EnfX2igwv9iyZlYBGZ/wp3oUygL97nN0fLjMeVyvB3oAM=gineering. New York: ACM Press,2017: 627-637.
[14]Lemieux C,Sen K. FairFuzz: a targeted mutation strategy for increasing greybox fuzz testing coverage [C]// Proc of the 33rd ACM/IEEE International Conference on Automated Software Engineering. Piscataway,NJ: IEEE Press,2018:475-485.
[15]Ganesh V,Leek T,Rinard M. Taint-based directed whitebox fuzzing [C]// Proc of the 31st International Conference on Software Engineering. Washington DC: IEEE Computer Society,2009: 474-484.
[16]Ma Mingrui,Han Lansheng,Qian Yekui. CVDF DYNAMIC—a dynamic fuzzy testing sample generation framework based on BI-LSTM and genetic algorithm [J]. Sensors,2022,22(3): 1265.
[17]戴渭,陸余良,朱凱龍. 結(jié)合混合符號(hào)執(zhí)行的導(dǎo)向式灰盒模糊測(cè)試技術(shù) [J]. 計(jì)算機(jī)工程,2020,46(8): 190-196.(Dai Wei,Lu Yuliang,Zhu Kailong. Directed grey-box fuzzing test technology combining mixed symbolic execution [J]. Computer Engineering,2020,46(8): 190-196.)
[18]吳皓,周世龍,史東輝,等. 符號(hào)執(zhí)行技術(shù)及應(yīng)用研究綜述 [J]. 計(jì)算機(jī)工程與應(yīng)用,2023,59(8): 56-72.(Wu Hao,Zhou Shilong,Shi Donghui,et al. Review of symbolic execution technology and applications [J]. Computer Engineering and Applications,2023,59(8): 56-72.)
[19]Bohme M,Pham V T,Roychoudhury A. Coverage-based greybox fuz-zing as Markov chain [J]. IEEE Trans on Software Engineering,2019,45(5): 489-506.