張云菲 張月明 沈小茜 孫宇帆
摘要:模糊測試技術(shù)是一種應(yīng)用模糊過程來驗證待測程序(PUT) 是否違反正確性策略的測試技術(shù),被廣泛應(yīng)用于自動化漏洞挖掘。然而,模糊測試技術(shù)在生成測試用例的過程中,由于搜索空間過大,因此存在著較大的隨機性和盲目性,無法有效率地找到潛在的漏洞。定向模糊測試技術(shù)通過定位到目標位置,提高了模糊測試的效率,被廣泛應(yīng)用于缺陷復(fù)現(xiàn)、補丁檢驗和靜態(tài)分析驗證。通過調(diào)研大量文獻,分析了定向模糊測試的特征以及常見的模型,總結(jié)了多篇論文中定向模糊測試在目標識別、適應(yīng)度、模糊優(yōu)化方面使用的度量指標,闡述了當今定向模糊測試的幾種應(yīng)用場景,并在最后探究了若干未來可能的發(fā)展方向。
關(guān)鍵詞:定向模糊測試;種子選擇;調(diào)度方式;缺陷復(fù)現(xiàn)
中圖分類號:TP311.5? ? ? 文獻標識碼:A
文章編號:1009-3044(2023)31-0074-05
開放科學(xué)(資源服務(wù))標識碼(OSID)
0 引言
1) 應(yīng)用背景
安全測試是現(xiàn)代軟件最有效的漏洞檢測技術(shù)之一。在安全測試技術(shù)中,模糊測試被認為是最有效且可擴展的,它為PUT提供各種輸入,并監(jiān)控異常行為,例如堆?;蚓彌_區(qū)溢出、無效讀/寫、斷言故障或內(nèi)存泄漏。自提出以來,模糊測試越來越受行業(yè)和學(xué)術(shù)界歡迎,并演變?yōu)檫m用于不同測試場景的不同類型的模糊器。
2) 模糊測試的方法、特點、不足之處
根據(jù)模糊測試對PUT內(nèi)部結(jié)構(gòu)的認識,模糊器可以分為黑盒、白盒或灰盒。以灰盒為例,灰盒模糊器基于來自PUT執(zhí)行的反饋信息,使用進化算法來生成新的輸入和探索路徑。一般來說,模糊器的目標是在有限的時間內(nèi)覆蓋盡可能多的程序狀態(tài)。這是因為從直覺上來說,代碼覆蓋率與bug覆蓋率密切相關(guān),代碼覆蓋率高的模糊器可以發(fā)現(xiàn)更多的bug。然而,存在幾種測試場景,其中只涉及部分需要進行充分測試的程序狀態(tài)。例如,如果MJS(嵌入式設(shè)備的JavaScript引擎)在MSP432 ARM平臺上發(fā)現(xiàn)了漏洞,則在其他平臺的相應(yīng)代碼中可能會出現(xiàn)類似的漏洞。在這種情況下,應(yīng)該引導(dǎo)模糊器在這些重要的位置重現(xiàn)錯誤。另一種情況是,當bug被修復(fù)時,程序員需要檢查補丁是否完全修復(fù)了錯誤。這需要模糊器聚焦于那些補丁代碼上。在這兩種情況下,都需要引導(dǎo)模糊器到達PUT中的某些指定位置。
3) 定向模糊測試的發(fā)展
目前,定向模糊測試已經(jīng)成為一個研究熱點,發(fā)展非常迅速。它已經(jīng)超越了依賴手動標記的目標站點,基于距離的度量來區(qū)分種子優(yōu)先級的原始模式。使用了新的適合度指標,例如蹤跡相似性和漏洞預(yù)測模型。當前的定向模糊測試工具不僅能自動識別目標,而且能以定向的方式暴露目標程序的行為。在不同的場景下,大量的變體已經(jīng)被應(yīng)用于軟件測試、例如補丁測試[1-2]、回歸測試[3]、錯誤重現(xiàn)[4]、知識整合、結(jié)果驗證[5-6]、節(jié)能[7]和特殊錯誤檢測[4,7]。雖然定向模糊測試發(fā)展迅速且有效,但它也有普遍的局限性和挑戰(zhàn),值得進一步研究。在這種背景下,本文開展綜述,總結(jié)定向模糊測試研究進展的經(jīng)驗證據(jù)。在分析定向模糊測試研究的優(yōu)點和局限性的基礎(chǔ)上,嘗試找出當前研究中的差別,同時揭示新的研究機會,并提出進一步研究的領(lǐng)域。
1 研究框架
1.1 框架圖
1.2 研究方法
1.2.1 關(guān)鍵詞
根據(jù)綜述研究的主題,選取了如下關(guān)鍵詞進行文獻檢索:定向模糊測試、定向白盒模糊測試、定向灰盒模糊測試。對于白盒模糊器,檢索關(guān)鍵詞細分為符號執(zhí)行、程序分析等;對于灰盒模糊器,檢索關(guān)鍵詞細分為種子選擇、調(diào)度方式、缺陷復(fù)現(xiàn)等。
1.2.2 搜索過程
確定關(guān)鍵詞后,小組使用以下三種方式搜索相關(guān)期刊論文:1) 在軟件工程和安全領(lǐng)域的頂級期刊和會議網(wǎng)站上搜索;2) 通過google scholar 搜索引擎搜索;3) 在ACM Digital Library中搜索。隨后對收集到的論文進行篩選,下列類型的論文將被排除在外:1) 非CCF中A類、B類的會議與期刊;2) 傳統(tǒng)的基于覆蓋率的模糊測試,非定向模糊測試;3) 論文較短(少于6頁),只講模糊器模型,缺少相關(guān)工作的背景介紹;4) 較過時的技術(shù)選型,如部分2017年后的白盒模糊器。
1.2.3 分析過程
將篩選后的論文進行整理,共收集到27篇相關(guān)論文。其中灰盒部分21篇,白盒部分6篇。2020—2022年12篇,2017—2019年10篇,2009—2016年5篇。根據(jù)從每篇論文中提取出的摘要、關(guān)鍵詞,首先將研究方向進行分類。之后對每篇論文的技術(shù)模型展開分析,總結(jié)其應(yīng)用場景,闡述其發(fā)展趨勢與挑戰(zhàn)。具體而言,研究問題如下:
RQ1:定向模糊測試有哪些目標識別方法?
RQ2:定向模糊測試有哪些適應(yīng)度指標?
RQ3:本文研究的定向模糊器對模糊過程具體做了怎樣的優(yōu)化?
RQ4:定向模糊測試有哪些應(yīng)用場景?
RQ5:定向模糊測試的發(fā)展趨勢與挑戰(zhàn)是怎樣的?
2 目標識別
定向模糊測試的目標識別可分為針對目標位置和針對目標bug兩類。
2.1 針對目標位置
大多數(shù)定向模糊策略的難點在于需要對PUT進行目標預(yù)標記[8-11]。手動標記依賴于關(guān)于目標位置的先驗知識,例如在源代碼中的行號,或二進制級別的虛擬內(nèi)存地址,來標記目標并引導(dǎo)執(zhí)行到所需位置。然而獲得這樣的先驗知識是具有挑戰(zhàn)性的,特別是對于二進制代碼。為了合理有效地設(shè)置目標位置,研究人員會使用輔助元數(shù)據(jù),例如git提交日志中的代碼變更[2]、從錯誤跟蹤中提取的信息[4]、CVE漏洞描述中的語義[7]或深度學(xué)習(xí)模型[5-6],來識別代碼中易受攻擊的功能[5-6]、關(guān)鍵位置、語法標記、完整性檢查以及補丁相關(guān)分支[1,3],并將這些易受攻擊的代碼部分或位置設(shè)定為目標。然而,這種目標識別方案仍然依賴于額外的處理信息并在PUT上標記目標的工作。當?shù)谝淮螌UT進行模糊測試或缺乏結(jié)構(gòu)良好的信息時,這種方法是不合適的。
為了提高自動化程度,靜態(tài)分析工具[9,12-15]被應(yīng)用于自動發(fā)現(xiàn)PUT中的潛在危險區(qū)域。然而,這些工具通常只適用于特定錯誤類型和編程語言。另一種定向利用編譯器sanitiser的遍(pass) 來注釋PUT中的潛在錯誤,或者進行二進制級比較來識別補丁相關(guān)的目標分支[1]。深度學(xué)習(xí)方法已被用于預(yù)測二進制[6]和抽象語法樹級別[5]的潛在易受攻擊的代碼。最后,攻擊面識別組件也被用于自動識別定向灰盒模糊測試的易受攻擊目標。
2.2 針對目標bug
定向灰盒模糊測試也可以用作特定錯誤檢測的手段。例如,UAFuzz[4]和UAFL[16]利用目標操作序列而不是目標站點來尋找釋放后使用漏洞,其存儲操作(例如,分配、使用和釋放存儲)必須以特定順序執(zhí)行。AFL-HR[17]通過協(xié)同進化方法觸發(fā)了難以顯現(xiàn)的緩沖區(qū)溢出和整數(shù)溢出的錯誤。Greyhound[7]引導(dǎo)Wi-Fi客戶端表現(xiàn)出偏離Wi-Fi協(xié)議的異常行為。對于針對特定錯誤的定向灰盒模糊測試,不需要在PUT中標記目標,這意味著模糊器可以以進化的方式自動識別和觸發(fā)這樣的錯誤。
3 適應(yīng)度指標
3.1 基于距離
AFLGo[11]在編譯時檢測源代碼,并根據(jù)PUT的調(diào)用和控制流圖中的邊數(shù)計算到目標基本塊的距離。然后在運行時,它聚合每個基本塊的距離值,計算平均值來評估種子。它根據(jù)距離對種子進行優(yōu)先排序,并優(yōu)先選擇更接近目標的種子。一些后續(xù)的模糊器也更新了此基于距離的方案。例如,TOFU[8]的距離度量被定義為達到目標所需的正確分支決策的數(shù)量。對于每個目標,1dVul[1]采用貪婪突變策略評估從每個測試輸入到目標分支的距離,并優(yōu)先考慮更接近目標的測試輸入。SemFuzz[2]將每一個使用輸入的運行稱為模糊實例,對于每一個實例,通過內(nèi)置觀測器觀察執(zhí)行以測量易受攻擊函數(shù)與模糊實例的執(zhí)行軌跡之間的距離。對應(yīng)于最短距離的輸入被選擇為新的種子輸入,用于另一輪模糊化,直到達到任何易受攻擊函數(shù)。UAFuzz[4]則使用調(diào)用鏈的距離度量,導(dǎo)致目標函數(shù)更有可能同時包含分配函數(shù)和釋放函數(shù),以檢測復(fù)雜的行為釋放后使用漏洞。不同于在傳統(tǒng)的距離計算中使用等權(quán)重的基本塊,AFLChurn[3]基于基本塊最近被改變的時間或改變的頻率來分配數(shù)字權(quán)重,WindRanger[18]則在計算距離時考慮偏差基本塊(即,執(zhí)行軌跡開始偏離目標位置的基本塊)?;诰嚯x的方法的一個缺點是它只關(guān)注最短的距離,因此當有多條路徑到達同一目標時,較長的選項可能會被忽略,從而導(dǎo)致差異。另一個缺點是在基本塊級計算距離時耗費大量的時間,在一些目標程序上,用戶報告說僅僅計算距離文件就要花費數(shù)小時。
3.2 基于相似度
相似度是由Chen等人在Hawkeye[10]中首次提出的一種度量,它在函數(shù)級別上度量種子的執(zhí)行軌跡與目標的執(zhí)行軌跡之間的相似度。直覺是,在“預(yù)期軌跡”中覆蓋更多功能的種子將有更多機會變異并到達目標。Hawkeye將基本塊軌跡距離與覆蓋函數(shù)相似性相結(jié)合,用于種子優(yōu)先級排序和功率調(diào)度。LOLLY[19]使用用戶指定的程序語句序列作為目標,并將種子覆蓋目標序列的能力(即序列覆蓋率)作為評估種子的度量。Berry[12]通過考慮目標序列的執(zhí)行上下文來升級LOLLY。這增強了具有“必要節(jié)點”的目標序列,并使用目標執(zhí)行軌跡和增強的目標序列之間的相似性來區(qū)分種子的優(yōu)先級。然后,相似性被擴展到覆蓋其他目標形式,例如操作、bug跟蹤和標記位置。形式上,相似性是某個度量的當前狀態(tài)和目標狀態(tài)之間的重疊程度,其中度量包括錯誤跟蹤的長度,以及覆蓋的位置、覆蓋的操作或覆蓋的功能的數(shù)量。UAFL[16]使用操作序列覆蓋來指導(dǎo)測試用例生成,以逐步覆蓋可能觸發(fā)釋放后使用漏洞的操作序列。UAFuzz[4]還使用序列感知的目標相似性度量來測量種子的執(zhí)行和目標自由后使用錯誤跟蹤之間的相似性。相比之下,基于相似性的度量比基于距離的替代方法能夠更好地處理多目標擬合。此外,基于相似性的度量可以包括目標之間的關(guān)系,例如目標的排序[4]。最后,在基本塊級別測量基于距離的度量,這將引入相當大的開銷,而基于相似度的度量可以以相對較高的水平提高整體效率。
3.3 基于概率
研究人員通過使用一些基于深度學(xué)習(xí)的方法,預(yù)測函數(shù)的易受攻擊概率,量化種子到達目標位置的可能性。易受攻擊函數(shù)中的每個基本塊被給予靜態(tài)易受攻擊分數(shù)以測量易受攻擊概率,對于每個輸入的種子,將執(zhí)行路徑上所有基本塊的靜態(tài)易受攻擊分數(shù)的總和用作適應(yīng)度分數(shù),優(yōu)先考慮具有較高分數(shù)的輸入[6]。FuzzGuard [20]在模糊器生成大量新輸入后利用模型預(yù)測每個輸入的可達性。為了解決訓(xùn)練的模型可能不適用于新生成的輸入的問題,F(xiàn)uzzGuard設(shè)計了一種具有代表性的數(shù)據(jù)選擇方法,以從每一輪變異中抽取訓(xùn)練數(shù)據(jù),從而最小化采樣數(shù)據(jù)的數(shù)量以提高效率。基于概率的方法可以擴展到指定崩潰以外的位置,例如信息的泄露,漏洞利用、特定的漏洞類型和不同的資源使用。
3.4 基于其他
TIFF[21]監(jiān)視基本塊及其執(zhí)行頻率,并根據(jù)執(zhí)行的基本塊計算輸入的適合度。任何執(zhí)行新基本塊的輸入都會被考慮進一步變異。AFLchurn[3]建議同時對所有提交進行模糊處理,但更多(最近)提交中的代碼具有更高的優(yōu)先級。每個基本塊都成為目標,都被分配了一個數(shù)字權(quán)重,以衡量其最近或多久更改一次。CAFL[22]旨在滿足一系列約束條件(即目標站點和數(shù)據(jù)條件的組合),而不是到達一組目標站點。它將約束的距離定義為給定種子滿足約束的程度,并按順序排列更好地滿足約束的種子的優(yōu)先級。AFL-HR[17]首次使用脆弱性特定的適應(yīng)度指標來生成和保留接近暴露漏洞的測試輸入,采用了一種稱為headroom的面向漏洞的適應(yīng)性度量,它指示測試輸入在給定漏洞位置暴露難以發(fā)現(xiàn)的漏洞(例如,緩沖區(qū)或整數(shù)溢出)的程度。
4 模糊測試優(yōu)化
定向模糊測試的幾個關(guān)鍵步驟包括種子輸入、種子優(yōu)先級排序、功率調(diào)度、變異器調(diào)度。下文將依次從這些方面總結(jié)模糊優(yōu)化的策略。
4.1 種子輸入優(yōu)化
在定向模糊測試中,一個好的種子可以引導(dǎo)模糊器更接近目標位置,并且能夠提高后期變異過程的性能。Zong等人的研究表明,平均而言,AFLGo[11]超過91.7%的輸入不能到達目標代碼,即無效輸入。許多模糊器對此進行了優(yōu)化以提升效率,其中動態(tài)污點分析技術(shù)[21,23]和語義信息分析技術(shù)[2]可以幫助生成與輸入語法有關(guān)的有效輸入,提高了到達目標代碼,尤其是易受攻擊的目標或者安全敏感度高的目標的概率。此外深度學(xué)習(xí)技術(shù)[20]也被廣泛應(yīng)用其中,在執(zhí)行之前就過濾掉無法到達目標代碼的輸入,這樣可以顯著節(jié)省實際運行時間。BEACON[24]使用了輕量級靜態(tài)分析來編輯修改那些在運行時無法到達目標代碼的路徑,這樣可以在實際的模糊化運行過程中,減少執(zhí)行超過80%的路徑,節(jié)省了運行時間。
4.2 種子優(yōu)先級排序優(yōu)化
在定向模糊測試中,為了提高測試效率,往往更接近目標的種子更先接受變異,因此需要給予高優(yōu)先級。為了實現(xiàn)這一目標,定向模糊測試通過采用不同的適應(yīng)度指標,基于控制流分析,來實現(xiàn)種子優(yōu)先級排序。基于距離的方法[4,8,11]是一種傳統(tǒng)且常見的方法,該方法首先計算在調(diào)用圖或者控制流圖中基本塊到達目標位置的距離,根據(jù)距離的遠近來區(qū)分不同的種子,從而分配能量。基于相似性的方法[10,19]是基于距離的方法的改進,以種子的執(zhí)行軌跡和目標的執(zhí)行軌跡間的相似度作為評判標準,從而分配能量。定向混合模糊化[1,12,25]結(jié)合了白盒模糊器的精確性和灰盒模糊器的可擴展性。灰盒模糊器可以對輸入變異進行優(yōu)先排序和調(diào)度,以更快速地接近目標,而白盒模糊器利用符號執(zhí)行策略,可以解決復(fù)雜的路徑約束,從而獲得更精確的路徑。
4.3 功率調(diào)度優(yōu)化
在定向模糊測試中,更接近目標的種子不僅需要更高的種子優(yōu)先級,還需要被分配更多的功率,以產(chǎn)生更多的變異體。大多數(shù)定向灰盒模糊器[10-11]使用模擬退火算法來分配功率。傳統(tǒng)的隨機調(diào)度算法總是接受更好的解決方案,這可能陷入局部最優(yōu)而忽略了全局最優(yōu)解。而模擬退火算法實現(xiàn)了以一定的概率接受比當前更差的解決方案,因此有一定的概率跳出局部最優(yōu)解,找到全局最優(yōu)解。Xiaogang Zhu、Marcel B?hme提出了一種基于蟻群優(yōu)化的字節(jié)級功率調(diào)度算法[3],這種算法通過回歸的方法,找出最近更改或更頻繁更改的代碼,因為這些代碼中往往有更大的概率存在bug,因此給這些字節(jié)分配更多的功率。Hongliang Liang、Lin Jiang、Lu Ai、Yini Zhang、Yue Yu等利用溫度閾值優(yōu)化了基于模擬退火算法[12,19],分為探索和開發(fā)兩個階段。在探索階段,隨機變異提供的種子以產(chǎn)生許多新的輸入,在開發(fā)階段,從具有更高序列覆蓋的種子產(chǎn)生更多新的輸入。
4.4 變異器調(diào)度優(yōu)化
在定向模糊測試中,可以將變異分為不同的粒度,并根據(jù)實際的模糊測試的過程來動態(tài)調(diào)整變異的粒度,這樣可以提高種子變異的精度和速度,從而增強輸入的定向性。通常的方法是先將變異分為粗粒度和細粒度,然后進行動態(tài)調(diào)整[2,6,10,13]。粗粒度的變異器往往用于批量改變字節(jié),從而將執(zhí)行目標指向脆弱的代碼塊。細粒度的變異器往往僅涉及少量字節(jié)級的修改、插入或刪除,以便監(jiān)控關(guān)鍵變量。變異器調(diào)度是由經(jīng)驗值控制的,隨著種子越來越接近目標,模糊器給予粗粒度變異的機會減少,而給予細粒度變異的機會增加。
5 應(yīng)用場景
5.1 名詞解釋
5.1.1 缺陷復(fù)現(xiàn)
通過在堆棧跟蹤中設(shè)置方法調(diào)用作為目標來崩潰復(fù)制。當報告現(xiàn)場崩潰時,只有堆棧跟蹤和一些環(huán)境參數(shù)被發(fā)送到內(nèi)部開發(fā)團隊。為了保護用戶的隱私,特定的崩潰輸入通常不可用的,定向模糊器使得內(nèi)部團隊可以快速重現(xiàn)這類崩潰。
5.1.2 補丁檢驗
通過將已更改過的語句設(shè)置為目標來進行補丁測試。當一個關(guān)鍵組件發(fā)生更改時,研究者希望檢查其中是否引入了漏洞。一個關(guān)注這些變化的模糊器有更高的機會暴露回歸。
5.1.3 靜態(tài)分析報告驗證
靜態(tài)分析報告通過將靜態(tài)分析工具設(shè)置為報告為潛在危險的目標來驗證。在實驗中,一個工具可能會將程序的某幾行定位為潛在的緩沖區(qū)溢出,定向模糊器可以生成測試輸入,顯示漏洞確實存在[11]。
5.2 具體分析
和傳統(tǒng)的定向白盒模糊技術(shù)和由覆蓋引導(dǎo)的灰盒模糊技術(shù)CGF相比,DGF把大部分的時間花費在接近目標站點和對目標站點進行測試,減少了一些無關(guān)程序組件對測試資源的浪費。這種特性使得DGF在缺陷復(fù)現(xiàn)、補丁測試和靜態(tài)分析報告驗證這三個應(yīng)用場景中具有出色的表現(xiàn):
1) 對于缺陷復(fù)現(xiàn),將崩潰站點設(shè)置為目標站點,使用DGF技術(shù)可以快速復(fù)制和獲取概念驗證性的導(dǎo)致崩潰的輸入。
2) 對于補丁測試,將打補丁的代碼站點設(shè)置為目標站點,使用DGF技術(shù)可以快速測試補丁是否完整。
3) 對于靜態(tài)分析報告驗證,將靜態(tài)分析報告的可疑位置設(shè)置為目標站點,使用DGF技術(shù)可以檢查報告的位置是否確實存在漏洞。
而后續(xù)研究中提出的技術(shù)又在DGF的基礎(chǔ)之上提高了模糊器在處理上述相關(guān)場景下的性能,下面將對不同技術(shù)在不同應(yīng)用場景中的表現(xiàn)進行比較,用于討論的技術(shù)包括基于符號執(zhí)行引擎Klee 的定向白盒模糊器Katch、BugRedux,定向灰盒模糊技術(shù)AFLGo、WindRanger,由覆蓋引導(dǎo)的灰盒模糊技術(shù)CGF(AFL和FairFuzz) ,根據(jù)靜態(tài)信息和執(zhí)行跟蹤對執(zhí)行的種子進行評估的Hawkeye,利用序列定向策略和并行執(zhí)行技術(shù)來提高模糊的有效性的序列定向混合模糊技術(shù)(SDHF) ,結(jié)合了基于距離的定向模糊機制和基于主導(dǎo)的定向符號執(zhí)行機制的補丁檢驗問題的解決方案1dVul,序列覆蓋定向模糊技術(shù)(SCDF) 。
5.3 不同技術(shù)在缺陷復(fù)現(xiàn)中的比較
5.3.1 定向灰盒與非定向灰盒
通過將漏洞位置設(shè)置為目標站點,DGF(AFLGo和WindRanger) 在暴露相對崩潰方面可以獲得比CGFs(AFL和FairFuzz) 更好的性能。在實驗程序的11個漏洞中,WindRanger在第9個漏洞上獲得了更好的TTE??偟膩碚f,WindRanger在TTE上對AFL和FairFuzz中分別提高了47%和59%[18]。
5.3.2 定向灰盒與定向白盒
AFLGo在基準測試上比BugRedux有效得多,AFLGo無法復(fù)制的唯一崩潰是由于一個工程問題:AFLGo無法生成多個文件[11]。
5.3.3 定向灰盒技術(shù)之間
與AFLGo相比,30%的加速表明WindRanger具有更好的定向能力。對于難以暴露的CVEs(TTE>1小時),WindRanger明顯比其他工具快1.22×到2.2×。對于CVE-2016-4491和CVE-2016-6131,WindRanger獲得了最多的打擊回合對于CVE-2016-4489和CVE-2016-4490,WindRanger的性能并不如AFLGo。然而,這些cve只需要幾分鐘就可以很容易暴露[18]。
5.3.4 定向灰盒技術(shù)和Hawkeye
在大多數(shù)情況下,Hawkeye在到達目標地點的時間和暴露崩潰的時間方面都優(yōu)于最先進的灰盒模糊器。特別是Hawkeye曝光某些崩潰的速度比最先進的AFLGo快7倍,將曝光時間從3.5小時減少到0.5小時[10]。
5.3.5 序列定向混合模糊技術(shù)與定向模糊技術(shù)(白盒BugRedux,灰盒AFLGo)
對于BugRedux的基準測試,Berry和AFLGo都可以重現(xiàn)崩潰,進一步比較這兩種工具觸發(fā)崩潰的時間成本,因為有更輕量的靜態(tài)分析,Berry的儀器時間比AFLGo減少很多,同時Berry的運行時間比AFLGo略短,這顯示了Berry的并行執(zhí)行的優(yōu)勢[10]。
5.3.6 序列覆蓋定向模糊LOLLY與AFLGo
LOLLY和AFLGo在運行時階段的性能在統(tǒng)計學(xué)上具有可比性。然而,在包含檢測階段和運行時階段的整個運行中,LOLLY在整體性能方面是優(yōu)越的[19]。
5.4 不同技術(shù)在補丁檢驗中的比較
5.4.1 定向灰盒與定向白盒
和Katch比較,AFLGo對于之前未被發(fā)現(xiàn)的改變的基本區(qū)塊的覆蓋比Katch多13%。AFLGo可以覆蓋Katch無法覆蓋的84個目標,而Katch則覆蓋了AFLGo無法覆蓋的59個目標。小交集的產(chǎn)生可以歸因于每種技術(shù)的個別優(yōu)勢,符號執(zhí)行可以解決進入“隔間”(compartments) 的困難約束,否則將很難訪問。另一方面,灰盒模糊器可以快速探索許多指向目標的路徑,而不會被困在一個特定的路徑“鄰域”中[11]。
5.4.2 1dVul與定向灰盒AFLGo
1dVul已經(jīng)成功地從應(yīng)用程序中確定的209個補丁目標中生成了130個目標的輸入,而AFLGo只能在相同的有限時間預(yù)算內(nèi)分別達到99個目標。此外,1dVul的運行速度分別比AFLGo快2.2倍,并確認了未打補丁程序的96個漏洞[1]。
6 發(fā)展趨勢與挑戰(zhàn)
1) 現(xiàn)今大部分定向模糊器評估性能的指標只有暴露時間,即暴露給定錯誤的第一個測試用例之前的模糊過程的時間,而往往忽略了額外性能開銷的測量。因此如果能夠?qū)⒎枅?zhí)行、靜態(tài)分析、動態(tài)污點分析、機器學(xué)習(xí)等分析技術(shù)帶來的性能開銷考慮在內(nèi),可以更全面公平地度量定向模糊器的性能。
2) 現(xiàn)今大部分定向模糊器在種子優(yōu)先級排序時依舊基于等權(quán)重度量,即控制流圖中每個分支的跳轉(zhuǎn)都是等概率的。目前常見的優(yōu)化方案如下:計算每條路徑能夠轉(zhuǎn)換為目標路徑的概率,據(jù)此進行種子的優(yōu)先級排序。具體分為兩步:首先收集路徑中所有分支的概率計算路徑概率,然后基于蒙特卡羅統(tǒng)計方法估計分支跳轉(zhuǎn)概率。這樣做更易到達定向目標位置,使得定向模糊器的性能更高。
3) 現(xiàn)今大部分定向模糊器都是在源碼層面上的測試,例如根據(jù)控制流圖計算距離等都非常依賴源代碼。二進制級定向模糊器研究較少,因為存在著較大的困難。一是運行開銷大,基于仿真器的工具如QEMU等通常效率較低。二是目標識別困難,只能從錯誤跟蹤中提取目標信息,而且二進制代碼非常難以閱讀。目前的解決方案如下:一是使用硬件輔助如英特爾PT處理器跟蹤,減少運行開銷;二是基于機器學(xué)習(xí)的方法,自動識別目標二進制代碼。這推動了二進制級定向模糊器的發(fā)展。
4) 現(xiàn)今大部分定向模糊器在多目標任務(wù)的測試中,并沒有特別關(guān)注目標之間的關(guān)系。而如果能利用目標之間的關(guān)系進行優(yōu)化,則能夠提高測試效率。目前的解決方案如下,基于空間關(guān)系:考慮它們是否共享同一個分支,以及它們的相對優(yōu)先級關(guān)系。基于狀態(tài)空間的位置:考慮兩個目標是否共享同一個狀態(tài),以及狀態(tài)轉(zhuǎn)換圖上兩個狀態(tài)是否可以相互轉(zhuǎn)換?;诙嗑€程的情況:考慮是否存在不同的線程,它們之間相互影響,導(dǎo)致雖然種子到達了目標位置,但并沒有觸發(fā)bug。
參考文獻:
[1] PENG J Q,LI F,LIU B C,et al.1dVul:discovering 1-day vulnerabilities through binary patches[C]//2019 49th Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN).IEEE,2019:605-616.
[2] YOU W,ZONG P Y,CHEN K,et al.SemFuzz:semantics-based automatic generation of proof-of-concept exploits[C]//Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security.New York:ACM,2017:2139-2154.
[3] ZHU X G,B?HME M.Regression greybox fuzzing[C]//Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security.New York:ACM,2021:2169-2182.
[4] NGUYEN M D,BARDIN S,BONICHON R,et al.Binary-level directed fuzzing for Use-After-Free vulnerabilities[C]//23rd International Symposium on Research in Attacks,Intrusions and Defenses (RAID2020).USENIX Association,2020:47-62.
[5] ZHU X,LIU S,LI X,et al.DeFuzz:deep learning guided directed fuzzing[EB/OL].[2022-10-20].https://arxiv.org/abs/2010. 12149.pdf.
[6] LI Y,JI S,LV C,et al.V-fuzz:vulnerability-oriented evolutionary fuzzing[EB/OL].[2022-10-20].https://arxiv.org/abs/1901.01142.pdf.
[7] GARBELINI M E,WANG C D,CHATTOPADHYAY S.Greyhound:directed greybox Wi-Fi fuzzing[J].IEEE Transactions on Dependable and Secure Computing,2022,19(2):817-834.
[8] WANG Z,LIBLIT B,REPS T.TOFU:target-oriented FUzzer[EB/OL].[2022-10-20].https://arxiv.org/abs/2004.14375.pdf.
[9] WüSTHOLZ V,CHRISTAKIS M.Targeted greybox fuzzing with static lookahead analysis[C]//Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering.New York:ACM,2020:789-800.
[10] CHEN H X,XUE Y X,LI Y K,et al.Hawkeye:towards a desired directed grey-box fuzzer[C]//Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security.New York:ACM,2018:2095-2108.
[11] B?HME M,PHAM V T,NGUYEN M D,et al.Directed greybox fuzzing[C]//Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security.Dallas Texas USA.New York,NY,USA:ACM,2017:2329-2344.
[12] LIANG H L,JIANG L,AI L,et al.Sequence directed hybrid fuzzing[C]//2020 IEEE 27th International Conference on Software Analysis,Evolution and Reengineering (SANER).IEEE,2020:127-137.
[13] SITU L Y,WANG L Z,LI X D,et al.Energy distribution matters in greybox fuzzing[C]//2019 IEEE/ACM 41st International Conference on Software Engineering:Companion Proceedings (ICSE-Companion).IEEE,2019:270-271.
[14] CHRISTAKIS M,MüLLER P,WüSTHOLZ V.Guiding dynamic symbolic execution toward unverified program executions[C]//Proceedings of the 38th International Conference on Software Engineering.New York:ACM,2016:144-155.
[15] PAK B.Hybrid fuzz testing: Discovering software bugs via fuzzing and symbolic execution[D].Pittsburgh: School of Computer Science Carnegie Mellon University,2012.
[16] WANG H J,XIE X F,LI Y,et al.Typestate-guided fuzzer for discovering use-after-free vulnerabilities[C]//Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering.New York:ACM,2020:999-1010.
[17] MEDICHERLA R K,KOMONDOOR R,ROYCHOUDHURY A.Fitness guided vulnerability detection with greybox fuzzing[C]//Proceedings of the IEEE/ACM 42nd International Conference on Software Engineering Workshops.New York:ACM,2020:513-520.
[18] DU Z J,LI Y K,LIU Y,et al.Windranger:a directed greybox fuzzer driven by deviation basic blocks[C]//2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE).IEEE,2022:2440-2451.
[19] LIANG H L,ZHANG Y N,YU Y,et al.Sequence coverage directed greybox fuzzing[C]//2019 IEEE/ACM 27th International Conference on Program Comprehension (ICPC).IEEE,2019:249-259.
[20] ZONG P Y,LV T,WANG D W,et al.FuzzGuard: Filtering out unreachable inputs in directed grey-box fuzzing through deep learning[C]//29th USENIX Security Symposium (USENIX Security 20).USENIX Association,2020:2255-2269.
[21] JAIN V,RAWAT S,GIUFFRIDA C,et al.TIFF:using input type inference to improve fuzzing[C]//Proceedings of the 34th Annual Computer Security Applications Conference.New York,NY,USA:ACM,2018:505-517.
[22] LEE G,SHIM W,LEE B.Constraint-guided directed greybox fuzzing[C]//30th USENIX Security Symposium (USENIX Security 21).USENIX Association, August 2021:3559-3576.
[23] GANESH V,LEEK T,RINARD M.Taint-based directed whitebox fuzzing[C]//2009 IEEE 31st International Conference on Software Engineering.IEEE,2009:474-484.
[24] HUANG H Q,GUO Y Y,SHI Q K,et al.BEACON:directed grey-box fuzzing with provable path pruning[C]//2022 IEEE Symposium on Security and Privacy (SP).IEEE,2022:36-50.
[25] OGNAWALA S,HUTZELMANN T,PSALLIDA E,et al.Improving function coverage with munch:a hybrid fuzzing and directed symbolic execution approach[C]//Proceedings of the 33rd Annual ACM Symposium on Applied Computing.Pau France.New York,NY,USA:ACM,2018:1475-1482.
【通聯(lián)編輯:謝媛媛】