牛勝杰,李 鵬,張玉杰,
(1.南京郵電大學(xué)計(jì)算機(jī)學(xué)院,江蘇 南京210023;2.江蘇省無(wú)線傳感網(wǎng)高技術(shù)研究重點(diǎn)實(shí)驗(yàn)室,江蘇 南京 210023)
如今,惡意攻擊者利用系統(tǒng)漏洞對(duì)軟件系統(tǒng)進(jìn)行攻擊的現(xiàn)象屢見不鮮,已對(duì)企業(yè)和用戶造成嚴(yán)重的影響。傳統(tǒng)的漏洞檢測(cè)方法(如靜態(tài)分析方法和動(dòng)態(tài)分析方法)具有操作流程繁瑣、測(cè)試覆蓋范圍小的缺點(diǎn),已不符合現(xiàn)階段的需要,這就促使學(xué)術(shù)界必須提出漏洞挖掘的新技術(shù)、新工具和新系統(tǒng)。模糊測(cè)試是漏洞檢測(cè)方法的一種,通過(guò)使用針對(duì)目標(biāo)程序生成的隨機(jī)字符流,對(duì)目標(biāo)程序進(jìn)行多次測(cè)試,以檢測(cè)可能存在的漏洞。模糊測(cè)試技術(shù)具有不依賴目標(biāo)程序源碼、不受限于被測(cè)系統(tǒng)內(nèi)部結(jié)構(gòu)和可復(fù)用性強(qiáng)等優(yōu)點(diǎn),已成為漏洞挖掘領(lǐng)域的重點(diǎn)研究?jī)?nèi)容。近年來(lái),研究人員通過(guò)對(duì)模糊測(cè)試技術(shù)的不斷創(chuàng)新發(fā)展,例如采用漏洞挖掘新方法,提出漏洞挖掘新框架,創(chuàng)造漏洞挖掘新工具等方式,不斷提高軟件系統(tǒng)的漏洞挖掘技術(shù)水平。本文結(jié)合10年來(lái)在國(guó)際著名安全會(huì)議上發(fā)表的有關(guān)模糊測(cè)試文獻(xiàn),重點(diǎn)對(duì)模糊測(cè)試技術(shù)的發(fā)展及應(yīng)用進(jìn)行總結(jié)。
本文第2節(jié)簡(jiǎn)要介紹模糊測(cè)試基本概念及工作流程,關(guān)注對(duì)不同測(cè)試目標(biāo)采用的模糊測(cè)試技術(shù),對(duì)其進(jìn)行技術(shù)分類并總結(jié)其優(yōu)缺點(diǎn)。提供基于時(shí)間軸的模糊技術(shù)發(fā)展史圖,選取重要的技術(shù)提出以及代表型模糊測(cè)試工具的創(chuàng)新問(wèn)世為時(shí)間點(diǎn),幫助讀者直觀地了解模糊測(cè)試技術(shù)的誕生與發(fā)展。第3節(jié)介紹模糊測(cè)試技術(shù)在各領(lǐng)域的應(yīng)用。針對(duì)不同應(yīng)用場(chǎng)景,模糊測(cè)試分別從不同維度提供技術(shù)支持,提高漏洞挖掘能力。第4節(jié)重點(diǎn)介紹近年來(lái)模糊測(cè)試技術(shù)的創(chuàng)新發(fā)展成果。針對(duì)不同領(lǐng)域產(chǎn)生的工具、框架及系統(tǒng)原型,分別對(duì)其采用的創(chuàng)新理論和具體流程進(jìn)行梳理總結(jié),并分析其優(yōu)缺點(diǎn)。第5節(jié)結(jié)合協(xié)議逆向工程、云平臺(tái)建設(shè)、新興技術(shù)(如機(jī)器學(xué)習(xí)和大數(shù)據(jù)分析)應(yīng)用、模糊測(cè)試對(duì)抗技術(shù)及模糊測(cè)試工具集成,提出模糊測(cè)試技術(shù)的挑戰(zhàn)和發(fā)展方向。
模糊測(cè)試(Fuzzing)[1]是一種針對(duì)不同測(cè)試目標(biāo)采用不同的技術(shù)手段,結(jié)合用例生成策略產(chǎn)生測(cè)試用例,將其輸入到目標(biāo)系統(tǒng)后通過(guò)監(jiān)視異常結(jié)果來(lái)發(fā)現(xiàn)漏洞的安全檢測(cè)技術(shù)。具體來(lái)說(shuō),模糊測(cè)試是利用插樁、符號(hào)執(zhí)行及污點(diǎn)分析等技術(shù)收集目標(biāo)信息,根據(jù)對(duì)目標(biāo)內(nèi)部信息的依賴程度采用不同的測(cè)試方法(如黑盒、白盒和灰盒),基于種子生成策略對(duì)正常數(shù)據(jù)進(jìn)行自動(dòng)或半自動(dòng)地變異生成大量預(yù)期或非預(yù)期的測(cè)試用例,通過(guò)分析目標(biāo)的輸出結(jié)果進(jìn)行安全漏洞檢測(cè)的方法。
通過(guò)對(duì)大量文獻(xiàn)的總結(jié)梳理,模糊測(cè)試的一般流程可分為以下環(huán)節(jié):
(1)確定模糊測(cè)試對(duì)象。測(cè)試對(duì)象選擇首先要考慮對(duì)象本身的因素,如目標(biāo)程序或系統(tǒng)的性質(zhì)、功能、運(yùn)行環(huán)境和實(shí)現(xiàn)語(yǔ)言等。測(cè)試對(duì)象包括二進(jìn)制代碼或者軟件系統(tǒng),除了自身開發(fā)的程序或系統(tǒng)外,通常軟件源代碼不容易得到,因此模糊測(cè)試對(duì)象大多數(shù)為二進(jìn)制代碼。測(cè)試對(duì)象的宏觀審視,是整個(gè)模糊測(cè)試的基礎(chǔ),它將直接影響模糊測(cè)試的技術(shù)選擇(如黑盒、白盒和灰盒)。
(2)選擇輸入向量。測(cè)試對(duì)象的因素組成即輸入向量包括文件數(shù)據(jù)、網(wǎng)絡(luò)數(shù)據(jù)、注冊(cè)表鍵、環(huán)境變量及其他信息等。惡意破壞者之所以能夠利用系統(tǒng)安全漏洞,究其根本是由于系統(tǒng)沒(méi)有對(duì)輸入進(jìn)行校驗(yàn)或非法輸入處理。輸入向量和測(cè)試用例生成策略可概括為測(cè)試用例參考要素,考慮各輸入向量的影響權(quán)重,結(jié)合測(cè)試用例生成策略,找到具有高覆蓋率的測(cè)試用例是模糊測(cè)試成功的關(guān)鍵。
(3)生成測(cè)試用例。測(cè)試用例的生成基于選定的輸入向量,可以基于變異或生成方法生成大量測(cè)試用例?;谧儺惖臏y(cè)試用例生成方法是通過(guò)對(duì)已知數(shù)據(jù)樣本進(jìn)行定向(如bitflip按位翻轉(zhuǎn)、interest替代、splice絞接等)或隨機(jī)變異的方式產(chǎn)生新的測(cè)試用例,該方法利用正常輸入中的信息繞過(guò)錯(cuò)誤檢查代碼,達(dá)到可執(zhí)行的目的,具有較高的擴(kuò)展性。基于生成的測(cè)試用例生成方法是通過(guò)人工編寫測(cè)試用例生成規(guī)則,使得測(cè)試用例可以按照目標(biāo)規(guī)則進(jìn)行生成,保證生成的測(cè)試用例可以繞過(guò)目標(biāo)程序的錯(cuò)誤檢查代碼。
(4)執(zhí)行測(cè)試用例。將測(cè)試用例發(fā)送到目標(biāo)軟件或系統(tǒng),以確保測(cè)試對(duì)象能夠成功處理測(cè)試用例。
(5)監(jiān)視器。測(cè)試用例執(zhí)行完成后,需要對(duì)目標(biāo)對(duì)象的產(chǎn)生結(jié)果加以監(jiān)視。當(dāng)目標(biāo)對(duì)象崩潰或報(bào)告錯(cuò)誤時(shí),監(jiān)視器模塊將會(huì)收集并分析相關(guān)信息,記錄產(chǎn)生異常的測(cè)試用例和產(chǎn)生的異常的詳細(xì)信息,確定漏洞的真實(shí)性。
(6)有效性評(píng)估。分析異常產(chǎn)生的原因,跟蹤異常產(chǎn)生前后的處理流程,判斷發(fā)現(xiàn)的漏洞是否可被利用。
模糊測(cè)試流程圖如圖1所示。
Figure 1 Flow chart of fuzzing
根據(jù)在模糊測(cè)試過(guò)程中所需的輸入信息或?qū)Τ绦騼?nèi)部信息分析的程度,模糊測(cè)試技術(shù)可分為3大類:黑盒模糊測(cè)試、白盒模糊測(cè)試和灰盒模糊測(cè)試。
(1)黑盒模糊測(cè)試。黑盒模糊測(cè)試也稱為輸入輸出驅(qū)動(dòng)模糊測(cè)試或者功能模糊測(cè)試,其原理是把目標(biāo)當(dāng)做一個(gè)看不到內(nèi)部邏輯結(jié)構(gòu)的黑盒,在完全不考慮內(nèi)部結(jié)構(gòu)和性能的情況下,使用一些預(yù)定義的種子文件創(chuàng)建表單輸出的模糊測(cè)試技術(shù)。在測(cè)試過(guò)程中,由于黑盒模糊測(cè)試無(wú)法跟蹤目標(biāo)內(nèi)部的執(zhí)行狀態(tài),只能通過(guò)檢測(cè)目標(biāo)的輸出數(shù)據(jù)來(lái)判斷目標(biāo)的狀態(tài)。測(cè)試過(guò)程中會(huì)生成大量冗余的測(cè)試用例,是導(dǎo)致該類技術(shù)的代碼覆蓋率低、測(cè)試效果差的主要原因。
(2)白盒模糊測(cè)試。白盒模糊測(cè)試也稱為邏輯驅(qū)動(dòng)模糊測(cè)試,與黑盒模糊測(cè)試截然不同,白盒模糊測(cè)試是將目標(biāo)看作一個(gè)內(nèi)部結(jié)構(gòu)高度可視化的透明盒,在全面了解目標(biāo)內(nèi)部邏輯的基礎(chǔ)上進(jìn)行的模糊測(cè)試技術(shù)。白盒模糊測(cè)試是將目標(biāo)內(nèi)部結(jié)構(gòu)單元化,并將單元測(cè)試的范圍擴(kuò)展到整個(gè)目標(biāo)的安全測(cè)試。白盒模糊測(cè)試具有測(cè)試全覆蓋的優(yōu)勢(shì),但正是由于其高度可視化,在實(shí)際應(yīng)用中,目標(biāo)對(duì)象內(nèi)部的復(fù)雜程度嚴(yán)重制約了它的發(fā)展。
(3)灰盒模糊測(cè)試?;液心:郎y(cè)試是白盒模糊測(cè)試的一種變體,繼承了黑盒模糊測(cè)試與白盒模糊測(cè)試的優(yōu)點(diǎn),同時(shí)對(duì)兩者的缺點(diǎn)進(jìn)行了改進(jìn)。它是在對(duì)目標(biāo)對(duì)象有部分了解的情況下進(jìn)行的漏洞檢測(cè)方式。與白盒模糊測(cè)試相比,兩者都是利用目標(biāo)程序的信息來(lái)減輕黑盒模糊測(cè)試的盲目性,但對(duì)目標(biāo)信息的依賴程度不同。
各類模糊測(cè)試技術(shù)特點(diǎn)如表1所示。
Table 1 Classification of fuzzing technologies
模糊測(cè)試技術(shù)發(fā)展史如圖2所示。
Figure 2 History of the development of fuzzing technologies
1990年,模糊測(cè)試由Miller等人[1]率先提出。1995年第一款針對(duì)UNIX系統(tǒng)的模糊測(cè)試工具Fuzz誕生,Miller設(shè)計(jì)的模糊測(cè)試工具包括一個(gè)隨機(jī)字符串產(chǎn)生器[2],通過(guò)該產(chǎn)生器對(duì)setuid應(yīng)用程序進(jìn)行隨機(jī)模糊測(cè)試,可提高setuid應(yīng)用程序的可靠性。2001年,Protos項(xiàng)目[3]誕生,標(biāo)志著模糊測(cè)試應(yīng)用于網(wǎng)絡(luò)協(xié)議分析的新起點(diǎn),也是模糊測(cè)試技術(shù)成為實(shí)用性工具的開始。2002年,Aitel[4]詳細(xì)講解并演示了基于生成的模糊測(cè)試工具SPIKE。2008年,針對(duì)Microsoft Office等復(fù)合文檔安全,Gao等人[5]提出了一種可以有效提高測(cè)試效率的測(cè)試用例構(gòu)造方法。2009年,基于污點(diǎn)分析的Vganesh技術(shù)[6]被廣泛應(yīng)用。2010年,Wang等人[7]結(jié)合混合符號(hào)執(zhí)行與細(xì)顆粒度動(dòng)態(tài)污點(diǎn)跟蹤技術(shù),提出一種繞過(guò)系統(tǒng)校驗(yàn)和防護(hù)機(jī)制的方法,提高了漏洞挖掘能力。2011年,Zhu等人[8]提出了模糊測(cè)試組件生成模型,可以從龐大的數(shù)據(jù)集樣本中自動(dòng)生成具有較高覆蓋率的測(cè)試用例。
2013年至今的模糊測(cè)試技術(shù)發(fā)展,是本文重點(diǎn)總結(jié)的內(nèi)容,將在第3、4節(jié)中詳述,在圖2中不再一一說(shuō)明。
模糊測(cè)試已成為挖掘系統(tǒng)漏洞的中堅(jiān)力量,本節(jié)對(duì)模糊測(cè)試在各領(lǐng)域的重要應(yīng)用進(jìn)行歸納整理。通過(guò)對(duì)大量文獻(xiàn)調(diào)研與歸類,本文將模糊測(cè)試應(yīng)用領(lǐng)域分為軟件測(cè)試、協(xié)議測(cè)試及其他應(yīng)用領(lǐng)域。
3.1.1 Android測(cè)試
隨著技術(shù)水平和社會(huì)經(jīng)濟(jì)的迅速發(fā)展,智能手機(jī)在人們的日常生活中越來(lái)越普及,從衣食住行等不同方面影響著人們的生產(chǎn)和生活方式。智能手機(jī)開發(fā)平臺(tái)多種多樣,其中Android是應(yīng)用最為廣泛的平臺(tái)之一。為應(yīng)對(duì)快速增長(zhǎng)的系統(tǒng)安全威脅,研究人員提出了針對(duì)智能手機(jī)系統(tǒng)安全的解決方法,例如靜態(tài)分析技術(shù)[9]和自動(dòng)動(dòng)態(tài)分析技術(shù)[10,11]。
有效觸發(fā)惡意行為是實(shí)現(xiàn)智能手機(jī)惡意軟件自動(dòng)化分析的前提。Wang等人[12,13]專注于對(duì)抗Android惡意軟件中的各種躲避技術(shù),在自動(dòng)動(dòng)態(tài)分析中觸發(fā)更多隱藏的惡意行為,從而幫助生成更全面的惡意軟件報(bào)告。針對(duì)Android組件通信過(guò)程中由于組件暴露產(chǎn)生的安全問(wèn)題,王凱等人[13]結(jié)合模糊測(cè)試和逆向分析技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了Android漏洞挖掘工具KMDroid。張密等人[14]提出了一種基于模糊測(cè)試方法的組件通信測(cè)試方案,以 Android SDK提供的數(shù)據(jù)為基礎(chǔ),引導(dǎo)高覆蓋率的測(cè)試用例生成,設(shè)計(jì)并實(shí)現(xiàn)了工具FuzzerAPP。關(guān)于Android應(yīng)用程序的健壯性測(cè)試,趙賽等人[15]提出了一種基于模糊測(cè)試的檢測(cè)方法,使用Android組件相關(guān)信息來(lái)構(gòu)造測(cè)試用例,設(shè)計(jì)實(shí)現(xiàn)了全自動(dòng)測(cè)試工具ICCDroidFuzzer,實(shí)驗(yàn)中結(jié)合測(cè)試結(jié)果對(duì)源碼進(jìn)行分析,得出了拋出異常的根本原因。針對(duì)Android驅(qū)動(dòng)安全,何遠(yuǎn)等人[16]提出了基于黑盒模糊測(cè)試的遺傳算法,通過(guò)測(cè)試執(zhí)行結(jié)果的實(shí)時(shí)反饋來(lái)引導(dǎo)遺傳算法,實(shí)現(xiàn)了Android驅(qū)動(dòng)的模糊測(cè)試系統(tǒng)Add-fuzz(Android device driver fuzz)。
3.1.2 Windows測(cè)試
圖形用戶界面GUI(Graphical User Interface)可視化計(jì)算機(jī)程序,其目的是促進(jìn)用戶和設(shè)備之間的交互。GUI測(cè)試是軟件測(cè)試的關(guān)鍵部分,驗(yàn)證界面和用戶之間的交互行為,而不考慮任何編碼細(xì)節(jié)。Din等人[17]提出了一種基于模糊自適應(yīng)教與學(xué)優(yōu)化ATLBO(Adaptive Teaching Learning-Based Optimization)算法的GUI功能測(cè)試策略,該算法是基于教與學(xué)優(yōu)化TLBO(Teaching Learning-Based Optimization)算法的變體[17],利用事件交互圖EIG(Event-Interaction Graph)來(lái)生成高質(zhì)量測(cè)試用例。為提高GUI測(cè)試時(shí)空轉(zhuǎn)時(shí)機(jī)判定的準(zhǔn)確率,張興等人[18]提出了基于Bi-Gram模型以及統(tǒng)計(jì)分析的空轉(zhuǎn)狀態(tài)識(shí)別方法。
3.1.3 瀏覽器測(cè)試
針對(duì)瀏覽器安全,Zalewski[19]提出了模糊測(cè)試工具AFL(AmericanFuzzy Lop),根據(jù)測(cè)試結(jié)果計(jì)算覆蓋率,進(jìn)而指導(dǎo)數(shù)據(jù)變異生成測(cè)試用例?;衄|等人[20]提出了一種基于模式生成的瀏覽器模糊測(cè)試方法,通過(guò)對(duì)測(cè)試模式分析、定義與自動(dòng)化提取,產(chǎn)生模糊測(cè)試器完成測(cè)試數(shù)據(jù)構(gòu)造,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)瀏覽器模糊測(cè)試工具autofuzzy。不足之處在于對(duì)獲取的測(cè)試模式?jīng)]有一個(gè)較好的管理和反饋機(jī)制,還需要更多的基礎(chǔ)數(shù)據(jù)來(lái)滿足樣本的生成。
3.2.1 互聯(lián)網(wǎng)協(xié)議
網(wǎng)絡(luò)協(xié)議的安全問(wèn)題近期受到人們的廣泛關(guān)注。隨著網(wǎng)絡(luò)協(xié)議逆向工程的提出,針對(duì)手工模糊測(cè)試操作繁瑣且代碼覆蓋率低的問(wèn)題,李偉明等人[21]采用了一種可以對(duì)網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)自動(dòng)化識(shí)別并且能對(duì)其進(jìn)行有效模糊測(cè)試的漏洞挖掘方法,顯著提升了測(cè)試效率。針對(duì)現(xiàn)有網(wǎng)絡(luò)不能較好地支持狀態(tài)轉(zhuǎn)換的問(wèn)題,Ma等人[22]根據(jù)有狀態(tài)網(wǎng)絡(luò)協(xié)議的特點(diǎn),提出了有狀態(tài)網(wǎng)絡(luò)協(xié)議半有效模糊測(cè)試SFSNP(Semi-valid Fuzzing for the Stateful Network Protocol),通過(guò)分析協(xié)議交互,構(gòu)建出帶有路徑標(biāo)記的擴(kuò)展有限狀態(tài)機(jī),并根據(jù)擴(kuò)展有限狀態(tài)機(jī)、協(xié)議狀態(tài)規(guī)則樹及半有效算法獲得模糊測(cè)試序列,采用狀態(tài)轉(zhuǎn)換標(biāo)記算法,以減少冗余測(cè)試用例生成,縮短測(cè)試時(shí)間。針對(duì)傳輸層安全協(xié)議TLS(Transport Layer Security)安全性測(cè)試,Walz等人[23]設(shè)計(jì)了一種通用的動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)——通用消息樹GMTs(Generic Message Trees)?;贕MT概念,提出了一種隨機(jī)算法來(lái)生成高度多樣化和大部分有效的TLS握手消息;使用消息生成算法來(lái)差異測(cè)試現(xiàn)有較為流行的TLS服務(wù)器,經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證其算法的高效性;開發(fā)的工具tls-diff-testing作為開源項(xiàng)目已經(jīng)向外界公布。
支持實(shí)時(shí)流傳輸協(xié)議RTSP(Real Time Streaming Protocol)的視頻監(jiān)控設(shè)備在市場(chǎng)中應(yīng)用廣泛,針對(duì)RTSP協(xié)議模糊測(cè)試用例改進(jìn),Ma等人[24]先后提出了基于分類樹、啟發(fā)式算子、規(guī)則狀態(tài)機(jī)和狀態(tài)樹指導(dǎo)模糊測(cè)試用例生成的方法,可有效刪除無(wú)用項(xiàng),大大提高了測(cè)試數(shù)據(jù)生成質(zhì)量。
3.2.2 工控協(xié)議
工業(yè)控制系統(tǒng)是用于管理關(guān)鍵基礎(chǔ)設(shè)施服務(wù)的操作技術(shù)系統(tǒng)的運(yùn)行和功能的重要組成部分。Tacliad等人[25]開發(fā)了一款模糊測(cè)試工具ENIP Fuzz,用于檢測(cè)可編程邏輯控制器中使用的以太網(wǎng)/IP軟件漏洞。針對(duì)傳統(tǒng)模糊測(cè)試應(yīng)用于數(shù)據(jù)采集與監(jiān)控系統(tǒng)SCADA(Supervisory Control And Data Acquisition)的不足,張亞豐等人[26]提出了一種基于狀態(tài)的工控協(xié)議模糊測(cè)試方法,設(shè)計(jì)基于協(xié)議狀態(tài)機(jī)的測(cè)試序列生成算法PSTSGM(Protocol State based Test Sequences Generating Method),提出了基于心跳的異常監(jiān)測(cè)與定位方法HFDLM(Heartbeat based Faults Detection and Location Method),設(shè)計(jì)并實(shí)現(xiàn)了原型系統(tǒng)SCADA-Fuzz,在此基礎(chǔ)上對(duì)實(shí)際電力SCADA系統(tǒng)進(jìn)行了測(cè)試,得到了良好的實(shí)驗(yàn)效果。為提高模糊測(cè)試用例的覆蓋率和模糊測(cè)試效率,針對(duì)工控協(xié)議制造報(bào)文規(guī)范MMS(Manufacturing Message Specification)的模糊測(cè)試,Kim等人[27]采用對(duì)數(shù)據(jù)相關(guān)信息進(jìn)行分類的方法引導(dǎo)測(cè)試用例生成。Li等人[28]引入遺傳算法并設(shè)計(jì)了其適應(yīng)度函數(shù)來(lái)生成測(cè)試用例。Wang等人[29]采用靜態(tài)分析、動(dòng)態(tài)監(jiān)測(cè)和符號(hào)執(zhí)行等策略,選擇出安全性更強(qiáng)的種子對(duì)測(cè)試對(duì)象進(jìn)行定向模糊測(cè)試,設(shè)計(jì)并實(shí)現(xiàn)了SeededFuzz模型。李佳莉等人[30]提出了根據(jù)狀態(tài)關(guān)系構(gòu)造協(xié)議狀態(tài)圖,并基于協(xié)議狀態(tài)圖進(jìn)行深度遍歷選擇覆蓋率更高的測(cè)試用例的方法。
3.2.3 未知協(xié)議
隨著互聯(lián)網(wǎng)技術(shù)的不斷進(jìn)步,大量未知的、私有的通信協(xié)議廣泛應(yīng)用在不同領(lǐng)域。針對(duì)未知協(xié)議的復(fù)雜多樣且安全性較差的問(wèn)題,張蔚瑤等人[31]提出基于協(xié)議特征庫(kù)的未知協(xié)議的逆向分析方法,自動(dòng)學(xué)習(xí)協(xié)議結(jié)構(gòu)和語(yǔ)義特征,提出多維變異的測(cè)試數(shù)據(jù)自動(dòng)化生成方法生成測(cè)試數(shù)據(jù),設(shè)計(jì)并實(shí)現(xiàn)了自動(dòng)化模糊測(cè)試工具UPAFuzz。
除了上述應(yīng)用場(chǎng)景外,模糊測(cè)試還廣泛應(yīng)用在內(nèi)核安全測(cè)試[32]、機(jī)器人操作系統(tǒng)ROS(Robot Operating System)[33]、云計(jì)算[34]、嵌入式固件[35]、軟件定義網(wǎng)絡(luò)SDN(Software Defined Network)[36]和大數(shù)據(jù)[37]等方面。
針對(duì)圖形處理單元GPU(Graphics Processing Unit)內(nèi)核高度復(fù)雜,導(dǎo)致模糊測(cè)試編程實(shí)現(xiàn)困難的問(wèn)題,Peng等人[32]提出了一種基于突變的模糊和選擇性約束求解相結(jié)合的開放運(yùn)算語(yǔ)言O(shè)penCL(Open Computing Language)內(nèi)核測(cè)試生成技術(shù),以實(shí)現(xiàn)快速、有效和可擴(kuò)展。該方法隨機(jī)改變輸入內(nèi)核參數(shù)值,以增加分支覆蓋率。
針對(duì)ROS安全問(wèn)題,王穎等人[33]提出了一種差分模糊測(cè)試方法,對(duì)輸入文件進(jìn)行加工處理并基于生成策略生成測(cè)試用例,對(duì)測(cè)試結(jié)果中的不一致輸出進(jìn)行差異計(jì)算并評(píng)估,分別對(duì)ROS不同版本的功能包進(jìn)行測(cè)試。
針對(duì)云平臺(tái)基礎(chǔ)設(shè)施及服務(wù)IaaS(Infrastructure as a Service)層虛擬化機(jī)制安全問(wèn)題,結(jié)合已知虛擬化平臺(tái)相關(guān)漏洞的先驗(yàn)知識(shí),沙樂(lè)天[34]等人通過(guò)抽取并推演目標(biāo)數(shù)據(jù)集合,提出了一種基于灰度馬爾可夫模型的自動(dòng)化預(yù)測(cè)方法,并實(shí)現(xiàn)了原型系統(tǒng)VirtualFuzz。
針對(duì)嵌入式固件安全問(wèn)題,Gao等人[35]提出了一種將模糊測(cè)試與實(shí)時(shí)內(nèi)存檢查緊密結(jié)合的固件漏洞檢測(cè)工具EM-Fuzz。基于內(nèi)存插件,固件模糊化不僅可以通過(guò)傳統(tǒng)的分支覆蓋引導(dǎo)生成高質(zhì)量的種子來(lái)探索難以到達(dá)的區(qū)域,還可以通過(guò)記錄的內(nèi)存敏感操作來(lái)持續(xù)鍛煉易受攻擊的敏感區(qū)域。該工具還集成了現(xiàn)有模糊測(cè)試工具未實(shí)現(xiàn)的實(shí)時(shí)內(nèi)存檢查器來(lái)暴露內(nèi)存漏洞。
針對(duì)SDN安全漏洞檢測(cè),Shukla等人[36]提出了一種新的網(wǎng)絡(luò)驗(yàn)證方法PAZZ,通過(guò)定期檢測(cè)測(cè)試數(shù)據(jù)包報(bào)頭空間,將檢測(cè)結(jié)果與實(shí)際數(shù)據(jù)平面狀態(tài)進(jìn)行比較,以自動(dòng)檢測(cè)和定位數(shù)據(jù)平面中表現(xiàn)不一致的故障。
數(shù)據(jù)密集型可擴(kuò)展計(jì)算DISC(Data Intensive Scalable Computing)系統(tǒng)有助于解決大數(shù)據(jù)可擴(kuò)展性問(wèn)題,但由于數(shù)據(jù)具有不完整性和隨時(shí)間不斷發(fā)展的特點(diǎn),實(shí)現(xiàn)自動(dòng)化測(cè)試具有挑戰(zhàn)性。Zhang等人[37]提出了一種基于覆蓋導(dǎo)向的模糊測(cè)試工具BigFuzz?;趯?duì)DISC應(yīng)用程序錯(cuò)誤類型的深入研究,設(shè)計(jì)了模式感知的數(shù)據(jù)變異操作符。
模糊測(cè)試工具是以指定文件格式或網(wǎng)絡(luò)協(xié)議為測(cè)試目標(biāo),對(duì)支持目標(biāo)格式或協(xié)議的應(yīng)用程序進(jìn)行壓力測(cè)試,實(shí)現(xiàn)某一部分的功能;框架可描述為若干功能的整合體,是針對(duì)某個(gè)具體領(lǐng)域的通用解決方案,它允許使用可復(fù)用實(shí)用程序使其達(dá)到擴(kuò)展最大化;系統(tǒng)的概念是更高的抽象,包括各組成元素、各元素的業(yè)務(wù)邏輯及交互關(guān)系等。通過(guò)大范圍的調(diào)研,本節(jié)整理和總結(jié)近10年來(lái)模糊測(cè)試的發(fā)展近況,具體分為模糊測(cè)試工具、框架、系統(tǒng)及方法的匯總,并為方便讀者查閱,在此節(jié)給出直觀的表格。
漏洞檢測(cè)方法可分為靜態(tài)分析方法和動(dòng)態(tài)分析方法。利用靜態(tài)分析方法對(duì)測(cè)試目標(biāo)進(jìn)行信息收集,可以為模糊測(cè)試提供可行的變異方案。Intent是Android通信中的一種運(yùn)行綁定機(jī)制,用于連接程序運(yùn)行過(guò)程的2個(gè)組件,是組件間信息交流的常用載體。為解決Android應(yīng)用程序的安全問(wèn)題,F(xiàn)uzzerAPP[14]、ICCDroidFuzzer[15]都是通過(guò)提取靜態(tài)注冊(cè)的組件信息,生成具有高覆蓋率的Intent測(cè)試用例,同時(shí)監(jiān)測(cè)Android設(shè)備日志文件,實(shí)現(xiàn)應(yīng)用程序健壯性的自動(dòng)化測(cè)試,不同點(diǎn)在于前者采用空域、交叉值、隨機(jī)值的方法完成完全有效匹配、半有效匹配和完全不匹配Intent,而后者在測(cè)試用例生成策略上采用顯式Intent和隱式Intent構(gòu)造相結(jié)合的方法。
動(dòng)態(tài)分析方法是一種重要的動(dòng)態(tài)檢測(cè)方法,在測(cè)試過(guò)程中通過(guò)檢測(cè)測(cè)試目標(biāo)狀態(tài),從而檢測(cè)出是否存在漏洞的技術(shù)。針對(duì)瀏覽器特定測(cè)試模式漏洞挖掘測(cè)試成本高、開發(fā)周期長(zhǎng)以及生存時(shí)間短的問(wèn)題,Autofuzzy[20]結(jié)合靜態(tài)識(shí)別和動(dòng)態(tài)執(zhí)行的方法獲取瀏覽器模塊間的依賴關(guān)系,根據(jù)依賴關(guān)系形成測(cè)試模式。李偉明等人[38]結(jié)合靜態(tài)分析和動(dòng)態(tài)跟蹤技術(shù),提出了基于內(nèi)存模糊測(cè)試工具PyFuzzer。該工具首先通過(guò)對(duì)輸入數(shù)據(jù)中的危險(xiǎn)函數(shù)進(jìn)行優(yōu)先級(jí)劃分,然后基于動(dòng)態(tài)跟蹤技術(shù)對(duì)其進(jìn)行自動(dòng)化識(shí)別,最后采用基于快照恢復(fù)的方法對(duì)測(cè)試對(duì)象進(jìn)行內(nèi)存模糊測(cè)試?;趧?dòng)態(tài)符號(hào)執(zhí)行和動(dòng)態(tài)污點(diǎn)分析技術(shù),EWFT(Execution-based Whitebox Fuzzing Tool)[39]在動(dòng)態(tài)執(zhí)行目標(biāo)程序時(shí)進(jìn)行動(dòng)態(tài)指令插樁,得到準(zhǔn)確的動(dòng)態(tài)程序執(zhí)行信息,通過(guò)構(gòu)建程序執(zhí)行路徑之間的動(dòng)態(tài)結(jié)構(gòu)和各數(shù)據(jù)元素變量之間的依賴關(guān)系,對(duì)相關(guān)敏感操作進(jìn)行脆弱性分析?;谶z傳變異算法構(gòu)造測(cè)試用例,通過(guò)執(zhí)行測(cè)試用例時(shí)監(jiān)控執(zhí)行狀態(tài)和計(jì)算程序路徑權(quán)重,完成對(duì)目標(biāo)程序的模糊測(cè)試。EM-Fuzz[35]和MemLock[40]皆利用覆蓋率和內(nèi)存消耗信息來(lái)動(dòng)態(tài)指導(dǎo)模糊化過(guò)程。
種子生成策略是模糊測(cè)試整個(gè)過(guò)程的核心組成部分。針對(duì)以太網(wǎng)虛擬機(jī)EVM(Ethereum Virtual Machine)安全問(wèn)題,F(xiàn)u等人[41]提出了第一個(gè)使用差分模糊技術(shù)檢測(cè)EVM漏洞的工具EVMFuzzer。該工具的核心思想是通過(guò)不斷生成種子合約,并將其輸入到目標(biāo)EVM和基準(zhǔn)EVM,從而盡可能多地發(fā)現(xiàn)執(zhí)行結(jié)果之間的不一致,通過(guò)輸出交叉引用發(fā)現(xiàn)漏洞。為有效解決種子輸入選擇時(shí)代碼覆蓋率低的問(wèn)題,MutaGen[42]通過(guò)動(dòng)態(tài)地改變生成代碼的程序片段,利用輸入格式信息來(lái)引導(dǎo)生成具有高覆蓋率的測(cè)試用例,能夠達(dá)到被測(cè)程序的深層狀態(tài)。
逆向技術(shù)是一種技術(shù)重現(xiàn)技術(shù),它通過(guò)對(duì)目標(biāo)進(jìn)行逆向分析及研究,可推演出功能相近或者結(jié)構(gòu)相似的結(jié)果。近些年來(lái),逆向技術(shù)為模糊測(cè)試提供了可靠且有效的技術(shù)支持。例如針對(duì)Android私有組件保護(hù)問(wèn)題,KMDroid[13]結(jié)合模糊測(cè)試技術(shù)和逆向分析方法,可以有效挖掘出應(yīng)用通信過(guò)程中的安全漏洞。多文本格式RTF(Rich Text Format)是一種跨平臺(tái)文檔格式,RTF 數(shù)組溢出漏洞挖掘工具RAVD(RTF Array Vulnerability Detector)[43]通過(guò)逆向分析文件結(jié)構(gòu),明確文件結(jié)構(gòu)中特定數(shù)據(jù)塊與代碼塊的聯(lián)系,可提高漏洞的挖掘效率,實(shí)現(xiàn)定向模糊測(cè)試,可挖掘RTF數(shù)組溢出漏洞。RAVD的缺點(diǎn)是采用手工逆向分析,導(dǎo)致整體效率較低,且存在一定的錯(cuò)檢率。BigFuzz[37]與RAVD設(shè)計(jì)邏輯較為相似,通過(guò)抽象框架代碼和分析應(yīng)用程序邏輯,執(zhí)行源到源的自動(dòng)化轉(zhuǎn)換,以構(gòu)建一個(gè)適用于快速測(cè)試的等效數(shù)據(jù)密集型可擴(kuò)展計(jì)算DISC應(yīng)用程序,使DISC應(yīng)用程序的模糊測(cè)試變得易于處理。與隨機(jī)模糊測(cè)試相比,BigFuzz在測(cè)試時(shí)間、應(yīng)用程序代碼覆蓋率、檢測(cè)應(yīng)用程序錯(cuò)誤上均有較大提高。MutaGen[42]考慮靜態(tài)反匯編的不確定性,使用動(dòng)態(tài)切片的方式選擇變異的指令,以此提高代碼的覆蓋率。
此外,逆向技術(shù)和模糊測(cè)試技術(shù)被廣泛應(yīng)用于協(xié)議的逆向分析與漏洞檢測(cè)中。針對(duì)未知協(xié)議安全測(cè)試,張蔚瑤等人[31]提出了UPAFuzz工具,對(duì)輸入?yún)f(xié)議數(shù)據(jù)進(jìn)行分析和學(xué)習(xí),可以在無(wú)先驗(yàn)知識(shí)的情況下實(shí)現(xiàn)未知協(xié)議的分析和格式提取,基于協(xié)議特征形成描述協(xié)議特征的腳本程序,結(jié)合常見漏洞攻擊模式生成多維變異的測(cè)試數(shù)據(jù)。對(duì)比現(xiàn)有模糊測(cè)試工具,UPAFuzz具有效率更高、性能更優(yōu)的優(yōu)勢(shì)。SFSNP[22]根據(jù)協(xié)議交互建立帶有路徑標(biāo)記的擴(kuò)展有限狀態(tài)機(jī)模型,基于該模型獲得測(cè)試序列,對(duì)測(cè)試序列中的每個(gè)狀態(tài)轉(zhuǎn)換執(zhí)行半有效變異操作,得到協(xié)議模糊測(cè)試用例,并采用狀態(tài)轉(zhuǎn)移標(biāo)記算法來(lái)解決在生成協(xié)議模糊化序列時(shí)生成多余測(cè)試用例的問(wèn)題,SFSNP不僅能保證發(fā)現(xiàn)漏洞,還能減少測(cè)試用例數(shù)量,縮短測(cè)試執(zhí)行時(shí)間。
灰盒模糊測(cè)試中影響較為廣泛的研究成果是AFL[19],其工作原理是在程序編譯時(shí)進(jìn)行插樁,同時(shí)引入了進(jìn)化算法,模糊測(cè)試的效果得到了有效改善,但AFL測(cè)試覆蓋范圍較小,這嚴(yán)重限制了它發(fā)現(xiàn)漏洞的能力。Fairfuzz[44]是由Lemieux等人提出的基于AFL的改進(jìn)工具。該工具通過(guò)自動(dòng)識(shí)別由少數(shù)AFL生成的輸入(稀有分支)執(zhí)行的分支,結(jié)合針對(duì)稀有分支的變異掩碼創(chuàng)建算法,來(lái)增加AFL的覆蓋范圍。通過(guò)實(shí)驗(yàn)對(duì)比,F(xiàn)airFuzz可以更快的速度實(shí)現(xiàn)高分支覆蓋率。
上述各工具匯總及特點(diǎn)分析如表2所示。
近幾年,模糊測(cè)試框架不斷創(chuàng)新,為軟件測(cè)試提供更為高效的漏洞檢測(cè)技術(shù)。例如,目前APP測(cè)試任務(wù)大部分交給了工作人員,而人工提交的測(cè)試報(bào)告存在冗余度高、質(zhì)量參差不齊的問(wèn)題,測(cè)試報(bào)告模糊聚類框架TERFUR[45]通過(guò)將冗余和錯(cuò)誤的測(cè)試報(bào)告聚合到集群中來(lái)減少檢查的測(cè)試報(bào)告的數(shù)量。該框架包含過(guò)濾器、預(yù)處理器以及兩階段合并組件分別解決無(wú)效屏障、不均勻屏障和多漏洞屏障的問(wèn)題。針對(duì)高級(jí)惡意軟件通常采用各種規(guī)避技術(shù)來(lái)隱藏惡意行為問(wèn)題,DirectDroid[12]通過(guò)實(shí)現(xiàn)靜態(tài)分析器和動(dòng)態(tài)執(zhí)行器,分別完成待檢測(cè)的Android應(yīng)用程序包APK(Android application PacKage)信息收取和為靜態(tài)分析器反饋動(dòng)態(tài)信息,并處理了強(qiáng)制執(zhí)行導(dǎo)致的潛在程序崩潰漏洞。黃樺烽等人[46]建立的程序運(yùn)行時(shí)漏洞模型Weak-Tainted結(jié)合脆弱性和污點(diǎn)屬性對(duì)漏洞進(jìn)行定義,通過(guò)漏洞挖掘、分析及利用流程形成一體化的描述規(guī)范,采用基于頁(yè)面標(biāo)簽的動(dòng)態(tài)污點(diǎn)傳播分析方法和基于輸出特征反饋的輸入求解方法,有效解決了符號(hào)執(zhí)行無(wú)法求解的問(wèn)題。
Table 2 Development of fuzzing tools
為滿足通用型模糊測(cè)試器的低成本定制和高可擴(kuò)展性需求,楊梅芳等人[47]提出了一種可編程模糊測(cè)試框架Puzzer。首先提出一種基于模糊測(cè)試原語(yǔ)的模糊測(cè)試器編寫語(yǔ)言規(guī)范,根據(jù)該規(guī)范編寫制導(dǎo)程序,通過(guò)解析器解析,生成模糊測(cè)試抽象語(yǔ)法樹。通過(guò)結(jié)合遍歷語(yǔ)法樹和模糊測(cè)試原語(yǔ)庫(kù),模糊測(cè)試引擎可生成一個(gè)由Python語(yǔ)言編寫的模糊測(cè)試器。該框架可有效降低模糊測(cè)試器的開發(fā)成本與門檻,且生成的模糊器具有高擴(kuò)展性、高針對(duì)性的優(yōu)點(diǎn)。
覆蓋率是模糊測(cè)試評(píng)估中的一大指標(biāo),具體來(lái)說(shuō)覆蓋率指的是在執(zhí)行測(cè)試用例的過(guò)程中,測(cè)試對(duì)象被覆蓋到的分支占所有分支的比重。具有較高覆蓋率的測(cè)試用例往往能夠發(fā)現(xiàn)更多的漏洞?;诟采w率的模糊測(cè)試工具的典型代表是AFL[19],其核心思想是增加邊覆蓋率。除此之外,各種增加覆蓋率的模糊測(cè)試框架被相繼提出。DeepHunter[48]是一種覆蓋引導(dǎo)的模糊測(cè)試框架,采用一種結(jié)合基于多樣性的種子選擇策略,可提高代碼覆蓋率,解決基于深度神經(jīng)網(wǎng)絡(luò)的軟件安全問(wèn)題。Zhou等人[49]提出了一個(gè)覆蓋敏感的跟蹤和調(diào)度框架Zeror,利用自修改跟蹤機(jī)制和實(shí)時(shí)調(diào)度機(jī)制,為更有效地覆蓋收集提供零開銷檢測(cè)。
大多數(shù)基于覆蓋的模糊器平等地考慮程序的所有部分,并且過(guò)多地關(guān)注如何提高代碼覆蓋,這種方式是低效的。Li等人[50]設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)名為V-Fuzz的進(jìn)化模糊化框架。對(duì)于給定的一個(gè)二進(jìn)制程序,漏洞預(yù)測(cè)模型將給出一個(gè)關(guān)于易受攻擊程序片段的先驗(yàn)估計(jì),模糊器利用進(jìn)化算法結(jié)合易受攻擊預(yù)測(cè)結(jié)果引導(dǎo)生成更有可能到達(dá)易受攻擊位置的輸入用例,能夠在有限的時(shí)間內(nèi)高效快速地發(fā)現(xiàn)二進(jìn)制程序的錯(cuò)誤。
在協(xié)議測(cè)試方面,tls-diff-testing[23]實(shí)現(xiàn)了通用消息樹GMT概念的軟件框架,允許在不依賴協(xié)議本身的情況下完成TLS協(xié)議消息語(yǔ)法解析。
上述各模糊測(cè)試框架匯總?cè)绫?所示。
根據(jù)測(cè)試前對(duì)目標(biāo)對(duì)象內(nèi)部結(jié)構(gòu)的掌握情況,模糊測(cè)試方法可分為黑盒模糊測(cè)試、白盒模糊測(cè)試和灰盒模糊測(cè)試。很多模糊測(cè)試系統(tǒng)的提出都是基于這3種模糊測(cè)試方式之一進(jìn)行的相關(guān)改進(jìn),并應(yīng)用在不同領(lǐng)域中。例如,為提高Android驅(qū)動(dòng)漏洞挖掘能力,何遠(yuǎn)等人[16]提出了基于黑盒測(cè)試的遺傳算法,設(shè)計(jì)并實(shí)現(xiàn)了模糊測(cè)試系統(tǒng)Add-Fuzz,利用測(cè)試結(jié)果遞歸指導(dǎo)和改進(jìn)遺傳算法,生成高效的測(cè)試用例,根據(jù)已知漏洞特征優(yōu)化可變參數(shù)輸入,以提高模糊測(cè)試的命中率。ArtFuzz[51]采用基于白盒模糊測(cè)試的方法提高暴露通過(guò)緩沖區(qū)溢出進(jìn)行惡意輸入漏洞的概率,通過(guò)模糊測(cè)試結(jié)果和內(nèi)存布局信息指導(dǎo)生成測(cè)試用例。
Table 3 Development of fuzzing framework
模糊測(cè)試技術(shù)的改進(jìn)不僅僅體現(xiàn)在模糊測(cè)試用例的生成上,其他步驟的改進(jìn)也同樣影響測(cè)試的整體指標(biāo),例如在評(píng)估階段如何對(duì)目標(biāo)系統(tǒng)的異常行為進(jìn)行及時(shí)檢測(cè)與精確定位。為提高測(cè)試引擎對(duì)程序進(jìn)入空轉(zhuǎn)狀態(tài)時(shí)機(jī)判斷的能力,張興等人[18]提出了基于Bi-Gram模型以及統(tǒng)計(jì)分析的空轉(zhuǎn)狀態(tài)識(shí)別方法。Bi-Gram算法大量收集正常狀態(tài)下目標(biāo)程序的執(zhí)行跡,并采用特征提取方法將執(zhí)行跡轉(zhuǎn)變?yōu)樘卣餍蛄?。通過(guò)統(tǒng)計(jì)分析實(shí)現(xiàn)空轉(zhuǎn)特征序列的提取,將得到的空轉(zhuǎn)特征輸入實(shí)時(shí)檢測(cè)算法中,實(shí)現(xiàn)空轉(zhuǎn)時(shí)機(jī)實(shí)時(shí)檢測(cè)。PAZZ[36]采用比較控制平面和數(shù)據(jù)平面的轉(zhuǎn)發(fā)規(guī)則、拓?fù)浼奥窂降姆椒ㄟM(jìn)行異常檢測(cè)和定位。利用當(dāng)前控制信息主動(dòng)計(jì)算所有源到目標(biāo)的可達(dá)數(shù)據(jù)包,生成預(yù)期報(bào)告,并對(duì)路徑和規(guī)則進(jìn)行編碼;模糊器計(jì)算控制器和流量未覆蓋的數(shù)據(jù)包報(bào)頭空間,同時(shí)為模糊測(cè)試網(wǎng)絡(luò)生成活動(dòng)流量;數(shù)據(jù)平面組件對(duì)轉(zhuǎn)發(fā)規(guī)則的路徑和序列進(jìn)行編碼,以生成采樣的實(shí)際報(bào)告;通過(guò)比較預(yù)期報(bào)告和實(shí)際報(bào)告實(shí)現(xiàn)故障的檢測(cè)和定位,解決軟件定義網(wǎng)絡(luò)中發(fā)生實(shí)際數(shù)據(jù)平面狀態(tài)與預(yù)期控制平面狀態(tài)不一致時(shí)定位困難的問(wèn)題。
除此之外,還有一些針對(duì)特定領(lǐng)域所提出的應(yīng)用型原型系統(tǒng),例如SCADA-Fuzz[26]和VirtualFuzz[34]。
Peach[52]是以黑盒模糊測(cè)試方法為技術(shù)背景所誕生的測(cè)試工具,主要應(yīng)用于網(wǎng)絡(luò)、文件、物聯(lián)網(wǎng)模糊測(cè)試中。SCADA-Fuzz[26]系統(tǒng)是在Peach基礎(chǔ)上實(shí)現(xiàn)的工控協(xié)議模糊測(cè)試原型系統(tǒng),目的是對(duì)電力SCADA系統(tǒng)進(jìn)行模糊測(cè)試。以工控協(xié)議會(huì)話流量報(bào)文作為輸入,通過(guò)狀態(tài)機(jī)推斷模塊得到協(xié)議狀態(tài)機(jī),由腳本生成模塊編寫系統(tǒng)可識(shí)別的描述腳本,結(jié)合遷移信息和用例生成策略生成包含正常交互的模糊測(cè)試用例。SCADA-Fuzz雖然耗時(shí)較長(zhǎng),但可發(fā)現(xiàn)Peach未成功檢測(cè)出的拒絕服務(wù)漏洞。
VirtualFuzz[34]是面向IaaS層虛擬化平臺(tái)實(shí)現(xiàn)的原型系統(tǒng),該系統(tǒng)基于源碼靜態(tài)審計(jì)的方法得出虛擬化各模塊的函數(shù)關(guān)系,通過(guò)與靜態(tài)源碼對(duì)比,進(jìn)行動(dòng)態(tài)調(diào)試分析動(dòng)態(tài)函數(shù)調(diào)用路徑和執(zhí)行結(jié)果,以此確定函數(shù)執(zhí)行的具體信息?;跇?biāo)準(zhǔn)化的隨機(jī)種子生成方法生成測(cè)試用例,將其輸入到目標(biāo)系統(tǒng)后與基于灰度馬爾科夫鏈的預(yù)測(cè)模型進(jìn)行擬合,從而指導(dǎo)當(dāng)前虛擬化模塊下的模糊測(cè)試方向,可實(shí)現(xiàn)虛擬化漏洞高效挖掘與檢測(cè)。
上述各模糊測(cè)試系統(tǒng)匯總?cè)绫?所示。
應(yīng)用較為廣泛的程序分析技術(shù)包括符號(hào)執(zhí)行和污點(diǎn)分析。符號(hào)執(zhí)行通過(guò)推導(dǎo)一個(gè)表示程序執(zhí)行的邏輯等式,基于此等式可推斷出該程序在不同輸入上的行為。污點(diǎn)分析的技術(shù)思想在于觀測(cè)程序數(shù)據(jù)受到污染源的污染范圍,以此來(lái)跟蹤污染源和匯聚點(diǎn)之間的信息流。模糊測(cè)試技術(shù)結(jié)合程序分析技術(shù)的優(yōu)點(diǎn),在測(cè)試方法上有著重要?jiǎng)?chuàng)新。
結(jié)合符號(hào)執(zhí)行與模糊測(cè)試的優(yōu)點(diǎn),謝肖飛等人[53]提出了基于符號(hào)執(zhí)行與模糊測(cè)試的混合測(cè)試方法Afleer。該方法首先將給定程序進(jìn)行編譯,生成經(jīng)過(guò)插樁的可執(zhí)行文件,利用模糊測(cè)試和符號(hào)執(zhí)行技術(shù),不斷地生成具有高覆蓋率的測(cè)試用例并更新覆蓋信息,符號(hào)執(zhí)行負(fù)責(zé)遍歷程序執(zhí)行樹搜索未覆蓋的分支,經(jīng)過(guò)反復(fù)迭代,該方法可覆蓋更多的分支,從而發(fā)現(xiàn)更多的漏洞。為檢測(cè)二進(jìn)制文件中的漏洞,Chen等人[54]提出了彩色污點(diǎn)分析方法CTAM(Colorful Taint Analysis Method)來(lái)計(jì)算警戒條件,使用不同的污點(diǎn)顏色確定目標(biāo)程序中的輸入數(shù)據(jù)與變量之間的關(guān)系,與傳統(tǒng)污點(diǎn)分析方法相比,該方法可減少時(shí)間和空間開銷。為解決大型或路徑條件復(fù)雜的目標(biāo)程序模糊測(cè)試效率低下的問(wèn)題,李明磊等人[55]提出了一種針對(duì)復(fù)雜路徑條件下的漏洞檢測(cè)技術(shù)SymFuzz,結(jié)合導(dǎo)向式模糊測(cè)試技術(shù)與選擇符號(hào)執(zhí)行技術(shù),首先通過(guò)靜態(tài)分析定位漏洞函數(shù),利用導(dǎo)向式模糊測(cè)試技術(shù)探索程序路徑,以生成可達(dá)漏洞函數(shù)的測(cè)試用例。不足之處在于SymFuzz對(duì)靜態(tài)分析的依賴性較高。
Table 4 Development of fuzzing system
符號(hào)執(zhí)行和污點(diǎn)分析技術(shù)都有一個(gè)缺點(diǎn),由于程序的復(fù)雜性,其存在的多條分支可引起路徑爆炸的問(wèn)題,且路徑爆炸問(wèn)題會(huì)隨著程序復(fù)雜程度的增加變得更加嚴(yán)峻。對(duì)此,部分研究人員致力于解決該問(wèn)題。例如PWA(Path Weight Analysis)算法[39]是動(dòng)態(tài)檢測(cè)二進(jìn)制程序中針對(duì)程序執(zhí)行路徑空間所提出的覆蓋測(cè)試算法,通過(guò)分析目標(biāo)程序相關(guān)信息并結(jié)合程序執(zhí)行的路徑空間測(cè)試方法構(gòu)造測(cè)試用例集合,解決程序執(zhí)行路徑空間覆蓋率低、路徑狀態(tài)空間爆炸等問(wèn)題。
PSTSGM[26]通過(guò)遍歷協(xié)議狀態(tài)機(jī)有向圖,建立狀態(tài)引導(dǎo)報(bào)文序列庫(kù),根據(jù)狀態(tài)引導(dǎo)報(bào)文序列實(shí)現(xiàn)對(duì)目標(biāo)系統(tǒng)的狀態(tài)引導(dǎo),有助于被測(cè)設(shè)備觸發(fā)異常。HDLMF[26]則是基于心跳的異常監(jiān)測(cè)與定位方法,利用心跳探測(cè)和回溯定位來(lái)精確發(fā)現(xiàn)出現(xiàn)異常的目標(biāo)序列,可實(shí)現(xiàn)工控嵌入式設(shè)備利用傳統(tǒng)異常檢測(cè)方法進(jìn)行漏洞安全檢測(cè)。值得注意的是,與HDLMF方法核心類似,Autofuzzy[20]采用活動(dòng)性檢查、意外響應(yīng)和性能測(cè)量,在測(cè)試期間監(jiān)控遠(yuǎn)程設(shè)備,實(shí)現(xiàn)遠(yuǎn)程故障檢測(cè)策略;UPAFuzz[31]基于逆向分析技術(shù)可與被測(cè)設(shè)備實(shí)時(shí)交互,可主動(dòng)探測(cè)被測(cè)設(shè)備運(yùn)行狀態(tài)。
機(jī)器學(xué)習(xí)技術(shù)已經(jīng)成熟,部分研究人員已實(shí)現(xiàn)把機(jī)器學(xué)習(xí)更好地應(yīng)用在模糊測(cè)試上。例如Lean&fuzz[56]是Godefroid等人提出的使用樣本輸入和基于神經(jīng)網(wǎng)絡(luò)的統(tǒng)計(jì)機(jī)器學(xué)習(xí)技術(shù)自動(dòng)生成適合輸入語(yǔ)法的測(cè)試用例的方法。將輸入的PDF文件對(duì)象看作字符序列,基于循環(huán)神經(jīng)網(wǎng)絡(luò)的字符集語(yǔ)言模型學(xué)習(xí)PDF序列的生成模型,結(jié)合對(duì)象生成策略構(gòu)建新的PDF對(duì)象實(shí)例。該算法基于輸入概率分布智能地指導(dǎo)模糊輸入的位置,不僅可生成格式良好的對(duì)象實(shí)例,而且能夠增加PDF解析器的覆蓋率。
上述各模糊測(cè)試方法的特點(diǎn)匯總?cè)绫?所示。
傳統(tǒng)模糊測(cè)試用例存在覆蓋率低的問(wèn)題,相關(guān)科研工作者提出結(jié)合測(cè)試結(jié)果優(yōu)化生成策略和利用機(jī)器學(xué)習(xí)的方法改進(jìn)測(cè)試用例生成過(guò)程。除了前面提到的Lean&fuzz[56]外,還有一些其他重要的改進(jìn)算法被相繼提出。例如在并行模糊測(cè)試中,鄒燕燕等人[58]提出了一種基于變異策略感知的并行模糊測(cè)試方法,通過(guò)動(dòng)態(tài)調(diào)整變異策略和進(jìn)行多實(shí)例間有效樣本同步,減少測(cè)試實(shí)例的冗余度。為解決高結(jié)構(gòu)樣本識(shí)別問(wèn)題,張羿辰等人[59]提出了一種基于神經(jīng)網(wǎng)絡(luò)的敏感區(qū)域預(yù)測(cè)的模糊測(cè)試方法,利用變異算法生成與敏感區(qū)域相關(guān)聯(lián)的種子,通過(guò)循環(huán)增量學(xué)習(xí),不斷完善預(yù)測(cè)算法模型,可高效提升模糊測(cè)試效率和檢測(cè)深度。針對(duì)Web安全模糊測(cè)試,涂玲等人[60]提出了將測(cè)試模板規(guī)則與網(wǎng)站過(guò)濾協(xié)議變形相結(jié)合的測(cè)試用例生成方法,實(shí)現(xiàn)在不同過(guò)濾機(jī)制下生成最有效的測(cè)試用例,并且采用基于污染傳播策略的漏洞響應(yīng)數(shù)據(jù)分析方法解決漏洞響應(yīng)的有效驗(yàn)證問(wèn)題。劉淵等人[61]提出了一種基于遺傳算法的漏洞挖掘測(cè)試用例生成方法,解決多輸入測(cè)試用例難以生成和非線性問(wèn)題求解困難問(wèn)題。為解決Web應(yīng)用跨站腳本XSS(Cross-Site Scripting)安全性問(wèn)題,程誠(chéng)等人[62]提出了一種基于模糊測(cè)試和遺傳算法的XSS攻擊樣本優(yōu)化生成方法,以有效挖掘漏洞。
Table 5 Innovation of fuzzing testing methods
模糊測(cè)試技術(shù)從誕生發(fā)展至今,已逐步成為一種占據(jù)重要地位的安全測(cè)試技術(shù)。隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和應(yīng)用種類的增多,協(xié)議逆向的時(shí)效性要求越來(lái)越高,自動(dòng)化協(xié)議逆向分析技術(shù)成為人們追求的目標(biāo),將模糊測(cè)試應(yīng)用在協(xié)議逆向分析上是一重要方向。云計(jì)算技術(shù)因其可虛擬化和大規(guī)?;膬?yōu)勢(shì)不斷滿足人們的需要,這也對(duì)云計(jì)算環(huán)境安全提出新的挑戰(zhàn)。結(jié)合機(jī)器學(xué)習(xí)和云計(jì)算等新興技術(shù)的發(fā)展,模糊測(cè)試技術(shù)與之相融是大勢(shì)所趨。模糊測(cè)試擁有強(qiáng)大的漏洞檢查能力,同樣也為惡意攻擊者提供了便利,因此這也為模糊測(cè)試對(duì)抗技術(shù)帶來(lái)了巨大的挑戰(zhàn)。根據(jù)不同需求,大量的模糊測(cè)試工具應(yīng)運(yùn)而生,如若將各種工具進(jìn)行集成化處理,則可減少針對(duì)不同測(cè)試目標(biāo)的開發(fā)周期和實(shí)現(xiàn)成本。綜上所述,模糊測(cè)試技術(shù)未來(lái)的研究熱點(diǎn)可能包括以下幾個(gè)方面:
(1)應(yīng)用于協(xié)議逆向工程。
一個(gè)完整的協(xié)議逆向分析系統(tǒng)包括輸入預(yù)處理、協(xié)議格式提取和協(xié)議狀態(tài)機(jī)推斷3個(gè)階段。模糊測(cè)試技術(shù)作為軟件或系統(tǒng)漏洞檢測(cè)的先進(jìn)技術(shù)之一,可以為協(xié)議逆向系統(tǒng)提供技術(shù)支持。例如在狀態(tài)機(jī)推斷階段,模糊測(cè)試技術(shù)可以為協(xié)議狀態(tài)機(jī)生成測(cè)試序列,對(duì)其進(jìn)行漏洞檢測(cè)。在模糊測(cè)試技術(shù)應(yīng)用在協(xié)議逆向工程方面,李偉明等人[21]和張蔚瑤等人[31]進(jìn)行了相關(guān)研究。
(2)應(yīng)用于云平臺(tái)。
云計(jì)算具有規(guī)模大、可虛擬化、可靠性高、通用性強(qiáng)、可擴(kuò)展性高和價(jià)格低等優(yōu)點(diǎn),近幾年的發(fā)展和應(yīng)用格外迅速。云計(jì)算在為人們?nèi)粘I钐峁┍憷耐瑫r(shí),也帶來(lái)了較大的安全威脅。利用模糊測(cè)試技術(shù)對(duì)云平臺(tái)進(jìn)行安全防護(hù),可以說(shuō)是今后模糊測(cè)試技術(shù)的一個(gè)重要研究方向。關(guān)于模糊測(cè)試技術(shù)在云計(jì)算方面的研究,讀者可閱讀林闖等人[63]和沙樂(lè)天等人[34]發(fā)表的相關(guān)文章。
(3)與新興技術(shù)的結(jié)合。
近幾年來(lái),機(jī)器學(xué)習(xí)、云計(jì)算技術(shù)等新興技術(shù)迅速崛起,模糊測(cè)試技術(shù)也同樣可以針對(duì)不同的需要進(jìn)行合理且高效的利用。例如模糊測(cè)試技術(shù)想要利用機(jī)器學(xué)習(xí),就必須解決數(shù)據(jù)源的處理、樣本數(shù)據(jù)不平衡問(wèn)題以及模糊測(cè)試的執(zhí)行速度等一系列問(wèn)題。
(4)模糊測(cè)試對(duì)抗技術(shù)的研究。
隨著軟件和網(wǎng)絡(luò)安全意識(shí)的增強(qiáng),模糊測(cè)試作為一種高效的漏洞檢測(cè)技術(shù),深受研究人員的熱愛。事物都有其兩面性,模糊測(cè)試技術(shù)也不例外。模糊測(cè)試可以作為安全漏洞檢測(cè)技術(shù)存在,目的是安全防護(hù),正是由于其在該方面的突出表現(xiàn),惡意破壞者也同樣可以利用模糊測(cè)試進(jìn)行攻擊破壞。因此,模糊測(cè)試技術(shù)在發(fā)展的同時(shí)要統(tǒng)籌兼顧反模糊測(cè)試技術(shù)。無(wú)論是模糊測(cè)試對(duì)抗技術(shù)自身的研究,還是其帶給模糊測(cè)試技術(shù)的挑戰(zhàn),都是研究的重要方向。
(5)模糊測(cè)試工具的集成。
為針對(duì)不同需要,如今模糊測(cè)試工具的種類繁多,可以說(shuō)是各有利弊。例如著名的基于生成的模糊測(cè)試工具SPIKE[4]使用基于塊的方法定義輸入格式,雖然SPIKE在測(cè)試方面表現(xiàn)得非常成功,但對(duì)于不容易轉(zhuǎn)換為塊模式的輸入數(shù)據(jù)來(lái)說(shuō),利用SPIKE則不能取得良好的測(cè)試效果。在低成本與高擴(kuò)展性的基礎(chǔ)上實(shí)現(xiàn)模糊測(cè)試工具的集成,應(yīng)該是模糊測(cè)試今后的重要發(fā)展方向。
模糊測(cè)試是一種安全測(cè)試技術(shù),主要應(yīng)用于安全漏洞檢測(cè)。本文詳細(xì)介紹了模糊測(cè)試的基本概念、測(cè)試流程、技術(shù)方法以及應(yīng)用。特別地,本文總結(jié)了近10年來(lái)的優(yōu)質(zhì)論文,并對(duì)模糊測(cè)試工具、框架、系統(tǒng)及方法的創(chuàng)新發(fā)展進(jìn)行了分類和概要說(shuō)明,這有助于相關(guān)科研人員進(jìn)行查閱和總結(jié)。最后,本文討論了模糊測(cè)試技術(shù)的挑戰(zhàn)和發(fā)展方向,為了模糊測(cè)試技術(shù)的發(fā)展,鼓勵(lì)進(jìn)一步的研究和實(shí)踐以解決相關(guān)問(wèn)題。