任家祥,宋禮鵬,朱宇輝
(1. 中北大學(xué) 大數(shù)據(jù)學(xué)院,山西 太原 030051; 2. 山東大學(xué)(威海) 機電與信息工程學(xué)院,山東 威海 264209)
近年來,與日俱增的軟件漏洞嚴(yán)重威脅著網(wǎng)絡(luò)空間安全,如何有效檢測出未知的軟件漏洞是網(wǎng)絡(luò)安全中的一大重要挑戰(zhàn)[1]. 基于模糊測試的動態(tài)漏洞檢測技術(shù)通過生成大量的測試輸入可以發(fā)現(xiàn)程序中的各種缺陷,已成為當(dāng)前研究熱點[2].
Barton Miller于1990年首次提出模糊測試的概念,通過生成隨機數(shù)據(jù)測試Unix程序的有效性[3]. 依據(jù)對程序的分析程度和源碼依賴程度,可將模糊測試分為黑盒、白盒和灰盒[4]. 黑盒模糊測試不需要了解目標(biāo)程序的內(nèi)部狀態(tài),僅通過隨機變異初始種子測試目標(biāo)程序,雖易于部署但難以發(fā)現(xiàn)程序的深層漏洞. 白盒模糊測試需要從目標(biāo)程序獲得信息并且使用這些信息指導(dǎo)測試用例的生成,例如,基于LLVM的符號執(zhí)行引擎KLEE[5]將符號執(zhí)行應(yīng)用在模糊測試中,通過約束求解條件值來增加代碼覆蓋率,可以一定程度上彌補傳統(tǒng)黑盒模糊測試的不足,但是符號執(zhí)行往往會因為路徑爆炸問題和約束求解能力的不足,導(dǎo)致在程序分析階段耗費大量時間. 灰盒模糊測試介于黑盒測試和白盒測試之間,其降低了白盒模糊測試的工程成本和復(fù)雜性,同時保留了一定程度的智能,得到了學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注. 在灰盒測試中常用代碼插樁來獲得目標(biāo)程序在運行時的代碼覆蓋率,另一種在灰盒模糊中使用的技術(shù)是污點分析[6],其擴展了用于追蹤污點數(shù)據(jù)流的代碼插樁. 灰盒模糊測試的代表AFL[7](American Fuzzy Lop)通過輕量級的編譯時插樁或QEMU模式,實現(xiàn)對程序運行時的覆蓋率信息的收集,通過覆蓋信息引導(dǎo)模糊測試的過程. 但是,由于AFL在為種子分配能量的過程中存在一定的盲目性,限制了其代碼覆蓋率.
覆蓋率導(dǎo)向的灰盒模糊測試在測試目標(biāo)程序的過程中,通過能量調(diào)控算法決定在變異階段由該種子生成的測試用例數(shù)量,由于該算法為種子分配能量時未考慮該種子所執(zhí)行路徑的稀有程度,導(dǎo)致始終存在一些路徑與其他路徑相比被執(zhí)行的次數(shù)較少,即路徑覆蓋不均衡. 該問題一定程度上限制了灰盒模糊測試的路徑覆蓋率,因此,本文從路徑覆蓋不均衡問題入手,改進AFL的種子能量調(diào)控算法,從而提高其路徑覆蓋率. 本文用種子的熱度描述與該種子執(zhí)行相同路徑的測試用例的數(shù)量,并將種子輸入隊列劃分為多個溫度區(qū)域. 通過計算該種子所在溫度區(qū)域與高溫區(qū)域和低溫區(qū)域的距離,確定該種子的種間熱度,即種子所執(zhí)行路徑的相對稀有程度. 根據(jù)種間熱度為其分配能量,通過能量調(diào)控為稀有路徑傳遞更多的能量. 選取5個真實Linux程序和LAVA-M數(shù)據(jù)集[8]作為測試集,進行本文方法和AFL以及先進灰盒模糊測試方法AFLFast[9]、FairFuzz[10]、MOPT-AFL[11]的對比實驗,從路徑覆蓋均衡程度、路徑覆蓋率和漏洞檢測能力三方面進行對比分析. 實驗結(jié)果顯示,在測試集中該方法的路徑覆蓋更為均衡,24 h內(nèi)發(fā)現(xiàn)的路徑總數(shù)較之AFL提高28.34%,較之3個先進模糊測試工具平均提高20.25%.
灰盒模糊測試不依賴于目標(biāo)程序的源代碼,只使用輕量級的工具來獲得一些程序運行時的信息,而沒有進行復(fù)雜的程序分析,彌補了黑盒測試和白盒測試的缺陷[12]. 基于覆蓋率導(dǎo)向的灰盒模糊測試使用插樁技術(shù)獲取程序覆蓋信息,其中,AFL通過靜態(tài)插樁收集分支覆蓋率,與libfuzzer[13]使用基本塊覆蓋率記錄相比,可以獲取更為完整的程序控制流信息,從而更好地反映目標(biāo)程序狀態(tài). AFL結(jié)合插樁獲得的覆蓋率信息,使用遺傳算法自動發(fā)現(xiàn)干凈、有趣的測試用例,這些測試用例可用來觸發(fā)目標(biāo)二進制文件中的新的內(nèi)部狀態(tài). AFL雖然已在現(xiàn)實世界程序中發(fā)現(xiàn)了大量的軟件漏洞,但其內(nèi)部算法對程序反饋信息分析利用不足,導(dǎo)致AFL代碼覆蓋率低,難以發(fā)現(xiàn)深層漏洞. 因此,大量研究者為提高AFL代碼覆蓋率對其進行優(yōu)化,優(yōu)化的方向主要集中在種子選擇策略、種子變異策略以及能量調(diào)控策略.
B?hme[9]等針對稀有路徑問題提出了AFLFast,使用馬爾可夫鏈模型對AFL建模,發(fā)現(xiàn)AFL變異生成了大量執(zhí)行某些高頻程序路徑的測試用例,將大量的計算資源浪費在高頻路徑上,各路徑練習(xí)次數(shù)不均衡的現(xiàn)象導(dǎo)致AFL的代碼覆蓋率不足. AFLFast首先修改了AFL的種子選擇策略,使得其傾向于選擇之前被選中次數(shù)少并且執(zhí)行了稀有路徑的種子; 然后提出了多種能量調(diào)控策略,其核心思想在于減少分配給執(zhí)行高頻路徑的種子的計算資源. AFLFast雖在一定程度上解決了稀有路徑的問題,但根據(jù)其能量調(diào)控策略,路徑的稀有程度對其獲得的能量影響比重較小. 并且對于稀有路徑判斷標(biāo)準(zhǔn)為均值,當(dāng)路徑的執(zhí)行次數(shù)超過均值后,即為非稀有路徑,顯然該指標(biāo)不能有效描述路徑的稀有程度. EcoFuzz[14]的思路類似于AFLFast,將AFL的能量調(diào)控問題建模為“開發(fā)VS探索”問題,并使用多臂老虎機模型對能量調(diào)控策略進行優(yōu)化,種子的能量取決于其在每次迭代中是否發(fā)現(xiàn)了崩潰,模糊測試器傾向于為已知錯誤生成更多的崩潰輸入.
FairFuzz[10]通過修改變異策略解決稀有分支造成的覆蓋率低的問題,自動識別被執(zhí)行較少的程序分支,并提出了一種新的變異掩碼算法,在該算法中變異偏向于產(chǎn)生命中給定稀有分支的輸入. FairFuzz使用動態(tài)增長的分支命中計數(shù)來判斷稀有分支,雖在一定程度上避免了單一固定值造成的局限性,但其本質(zhì)上仍為多個固定值,當(dāng)分支的執(zhí)行次數(shù)超過最大閾值后,仍會歸為非稀有分支,從而導(dǎo)致路徑被執(zhí)行次數(shù)不均衡. MOPT-AFL針對模糊測試中根據(jù)固定概率分布選擇變異算子所造成的漏洞檢測能力低的問題[11],使用啟發(fā)式算法改進變異策略,具體使用粒子群算法尋找變異算子的全局最優(yōu)分布和局部最優(yōu)分布,從而動態(tài)調(diào)節(jié)模糊測試過程中選擇變異算子的概率,其尋找最優(yōu)分布中未加入種子執(zhí)行路徑的稀有程度指標(biāo),因此各路徑被執(zhí)行次數(shù)仍有可能不均衡.
部分研究者為提高灰盒模糊測試的漏洞挖掘能力,在模糊測試的靜態(tài)分析階段和動態(tài)執(zhí)行階段加入更多的程序分析技術(shù). Vuzzer[15]為最大化覆蓋范圍并探索更深入的路徑,在靜態(tài)分析階段為每個基本塊分配權(quán)重,該權(quán)重由基本塊的深度信息決定,并通過污點分析的方法解決魔術(shù)字節(jié)問題. Angora[16]為在不使用符號執(zhí)行的前提下有效地解決路徑約束,引入了幾種關(guān)鍵技術(shù):可伸縮的字節(jié)級污點追蹤,上下文相關(guān)的分支計數(shù),基于梯度下降的搜索. Vuzzer和Angora為灰盒模糊測試引入了復(fù)雜的程序分析技術(shù),帶來了額外的計算開銷,一定程度上影響了動態(tài)執(zhí)行部分的運行時間,并且增加了部署的難度.
本文發(fā)現(xiàn)AFL在測試目標(biāo)程序一段時間后,當(dāng)絕大多數(shù)路徑均已被執(zhí)行了一定次數(shù)時,通過比較種子之間所執(zhí)行路徑的稀有程度更能反映種子的優(yōu)劣,因此,本文提出了種間熱度指標(biāo),該指標(biāo)可準(zhǔn)確識別出執(zhí)行了稀有路徑的種子,然后融合種間熱度指標(biāo)改進了AFL的能量調(diào)控算法,為種間熱度低的種子分配更高的能量,生成更多執(zhí)行稀有路徑的測試用例,從而提高灰盒模糊測試的路徑覆蓋率和漏洞檢測能力.
本文基于AFL2.52b開發(fā)了灰盒模糊測試工具HeatFuzz,為說明本文方法,給出以下定義:
定義1:對于種子t,其能量為由該種子變異生成的測試用例數(shù)量[9].
定義2:對于種子t,其熱度為與該種子執(zhí)行相同路徑的測試用例數(shù)量,記為h(t).
HeatFuzz為識別出執(zhí)行了稀有路徑的種子,在AFL的基礎(chǔ)上加入了熱度優(yōu)先序列建立模塊和種間熱度計算模塊; 其次設(shè)計了一種融合種間熱度的能量調(diào)控算法,該算法借鑒熱傳導(dǎo)現(xiàn)象的思想,為熱度低的種子分配更多的能量. HeatFuzz的主要工作流程見圖 1,具體描述如下:
1) 將用戶提供的初始測試用例添加到隊列中;
2) 從隊列中選擇下一個種子(輸入文件);
3) 嘗試將種子修剪到不改變程序行為測試的最小大小;
4) 建立種子熱度優(yōu)先序列;
5) 計算當(dāng)前種子的種間熱度;
6) 根據(jù)種間熱度為種子動態(tài)分配能量;
7) 使用各種模糊策略反復(fù)地對種子進行變異,變異時間由所分配能量決定;
8) 如果生成的任何測試用例導(dǎo)致檢測記錄的新狀態(tài)轉(zhuǎn)換,則在種子隊列中添加該突變文件作為新種子;
9) 轉(zhuǎn)到第二步.
其中第二步的選種策略決定從隊列中選擇出哪一個種子進行變異. 本文選種策略傾向于選擇執(zhí)行速度快、體積小并且自身熱度低的種子. 本節(jié)后續(xù)將詳細(xì)介紹熱度優(yōu)先序列的建立,種間熱度的計算以及融合種間熱度的能量調(diào)控算法實現(xiàn).
在灰盒模糊測試初始階段需要提供一個初始種子集,隨著模糊測試的進行,種子輸入隊列Q中將陸續(xù)加入觸發(fā)新的程序行為的種子,對于執(zhí)行同一條路徑的種子,隊列僅保存其中適應(yīng)度最高的種子.模糊測試的每一輪迭代過程中,從種子輸入隊列Q中根據(jù)選種策略選擇待模糊的輸入文件,Q中包括n個種子,隨著模糊測試的不斷進行,n將持續(xù)增大.將Q記為Q={t1,t2,…,tn}.
根據(jù)Q中每個種子的熱度h(ti)對其進行排序,得到熱度優(yōu)先序列S={t1,t2,…,tn}.其中,t1為序列中熱度最高的種子,tn為序列中熱度最低的種子.
得到種子熱度優(yōu)先序列S后,可知種子ti+1與ti-1的熱度與ti的熱度大小較為接近,因此,可將ti臨近的種子視為位于同一溫度區(qū)域.將S等分為m個子序列,每個子序列中有n/m個種子,即子序列的長度為n/m,記為β.因此,序列S=S1+…+Sm,其中,S1={t1,…,tβ},…,Sm={tn-β+1,…,tn}.
子序列Sk的熱度H(Sk)為Sk中種子熱度的平均值,即
(1)
種子熱度優(yōu)先序列S的平均熱度H(S)為
(2)
完成熱度優(yōu)先序列建立后,便可根據(jù)種子熱度及種子所在子序列的熱度,計算出種間熱度.
由于模糊測試的過程中不斷產(chǎn)生新的測試用例,種子熱度優(yōu)先序列S的總能量以及各子序列的熱度均在不斷上升.如果根據(jù)某一具體的值來劃分熱度高與熱度低的種子,在長時間的模糊測試后該策略將失去意義.因此,本文提出了一種隨著模糊測試的進行不斷動態(tài)適應(yīng)變化的指標(biāo),即種間熱度.
在2.1節(jié)中得到了種子熱度優(yōu)先序列S并將其劃分為m個子序列,種子熱度優(yōu)先序列S的子序列S1為熱度最高的子序列,Sm為熱度最低的子序列.通過計算序列之間的歐式距離來分析熱度差異.
對于子序列Sk中的種子(1 (3) 計算Sk與Sm的歐式距離ρkm. (4) 當(dāng)ρ1k>ρkm時,說明Sk與S1的距離大于Sk與Sm的距離,低溫區(qū)域的熱度與Sk的熱度較為接近,則Sk為相對低溫區(qū)域.由此可知,Sk中的種子的熱度較低,即執(zhí)行了相對稀有路徑.同理,當(dāng)ρ1k<ρkm時,則Sk為相對高溫區(qū)域,Sk中的種子熱度較高,即執(zhí)行了相對高頻路徑. 根據(jù)熱傳導(dǎo)的性質(zhì),熱量傳遞的結(jié)果是使系統(tǒng)各部分熱度達(dá)到平均,本文期望通過算法干預(yù)使得稀有路徑的熱度逐漸接近路徑的平均熱度.因此,還需計算Sk中的種子的熱度與S平均熱度的比值Rk,進一步完善種間熱度計算,計算公式為 (5) 當(dāng)Rk>1時,Sk的平均熱度低于全局平均熱度; 當(dāng)Rk<1時,Sk的平均熱度高于全局平均熱度.通過計算Rk可快速確定Sk的熱度與全局熱度的關(guān)系. AFL的能量調(diào)控算法通過計算測試用例的執(zhí)行速度、位圖大小、測試用例的產(chǎn)生時間等因素為輸入文件進行打分,返回一個能量值,決定由該種子生成的測試用例數(shù)量[17],希望使執(zhí)行時間短、代碼覆蓋高、新發(fā)現(xiàn)的、執(zhí)行路徑深度深的種子擁有更多變異的時間. 該算法實質(zhì)上為貪心算法,往往不能做出最優(yōu)的全局選擇. 因此,本文期望對AFL的能量調(diào)控算法進行改進,對不同熱度的種子分配不同的能量,來影響每一輪模糊測試中被測試用例執(zhí)行過的程序路徑的能量,從而提高模糊測試的路徑覆蓋率. 本文的能量調(diào)控算法借鑒了熱傳導(dǎo)現(xiàn)象的思想,自然界中有溫差存在的地方,熱量會自發(fā)地由高溫區(qū)域向低溫區(qū)域傳遞[18]. 隨著模糊測試的進行,系統(tǒng)的整體能量不斷上升,并且無法降低路徑的能量,只能通過降低或增加分配給執(zhí)行該路徑的種子的能量,使得各路徑的能量趨于均衡. 因此,本文期望為種間熱度更低的種子分配更多的能量,分配的能量與熱度差成正比. 對于使用選種策略選中的待分配能量的種子t′,算法1詳細(xì)說明了其能量調(diào)控算法. 算法1 融合種間熱度的能量調(diào)控算法 輸入:種子t′ 種子隊列Q 子序列數(shù)m 輸出:種子能量p 1.n=Length(Q) 2.S=SortQby heat//根據(jù)種子熱度排序 3. forifrom 1 tondo 4. ifsi.heat==t′.heat then 5.k=i 6. end if 7. end for 8.k=k/(n/m)//確定種子所屬的子序列 9.ρ1k=EuclideanDist (S1,Sk) 10.ρkm=EuclideanDist (Sk,Sm) 11.Rk=Avg(S.heat) / Avg(Sk.heat) 12.a=OriginalEnergy(t′)//原始能量 13. ifρ1k>ρkmthen 14.p=a*ρ1k*2Rk 15. else ifρ1k<ρkmthen 16.p=a/ρkm* 2(-1/Rk) 17. end if 18.p=Min(p,M)//能量最大為M 在算法1中,給定待計算能量的種子t′,種子輸入隊列Q,熱度優(yōu)先序列子序列數(shù)為m.該算法分為兩部分,第一部分進行種間熱度計算(1~11行),首先建立熱度優(yōu)先序列(1~2行),遍歷S確定種子t′在序列S中所處的位置(3~7行),向上取整除以子序列的長度n/m,確定t′所屬的子序列Sk(第8行),計算出Sk與熱度最高和最低的子序列的歐式距離(9~10行),然后計算Sk與序列S平均熱度的比值Rk(11行).通過計算種間熱度,可準(zhǔn)確識別出執(zhí)行了相對稀有路徑的種子.第二部分計算為t′分配的能量(12-18行),t′的原始能量大小為a,由AFL的原始能量調(diào)控策略給出(12行).如果種子t′所在子序列與熱度最高子序列的歐式距離較大,則其位于相對低溫區(qū)域,應(yīng)增加為t′分配的能量,將原始能量a根據(jù)Rk呈指數(shù)放大,然后乘以Sk與高溫區(qū)域的歐式距離(13行~14行); 反之,t′位于相對高溫區(qū)域,應(yīng)減小為t′分配的能量,將原始能量根據(jù)平均溫度比值呈指數(shù)縮小,然后除以Sk與低溫區(qū)域的歐式距離(15行~16行).最后將t′分配的能量上限限制為M. 算法1通過比較序列之間的歐式距離確定t′的相對熱度,充分考慮了種子間的熱度差異,避免了固定值判斷指標(biāo)的單一性,準(zhǔn)確判斷出t′所執(zhí)行路徑的相對稀有程度.將原始能量呈指數(shù)增長或減小,確保了種子能量的快速增長與收斂,使各路徑被執(zhí)行次數(shù)趨于均衡,有效優(yōu)化了灰盒模糊測試的路徑發(fā)現(xiàn)能力.該算法的時間復(fù)雜度由種子隊列Q的長度n決定,其中,時間復(fù)雜度最高的操作為建立熱度優(yōu)先序列部分,可表示為O(nlogn),計算歐式距離部分時間復(fù)雜度為O(n/m),計算平均溫度比值Rk部分復(fù)雜度為O(n).由此可知該能量調(diào)控算法的時間復(fù)雜度為O(nlogn),并未在AFL中加入復(fù)雜的計算過程,保留了其輕量級的特點. 為評估本文方法在覆蓋率導(dǎo)向的灰盒模糊測試中的有效性,應(yīng)用本文方法在AFL與MOPT-AFL的基礎(chǔ)上進一步開發(fā)出HeatFuzz與MOPT-heat. 選取AFL以及當(dāng)前先進的灰盒模糊測試方法AFLFast、FairFuzz、MOPT-AFL作為本實驗對照. 測試環(huán)境為Ubuntu 18.04LTS 64位操作系統(tǒng),處理器型號為Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50 GHz處理器,在單核心上運行模糊測試工具,內(nèi)存為8 GB. 本文選取LAVA-M數(shù)據(jù)集和五個真實Linux應(yīng)用程序作為測試集,LAVA-M數(shù)據(jù)集由base64、md5sum、uniq、who這4個應(yīng)用程序組成,每個程序中被注入了多個漏洞,該數(shù)據(jù)集常用于評估模糊測試工具的性能. 5個真實Linux應(yīng)用程序為binutils-2.36中的objdump、readelf,libtiff-4.0.9中的tiff2rgba和tiff2pdf,libxml2-2.9.2中的xmllint. 為了保證實驗結(jié)果的普遍性,測試集選取的目標(biāo)程序處理的文件格式包括純文本類型、二進制程序、TIFF圖片、PDF文件以及XML文件,5個真實Linux應(yīng)用程序的詳細(xì)說明見表 1. 表 1 目標(biāo)程序配置Tab.1 The configuration of target programs 實驗中,首先分析模糊測試方法的路徑覆蓋均衡性的對比,然后重點對比6個模糊測試工具的路徑覆蓋率和路徑發(fā)現(xiàn)速率,最后在LAVA-M數(shù)據(jù)集上對比漏洞發(fā)現(xiàn)能力. 為比較不同模糊測試方法的路徑覆蓋均衡程度,本文通過覆蓋率反饋信息記錄模糊測試中目標(biāo)程序各路徑被測試用例執(zhí)行的次數(shù),并計算總體標(biāo)準(zhǔn)差. 通過計算程序路徑總體標(biāo)準(zhǔn)差可以反映出當(dāng)某一模糊測試工具測試目標(biāo)程序時,該程序中各路徑被執(zhí)行的次數(shù)與路徑平均執(zhí)行次數(shù)之間的偏差,總體標(biāo)準(zhǔn)差越小則路徑覆蓋越均衡. 模糊測試工具在目標(biāo)程序中各路徑被執(zhí)行次數(shù)的集合L為總體,該目標(biāo)程序已發(fā)現(xiàn)的路徑總數(shù)為n,第i條路徑記為li, 則該模糊測試工具測試目標(biāo)程序中各路徑被執(zhí)行次數(shù)的總體標(biāo)準(zhǔn)差σ為 (6) 使用相同的初始種子集,6個模糊測試工具在測試集中的9個目標(biāo)程序中分別運行1 h,比較每個模糊測試工具在不同目標(biāo)程序上已發(fā)現(xiàn)的各條路徑被測試用例執(zhí)行次數(shù)的總體標(biāo)準(zhǔn)差,計算結(jié)果舍去小數(shù),詳見表 2. 表 2 程序路徑總體標(biāo)準(zhǔn)差Tab.2 Program paths population standard deviation 由表 2 中數(shù)據(jù)可見,HeatFuzz在9個應(yīng)用程序上的總體標(biāo)準(zhǔn)差均小于AFL、AFLFast和FairFuzz,可見HeatFuzz對目標(biāo)程序覆蓋更為均衡. 另外,MOPT-heat在9個應(yīng)用程序上的總體標(biāo)準(zhǔn)差均小于MOPT-AFL. 由此可知,本文方法通過種間熱度識別出執(zhí)行稀有路徑的種子,并動態(tài)計算為其分配的能量,使得各路徑被執(zhí)行次數(shù)更接近平均值,從而使得各路徑覆蓋更為均衡. 通過分析程序路徑覆蓋數(shù),可以判斷模糊測試工具是否對目標(biāo)程序進行了充分的測試. 使用AFL、AFLFast、FairFuzz、HeatFuzz、MOPT-AFL和MOPT-heat分別在9個應(yīng)用程序中運行24 h, 路徑覆蓋數(shù)詳見表 3. 由表 3 中數(shù)據(jù)可見,在9個應(yīng)用程序中,HeatFuzz在其中8個應(yīng)用程序中發(fā)現(xiàn)的路徑數(shù)多于AFL,路徑覆蓋較之AFL平均提升22.34%,在5個真實應(yīng)用程序中平均提升32%,在測試集中發(fā)現(xiàn)的路徑總數(shù)比AFL多28.24%,由此可見,HeatFuzz通過解決路徑覆蓋不均衡的問題,穩(wěn)定提升了AFL的路徑覆蓋率. 較之與HeatFuzz優(yōu)化方向類似的先進模糊測試工具AFLFast與FairFuzz,發(fā)現(xiàn)路徑總數(shù)分別提升27.39%與13.78%,說明HeatFuzz的路徑發(fā)現(xiàn)能力優(yōu)于這二者. 較之MOPT-AFL,MOPT-heat在8個應(yīng)用程序中發(fā)現(xiàn)了更多的路徑,路徑覆蓋數(shù)平均提升17.64%,總路徑數(shù)多19.58%,在5個真實Linux程序中平均提升 28.04%. 綜上,本文方法對于3個先進灰盒模糊測試方法的路徑覆蓋總數(shù)平均提高20.25%. 因此,融合種間熱度的能量調(diào)控算法可有效提高覆蓋率導(dǎo)向的灰盒模糊測試的路徑覆蓋率. 表 3 路徑覆蓋數(shù)分析Tab.3 Path coverage analysis 對于灰盒模糊測試來說,路徑發(fā)現(xiàn)效率與漏洞發(fā)現(xiàn)效率成正比[19],分析路徑發(fā)現(xiàn)效率可有效衡量模糊測試工具的漏洞檢測能力. 24 h內(nèi),在 9個應(yīng)用程序中6個模糊測試工具的路徑發(fā)現(xiàn)效率對比詳見圖 2. 圖 2 路徑發(fā)現(xiàn)效率分析 首先,分析本文方法與AFL、AFLFast、FairFuzz的對比實驗結(jié)果,由圖 2(a)~圖 2(i)可見,HeatFuzz在除tiff2pdf之外的8個應(yīng)用程序上的路徑發(fā)現(xiàn)效率明顯優(yōu)于FairFuzz,在除md5sum之外的8個應(yīng)用程序上的路徑發(fā)現(xiàn)效率明顯優(yōu)于AFL. 由圖 2(e)~圖 2(i)可見,在5個真實Linux程序中,AFL、AFLFast與HeatFuzz在前 5 h 內(nèi)發(fā)現(xiàn)的路徑數(shù)量均保持著穩(wěn)定的增長,這是因為在模糊測試初期有著大量待發(fā)現(xiàn)的路徑; 而HeatFuzz在不犧牲前期快速發(fā)現(xiàn)大量路徑能力的前提下,隨著時間的增長,最終發(fā)現(xiàn)的路徑數(shù)均多于AFL與AFLFast. AFLFast在readelf中與HeatFuzz路徑發(fā)現(xiàn)效率相近,但是在objdump與tiff2pdf中,HeatFuzz更為快速且穩(wěn)定地測試了目標(biāo)程序. 因此,本文提出的種間熱度指標(biāo)可更準(zhǔn)確地描述出種子所執(zhí)行路徑的稀有程度,融合種間熱度的能量調(diào)控算法有效提高了灰盒模糊測試路徑發(fā)現(xiàn)效率. 然后,分析本文方法和MOPT-AFL的對比實驗結(jié)果. 由圖 2(a)~圖 2(d)可見,在LAVA-M數(shù)據(jù)集上由于目標(biāo)程序路徑總數(shù)較少,MOPT-AFL和MOPT-heat的路徑發(fā)現(xiàn)效率相近,發(fā)現(xiàn)的路徑數(shù)接近上限. 由圖2(e)~圖 2(i) 可見,較之MOPT-AFL,MOPT-heat在5個真實Linux中路徑發(fā)現(xiàn)效率明顯優(yōu)于MOPT-AFL,說明即使在其他優(yōu)化方向的模糊測試工具中應(yīng)用本文方法,同樣可以有效提高其路徑發(fā)現(xiàn)效率,因此本文方法具有一定的普適性. 比較模糊測試工具優(yōu)劣的最終指標(biāo)是其漏洞檢測能力,一個好的模糊測試工具應(yīng)該快速地檢測出目標(biāo)程序中的漏洞[20]. 為證明本文方法對于灰盒模糊測試漏洞挖掘能力的提高,6個模糊測試工具使用相同的初始種子集,在LAVA-M數(shù)據(jù)集上各運行6 h,比較發(fā)現(xiàn)的漏洞數(shù)量,結(jié)果詳見表 4. 表 4 漏洞檢測能力分析Tab.4 Vulnerability detection capability analysis 由表 4 可見,HeatFuzz較之AFL、AFLFast和FairFuzz,在base64、uniq和who程序中均發(fā)現(xiàn)了更多的漏洞. 其中,AFL僅在base64中發(fā)現(xiàn)了漏洞,AFLFast和FairFuzz僅在base64中發(fā)現(xiàn)的漏洞數(shù)量與HeatFuzz接近,并且MOPT-heat較之MOPT-AFL在uniq和md5sum中發(fā)現(xiàn)了更多的漏洞. 因此,本文方法可用于解決灰盒模糊測試路徑覆蓋不均衡的問題,具有更高的路徑覆蓋率,可以生成更多執(zhí)行漏洞所在區(qū)域的測試用例,更有可能觸發(fā)程序漏洞,從而有效提高了灰盒模糊測試的漏洞挖掘能力. 為解決灰盒模糊測試中路徑被執(zhí)行次數(shù)不均衡的問題,首先提出了種間熱度指標(biāo)來識別執(zhí)行稀有路徑的種子,然后提出了一種能量調(diào)控算法使得各路徑被執(zhí)行次數(shù)趨于均衡,并基于AFL2.52b與MOPT-AFL進一步開發(fā)出了HeatFuzz和MOPT-heat. 實驗結(jié)果表明,本文方法路徑覆蓋更為均衡,有效提高了灰盒模糊測試的路徑覆蓋率和漏洞檢測能力,具有實際應(yīng)用價值. 未來的研究工作中將進一步提高灰盒模糊測試在復(fù)雜路徑約束下的路徑覆蓋率,引入更多的程序分析技術(shù),比如上下文語義分析和污點分析技術(shù). 另外,將完善并擴展種子序列模型,在該模型上進行不同種子間的差異度分析.2.3 融合種間熱度的能量調(diào)控算法
3 實驗評估
3.1 實驗設(shè)計
3.2 路徑覆蓋均衡性分析
3.3 路徑覆蓋分析
3.4 路徑發(fā)現(xiàn)效率分析
3.5 漏洞檢測能力分析
4 結(jié) 論