国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于多目標(biāo)支配分析和路徑動(dòng)態(tài)修剪優(yōu)化的定向模糊測(cè)試技術(shù)

2024-12-31 00:00:00李澤源尹中旭宗國(guó)笑桑海涯
計(jì)算機(jī)應(yīng)用研究 2024年11期

摘 要:當(dāng)前定向模糊測(cè)試技術(shù)的平均距離模型在多目標(biāo)測(cè)試中缺乏對(duì)逐個(gè)目標(biāo)的指向性,在導(dǎo)向同一目標(biāo)時(shí)路徑多樣化不強(qiáng),且未根據(jù)不同目標(biāo)的覆蓋程度動(dòng)態(tài)調(diào)整距離度量,導(dǎo)致多目標(biāo)測(cè)試不均衡和效率降低,難以在結(jié)合靜態(tài)分析告警等多目標(biāo)環(huán)境中開(kāi)展漏洞挖掘。針對(duì)以上問(wèn)題,提出了一種多目標(biāo)定向探索的模糊測(cè)試技術(shù)MTDFuzz,識(shí)別待遍歷多目標(biāo)的支配節(jié)點(diǎn),利用基于多目標(biāo)支配分析的測(cè)試用例優(yōu)選,通過(guò)支配節(jié)點(diǎn)覆蓋評(píng)分激勵(lì)機(jī)制引導(dǎo)生成能夠覆蓋支配節(jié)點(diǎn)和目標(biāo)的測(cè)試用例,實(shí)現(xiàn)在限定關(guān)鍵覆蓋要素的前提下,對(duì)目標(biāo)路徑的多樣化和指向性探索;根據(jù)目標(biāo)的覆蓋狀態(tài)進(jìn)行路徑動(dòng)態(tài)修剪優(yōu)化,已被充分測(cè)試的路徑和目標(biāo)不參與距離信息反饋,通過(guò)剪枝和全局支配節(jié)點(diǎn)修正動(dòng)態(tài)調(diào)整支配節(jié)點(diǎn)和目標(biāo)基本塊評(píng)分,利用支配節(jié)點(diǎn)覆蓋度優(yōu)化種子調(diào)度策略,實(shí)現(xiàn)對(duì)多目標(biāo)測(cè)試資源的有效分配。實(shí)驗(yàn)結(jié)果表明:與常用的定向模糊測(cè)試工具對(duì)比,多目標(biāo)下MTDFuzz的平均漏洞發(fā)現(xiàn)時(shí)間縮短了57.6%,且在Glibc、FFmpeg等4個(gè)開(kāi)源程序中發(fā)現(xiàn)了12個(gè)未公開(kāi)漏洞,顯著提高了定向模糊測(cè)試的多目標(biāo)探索能力和漏洞挖掘效率。

關(guān)鍵詞:定向模糊測(cè)試; 漏洞挖掘; 多目標(biāo)導(dǎo)向; 程序分析

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A

文章編號(hào):1001-3695(2024)11-037-3455-09

doi: 10.19734/j.issn.1001-3695.2024.01.0060

Directional fuzzing based on multi-objective domination analysis andpath dynamic pruning optimization

Li Zeyuan, Yin Zhongxu?, Zong Guoxiao, Sang Haiya

(School of Cyberspace Security, Information Engineering University, Zhengzhou 450001, China)

Abstract:Current directed fuzzing techniques suffer from a lack of specificity towards individual targets in multi-target testing, limited path diversity when aiming at the same target, and a failure to dynamically adjust distance metrics based on the coverage level of different targets, leading to imbalanced testing and reduced efficiency in environments that integrate static analysis alerts for vulnerability mining. To address these issues, this paper introduced MTDFuzz, a multi-target directed exploration fuzzing technique that identified dominating nodes for targeted traversal. By leveraging test case optimization through multi-objective dominance analysis and a coverage score incentive mechanism, MTDFuzz generated test cases that covered both dominating nodes and targets, enabling diversified and directed exploration of target paths within the constraints of key coverage elements. The technique dynamically pruned paths based on target coverage, excluding thoroughly tested paths and targets from distance metric feedback. Through pruning and global dominating node adjustment, it dynamically tuned the scores of dominating nodes and target basic blocks, optimizing seed scheduling strategies based on dominating node coverage to efficiently allocate multi-target testing resources. Experimental results demonstrate that MTDFuzz significantly reduces the average time to discover vulnerabilities by 57.6% compared to commonly used directed fuzzing tools, and has uncovered 12 0-day vulnerabilities in four open-source programs, including Glibc and FFmpeg, significantly enhancing the multi-target exploration capability and vulnerability mining efficiency of directed fuzzing.

Key words:directed fuzzing; vulnerability mining; multi-objective orientation; program analysis

0 引言

模糊測(cè)試[1~3]作為一種自動(dòng)化軟件測(cè)試技術(shù),已經(jīng)成為現(xiàn)代大規(guī)模軟件和系統(tǒng)中探索安全漏洞最有效的方法之一。定向模糊測(cè)試基于覆蓋率引導(dǎo)的灰盒模糊測(cè)試技術(shù)通過(guò)加入額外的目標(biāo)或約束來(lái)引導(dǎo)測(cè)試的執(zhí)行方向,以生成更為高效和具針對(duì)性的測(cè)試用例。AFLGo[4]揭開(kāi)了現(xiàn)代化定向模糊測(cè)試的序幕,通過(guò)預(yù)先標(biāo)記代碼目標(biāo)并預(yù)置控制流距離,對(duì)距離目標(biāo)較近的種子賦予更多的能量,進(jìn)而引導(dǎo)種子快速抵達(dá)目標(biāo)并觸發(fā)漏洞。之后,定向模糊測(cè)試的研究延伸至與靜態(tài)分析、符號(hào)執(zhí)行等技術(shù)的結(jié)合,以生成能達(dá)到更復(fù)雜程序結(jié)構(gòu)(如覆蓋特定分支或語(yǔ)句)的測(cè)試用例。這些早期工作證明,定向模糊測(cè)試可以顯著提高漏洞挖掘以及復(fù)現(xiàn)的效率和準(zhǔn)確性,并廣泛應(yīng)用于補(bǔ)丁的有效性檢測(cè)、漏洞復(fù)現(xiàn)、crash可利用性評(píng)估、驗(yàn)證靜態(tài)分析的結(jié)果從而消除誤報(bào),以及一些獨(dú)特類型的漏洞挖掘等領(lǐng)域。盡管定向模糊測(cè)試技術(shù)不斷發(fā)展并取得了顯著進(jìn)步,但現(xiàn)有技術(shù)主要側(cè)重于對(duì)單一或少量測(cè)試目標(biāo)的針對(duì)性測(cè)試,在同時(shí)針對(duì)較多的目標(biāo)進(jìn)行測(cè)試時(shí)往往存在目標(biāo)偏好的情況,缺乏均衡性,且難以將定向模糊測(cè)試的高效率和指向性直接用于未知漏洞挖掘。為滿足軟件漏洞挖掘的實(shí)際需求,需要一種能夠均衡導(dǎo)向至多個(gè)測(cè)試目標(biāo)的模糊測(cè)試技術(shù)。

本文的主要貢獻(xiàn)如下:

a)提出一種基于多目標(biāo)支配分析的測(cè)試用例優(yōu)選方法,對(duì)執(zhí)行到目標(biāo)起著決定性作用的支配節(jié)點(diǎn)進(jìn)行錨定,根據(jù)基于支配節(jié)點(diǎn)覆蓋度的種子調(diào)度策略,通過(guò)支配節(jié)點(diǎn)覆蓋評(píng)分激勵(lì)引導(dǎo)生成覆蓋支配節(jié)點(diǎn)和目標(biāo)位置的種子,實(shí)現(xiàn)在限定關(guān)鍵覆蓋要素的前提下,對(duì)目標(biāo)路徑進(jìn)行多樣化和指向性探索。

b)提出一種基于目標(biāo)覆蓋狀態(tài)的路徑修剪方法,能夠支撐隨測(cè)試過(guò)程和目標(biāo)覆蓋情況,不采用已充分測(cè)試的目標(biāo)路徑參與測(cè)試用例評(píng)分計(jì)算,對(duì)支配節(jié)點(diǎn)和目標(biāo)基本塊的評(píng)分進(jìn)行動(dòng)態(tài)調(diào)整,該方法對(duì)逐個(gè)目標(biāo)的針對(duì)性更強(qiáng),實(shí)現(xiàn)了對(duì)多目標(biāo)的高效探索和漏洞發(fā)現(xiàn)。

c)基于以上方法實(shí)現(xiàn)了多目標(biāo)定向模糊測(cè)試原型系統(tǒng)MTDFuzz,與AFL++、AFLGo、LeoFuzz、SieveFuzz等模糊測(cè)試工具進(jìn)行相關(guān)對(duì)比實(shí)驗(yàn)并發(fā)現(xiàn)了12個(gè)未公開(kāi)漏洞,證明本文工作的有效性與實(shí)用性。

1 背景

1.1 定向模糊測(cè)試

如圖1所示,現(xiàn)有的主流定向模糊測(cè)試方法在靜態(tài)分析階段使用程序分析方法,提取程序中與目標(biāo)相關(guān)的導(dǎo)向信息(如到目標(biāo)位置的距離、與目標(biāo)相關(guān)的代碼以及執(zhí)行路徑上的約束信息等),并將導(dǎo)向信息插樁到程序中,用于后續(xù)動(dòng)態(tài)過(guò)程的針對(duì)性引導(dǎo)。在動(dòng)態(tài)分析時(shí),首先進(jìn)入探索(exploration)階段,即利用代碼覆蓋率信息提升語(yǔ)料庫(kù)的覆蓋率,避免陷入局部最優(yōu),隨后進(jìn)入利用(exploitation)階段,此時(shí)利用靜態(tài)分析得到的導(dǎo)向性信息,對(duì)種子的變異、調(diào)度,以及種子隊(duì)列進(jìn)行調(diào)整,實(shí)現(xiàn)導(dǎo)向性測(cè)試。

現(xiàn)有的定向模糊測(cè)試方法主要分為三類:a)最小距離算法引導(dǎo)的定向模糊測(cè)試,如AFLGo、Hawkeye[5],這些方法通過(guò)感知種子與目標(biāo)的距離,為“更接近”的種子提供更多調(diào)度和變異機(jī)會(huì);b)修剪輸入空間或修剪代碼空間,例如Beacon[6]前置路徑約束以提前截?cái)嗖豢蛇_(dá)路徑,F(xiàn)uzzGuard[7]使用深度學(xué)習(xí)模型來(lái)過(guò)濾無(wú)效測(cè)試用例,而SieveFuzz[8]引入一種跳閘機(jī)制,將模糊測(cè)試的搜索空間限制在只與達(dá)到指定目標(biāo)位置相關(guān)的范圍內(nèi),WindRanger[9]通過(guò)識(shí)別偏移基本塊以避免測(cè)試與目標(biāo)無(wú)關(guān)的代碼區(qū)域;c)前置分析結(jié)果指導(dǎo)的綜合性優(yōu)化,如AFLChurn[10]運(yùn)用蟻群算法優(yōu)化目標(biāo)相關(guān)的字節(jié)級(jí)變異,提高覆蓋最近更新或頻繁修改的代碼區(qū)域的種子能量,這類區(qū)域存在“回歸”漏洞的概率較高,SAVIOR[11]、FISHFUZZ[12]和ParmeSan[13]通過(guò)Sanitizer標(biāo)記大量潛在漏洞監(jiān)測(cè)點(diǎn)后,設(shè)計(jì)不同的平均值距離算法來(lái)指導(dǎo)模糊測(cè)試優(yōu)先探索這些監(jiān)測(cè)點(diǎn),但是未設(shè)計(jì)特定的多目標(biāo)定向探索策略,仍然依賴于AFL的“遺傳進(jìn)化”的思想,給隨機(jī)變異生成最終覆蓋目標(biāo)位置的種子賦予更多的能量,未考慮目標(biāo)之間的關(guān)系以及測(cè)試是否充分。

1.2 問(wèn)題描述

雖然上述定向模糊測(cè)試方法在針對(duì)特定目標(biāo)的測(cè)試上取得了一些進(jìn)展,但仍然存在以下兩個(gè)方面的問(wèn)題:

問(wèn)題a):現(xiàn)有方法針對(duì)多個(gè)目標(biāo)采用平均距離描述路徑的接近程度,適合于同一目標(biāo)多個(gè)路徑點(diǎn)位的場(chǎng)景設(shè)定,但是對(duì)不同分支差異較大的多個(gè)目標(biāo)難以準(zhǔn)確評(píng)判,造成測(cè)試對(duì)多目標(biāo)的覆蓋性較差。

現(xiàn)有的定向距離模型計(jì)算目標(biāo)距離時(shí)[4,5,9,14],過(guò)度關(guān)注執(zhí)行路徑上距離最小的測(cè)試用例,導(dǎo)致最短路徑優(yōu)先,不利于測(cè)試路徑的多樣性。在多目標(biāo)環(huán)境下,當(dāng)前種子距離計(jì)算算法過(guò)度關(guān)注與目標(biāo)位置最近的執(zhí)行路徑,對(duì)路徑多樣性缺乏適應(yīng)性,缺少對(duì)能到達(dá)相同目標(biāo)的其他路徑的關(guān)注。漏洞挖掘需要滿足完整的路徑約束以及合適的數(shù)據(jù)流和控制流關(guān)系,最短路徑并不一定是漏洞觸發(fā)路徑,給予距離最近的種子較高權(quán)重可能會(huì)導(dǎo)致實(shí)際能觸發(fā)漏洞的測(cè)試用例得不到足夠調(diào)度,甚至出現(xiàn)定向模糊測(cè)試(DGF)偏好無(wú)法覆蓋任何目標(biāo)位置的種子的情況,以下舉例說(shuō)明。

以圖2中的過(guò)程間控制流圖為例,按照AFLGo的距離算法計(jì)算w、x、y、z四個(gè)種子的距離并排序:四個(gè)種子的執(zhí)行軌跡分別是Trace(w)=A→B→C→D,Trace(x)=A→F→G→H→I→J,Trace(y)=A→F→L→M→N→O→P→Q→R→T,Trace(z)=A→F→L→M→R→S。

在多目標(biāo)環(huán)境下,基本塊的距離計(jì)算采用了調(diào)和平均值,比如基本塊A的距離Dist(A)=3/(1/5+1/3+1/5)=45/11=4.1,基本塊F的距離為Dist(F)=2/(1/4+1/4)=4?;诨緣K距離計(jì)算四個(gè)種子的距離:Dist(w)=(45/11+2+1)/3≈2.36,Dist(x)=(45/11+4+3+2+1)/5≈2.82,Dist(y)=(45/11+4+3+2+5+4+3+2+1)/9≈3.12,Dist(z)=(45/11+4+3+2+1)/5≈2.82。

根據(jù)定向模糊測(cè)試的期望特性[5],能覆蓋目標(biāo)或者“距離”目標(biāo)近的種子應(yīng)獲得更高的能量和優(yōu)先級(jí)。在這四個(gè)種子中,種子z沒(méi)有到達(dá)任何目標(biāo),理論上,max{Dist(w),Dist(x),Dist(y)}應(yīng)小于Dist(z),然而Dist(z)=Dist(x)lt;Dist(y),表明未覆蓋任何目標(biāo)的種子z比覆蓋了目標(biāo)T的種子獲得了更多能量和更高優(yōu)先級(jí)。

問(wèn)題b):沒(méi)有動(dòng)態(tài)統(tǒng)籌考慮多個(gè)目標(biāo)的測(cè)試情況,依賴靜態(tài)距離的方式,隨著已經(jīng)遍歷過(guò)的目標(biāo)逐漸增多,未隨著目標(biāo)的遍歷情況動(dòng)態(tài)調(diào)整,向未覆蓋目標(biāo)傾斜測(cè)試資源。

在對(duì)測(cè)試資源進(jìn)行分配時(shí),關(guān)鍵在于如何高效地利用有限的資源來(lái)達(dá)成對(duì)多目標(biāo)的充分測(cè)試。在程序探索過(guò)程中,某些目標(biāo)可能比其他目標(biāo)更易于達(dá)到,頻繁測(cè)試的區(qū)域可能已經(jīng)得到了充分檢驗(yàn),其代碼更安全健壯,存在漏洞的可能性較低。傳統(tǒng)的定向模糊測(cè)試器對(duì)程序中的多個(gè)目標(biāo)位置通過(guò)靜態(tài)距離賦予固定的優(yōu)先級(jí),未動(dòng)態(tài)考慮目標(biāo)的遍歷情況,難覆蓋的目標(biāo)代碼區(qū)域在全局視角中處于劣勢(shì),容易被忽略,從而出現(xiàn)調(diào)度“饑餓”的情況。

上述問(wèn)題使得難以在多目標(biāo)環(huán)境中應(yīng)用定向模糊測(cè)試進(jìn)行漏洞挖掘,因此為了更有效地利用測(cè)試資源,達(dá)到更好的多目標(biāo)測(cè)試效果,需要一種能夠根據(jù)目標(biāo)遍歷情況的變化,動(dòng)態(tài)調(diào)整測(cè)試資源分配并探索多樣化路徑的方法。

2 方法設(shè)計(jì)

2.1 解決思路與方法概述

解決問(wèn)題a)的關(guān)鍵在于如何全局分析不同目標(biāo)的分布,并根據(jù)測(cè)試過(guò)程及多目標(biāo)的覆蓋情況,對(duì)不同目標(biāo)進(jìn)行差異化的度量和逼近測(cè)試。本文基于支配樹(shù)[15]概念,提出基于多目標(biāo)支配分析的測(cè)試用例優(yōu)選方法,旨在優(yōu)化定向模糊測(cè)試的距離度量[4,5,9,14],并對(duì)所有預(yù)設(shè)定目標(biāo)進(jìn)行全局化分析追蹤。本文對(duì)測(cè)試目標(biāo)構(gòu)建路徑支配樹(shù),識(shí)別并錨定對(duì)執(zhí)行到多目標(biāo)起著決定性作用的支配節(jié)點(diǎn),并將這些支配節(jié)點(diǎn)作為多目標(biāo)路徑探索的“驛站”。綜合考慮所有可能到達(dá)目標(biāo)位置的路徑,在路徑對(duì)目標(biāo)的執(zhí)行接近程度評(píng)定上,將支配節(jié)點(diǎn)用于距離逼近程度評(píng)估,以解決由最小距離算法引導(dǎo)的定向模糊測(cè)試在多目標(biāo)環(huán)境中遇到的測(cè)試路徑單一性和目標(biāo)指向性問(wèn)題。

針對(duì)問(wèn)題b),需要隨著測(cè)試的進(jìn)行,對(duì)每個(gè)目標(biāo)的關(guān)注度進(jìn)行動(dòng)態(tài)調(diào)整,在測(cè)試用例優(yōu)選過(guò)程中剔除已被充分測(cè)試的目標(biāo)。本文提出基于目標(biāo)覆蓋狀態(tài)的路徑動(dòng)態(tài)修剪優(yōu)化策略,計(jì)算支配節(jié)點(diǎn)的途徑情況來(lái)深入分析潛在目標(biāo)的覆蓋狀態(tài),通過(guò)剪枝和全局支配節(jié)點(diǎn)修正,實(shí)現(xiàn)計(jì)算資源的有效分配和對(duì)目標(biāo)集合的均衡測(cè)試。

基于上述思路,本文提出基于多目標(biāo)支配分析和路徑動(dòng)態(tài)修剪優(yōu)化的定向模糊測(cè)試技術(shù)并構(gòu)建原型系統(tǒng)MTDFuzz。該系統(tǒng)可以接受程序中的多個(gè)目標(biāo)位置作為輸入,圖3描述了MTDFuzz多目標(biāo)模糊測(cè)試技術(shù)的整體工作流程,主要分為靜態(tài)分析和多目標(biāo)定向模糊測(cè)試兩個(gè)階段,具體的優(yōu)化方法包括以下四個(gè)方面(圖中灰色部分標(biāo)示):a)靜態(tài)分析,首先接受測(cè)試程序和多個(gè)目標(biāo)位置作為輸入,給定一個(gè)種子語(yǔ)料庫(kù),運(yùn)行程序間靜態(tài)分析以識(shí)別能到達(dá)目標(biāo)位置的相關(guān)基本塊,回溯標(biāo)記必經(jīng)的支配節(jié)點(diǎn),并基于這些支配節(jié)點(diǎn)計(jì)算基本塊的初始評(píng)分,插樁基本塊評(píng)分信息編譯得到待測(cè)試的二進(jìn)制程序;b)基于多目標(biāo)支配分析的測(cè)試用例優(yōu)選,記錄測(cè)試用例執(zhí)行過(guò)程中經(jīng)過(guò)的支配和目標(biāo)節(jié)點(diǎn),并將這些支配節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)的評(píng)分累加得到測(cè)試用例優(yōu)選評(píng)分;c)基于目標(biāo)覆蓋狀態(tài)的路徑動(dòng)態(tài)修剪優(yōu)化,隨著模糊測(cè)試的進(jìn)行,多目標(biāo)的覆蓋情況發(fā)生變化,采取運(yùn)行時(shí)分析重新評(píng)估支配節(jié)點(diǎn)和目標(biāo)的覆蓋狀態(tài)信息,動(dòng)態(tài)修剪已充分測(cè)試的路徑和目標(biāo),動(dòng)態(tài)調(diào)整支配節(jié)點(diǎn)評(píng)分;d)基于支配節(jié)點(diǎn)覆蓋度的種子調(diào)度策略,結(jié)合支配節(jié)點(diǎn)覆蓋度指導(dǎo)種子的選擇、能量分配以及變異階段,加速優(yōu)選測(cè)試用例的生成和進(jìn)化,通過(guò)支配節(jié)點(diǎn)的覆蓋激勵(lì),擴(kuò)大對(duì)多目標(biāo)的探索面,實(shí)現(xiàn)具備路徑多樣性的多目標(biāo)測(cè)試。

2.2 基于多目標(biāo)支配分析的測(cè)試用例優(yōu)選

本文提出了一種新的多目標(biāo)種子評(píng)分機(jī)制,先靜態(tài)計(jì)算支配節(jié)點(diǎn)到各個(gè)目標(biāo)之間的距離,并保留最小值以及其對(duì)應(yīng)的目標(biāo)。

2.2.1 支配節(jié)點(diǎn)(DomPoint)識(shí)別

定向模糊測(cè)試的測(cè)試空間不是整體程序,因此基于全程序空間的覆蓋率搜索的方法不再適用。將覆蓋增益與目標(biāo)位置及其執(zhí)行路徑不相關(guān)的種子加入隊(duì)列中,并不能提升DGF的效果。因此,本文提出尋找種子執(zhí)行路徑上的指引性節(jié)點(diǎn),即支配節(jié)點(diǎn)來(lái)引導(dǎo)測(cè)試。只有先到達(dá)支配樹(shù)DT上的支配節(jié)點(diǎn),才能覆蓋后續(xù)的目標(biāo)并獲取有效的反饋。

支配節(jié)點(diǎn)是本文的一個(gè)關(guān)鍵概念,如果樹(shù)中的每個(gè)節(jié)點(diǎn)只支配自己及其后代,則稱之為支配樹(shù)(DT)。當(dāng)且僅當(dāng)經(jīng)過(guò)n的路徑必須先經(jīng)過(guò)d時(shí),節(jié)點(diǎn)d支配節(jié)點(diǎn)n,記作d dom n,根據(jù)定義,每個(gè)節(jié)點(diǎn)都支配自身。為了識(shí)別種子執(zhí)行路徑上的支配節(jié)點(diǎn),MTDFuzz在動(dòng)態(tài)測(cè)試前進(jìn)行靜態(tài)分析以識(shí)別程序中潛在的支配節(jié)點(diǎn)。在模糊測(cè)試期間,通過(guò)分析已執(zhí)行的基本塊與潛在支配節(jié)點(diǎn)之間的關(guān)系確定執(zhí)行路徑中的支配節(jié)點(diǎn)。以下是本文對(duì)支配節(jié)點(diǎn)的定義:

定義1 給定一個(gè)待測(cè)試的程序p和程序中的一個(gè)目標(biāo)t,p的程序過(guò)程間控制流圖iCFG=(V,E),其中V代表基本塊集合,E代表邊的集合,T是待測(cè)試的多目標(biāo)集合,b是程序中的基本塊,Target_DP(t)則表示目標(biāo)t的支配節(jié)點(diǎn)集合:

Target_DP(t)={b∈V(p)|(b dom t ∩|iCFG_out(b)|gt;1)}

目標(biāo)完全支配節(jié)點(diǎn)集合為

Target_DP′(t)=Target_DP(t)∪t

定義1可以解釋為:在基于程序間控制流圖iCFG構(gòu)建的支配樹(shù)DT上,目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)一定能到達(dá)后續(xù)的目標(biāo)節(jié)點(diǎn),但是全程序基本塊集合過(guò)大,標(biāo)記所有執(zhí)行路徑上與目標(biāo)位置相關(guān)的父節(jié)點(diǎn)會(huì)嚴(yán)重增加運(yùn)行時(shí)開(kāi)銷。因此,本文僅保留iCFG中出度大于1的節(jié)點(diǎn),從而得到支配節(jié)點(diǎn)集合All_DP(p):

All_DP(p)={b∈V(p)|(?t∈T,b dom t ∩ iCFG_out(b)|gt;1)}

All_DP′(p)=All_DP(p)∪T

程序全局支配節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn)一起構(gòu)成程序p的完全支配節(jié)點(diǎn)集合All_DP′(p)。

在實(shí)際計(jì)算中,首先構(gòu)建目標(biāo)程序的過(guò)程間控制流圖iCFG,然后基于iCFG計(jì)算每個(gè)基本塊到目標(biāo)位置的可達(dá)性,如果在iCFG上存在從基本塊到目標(biāo)位置的路徑,則認(rèn)為基本塊可以到達(dá)目標(biāo)位置[9]。動(dòng)態(tài)執(zhí)行過(guò)程中的支配節(jié)點(diǎn)引導(dǎo)種子逼近目標(biāo)位置,只有覆蓋了目標(biāo)路徑上的支配節(jié)點(diǎn),滿足到達(dá)目標(biāo)位置的前置條件,才能順利覆蓋后續(xù)的目標(biāo)節(jié)點(diǎn)。

定義2 種子s執(zhí)行軌跡中支配節(jié)點(diǎn)Seed_DP(s)表示:

Seed_DP(s)={b∈(ξ(s) ∩ All_DP′(p)}

其中:ξ(s)是種子s執(zhí)行軌跡中所有的基本塊。

以圖4為例,圖4(a)是程序過(guò)程間控制流圖iCFG,程序中包含4個(gè)目標(biāo)位置,T={R,H,L,Q},iCFG經(jīng)Lengauer-Tarjan算法[16]構(gòu)建支配樹(shù)DomiCFG,其中Target_DP(R)={A,C},Target_DP(H)={A,C,D},Target_DP(L)={A,J,K},Target_DP(Q)={A,J,P},因此,示例中的程序全局支配節(jié)點(diǎn)All_DP(p)和完全支配節(jié)點(diǎn)集合All_DP′(p)為:All_DP(p)={A,C,D,J,K,P},All_DP′(p)={A,C,D,H,J,K,L,R,P,Q}。

為了使測(cè)試用例能夠到達(dá)目標(biāo)位置甚至觸發(fā)漏洞,需要滿足特定的路徑特征。支配節(jié)點(diǎn)在控制流中起著推動(dòng)DGF逼近目標(biāo)位置的尋路作用,支配節(jié)點(diǎn)之間以及支配節(jié)點(diǎn)與目標(biāo)之間均可能存在多條路徑,逐步覆蓋程序中的支配節(jié)點(diǎn)而不是只關(guān)注最短路徑,可以得到更加豐富的測(cè)試路徑,有利于漏洞的觸發(fā)。測(cè)試過(guò)程中覆蓋一個(gè)基本塊的直接后繼并不增加到達(dá)目標(biāo)的可能性,因?yàn)榛緣K和其唯一后繼基本塊到達(dá)目標(biāo)的概率是相同的[17]。因此,識(shí)別控制流中的支配節(jié)點(diǎn)變得至關(guān)重要,這些節(jié)點(diǎn)與目標(biāo)位置存在支配關(guān)系,為目標(biāo)的逼近過(guò)程提供了有效的控制流關(guān)系指引。

2.2.2 測(cè)試用例優(yōu)選評(píng)分

本節(jié)利用2.2.1節(jié)中識(shí)別的支配節(jié)點(diǎn)來(lái)計(jì)算基本塊和種子的評(píng)分。對(duì)于每一個(gè)目標(biāo)t,有一系列支配節(jié)點(diǎn)b在支配樹(shù)DT上,b∈Target_DP(t),利用執(zhí)行路徑上的支配節(jié)點(diǎn)到所有目標(biāo)基本塊的多目標(biāo)距離dist(b,t)來(lái)計(jì)算基本塊評(píng)分Wb,T

dist(b,T)=mint∈T{Dijkstra(b,t)}(1)

Wb,T=1dist(b,T)+C(2)

式(1)表示在程序間控制流圖iCFG中,支配節(jié)點(diǎn)b到目標(biāo)位置t的距離,當(dāng)b是目標(biāo)本身時(shí),距離為0,當(dāng)b不可達(dá)t時(shí),距離為∞,不參與計(jì)算。部分支配節(jié)點(diǎn)可以達(dá)到多個(gè)目標(biāo)基本塊,這些支配節(jié)點(diǎn)在初始評(píng)分階段只存儲(chǔ)到最近目標(biāo)的距離。式(2)中常數(shù)C是一個(gè)正值,用于控制距離dist(b,T)對(duì)基本塊評(píng)分的影響程度,目標(biāo)基本塊的評(píng)分為1/C,因此權(quán)重最高,距離目標(biāo)越遠(yuǎn)的支配節(jié)點(diǎn)權(quán)重越低。

本文給予以下種子更高的優(yōu)選評(píng)分:a)種子執(zhí)行路徑經(jīng)過(guò)了更多的支配節(jié)點(diǎn);b)種子的執(zhí)行路徑更加接近目標(biāo)位置。種子的優(yōu)選評(píng)分通過(guò)累加基本塊評(píng)分來(lái)計(jì)算,記錄種子執(zhí)行過(guò)程中經(jīng)過(guò)的支配節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn),并將這些支配節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)的評(píng)分相加。種子s的優(yōu)選評(píng)分定義為執(zhí)行過(guò)程中經(jīng)過(guò)的支配節(jié)點(diǎn)以及目標(biāo)的分?jǐn)?shù)之和:

Score(s)=∑b∈Seed_DP(s)Wb,T(3)

優(yōu)選評(píng)分Score(s)增加意味著種子執(zhí)行軌跡中包含更多的支配節(jié)點(diǎn)或?qū)崿F(xiàn)了更高的目標(biāo)節(jié)點(diǎn)覆蓋率,因此該種子應(yīng)獲得更多的測(cè)試資源和變異機(jī)會(huì),并在調(diào)度中賦予更高的優(yōu)先級(jí)。

2.3 基于目標(biāo)覆蓋狀態(tài)的路徑動(dòng)態(tài)修剪優(yōu)化

為了解決定向模糊測(cè)試在目標(biāo)選擇上的偏向性問(wèn)題,本文提出一種動(dòng)態(tài)的目標(biāo)選擇方法,記錄多目標(biāo)的覆蓋狀態(tài),修剪已經(jīng)充分測(cè)試的目標(biāo)和路徑,平等地測(cè)試所有目標(biāo)。

當(dāng)對(duì)應(yīng)目標(biāo)執(zhí)行次數(shù)達(dá)到閾值被充分測(cè)試時(shí),將該目標(biāo)從目標(biāo)探索集合中剔除。若支配節(jié)點(diǎn)還有其他目標(biāo)探索后繼,則支配節(jié)點(diǎn)的距離更新為支配節(jié)點(diǎn)到當(dāng)前最近目標(biāo)節(jié)點(diǎn)的距離;若當(dāng)前支配節(jié)點(diǎn)無(wú)目標(biāo)后繼,則將支配節(jié)點(diǎn)標(biāo)記清除,轉(zhuǎn)向其他代碼區(qū)域的探索。記錄支配節(jié)點(diǎn)的覆蓋情況和執(zhí)行次數(shù),將支配節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)與三元組(hit_frequency, dominated_targets, is_reserve)相關(guān)聯(lián),hit_frequency代表支配節(jié)點(diǎn)被執(zhí)行的次數(shù),dominated_targets代表支配節(jié)點(diǎn)的后繼節(jié)點(diǎn)中是否包含目標(biāo)節(jié)點(diǎn),is_reserve表示該支配節(jié)點(diǎn)及后續(xù)節(jié)點(diǎn)是否被保留。當(dāng)hit_frequency超過(guò)f次時(shí),表示該支配節(jié)點(diǎn)已被充分測(cè)試,生成了足夠能執(zhí)行該支配節(jié)點(diǎn)的種子。當(dāng)hit_frequency gt; f且dominated_targets=0時(shí),is_reserve置0,表示此節(jié)點(diǎn)及后續(xù)分支需要被剔除,從iCFG中剔除該支配節(jié)點(diǎn)的評(píng)分及其后繼節(jié)點(diǎn)的評(píng)分不影響對(duì)于其他目標(biāo)的測(cè)試,可以從支配節(jié)點(diǎn)集合All_DP(p)中刪除,不參與距離計(jì)算及評(píng)分信息反饋。

在初始階段會(huì)給支配節(jié)點(diǎn)插樁距離信息,基于上一節(jié)的基本塊和測(cè)試用例優(yōu)選評(píng)分機(jī)制,計(jì)算基本塊評(píng)分,優(yōu)選評(píng)分較高的目標(biāo),待目標(biāo)被充分測(cè)試后,啟用修剪算法,向上遞歸更新支配節(jié)點(diǎn)中存儲(chǔ)的距離,實(shí)現(xiàn)基于動(dòng)態(tài)的多目標(biāo)種子優(yōu)選評(píng)分?;谀繕?biāo)覆蓋狀態(tài)的路徑修剪算法1如下。

算法1 基于目標(biāo)覆蓋狀態(tài)的路徑動(dòng)態(tài)修剪算法

輸入:過(guò)程間控制流圖iCFG;目標(biāo)節(jié)點(diǎn)集合T;完全支配節(jié)點(diǎn)集合All_DP′(p);全局基本塊評(píng)分W;全局支配節(jié)點(diǎn)三元組信息(hit_frequency, dominated_targets, is_reserve)。

輸出:更新后的完全支配節(jié)點(diǎn)集合All_DP′(p)以及基本塊評(píng)分W。

1 function domPointCull(t)" // 支配節(jié)點(diǎn)修剪

2 for v in All_DP(p) do

3

if v dom t then

4 v. dominated_targets-= 1

5

end if

6

if v. dominated_targets == 0 then

7 All_DP′(p).cull(v)

8 /* 在iCFG上修剪已被充分測(cè)試的支配節(jié)點(diǎn) */

9 v.is_reserve=0

10

end if

11

for n in v.predecessor do

12 W= updateScore(dist(n,T))

13

end for

14 end for

15 return W,All_DP′(p)

16 end function

17 function traceCull(t) // 基于支配節(jié)點(diǎn)的路徑修剪

18 for v in All_DP′(p) do

19 if t.hit_frequency gt; f and t.dominated_targets = 0 do

20

T = T.delete(t)

21

domPointCull(t)

22 end if

23 end for

24 return W , All_DP′(p)

25 end function

本文用目標(biāo)狀態(tài)覆蓋表示在運(yùn)行時(shí)檢測(cè)的支配節(jié)點(diǎn)和目標(biāo)的覆蓋情況,已被充分測(cè)試的目標(biāo)節(jié)點(diǎn)被修剪剔除,不參與測(cè)試用例優(yōu)選評(píng)分的計(jì)算。若其對(duì)應(yīng)的支配節(jié)點(diǎn)無(wú)后繼的目標(biāo)節(jié)點(diǎn),也進(jìn)行剔除。因此再次覆蓋已充分測(cè)試的支配節(jié)點(diǎn)的種子無(wú)法獲取較高的種子優(yōu)選評(píng)分。

圖5為修剪示例,初始控制流圖中,目標(biāo)集合T={R,H,L,Q},其支配節(jié)點(diǎn)集合All_DP(p)={A,C,D,J,K,P},完全支配節(jié)點(diǎn)集合All_DP′(p)={A,C,D,H,J,K,L,R,P,Q},當(dāng)部分目標(biāo)T′={R,H,L}被充分測(cè)試后,其is_reserve標(biāo)志置0,從目標(biāo)集合中剔除,K節(jié)點(diǎn)被修剪后,其All_DP(p)節(jié)點(diǎn)中的父節(jié)點(diǎn)J更新距離為到Q的距離,即距離更新為4,同樣A點(diǎn)距離更新為6。

2.4 基于支配節(jié)點(diǎn)覆蓋度的種子調(diào)度策略

本文在程序中識(shí)別并錨定多個(gè)支配節(jié)點(diǎn),測(cè)試覆蓋新的支配節(jié)點(diǎn)或目標(biāo)后獲得測(cè)試用例優(yōu)選評(píng)分激勵(lì),并賦予更高的優(yōu)先級(jí)和能量,而覆蓋與目標(biāo)以及相關(guān)路徑無(wú)關(guān)的代碼時(shí)無(wú)法獲取激勵(lì)。本方法的種子池是一個(gè)循環(huán)隊(duì)列,依據(jù)順序選擇種子,當(dāng)種子池中加入新的測(cè)試用例時(shí),根據(jù)式(3)計(jì)算的測(cè)試用例優(yōu)選評(píng)分Score(s)對(duì)種子進(jìn)行排序,隊(duì)列中靠前的種子由于覆蓋了較多的支配節(jié)點(diǎn)以及具備較深的執(zhí)行路徑深度,這些種子得到較早的調(diào)度可以加快測(cè)試的多目標(biāo)探索。

定義3 支配節(jié)點(diǎn)覆蓋度Q表示程序中完全支配節(jié)點(diǎn)的覆蓋情況:

Q=NhitNall(4)

其中:Nhit是累計(jì)被命中過(guò)的程序完全支配節(jié)點(diǎn)數(shù)量;Nall是所有程序完全支配節(jié)點(diǎn)All_DP′(p)的數(shù)量;Q的值越大代表程序由支配節(jié)點(diǎn)引導(dǎo)的多目標(biāo)測(cè)試探索情況越好。

算法2 動(dòng)態(tài)種子能量調(diào)度算法

輸入:已插樁完全支配節(jié)點(diǎn)信息的程序P′;初始種子池C;需要被賦予能量的種子s。

輸出:種子s的能量E^(s)。

1 Score(s)=Execute(P′,s)

2 S^(s)=Normalize(Score(s),C)

3 /*Texp是模擬退火中的溫度*/

4 E(s)=Q*S^(s)*(1-Texp )+0.5*Texp

5 E^(s)=Eafl(s)*210*E(s)-5

MTDFuzz的目的是通過(guò)支配節(jié)點(diǎn)的覆蓋逐步引導(dǎo)到程序中離散分布的多個(gè)目標(biāo)節(jié)點(diǎn),因此需要選擇能夠覆蓋完全支配節(jié)點(diǎn)的種子并賦予更高的優(yōu)先級(jí)。算法2介紹了基于支配節(jié)點(diǎn)覆蓋度的種子能量策略,給定一個(gè)輸入s,以及包含完全支配節(jié)點(diǎn)信息的程序P′,根據(jù)式(3)種子優(yōu)選評(píng)分的定義計(jì)算種子優(yōu)選評(píng)分Score(s),為種子優(yōu)選評(píng)分Score(s)越大的種子賦予越高的優(yōu)先級(jí)。本文基于模擬退火算法來(lái)選擇種子,定義標(biāo)準(zhǔn)化種子優(yōu)選評(píng)分:

S^(s)=Score(s)-ScoreminScore(s)max-Scoremin(5)

其中:Score(s)min和Score(s)max表示種子池中種子優(yōu)選評(píng)分的最小值和最大值;標(biāo)準(zhǔn)化種子評(píng)分S^(s)可以在搜索支配節(jié)點(diǎn)和目標(biāo)時(shí)起到對(duì)開(kāi)發(fā)和利用階段的平衡,S^(s)∈[0,1]。

基于標(biāo)準(zhǔn)化種子優(yōu)選評(píng)分,本文設(shè)計(jì)了能量調(diào)節(jié)函數(shù)(算法2第4行)來(lái)解決探索和利用問(wèn)題,其中Texp是模擬退火的溫度函數(shù),使用Q*S^(s)表示種子的測(cè)試演化進(jìn)度,需要Q和S^(s)共同作用以參與種子能量分配的調(diào)節(jié)。測(cè)試的初始階段是探索階段,以覆蓋率探索為主,目的是充分搜索程序中的支配節(jié)點(diǎn),并獲取初期的種子評(píng)分。隨著種子s被選擇的次數(shù)增加,能量調(diào)節(jié)函數(shù)E(s)開(kāi)始降溫,并逼近于Q*S^(s),此時(shí)切換為開(kāi)發(fā)階段,著重生成能覆蓋更多支配節(jié)點(diǎn)或能覆蓋目標(biāo)位置的種子,實(shí)現(xiàn)基于支配節(jié)點(diǎn)覆蓋引導(dǎo)的測(cè)試聚焦。

算法2第5行為最終的種子能量賦予函數(shù),其中Eafl(s)是AFL基于種子執(zhí)行速度和種子文件大小來(lái)分配的種子能量基準(zhǔn)。

模糊測(cè)試隨著測(cè)試推進(jìn)會(huì)遭遇一定的測(cè)試瓶頸導(dǎo)致測(cè)試進(jìn)度放緩[18],本文識(shí)別多目標(biāo)定向模糊測(cè)試過(guò)程中的障礙點(diǎn),與之前模糊測(cè)試方法中提到的障礙點(diǎn)(程序中的魔數(shù)字節(jié)和校驗(yàn)和)[19]不同,利用字節(jié)推斷來(lái)輔助穿透路徑約束,在程序中某些模塊的執(zhí)行不僅與輸入的結(jié)構(gòu)相關(guān),還與程序的命令行參數(shù)密切相關(guān),不同目標(biāo)位置的代碼可能需要不同的命令行參數(shù)才能被執(zhí)行。因此采取階段式的模糊測(cè)試方法,在一個(gè)模糊測(cè)試階段結(jié)束后,導(dǎo)出程序中完全支配節(jié)點(diǎn)集合All_DP′(p)的覆蓋情況,定義尚未被覆蓋的支配節(jié)點(diǎn)集合NoCov_DP(p) All_DP′(p),這個(gè)集合中的節(jié)點(diǎn)在測(cè)試過(guò)程中沒(méi)有被任何輸入數(shù)據(jù)或參數(shù)組合所執(zhí)行,指示程序中那些不易達(dá)到或未被充分測(cè)試的部分。為了覆蓋這些難以達(dá)到的支配節(jié)點(diǎn),可以采取以下方法:通過(guò)人工專家構(gòu)造專門(mén)的測(cè)試用例,調(diào)整輸入生成策略,或者借助動(dòng)態(tài)符號(hào)執(zhí)行技術(shù)[20,21],以加強(qiáng)對(duì)這些存在覆蓋障礙的支配節(jié)點(diǎn)的測(cè)試。

3 實(shí)驗(yàn)評(píng)估

本章首先介紹實(shí)驗(yàn)的設(shè)置以及基準(zhǔn)測(cè)試集的選擇,繼而闡述本研究所采用的對(duì)比基線和評(píng)估指標(biāo)。最終,通過(guò)對(duì)比實(shí)驗(yàn)驗(yàn)證了本文方法的有效性,并在真實(shí)軟件構(gòu)成的FuzzBench平臺(tái)上評(píng)估了漏洞挖掘效果。

3.1 實(shí)驗(yàn)設(shè)置

本文根據(jù)上述的模糊測(cè)試框架構(gòu)建了工具M(jìn)TDFuzz,該工具主要通過(guò)C和Python實(shí)現(xiàn),并使用SVF[22]和Temporal-specialization[23]工具進(jìn)行過(guò)程間分析,以構(gòu)建程序過(guò)程間控制流圖iCFG。為了評(píng)估實(shí)驗(yàn),在Magma[24]基準(zhǔn)測(cè)試集上測(cè)試MTDFuzz的漏洞挖掘性能和效率,Magma基準(zhǔn)測(cè)試集通過(guò)補(bǔ)丁將多個(gè)1-day漏洞前向移植到一個(gè)版本的程序中,從而可以為DGF設(shè)置多個(gè)目標(biāo)。本研究采用了Lee等人[25]提出的定向模糊測(cè)試評(píng)估方法,通過(guò)Fuzzle自動(dòng)生成的迷宮程序測(cè)試多目標(biāo)探索能力,F(xiàn)uzzle結(jié)合隨機(jī)創(chuàng)建的迷宮和歷史CVE漏洞中的路徑約束以生成測(cè)試程序。此外,使用了tcpreplay、logrotate、jpegoptim等五個(gè)接受不同類型輸入的真實(shí)程序組成FuzzBench[26],以測(cè)試MTDFuzz挖掘真實(shí)程序漏洞的能力。

對(duì)比基線:將MTDFuzz與以下模糊測(cè)試工具進(jìn)行對(duì)比測(cè)試。

a)AFL++[27]:git commit 981a90d;

b)AFLGo[4]:git commit fa125da;

c)SieveFuzz[8]:git commit 1fb90ff;

d)LeoFuzz[28]:Docker SHA256 hash 60a1930。

AFL++是基于AFL持續(xù)開(kāi)發(fā)的社區(qū)版,集成了眾多當(dāng)前最先進(jìn)的輔助分析和編譯優(yōu)化技術(shù),是當(dāng)前主流的覆蓋率引導(dǎo)模糊測(cè)試工具。AFLGo首次提出了定向模糊測(cè)試方法,并實(shí)現(xiàn)了基于最小距離模型的定向測(cè)試工具。SieveFuzz是一個(gè)具有可達(dá)性感知的定向模糊測(cè)試工具,將靜態(tài)分析和動(dòng)態(tài)分析相結(jié)合以提前終止不可達(dá)輸入,減小模糊測(cè)試的搜索空間;LeoFuzz通過(guò)分析目標(biāo)序列與種子序列之間的多種關(guān)系,利用覆蓋率種子隊(duì)列和定向種子隊(duì)列,自適應(yīng)地協(xié)調(diào)定向模糊測(cè)試的探索和利用階段。由于FuzzGuard[7]和Hawkeye[5]并未開(kāi)源,所以本文未選取它們進(jìn)行對(duì)比實(shí)驗(yàn)。

實(shí)驗(yàn)環(huán)境:本文實(shí)驗(yàn)運(yùn)行的硬件和軟件環(huán)境為Intel?Xeon?Silver 4216 CPU @ 2.10 GHz,128 GB內(nèi)存,操作系統(tǒng)為64位Ubuntu 20.04.3 64,編譯器為Clang 12.0.1和gcc 11.4.0。

3.2 通用測(cè)試集性能評(píng)估

Magma v1.2.1測(cè)試集是一個(gè)廣泛用于評(píng)估模糊測(cè)試性能的基準(zhǔn)測(cè)試集,它包含了多個(gè)程序庫(kù)中的漏洞:libpng(7個(gè)漏洞)、libtiff(14個(gè)漏洞)、libxml2(17個(gè)漏洞)、poppler(22個(gè)漏洞)、openssl(20個(gè)漏洞)、SQLite(20個(gè)漏洞)、PHP(16個(gè)漏洞),Lua(4個(gè)漏洞)、libsndfile(25個(gè)漏洞)。這些庫(kù)中包含的一些漏洞可以在十分鐘內(nèi)被AFL++發(fā)現(xiàn),這意味著它們可以在僅靠覆蓋率引導(dǎo)下迅速被模糊測(cè)試工具發(fā)現(xiàn),這種特性并不足以證明多目標(biāo)定向模糊測(cè)試方法的有效性,因此在本文的測(cè)試中,這些漏洞被剔除。

對(duì)于目標(biāo)位置的確定,Magma為每個(gè)漏洞在被測(cè)試程序中插入了一個(gè)或多個(gè)MAGMA_LOG宏,以便在執(zhí)行過(guò)程中記錄漏洞何時(shí)被覆蓋或觸發(fā)。本文將這些宏的位置指定為每個(gè)漏洞的目標(biāo)位置。此外,Magma還對(duì)程序進(jìn)行了補(bǔ)丁處理,以反轉(zhuǎn)修復(fù)錯(cuò)誤的提交實(shí)現(xiàn)前向漏洞植入,并將這些位置也設(shè)置為目標(biāo),這些配置允許模糊測(cè)試工具更準(zhǔn)確地定位和測(cè)試特定的漏洞位置,從而更有效地評(píng)估其對(duì)多目標(biāo)定向模糊測(cè)試的性能。

本文使用Magma提供的默認(rèn)語(yǔ)料庫(kù)作為初始種子,進(jìn)行了10次每次24小時(shí)的實(shí)驗(yàn)評(píng)估。使用Magma提供的分析腳本對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,實(shí)驗(yàn)結(jié)果可分為以下兩個(gè)方面:a)模糊測(cè)試工具發(fā)現(xiàn)的漏洞數(shù)量,結(jié)果顯示在表1中;b)發(fā)現(xiàn)漏洞所需的平均時(shí)間(TTB),結(jié)果顯示在表2中。

在大多數(shù)情況下,MTDFuzz的表現(xiàn)優(yōu)于其他的模糊測(cè)試工具。平均而言,使用幾何平均值計(jì)算平均漏洞挖掘數(shù)量發(fā)現(xiàn)漏洞的平均時(shí)間并進(jìn)行比較,從表1和2中可以看出,MTDFuzz相較于AFL++(啟用cmplog選項(xiàng)),AFLGo、SieveFuzz和LeoFuzz,在libtiff、libxml2、php、poppler、libsndfile和lua中檢測(cè)的漏洞數(shù)量最多,平均漏洞發(fā)現(xiàn)時(shí)間縮短了57.6%、39.2%、43.9%和36.3%,在發(fā)現(xiàn)漏洞數(shù)量上分別增加了32%、59%、33%和18%。

3.3 多目標(biāo)探索能力實(shí)驗(yàn)

多目標(biāo)定向模糊測(cè)試不再以覆蓋率的提升效果為主要衡量指標(biāo),而是需要快速聚焦目標(biāo)位置集合。本實(shí)驗(yàn)評(píng)估MTDFuzz的多目標(biāo)探索能力,能否在相同的時(shí)間內(nèi)到達(dá)更多的目標(biāo),基于Magma中的四個(gè)實(shí)驗(yàn)程序libpng、libtiff、libxml2、libsndfile,并將其中每個(gè)軟件中的MAGMA_LOG宏數(shù)量擴(kuò)充到每個(gè)軟件100個(gè)作為目標(biāo)集合,構(gòu)建多目標(biāo)探索能力測(cè)試集,將MTDFuzz與AFLGo和AFL進(jìn)行對(duì)比,每個(gè)程序上進(jìn)行5輪實(shí)驗(yàn),每輪實(shí)驗(yàn)24 h,實(shí)驗(yàn)結(jié)果如圖6所示。

從圖6中可以看出,在實(shí)驗(yàn)前期三個(gè)模糊測(cè)試工具的目標(biāo)覆蓋情況差別不大,因?yàn)樵趯?shí)驗(yàn)初期都采用了覆蓋率引導(dǎo)。由于AFLGo采取了最小距離引導(dǎo),所以針對(duì)部分目標(biāo)和路徑在測(cè)試前期能夠快速覆蓋,MTDFuzz前期生成了大量的種子用于覆蓋支配節(jié)點(diǎn),然而隨著測(cè)試的深入,AFL和AFLGo的目標(biāo)發(fā)現(xiàn)效率相對(duì)MTDFuzz放緩,由于MTDFuzz基于程序中的支配節(jié)點(diǎn)引導(dǎo)逐步逼近目標(biāo)位置,且修剪已被充分測(cè)試的目標(biāo),轉(zhuǎn)而將能力傾斜于全覆蓋的目標(biāo)站點(diǎn),所以在24 h時(shí),MTDFuzz相比AFLGo和AFL能夠覆蓋更多的目標(biāo),本文的方法對(duì)于多目標(biāo)的探索效率更高。

為了進(jìn)一步驗(yàn)證本文方法對(duì)多目標(biāo)測(cè)試路徑多樣性的提升,對(duì)本實(shí)驗(yàn)中的路徑和崩潰數(shù)量進(jìn)行了統(tǒng)計(jì),以研究基于多目標(biāo)支配分析的測(cè)試用例優(yōu)選方法對(duì)測(cè)試路徑多樣性的影響。Q是2.4節(jié)中定義的支配節(jié)點(diǎn)覆蓋度5輪實(shí)驗(yàn)平均值,Avg(Target_path)是5輪實(shí)驗(yàn)中所有能執(zhí)行到目標(biāo)的測(cè)試用例數(shù)量(發(fā)現(xiàn)的目標(biāo)相關(guān)路徑數(shù)量),結(jié)果如表3所示。

根據(jù)表3的結(jié)果可以看出,MTDFuzz在支配節(jié)點(diǎn)覆蓋度和發(fā)現(xiàn)的目標(biāo)相關(guān)路徑數(shù)量上均優(yōu)于AFL和AFLGo,在libsndfile實(shí)驗(yàn)中,MTDFuzz發(fā)現(xiàn)的目標(biāo)相關(guān)路徑數(shù)量是AFLGo的3.9倍。原因是MTDFuzz采用了多目標(biāo)支配分析,比AFL和AFLGo更關(guān)注測(cè)試用例覆蓋執(zhí)行覆蓋目標(biāo)過(guò)程中的支配節(jié)點(diǎn),因此發(fā)現(xiàn)了更多的目標(biāo)相關(guān)路徑,提升了多目標(biāo)測(cè)試路徑多樣性。

3.4 多漏洞復(fù)現(xiàn)效率實(shí)驗(yàn)

為了驗(yàn)證MTDFuzz在一個(gè)軟件中包含多個(gè)漏洞場(chǎng)景的有效性,使用了Multi-target Fuzzle[29]生成兩個(gè)復(fù)雜度為20×20和30×30的迷宮合成程序,每個(gè)程序中均包含三個(gè)漏洞來(lái)進(jìn)行多漏洞復(fù)現(xiàn)效率實(shí)驗(yàn)。采用改進(jìn)的Fuzzle來(lái)合成路徑長(zhǎng)度相同的迷宮漏洞程序,對(duì)每個(gè)程序分別運(yùn)行AFLGo、LeoFuzz、SieveFuzz和MTDFuzz,將三個(gè)漏洞都作為目標(biāo),并當(dāng)作以上模糊測(cè)試工具的輸入,每個(gè)實(shí)驗(yàn)都重復(fù)10次,每次運(yùn)行12 h,TTE是暴露漏洞的平均時(shí)間。

實(shí)驗(yàn)結(jié)果如圖7所示,從中可以看出在兩個(gè)迷宮程序中,MTDFuzz相比其他模糊測(cè)試工具探索bug1、bug2和bug3的平均時(shí)間開(kāi)銷更小,在30×30的迷宮程序中,MTDFuzz的漏洞發(fā)現(xiàn)時(shí)間比AFLGo縮短了3.35 h,所需時(shí)間減少了71.4%。另外,MTDFuzz是唯一能在0.4 h內(nèi)發(fā)現(xiàn)20×20迷宮中所有bug,并在1.5 h內(nèi)發(fā)現(xiàn)30×30迷宮程序所有bug的模糊測(cè)試工具??傮w來(lái)看,在多個(gè)目標(biāo)漏洞引導(dǎo)環(huán)境下,MTDFuzz具有更強(qiáng)的多漏洞復(fù)現(xiàn)能力。

3.5 真實(shí)漏洞檢測(cè)能力實(shí)驗(yàn)

本文選擇了5個(gè)真實(shí)程序來(lái)構(gòu)建FuzzBench,以測(cè)試MTDFuzz的真實(shí)軟件漏洞挖掘能力。這些待測(cè)試程序涵蓋了不同的輸入格式,包括日志、圖像、二進(jìn)制程序和網(wǎng)絡(luò)流量包等,具體的程序信息和測(cè)試命令詳見(jiàn)表4。這些復(fù)雜的輸入結(jié)構(gòu)測(cè)試使得實(shí)驗(yàn)更能體現(xiàn)通用性和代表性,盡管采取更長(zhǎng)時(shí)間的階段性測(cè)試對(duì)MTDFuzz更加有利,本文仍然將所有實(shí)驗(yàn)的運(yùn)行時(shí)間設(shè)定在24 h。

本實(shí)驗(yàn)與AFLGo、SieveFuzz、LeoFuzz進(jìn)行了比較。實(shí)驗(yàn)中,運(yùn)行Clang Static Analyzer[30],并將其靜態(tài)分析報(bào)告中的結(jié)果作為多目標(biāo)位置進(jìn)行測(cè)試,即潛在存在漏洞的代碼位置,Clang Static Analyzer靜態(tài)分析報(bào)告的結(jié)果沒(méi)有經(jīng)過(guò)可疑的過(guò)濾等處理,因此靜態(tài)分析報(bào)告中包含假陽(yáng)性和不可達(dá)的目標(biāo)。實(shí)驗(yàn)旨在評(píng)估MTDFuzz及其他三個(gè)DGF工具在引導(dǎo)下觸發(fā)FuzzBench中漏洞的效率,并比較它們?cè)诖诉^(guò)程中的時(shí)間開(kāi)銷。SieveFuzz在某些程序上無(wú)法編譯或正常運(yùn)行,因此將這些條目標(biāo)記為N/A,實(shí)驗(yàn)結(jié)果詳見(jiàn)表5,μTTE表示平均首次觸發(fā)時(shí)間,Ratio是其他fuzzer與MTDFuzz在μTTE指標(biāo)上的比值。

從表5可以看出,MTDFuzz發(fā)現(xiàn)真實(shí)漏洞所需的時(shí)間少于另外三種工具。在tcpreplay中,MTDFuzz表現(xiàn)出的加速效果最為出色,AFLGo、SieveFuzz、LeoFuzz所花的時(shí)間分別是MTDFuzz的15.13倍、28.49倍、5.79倍。從實(shí)驗(yàn)結(jié)果可以看出,MTDFuzz相比其他幾個(gè)模糊測(cè)試工具能夠更快挖掘到真實(shí)漏洞。

此外,為了驗(yàn)證多目標(biāo)定向模糊測(cè)試工具M(jìn)TDFuzz在實(shí)際開(kāi)源軟件0-day漏洞挖掘中的應(yīng)用效果,采用兩種方式標(biāo)定需測(cè)試的目標(biāo)位置集合:a)最近提交或頻繁變更的代碼區(qū)域(與長(zhǎng)期未修改已經(jīng)徹底測(cè)試的舊代碼相比,新提交的代碼中存在漏洞的風(fēng)險(xiǎn)更高);b)利用靜態(tài)分析工具Clang Static Analyzer檢測(cè)可能存在漏洞的代碼。通過(guò)以上目標(biāo)標(biāo)定指引,MTDFuzz在Glibc、FFmpeg、logrotate和tinyexr四個(gè)開(kāi)源軟件中發(fā)現(xiàn)了12個(gè)未公開(kāi)漏洞,并得到了開(kāi)發(fā)人員的確認(rèn),其中9個(gè)已獲取CVE編號(hào),具體漏洞信息如表6所示。

發(fā)現(xiàn)的漏洞類型主要包括堆棧溢出等內(nèi)存破壞性漏洞,其中FFmpeg是一個(gè)被廣泛使用的多媒體庫(kù),它在OSS-Fuzz中經(jīng)過(guò)了充分測(cè)試。使用傳統(tǒng)的模糊測(cè)試策略難以發(fā)現(xiàn)其中的crash,MTDFuzz則發(fā)現(xiàn)了2個(gè)堆溢出漏洞。此外,選取logrotate程序的CVE-2023-38795挖掘過(guò)程及漏洞成因進(jìn)行簡(jiǎn)要說(shuō)明,logrotate程序是Linux操作系統(tǒng)中常用的日志文件處理程序,該漏洞的代碼片段如圖8所示。

發(fā)現(xiàn)glibc glob函數(shù)棧溢出漏洞后,檢索logrotate程序中所有調(diào)用glob函數(shù)的代碼位置作為MTDFuzz的目標(biāo)進(jìn)行測(cè)試并發(fā)現(xiàn)crash。ASAN[31]內(nèi)存崩潰報(bào)告顯示,config.c文件第1 849行調(diào)用glob函數(shù)時(shí)發(fā)生崩潰,glob由GNU C庫(kù)(libc)提供,用于擴(kuò)展通配符模式匹配文件路徑,其第一個(gè)參數(shù)pattern是一個(gè)字符串,用于指定需匹配的文件名模式。logrotate讀取惡意構(gòu)造日志文件,導(dǎo)致得到的pattern字符串包含大量目錄分隔符“/”,每個(gè)目錄分隔符會(huì)遞歸觸發(fā)一次mempcpy內(nèi)存復(fù)制。由于glibc glob函數(shù)的實(shí)現(xiàn)未限制pattern字符串的長(zhǎng)度,glob函數(shù)內(nèi)部的深度遞歸調(diào)用導(dǎo)致了棧溢出。修復(fù)補(bǔ)丁位于1 842~1 847行(圖中灰色陰影部分代碼),開(kāi)發(fā)人員限制glob函數(shù)的pattern參數(shù)長(zhǎng)度為2 048,防止遞歸引發(fā)棧溢出。OSS-Fuzz等其他持續(xù)性模糊測(cè)試長(zhǎng)期測(cè)試logrotate項(xiàng)目但是并未關(guān)注其中g(shù)lob函數(shù)的調(diào)用,AFLGo等定向模糊測(cè)試方法難以對(duì)程序中的多個(gè)glob函數(shù)調(diào)用展開(kāi)測(cè)試,因此難以發(fā)現(xiàn)該漏洞。

3.6 測(cè)試總結(jié)

通過(guò)對(duì)實(shí)驗(yàn)結(jié)果分析可以發(fā)現(xiàn):a)在通用的測(cè)試集Magma中,本文方法相比于AFL++、AFLGo、SieveFuzz和LeoFuzz表現(xiàn)出更高的目標(biāo)漏洞檢測(cè)效率,同時(shí)還能夠揭示更多的漏洞,這表明本文的方法能夠顯著提升針對(duì)多目標(biāo)的模糊測(cè)試性能;b)在多目標(biāo)測(cè)試路徑多樣性上,從多目標(biāo)探索能力實(shí)驗(yàn)中可以看出, MTDFuzz發(fā)現(xiàn)的目標(biāo)相關(guān)路徑數(shù)量相比AFLGo最高達(dá)3.9倍,得益于支配節(jié)點(diǎn)的指引作用,發(fā)現(xiàn)了更多的目標(biāo)相關(guān)路徑,增強(qiáng)了多目標(biāo)測(cè)試路徑多樣性;c)在多目標(biāo)測(cè)試資源分配上,從多目標(biāo)探索能力和多漏洞復(fù)現(xiàn)效率可以看出,本文的方法到達(dá)目標(biāo)站點(diǎn)的速度和數(shù)量?jī)?yōu)于其他方法,由于采用了路徑動(dòng)態(tài)修剪優(yōu)化策略,及時(shí)將測(cè)試的關(guān)注度從已充分測(cè)試的目標(biāo)轉(zhuǎn)向探索欠覆蓋目標(biāo),有效解決了未隨著目標(biāo)的遍歷情況動(dòng)態(tài)調(diào)整傾斜測(cè)試資源的問(wèn)題,所以MTDFuzz更適合于針對(duì)多目標(biāo)進(jìn)行測(cè)試,且利于與靜態(tài)分析告警處理等方法相結(jié)合;d)在真實(shí)程序測(cè)試集FuzzBench中,MTDFuzz的漏洞發(fā)現(xiàn)數(shù)量高于其他模糊測(cè)試工具,且發(fā)現(xiàn)了12個(gè)未公開(kāi)漏洞,證明了MTDFuzz在真實(shí)軟件漏洞中的漏洞驗(yàn)證和挖掘潛力。

綜上,本文方法在漏洞的挖掘方面表現(xiàn)出色,不僅能夠充分地動(dòng)態(tài)修剪目標(biāo)實(shí)現(xiàn)對(duì)多目標(biāo)的測(cè)試,還能通過(guò)支配節(jié)點(diǎn)的引導(dǎo)更快實(shí)現(xiàn)對(duì)目標(biāo)位置的覆蓋以及漏洞的觸發(fā)。

4 結(jié)束語(yǔ)

為解決之前定向模糊測(cè)試中平均距離模型對(duì)不同分支的多目標(biāo)適應(yīng)性不強(qiáng),以及未根據(jù)不同目標(biāo)的覆蓋程度動(dòng)態(tài)調(diào)整距離度量這兩個(gè)問(wèn)題,本文提出了一種基于支配節(jié)點(diǎn)以及目標(biāo)節(jié)點(diǎn)覆蓋狀態(tài)的路徑修剪方法,以基于支配節(jié)點(diǎn)覆蓋度的種子調(diào)度策略,并構(gòu)建了MTDFuzz模糊測(cè)試工具。實(shí)驗(yàn)結(jié)果表明,本文的方法在多目標(biāo)環(huán)境下,提升了程序中多個(gè)漏洞的復(fù)現(xiàn)效率,在相同條件下與其他定向模糊測(cè)試工具相比具有更高的目標(biāo)覆蓋效率,結(jié)合靜態(tài)分析報(bào)告的結(jié)果能更快復(fù)現(xiàn)真實(shí)漏洞。

下一步將探索如何在多目標(biāo)定向模糊測(cè)試過(guò)程中對(duì)識(shí)別的關(guān)鍵障礙點(diǎn)進(jìn)行突破。此外還計(jì)劃深入分析并整合靜態(tài)分析工具的輸出結(jié)果,以此來(lái)對(duì)本文提出的工具進(jìn)行進(jìn)一步的擴(kuò)展和優(yōu)化,提高定向模糊測(cè)試的效能和應(yīng)用廣度,從而更有效地支持復(fù)雜軟件系統(tǒng)的安全性測(cè)試和評(píng)估。

參考文獻(xiàn):

[1]任澤眾, 鄭晗, 張嘉元, 等. 模糊測(cè)試技術(shù)綜述 [J]. 計(jì)算機(jī)研究與發(fā)展, 2021, 58 (5): 944-963. (Ren Zezhong, Zheng Han, Zhang Jiayuan, et al. A review of fuzzing techniques[J]. Journal of Computer Research and Development, 2021, 58 (5): 944-963.)

[2]徐威, 李鵬, 張文鑌, 等. 網(wǎng)絡(luò)協(xié)議模糊測(cè)試綜述 [J]. 計(jì)算機(jī)應(yīng)用研究,2023, 40 (8): 2241-2249. (Xu Wei, Li Peng, Zhang Wenbin, et al. Survey of network protocol fuzzing [J]. Application Research of Computers, 2023, 40 (8): 2241-2249.)

[3]張冠宇, 尚文利, 張博文, 等. 一種結(jié)合遺傳算法的工控協(xié)議模糊測(cè)試方法 [J]. 計(jì)算機(jī)應(yīng)用研究, 2021, 38 (3): 680-684. (Zhang Guanyu, Shang Wenli, Zhang Bowen, et al. Fuzzy test method for industrial control protocol combining genetic algorithm [J]. Application Research of Computers, 2021, 38 (3): 680-684.)

[4]B?hme M, Pham V T, Nguyen M D, et al. Directed greybox fuzzing[C]// Proc of ACM SIGSAC conference on Computer and Communications Security. New York:ACM Press, 2017: 2329-2344.

[5]Chen Hongxu, Xue Yinxing, Li Yuekang, et al. Hawkeye: towards a desired directed grey-box fuzzer[C]// Proc of ACM SIGSAC Confe-rence on Computer and Communications Security. New York:ACM Press, 2018: 2095-2108.

[6]Huang Heqing, Guo Yiyuan, Shi Qingkai, et al. Beacon: directed grey-box fuzzing with provable path pruning[C]//Proc of IEEE Symposium on Security and Privacy. Piscataway,NJ:IEEE Press, 2022: 36-50.

[7]Zong Peiyuan, Lyu Tao, Wang Dawei, et al. FuzzGuard: filtering out unreachable inputs in directed grey-box fuzzing through deep learning[C]//Proc of the 29th USENIX Security Symposium. Berkeley, CA: USENIX Association,2020: 2255-2269.

[8]Srivastava P, Nagy S, Hicks M, et al. One Fuzz doesn’t fit all: optimizing directed fuzzing via target-tailored program state restriction[C]// Proc of the 38th Annual Computer Security Applications Conference. New York:ACM Press, 2022: 388-399.

[9]Du Zhengjie, Li Yuekang, Liu Yang, et al. WindRanger: a directed greybox fuzzer driven by deviation basic blocks[C]//Proc of the 44th International Conference on Software Engineering. New York:ACM Press, 2022: 2440-2451.

[10]Zhu Xiaogang, B?hme M. Regression greybox fuzzing[C]// Proc of ACM SIGSAC Conference on Computer and Communications Security. New York:ACM Press, 2021: 2169-2182.

[11]Chen Yaohui, Li Peng, Xu Jun, et al. SAVIOR: towards bug-driven hybrid testing[C]//Proc of IEEE Symposium on Security and Privacy. Piscataway,NJ:IEEE Press, 2020: 1580-1596.

[12]Zheng Han, Zhang Jiayuan, Huang Yuhang, et al. FISHFUZZ: catch deeper bugs by throwing larger nets[C]//Proc of the 32nd USENIX Security Symposium. Berkeley, CA: USENIX Association, 2023: 1343-1360.

[13]sterlund S, Razavi K, Bos H,et al. ParmeSan: Sanitizer-guided greybox fuzzing[C]//Proc of the 29th USENIX Security Symposium. Berkeley, CA: USENIX Association, 2020: 2289-2306.

[14]Wang Shen, Jiang Xunzhi, Yu Xiangzhan, et al. KCFuzz: directed fuzzing based on keypoint coverage[C]// Pro of the 7th International Conference,ICAIS. Cham: Springer, 2021: 312-325.

[15]Sreedhar V C, Gao Guang, Lee Y F. Incremental computation of dominator trees [J]. ACM Trans on Programming Languages and Systems, 1997, 19 (2): 239-252.

[16]Lengauer T, Tarjan R E. A fast algorithm for finding dominators in a flowgraph [J]. ACM Trans on Programming Languages and Systems, 1979, 1(1): 121-141.

[17]Luo Changhua, Meng Wei, Li Penghui. SelectFuzz: efficient directed fuzzing with selective path exploration[C]//Proc of IEEE Symposium on Security and Privacy. Piscataway,NJ:IEEE Press, 2023: 2693-2707.

[18]Gao Wentao, Pham V T, Liu Dongge, et al. Beyond the coverage plateau: a comprehensive study of fuzz blockers (registered report)[C]//Proc of the 2nd International Fuzzing Workshop.New York: ACM Press, 2023: 47-55.

[19]Stephens N, Grosen J, Salls C,et al. Driller: augmenting fuzzing through selective symbolic execution[C]// Proc of Network and Distributed System Security Symposium. 2016.

[20]Poeplau S, Francillon A. Symbolic execution with SymCC: don’t interpret, compile![C]//Proc of the 29th USENIX Security Symposium. Berkeley, CA: USENIX Association, 2020: 181-198.

[21]Triton: a dynamic binary analysis library [EB/OL]. (2023-12-04). https://triton-library. github. io/.

[22]SVF-tools. SVF-tools/SVF [EB/OL]. (2023-12-06). https://github. com/SVF-tools/SVF.

[23]Ghavamnia S, Palit T, Mishra S, et al. Temporal system call speciali-zation for attack surface reduction[C]//Proc of the 29th USENIX Security Symposium.Berkeley, CA: USENIX Association, 2020: 1749-1766.

[24]Hazimeh A, Herrera A, Payer M. Magma: a ground-truth fuzzing benchmark [C]// Proc of ACM Conference on Measurement and Analysis of Computing Systems.New York:ACM Press, 2020: 1-29.

[25]Lee H, Kim S, Cha S K.Fuzzle: making a puzzle for fuzzers[C]//Proc of the 37th IEEE/ACM International Conference on Automated Software Engineering. New York: ACM Press, 2022: 1-12.

[26]Metzman J, Szekeres L, Simon L, et al. FuzzBench: an open fuzzer benchmarking platform and service[C]// Proc of the 29th ACM Joint Meeting on European Software Engineering Conference and Sympo-sium on the Foundations of Software Engineering. New York:ACM Press,2021: 1393-1403.

[27]TheAFL+fuzzing framework [EB/OL]. AFLplusplus [EB/OL]. (2023-11-27). https://aflplus. plus/.

[28]Liang Hongliang, Yu Xinglin, Cheng Xianglin, et al. Multiple targets directed greybox fuzzing [J]. IEEE Trans on Dependable and Secure Computing, 2024,21(1):325-339.

[29]SoftSec-KAIST/Fuzzle at multi-target [EB/OL]. (2024-01-16). https://github. com/SoftSec-KAIST/Fuzzle/tree/multi-target.

[30]Clang Static Analyzer—Clang 18.0.0 git documentation [EB/OL]. (2023-11-26). https://clang. llvm. org/docs/ClangStaticAnalyzer. html.

[31]Serebryany K, Bruening D, Potapenko A, et al. AddressSanitizer: a fast address sanity checker[C]//Proc of USENIX Annual Technical Conference. Berkeley, CA: USENIX Association, 2012: 309-318.

济源市| 宾阳县| 海口市| 景东| 庄浪县| 九寨沟县| 德格县| 巢湖市| 台江县| 卫辉市| 成都市| 广宗县| 五常市| 灌南县| 迁西县| 顺义区| 唐山市| 西丰县| 肥东县| 牡丹江市| 双辽市| 耒阳市| 宣城市| 恭城| 扎囊县| 孟津县| 嘉祥县| 扎赉特旗| 白朗县| 江都市| 于田县| 樟树市| 尉犁县| 石城县| 和平区| 临漳县| 富阳市| 汝阳县| 即墨市| 枞阳县| 南康市|