李兆基,王田原,周自強,王 堯,陳永樂
1.太原理工大學(xué) 信息與計算機學(xué)院,山西 晉中030600
2.國網(wǎng)山西省電力公司電力科學(xué)研究院 電網(wǎng)技術(shù)中心,太原030001
模糊測試是一種自動化的程序測試技術(shù),它通過向目標(biāo)系統(tǒng)或待測程序提供大量輸入,然后監(jiān)測程序運行過程中的異常狀況來發(fā)現(xiàn)程序錯誤或漏洞。隨著模糊測試技術(shù)的研究與發(fā)展,對于許多僅有部分代碼區(qū)域需要測試的實際場景來說,定向模糊測試成為了一種最為行之有效的解決方案。例如補丁測試、bug重現(xiàn)和特殊bug搜索等場景[1]。
傳統(tǒng)的定向模糊測試是基于符號執(zhí)行的[2-6],它使用程序分析和約束求解來生成執(zhí)行不同程序路徑的輸入。這種定向模糊化器將可達性問題轉(zhuǎn)化為迭代約束滿足問題。但其將運行時的大部分時間都花在重量級程序分析和約束求解上,可能會導(dǎo)致路徑爆炸問題,因此效率是低下的。2017年,Bohme等人[7]提出了一種定向灰盒模糊測試工具AFLGo,它通過計算每個基本塊和插裝階段的目標(biāo)位置之間的距離來測量種子到目標(biāo)位置的距離,并使用基于模擬退火的調(diào)度策略通過輸入距離評估來分配測試能量,以此來獲得更高的定向性能和效率。然而實驗發(fā)現(xiàn),在某些程序運行中,AFLGo的定向性能并不像預(yù)期的那樣優(yōu)于AFL。這是因為整個定向模糊化過程分為探索階段和開發(fā)階段[7],AFLGo使用探索和開發(fā)階段的固定劃分,一旦探索階段轉(zhuǎn)向開發(fā)階段,即使由于沒有足夠的路徑而導(dǎo)致方向性能差,也沒有回頭路可走,不充分的探索結(jié)果通常會導(dǎo)致較差的開發(fā)結(jié)果。針對此問題,RDFuzz[8]使用一個交織的時間表來交替進行探索和開發(fā),但即使是這樣,也顯得不夠靈活,無法做到對于真實世界的不同應(yīng)用程序自適應(yīng)地權(quán)衡探索階段與開發(fā)階段。研究人員將深度學(xué)習(xí)應(yīng)用于定向模糊,為解決以往研究中的難題提供了新的見解。V-Fuzz[9]和Suzzer[10]基于深度學(xué)習(xí)模型預(yù)測函數(shù)的易受攻擊概率,計算每個輸入執(zhí)行路徑上所有基本塊的靜態(tài)得分之和,對得分較高的輸入進行優(yōu)先級排序。FuzzGuard[11]使用一種基于深度學(xué)習(xí)的方法,在執(zhí)行之前過濾掉無法到達的輸入,節(jié)省了在實際執(zhí)行上花費的時間。但無法忽略的是,他們都采用隨機突變策略來生成輸入用例,由于隨機突變無法精確地改變輸入文件,這樣導(dǎo)致的后果就是,在對生成的輸入進行篩選和優(yōu)先級排序之前,需要花費大量的時間和資源去生成海量輸入,然后通常會出現(xiàn)數(shù)百萬個新生成的輸入被丟棄,只有其中的少數(shù)輸入(執(zhí)行新的代碼路徑)被保留下來,這勢必會使得它們在探索階段和開發(fā)階段都耗費大量不必要的資源去生成許多無效輸入,從而使模糊器變得低效。
在本文中,提出一種基于神經(jīng)網(wǎng)絡(luò)的動態(tài)策略定向模糊測試方法,以緩解以上問題。該方法通過建立一個深度學(xué)習(xí)模型來優(yōu)化定向模糊測試中種子突變策略,學(xué)習(xí)先前輸入文件中不同位置的應(yīng)用突變模式,進而精確引導(dǎo)當(dāng)前輸入生成過程,以最大限度地減少花費在生成不期望輸入上的時間,從而增加模糊器覆蓋新代碼路徑的機會。將模糊測試階段的分裂投射到種子的劃分上來動態(tài)協(xié)調(diào)探索階段和開發(fā)階段的劃分,即將種子分成兩組:用于探索的覆蓋種子和用于開發(fā)的定向種子,基于本文設(shè)計的動態(tài)算法,可以自適應(yīng)地在兩個狀態(tài)之間切換。在這些技術(shù)的基礎(chǔ)上,開發(fā)了一個原型,名為DYNFuzz。并且在libxml2[12]、mupdf[13]、readelf[14]這三個應(yīng)用程序上對DYNFuzz 進行了測試。實驗結(jié)果表明,DYNFuzz具有比一般定向模糊器更優(yōu)越的性能。
本文做出的主要貢獻如下:
(1)提出一種新的神經(jīng)網(wǎng)絡(luò)解決方法來優(yōu)化種子突變,模型通過學(xué)習(xí)過去模糊探索輸入文件中的模式,預(yù)測當(dāng)前輸入文件中執(zhí)行變異的最佳位置,模糊器基于此信息生成高質(zhì)量的輸入。
(2)提出一種全新的定向模糊測試動態(tài)協(xié)調(diào)方法,能夠自適應(yīng)地調(diào)整定向模糊測試階段的劃分,提高模糊器的性能和效率。
(3)在AFL的基礎(chǔ)上實現(xiàn)了原型DYNFuzz,實驗結(jié)果表明,DYNFuzz具有比其他模糊器更好的性能表現(xiàn)。
定向灰盒模糊測試(directed greybox fuzzing,DGF)的目標(biāo)是到達程序代碼中的一組預(yù)先確定的位置,即潛在的容易引發(fā)錯誤的位置。為此,整個DGF 過程需要經(jīng)過探索和開發(fā)兩個階段。兩個階段的界限與權(quán)衡是影響DGF性能的一個重要因素。采用一種動態(tài)策略來協(xié)調(diào)二者之間的劃分,并且能夠做到自適應(yīng)地在兩個階段之間來回切換。具體來講,將模糊測試中的種子分成兩組:用于探索路徑的覆蓋種子和用于開發(fā)的定向種子。在本文的方法中,每組中種子的數(shù)量來表示花在相應(yīng)階段的能量,通過控制每組種子的數(shù)量來實現(xiàn)對兩個階段的動態(tài)協(xié)調(diào)。另外,為了大幅提高模糊器生成輸入的效率,利用現(xiàn)代神經(jīng)網(wǎng)絡(luò)模型的強大學(xué)習(xí)能力去探索輸入文件中的模式,通過學(xué)習(xí)一個函數(shù)來預(yù)測輸入文件不同位置的突變增益,根據(jù)結(jié)果進行相應(yīng)的模糊突變,從而達到指導(dǎo)未來的模糊搜索的能力。DYNFuzz的整體框架如圖1所示。
圖1 DYNFuzz整體框架圖Fig.1 Framework of DYN fuzzz
模糊測試需要大量的計算。即使是很小的輸入增益,也需要成千上萬的隨機突變來發(fā)現(xiàn)。然而,并不是所有的突變都是一樣的。文件格式及其解析器是異構(gòu)的,對于一個復(fù)雜的輸入格式,如果沒有大量的領(lǐng)域?qū)I(yè)知識,手動識別那些有可能產(chǎn)生輸入增益的關(guān)鍵位置是很困難的。為此,通過一個神經(jīng)網(wǎng)絡(luò)模型來自動識別輸入文件中使用代碼覆蓋反饋有用的位置。
給定一個字節(jié)格式的輸入文件,該模型注釋了一個熱映射函數(shù),強調(diào)了在輸入文件中改變每個位置的相對有效性。由于種子文件的長度可變,將模型定義為一個函數(shù)族。這類函數(shù)可以表示為公式(1)中的f,它可以接受任意數(shù)量的輸入位置作為輸入。
通過這個函數(shù)將輸入文件中的每個位置與產(chǎn)生輸入增益的突變概率關(guān)聯(lián)起來。在種子變異之前,模糊器為每個種子文件查詢該模型,并將突變集中在高亮顯示的位置,然后使用生成的熱圖引導(dǎo)突變到有用的位置。另外,針對少數(shù)有用位置的潛在輸入在模糊執(zhí)行期間被否決,這樣可以避免執(zhí)行不太可能產(chǎn)生輸入增益的輸入,從而節(jié)省時間??梢酝ㄟ^公式(2)來決定一個突變的輸入是否被否決。
其中,x表示模糊測試輸入的文件,x′表示變異后的輸入,f(x)對應(yīng)輸入文件的位置突變增益概率,α為用戶自定義閾值。x⊕x′可以表示變異輸入與原始種子文件之間的差異,通過α來控制一個合法的突變輸入需要多少有用的字節(jié)必須被突變。
直觀上來講,認(rèn)為對于一個經(jīng)過變異的輸入來說,代碼覆蓋的缺乏表明該輸入應(yīng)用了無用位置的突變。為了訓(xùn)練一個模型來學(xué)習(xí)預(yù)測函數(shù),可以通過輸入文件和相應(yīng)的代碼覆蓋率位圖的組合來表征和確定有用的位置。具體來講,模型的數(shù)據(jù)訓(xùn)練集對由以下公式來生成:
對于某一實值γ的截止值。給定訓(xùn)練數(shù)據(jù)集,目標(biāo)是學(xué)習(xí)一個模型,該模型可以將輸入文件x映射到差異熱圖x⊕x′,這反過來又可以用來識別潛在有用的位置,以集中注意力于突變。s(b,b′) 用于表示導(dǎo)致輸入增益的突變??梢杂靡粋€激勵函數(shù)來表示:
其中,bi表示位圖b的第i位,|b|表示位圖的長度。具體的取值參考如表1所示。
表1 激勵函數(shù)真值表Table 1 Truth table for activation function
由于輸入文件都是序列數(shù)據(jù),而且長度是可變的,選擇長短時記憶(LSTM)神經(jīng)網(wǎng)絡(luò)[15]來進行訓(xùn)練,以輸出一個模型,可用于預(yù)測預(yù)期的代碼覆蓋。眾所周知,LSTM克服了RNN在較長的序列上存在的問題,能夠?qū)W習(xí)長依賴關(guān)系。LSTM 神經(jīng)元包括一個用來保存長期記憶的細(xì)胞狀態(tài)和輸入門、輸出門及遺忘門,結(jié)構(gòu)如圖2所示。
圖2 LSTM神經(jīng)元結(jié)構(gòu)圖Fig.2 Structure of LSTM neuron
遺忘門ft決定上一時刻的細(xì)胞狀態(tài)Ct-1有多少保留至當(dāng)前時刻,輸入門it決定當(dāng)前網(wǎng)絡(luò)的輸入xt有多少保存到細(xì)胞狀態(tài),然后將當(dāng)前記憶和長期記憶組合在一起,形成新的細(xì)胞狀態(tài),具體如式(5)~(7)所示:
其中,W*表示模型的學(xué)習(xí)權(quán)重向量,σ為Sigmoid激活函數(shù),b*代表模型的學(xué)習(xí)偏差向量。最后通過輸出門ot控制單元狀態(tài)Ct有多少輸出到LSTM的當(dāng)前輸出值ht,即:
訓(xùn)練模型中,使用平均絕對誤差(MAE)作為損失函數(shù),優(yōu)化器是Adam。
現(xiàn)有的定向模糊器效率不高的很大一部分原因在于無法去靈活確定探索階段與開發(fā)階段的界限,一旦由探索階段轉(zhuǎn)向了開發(fā)階段,即使由于沒有足夠的路徑導(dǎo)致方向性能差,也沒有回頭路可走。為此,設(shè)計了一種動態(tài)算法,能夠使模糊器在運行過程中根據(jù)情況去選擇調(diào)用執(zhí)行合適的階段。詳情如算法1 所示。使用一個變量dr來表示種子池中定向種子所占的比重,相應(yīng)地它也表示花在開發(fā)階段的能量。在每個模糊化周期中,給覆蓋種子與定向種子加上標(biāo)簽,由dr進行調(diào)整。定向模糊過程首先會進入探索階段(dr=0),不斷地去發(fā)現(xiàn)更多的程序路徑,然后通過逐步增加dr的值來進入開發(fā)階段。另外一種情況是,當(dāng)模糊器長時間得不到的新的程序路徑覆蓋時,需要迅速增加dr的值轉(zhuǎn)入開發(fā)階段。在開發(fā)階段,會優(yōu)先選擇距離目標(biāo)位置更近的種子進行變異,同樣有時也需要從開發(fā)階段回到探索階段,那就是當(dāng)模糊器由于不充分的路徑探索信息陷入局部困境時。具體表現(xiàn)為如dr非常大,但經(jīng)過多個模糊化周期后仍不能靠近目標(biāo),這時應(yīng)當(dāng)大幅降低dr值返回探索階段繼續(xù)探索新的路徑,發(fā)現(xiàn)更多潛在的定向種子。另外,算法中的閾值是根據(jù)神經(jīng)網(wǎng)絡(luò)模型的準(zhǔn)確度設(shè)置的。通過這一動態(tài)策略,能夠自適應(yīng)地權(quán)衡探索階段和開發(fā)階段,提高模糊器的性能。
算法1 Directed Greybox Fuzzing with dynamic strategy
眾所周知,模糊器的突變策略是影響模糊器性能的一個重要因素。一些模糊器優(yōu)化突變策略以輔助定向模糊,Chen 等[16]利用了一種自適應(yīng)突變策略,它將突變器分為粗粒度和細(xì)粒度。粗粒度的突變器用于在突變期間更改大量字節(jié),而細(xì)粒度的突變器則只涉及幾個字節(jié)級的修改、插入或刪除。但突變器的調(diào)度是由經(jīng)驗值控制的,帶有一定的主觀性。本文通過采用機器學(xué)習(xí)的方法將變異具體到種子的字節(jié)粒度來改善這一過程。DYNFuzz在每次種子突變之前查詢訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型,通過模型反饋的預(yù)測結(jié)果來優(yōu)化探索階段和定向階段的種子變異。探索階段的目的在于代碼覆蓋,因此在探索階段,模糊器在種子突變前查詢神經(jīng)網(wǎng)絡(luò)模型,模型返回對應(yīng)的完整輸入文件的覆蓋熱圖,對應(yīng)文件各位置突變導(dǎo)致新代碼覆蓋的概率可能性。使用覆蓋熱圖中的概率值對突變位置進行排序,優(yōu)先選擇產(chǎn)生突變增益可能性高的位置進行突變。此外,通過模型查詢獲得到的bytemask是按位的,結(jié)合突變輸入與原始種子之間的差異可以獲得如公式(10)所示的K值,其中input⊕Seed表示突變差異。當(dāng)K值小于給定閾值α,此次突變無法導(dǎo)致代碼覆蓋率的增加或者其增幅不夠明顯,則在執(zhí)行之前拒絕此次突變以節(jié)省資源消耗。而到了開發(fā)階段,由于選取的都是距離目標(biāo)位置比較近的定向種子,而且經(jīng)過模型查詢,可以否決那些無用部分的突變,這樣一來,大量的突變極有可能導(dǎo)致種子偏離目標(biāo)位置,因此DYNFuzz在開發(fā)階段對于模型反饋的有效突變位置以50%的概率選擇對其進行輕微的突變,即單一方式的突變。
在探索階段,為了能夠讓模糊器盡可能探索到更多的程序路徑,在測試執(zhí)行跟蹤中關(guān)注那些觸發(fā)新的路徑覆蓋的種子,這樣配合神經(jīng)網(wǎng)絡(luò)模型的反饋信息進行精準(zhǔn)變異,可以大大提升模糊器的探索效率,獲取到豐富的路徑信息。到了開發(fā)階段,借鑒了AFLGo 的種子優(yōu)先級排序方法,基于LLVM方法[17]計算基本塊距離目標(biāo)點的距離,賦予每個定向模糊種子一個distance值,由此對其進行優(yōu)先級排序。
在搭載了Intel Core CPU i7-6500U、16 GB RAM、Nvidia GeForce GTX 1080 Ti(11 GB)和 以Ubuntu 16.04(64位)為操作系統(tǒng)的計算機上執(zhí)行了所有實驗和測試。在實驗中,選擇了libxml2[12]、mupdf[13]、readelf[14]這3個基準(zhǔn)來測試和驗證提出的技術(shù)。
神經(jīng)網(wǎng)絡(luò)模型是基于高級深度學(xué)習(xí)庫Keras[18]開發(fā)的,并選用Tensorflow[19]作為底層后端。為了收集訓(xùn)練模型所需要的數(shù)據(jù),針對每個基準(zhǔn)隨機選取了7 800 個種子文件,將種子平均分為訓(xùn)練集和測試集,在AFL上運行了24 h。給定一個包含輸入、變異輸入以及其對應(yīng)的代碼覆蓋的集合(x,x′,b,b′),通過公式對數(shù)據(jù)進行過濾,構(gòu)造一個訓(xùn)練集XY。模型訓(xùn)練了12 h 以確保收斂,損失函數(shù)使用平均絕對誤差(MAE),同時還使用Adam 優(yōu)化器來幫助學(xué)習(xí)函數(shù)快速穩(wěn)定地收斂到最優(yōu)解。當(dāng)學(xué)習(xí)函數(shù)的損失值變得穩(wěn)定時,訓(xùn)練過程結(jié)束。
基于所提出的方法,開發(fā)了一個原型,由DYNFuzz命名,它建立在AFL[20]、基于LLVM[17]的分析和python腳本之上。AFL提供了一個基本的測試框架;此外,在afl-fuzz.c模塊中添加了一些額外的代碼,實現(xiàn)了提出的方法,包括動態(tài)策略、QueryModel()函數(shù)?;贚LVM的分析和python腳本用于輸入距離計算。
為了評估本文提出方法的有效性,在不同的測試基準(zhǔn)上進行了多次實驗,從神經(jīng)網(wǎng)絡(luò)模型的有效性、DYNFuzz的定向性能兩個方面進行了評估。
2.3.1 模型有效性
模型的有效性對DYNFuzz 至關(guān)重要,因為種子變異是基于模型的預(yù)測結(jié)果進行的。如圖3所示,經(jīng)過5個時期的訓(xùn)練,本文的模型準(zhǔn)確率達到了91.3%,訓(xùn)練損失下降到了23%,結(jié)果如圖3所示。
圖3 模型的訓(xùn)練精度和損失值Fig.3 Training accuracy and loss of proposed model
另一方面,使用機器學(xué)習(xí)中廣泛使用的假正例率(FPR)、假陰率(FNR)、真正例率(TPR)、準(zhǔn)確率(P)以及F值(F-score)作為度量來評估本文的模型。其中FPR=FP/(FP+TN)是假陽性輸入增益占全部無法產(chǎn)生輸入增益總體的比例,F(xiàn)NR=FN/(TP+FN)為假陰性輸入增益與輸入增益總體的比例。TPR=TP/(TP+FN)表示正確預(yù)測輸入增益樣本與輸入增益總體的比例。P=TP/(TP+FP)用于度量預(yù)測輸入增益,增加代碼覆蓋的正確性。F-score=2×P×TPR/(P+TPR)綜合考慮了準(zhǔn)確率和TPR。結(jié)果如表2 所示,可以看到本文的模型在三個基準(zhǔn)測試集上都表現(xiàn)出了良好的預(yù)測結(jié)果和精準(zhǔn)度,但可以看出在mupdf解析器上的表現(xiàn)要明顯低于其他兩個基準(zhǔn),這可能是由于典型的PDF文件的大小相當(dāng)大(超過100 kb),針對這種冗長格式文件,模型沒有訓(xùn)練充分,學(xué)習(xí)過程中丟失了部分信息所導(dǎo)致的,針對此問題,可以嘗試通過增加訓(xùn)練集的大小來改善。
表2 DYNFuzz在測試基準(zhǔn)上的表現(xiàn)Table 2 Performance of DYNFuzz on test benchmarks
2.3.2 定向性能評估
使用機器學(xué)習(xí)模型的目的在于提高模糊器在探索期間的覆蓋能力,豐富的路徑信息可以使得模糊器在進入開發(fā)階段后精確導(dǎo)向目標(biāo)位置,動態(tài)策略的引入也使得模糊器更加靈活,能夠在陷入困境時在兩個階段之間自由切換。為了直觀地表現(xiàn)DYNFuzz 的定向性能,采用探索階段的輸入增益和開發(fā)階段生成輸入的最小輸入距離作為評價指標(biāo)來定量表示。輸入增益是在目標(biāo)程序中發(fā)現(xiàn)的表現(xiàn)出從未見過的行為路徑的數(shù)量。這種行為表征為執(zhí)行一個新的代碼塊,或者增加先前執(zhí)行的代碼塊的執(zhí)行頻率。最小輸入距離最早是在AFLGo中提出使用的,這是一種反映直接測試結(jié)果的方法。使用AFLGo 和RDFuzz 兩個定向模糊器作為比較,在CVE-2017-5969、CVE-2018-6544、CVE-2019-14444這三個基準(zhǔn)上進行了對比實驗,它們分別對應(yīng)了結(jié)果如圖4所示,x軸代表了持續(xù)的時間,探索階段y軸表示找到的代碼路徑的唯一枚舉,開發(fā)階段軸表示所有生成的輸入中的最小輸入距離。
圖4 DYNFuzz在三個測試基準(zhǔn)上的表現(xiàn)Fig.4 Performance of DYNFuzz on three benchmarks
基于圖示結(jié)果可以看出,在3個測試基準(zhǔn)中,DYNFuzz都表現(xiàn)出了良好的探索和開發(fā)結(jié)果,特別是在第一個和第三個測試基準(zhǔn)上,可以明顯看出DYNFuzz 無論是在探索階段的路徑覆蓋上還是開發(fā)階段的目標(biāo)位置定向上,都要好于RDFuzz 和AFLGo。而在第二個基準(zhǔn)(CVE-2018-6544)上,DYNFuzz 與RDFuzz 的結(jié)果非常接近,甚至在某些時刻點上,RDFuzz 的結(jié)果要好于DYNFuzz,推測出現(xiàn)這一結(jié)果的原因是模型查詢的時間過長從而導(dǎo)致對DYNFuzz的性能產(chǎn)生負(fù)面影響。由于典型的PDF 文件大小相當(dāng)大,DYNFuzz 在模糊化每個種子文件之前,必須為這個種子文件查詢模型,以產(chǎn)生顯著改善的輸入增益,但對于這樣大的種子文件,整個查詢過程可能需要幾秒鐘甚至更多的時間,在模型查詢上經(jīng)常會阻塞執(zhí)行,以致于影響了整個fuzzer 的性能。而RDFuzz 由于采用了分支級別的統(tǒng)計數(shù)據(jù),因此在面對mupdf這樣比較大的程序也限制了其一定的性能,所以二者在CVE-2018-6544 上的整體表現(xiàn)并沒有相差很多。而AFLGo 受限于探索與開發(fā)階段的權(quán)衡問題,有時會在CVE-2017-5969 上表現(xiàn)的那樣,被困在開發(fā)階段,無法更進一步地接近目標(biāo)位置,而在DYNFuzz上沒有出現(xiàn)這種情況,這得益于動態(tài)協(xié)調(diào)策略的引入,在長時間無法趨近目標(biāo)代碼區(qū)域時,模糊器會調(diào)用探索階段來豐富程序路徑信息。
在本文中,提出了一種基于神經(jīng)網(wǎng)絡(luò)模型的動態(tài)策略定向模糊測試方法,用于改善當(dāng)前定向模糊器的效率,在三種處理常見文件格式的程序上進行了實驗測試,分析了模型的準(zhǔn)確性和DYNFuzz 的定向性能。結(jié)果表明,所提出的方法能夠更快、更高效地實現(xiàn)程序路徑覆蓋并接近和覆蓋目標(biāo)位置,這說明本文的技術(shù)方法具有更高效的定向性能,從而有著更大的概率去發(fā)現(xiàn)漏洞。另外,動態(tài)策略方法的應(yīng)用也避免了模糊器陷入局部困境的情況。
另一方面,DYNFuzz 仍存在一些值得進一步研究的問題與局限性。首先,在實驗中發(fā)現(xiàn)本文的模型在應(yīng)對大型文件處理程序時表現(xiàn)不佳,需要進一步完善模型的設(shè)計,或者還應(yīng)該考慮應(yīng)用其他更好的神經(jīng)網(wǎng)絡(luò)模型來學(xué)習(xí)文件變異模式。其次,動態(tài)協(xié)調(diào)算法中的閾值是根據(jù)本文模型的準(zhǔn)確度進行設(shè)置的,但這在一定程度上也給DYNFuzz 帶來了一定的局限性,更為合理的方式應(yīng)該是基于啟發(fā)式算法生成的,因此尋找和應(yīng)用合適的啟發(fā)式算法也是接下來需要研究的方向。最后,DYNFuzz 的局限還表現(xiàn)在無法發(fā)現(xiàn)隱藏在復(fù)雜的健全性檢查背后的漏洞,例如魔法字節(jié)。可以將當(dāng)前的一些高級方法集成到本文的工具中,以增強漏洞檢測能力。例如可以結(jié)合污點分析[21]或者動態(tài)符號執(zhí)行[22]技術(shù),設(shè)計更加高效的種子遺傳變異策略,提升DGF的能力。