翁嵩潿 賈鵬 周安民
幾乎所有需要通信的系統(tǒng)都離不開(kāi)協(xié)議的設(shè)計(jì),若協(xié)議棧存在漏洞,攻擊者可以通過(guò) Zero-Click 的方式達(dá)成拒絕服務(wù)攻擊、信息竊取甚至是遠(yuǎn)程代碼執(zhí)行.協(xié)議消息具有一定的結(jié)構(gòu)、語(yǔ)義、時(shí)序等要素,通用型模糊測(cè)試工具很難有效地對(duì)服務(wù)端進(jìn)行模糊測(cè)試.近年來(lái),有不少灰盒協(xié)議模糊測(cè)試的研究工作,其中比較具有代表性的工作是AFLNET,然而這些研究工作對(duì)服務(wù)端狀態(tài)機(jī)的覆蓋依賴于初始種子集的覆蓋面.本文首先分析了AFLNET無(wú)法完善處理二進(jìn)制格式協(xié)議的缺陷,并提出了BBFuzz,一款基于人工編寫(xiě)的數(shù)據(jù)模型進(jìn)行測(cè)試用例生成的協(xié)議模糊測(cè)試工具.BBFuzz能夠在僅有一個(gè)初始輸入的情況下,快速為種子隊(duì)列提供眾多感興趣的種子文件,并且這些種子文件能夠覆蓋到較為全面的服務(wù)端狀態(tài).同時(shí),BBFuzz能夠很好地支持兩種不同類型的協(xié)議的模糊測(cè)試,即人類可讀的ASCII格式和二進(jìn)制格式的協(xié)議.本文實(shí)現(xiàn)了BBFuzz對(duì)RTMP協(xié)議的支持,并在兩款知名的流媒體軟件的RTMP模塊上評(píng)估BBFuzz.評(píng)估結(jié)果表明,BBFuzz在map density和paths上的表現(xiàn)都優(yōu)于AFLNET.對(duì)于RTMP模塊,本文在ZLMediaKit和media-server上分別挖掘到一個(gè)真實(shí)的漏洞,并且這兩個(gè)漏洞都已經(jīng)被分配了HIGH級(jí)別的CVE編號(hào).
模糊測(cè)試; 協(xié)議模糊測(cè)試; 軟件測(cè)試; 協(xié)議安全
TP309.1 A 2024.013002
BBFuzz: A protocol fuzzing tool combined with input structure-aware
WENG Song-Wei, JIA Peng, ZHOU An-Min
(School of Cyber Science and Engineering, Sichuan University, Chengdu 610065, China)
Almost all of the systems which need communication are inseparable from protocol design. If the protocol stack is vulnerable, attackers can achieve denial of service attack, data theft and even remote code execution via Zero-Click. Protocol messages often have certain elements such as structure, semantics, and timing, making it challenging for general fuzzers to effectively perform fuzzing on the server. In recent years, there have been many researches on grey box protocol fuzzing, among which AFLNET is a representative one. However, the coverage of these researches on the server state machine depends on the coverage of the initial seed corpus. In this paper, we firstly analyze the defects of AFLNET in handling binary format protocols, and propose BBFuzz, a protocol fuzzer for test case generation based on manual data models. BBFuzz can quickly provide many interesting seed files for the seed queue, even with only one initial input, and these seed files can cover a more comprehensive server state. Meanwile, BBFuzz can well support fuzzing of two different types of protocols, namely human readable ASCII format and binary format protocols. The paper implemented BBFuzz's support for RTMP protocol, and evaluated BBFuzz on the RTMP module of two well-known streaming media software. Our evaluation results show that BBFuzz outperforms AFLNET on both map density and paths. For RTMP module, we dug two real vulnerabilities on ZLMediaKit and media-server respectively, and these two vulnerabilities have been assigned CVE number which is classified as HIGH.
Fuzzing; Protocol fuzzing; Software testing; Protocol security
1 引 言
軟件漏洞每年都會(huì)對(duì)政府、企業(yè)和研究機(jī)構(gòu)等組織帶來(lái)巨大的經(jīng)濟(jì)損失 ?[1] .若能在軟件測(cè)試階段,盡可能發(fā)現(xiàn)潛在的漏洞,就能大幅減少產(chǎn)品發(fā)布后由于漏洞帶來(lái)的損失.因此,軟件測(cè)試技術(shù)是不可或缺的.在軟件的組件之中,協(xié)議的安全至關(guān)重要.協(xié)議是通信雙方必須共同遵從的一組約定,如消息的結(jié)構(gòu)、含義、時(shí)序等.桌面計(jì)算機(jī)、移動(dòng)手機(jī)、物聯(lián)網(wǎng)設(shè)備、工業(yè)控制系統(tǒng)和航空航天系統(tǒng)等,幾乎所有需要通信的系統(tǒng)都離不開(kāi)協(xié)議的設(shè)計(jì)(本文中的協(xié)議一般指計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議).雖然協(xié)議的設(shè)計(jì)存在規(guī)范 ?[2] ,但是由于各個(gè)開(kāi)發(fā)商對(duì)于規(guī)范的解讀、編碼時(shí)的實(shí)現(xiàn)各不相同,因此服務(wù)端中可能存在各種各樣的安全問(wèn)題 ?[3,4] .并且由于服務(wù)端需要處理來(lái)自所有客戶端的請(qǐng)求(當(dāng)同處于一個(gè)網(wǎng)絡(luò)環(huán)境下時(shí)),因此,服務(wù)端永遠(yuǎn)都暴露在可受攻擊的環(huán)境下.若服務(wù)端的協(xié)議棧存在漏洞,攻擊者可以通過(guò) Zero-Click 的方式達(dá)成拒絕服務(wù)攻擊、信息竊取甚至是遠(yuǎn)程代碼執(zhí)行.
模糊測(cè)試是近幾年最為流行的軟件測(cè)試技術(shù)之一,在工業(yè)界和學(xué)術(shù)界被廣泛使用,并挖掘了大量的漏洞證明其有效性,例如afl ?[5] , afl++ ?[6] , winnie ?[7] , kafl ?[8] .如今仍有許多研究人員致力于使模糊測(cè)試更快、更高效,例如ijon ?[9] , redqueen ?[10] ,然而他們主要針對(duì)具有通用文件型輸入的測(cè)試目標(biāo).協(xié)議模糊測(cè)試的主要目標(biāo)為服務(wù)端,服務(wù)端往往具有狀態(tài)機(jī)來(lái)表示其不同的狀態(tài),需要客戶端通過(guò)消息序列來(lái)改變服務(wù)端的當(dāng)前狀態(tài),以執(zhí)行不同的處理邏輯.另一方面,在數(shù)據(jù)交互過(guò)程中,有時(shí)客戶端需要從服務(wù)端的響應(yīng)包中提取數(shù)據(jù),參與到后續(xù)的請(qǐng)求中.這兩個(gè)問(wèn)題,對(duì)于測(cè)試目標(biāo)為無(wú)狀態(tài)、接收通用文件型輸入的模糊測(cè)試工具而言,是很難處理的,這些模糊測(cè)試工具會(huì)產(chǎn)生大量在早期就被服務(wù)端丟棄的無(wú)效用例,并且難以推進(jìn)服務(wù)端的當(dāng)前狀態(tài).
研究人員提出了一些改進(jìn)方案,例如編寫(xiě)一個(gè) harness 來(lái)對(duì)測(cè)試目標(biāo)進(jìn)行指定狀態(tài)下的單元測(cè)試 ?[11] ,或者將消息序列拼接成一個(gè)文件作為輸入 ?[5] .然而,這些方法都存在一定的弊端.編寫(xiě) harness 進(jìn)行單元測(cè)試是使用通用模糊測(cè)試工具進(jìn)行協(xié)議模糊測(cè)試的有效選擇,然而一個(gè) harness 所能覆蓋的范圍十分有限.并且模糊測(cè)試的效果十分依賴于人工編寫(xiě)的 harness 的質(zhì)量.拼接消息序列并不是一個(gè)好的方案,因?yàn)閰f(xié)議的數(shù)據(jù)交互往往需要依賴時(shí)序.
Boofuzz ?[12] 仍然是如今比較流行的協(xié)議模糊測(cè)試工具.其基于人工提供的協(xié)議狀態(tài)模型,以及在某個(gè)狀態(tài)下所接受的數(shù)據(jù)語(yǔ)法來(lái)生成消息序列.盡管該工具的有效性非常依賴于開(kāi)發(fā)者對(duì)于協(xié)議規(guī)范的理解所構(gòu)造的狀態(tài)模型和數(shù)據(jù)模型,不過(guò)該工具不需要獲取測(cè)試目標(biāo)的任何信息,因此在進(jìn)行黑盒模糊測(cè)試時(shí),其仍然是一個(gè)不錯(cuò)的選擇.然而,當(dāng)能夠進(jìn)行灰盒模糊測(cè)試時(shí),即使產(chǎn)生的種子文件是感興趣的,例如發(fā)現(xiàn)了不在狀態(tài)模型中的狀態(tài),該工具也不會(huì)保存任何信息.AFLNET ?[13] 指出了這個(gè)問(wèn)題,并開(kāi)發(fā)了一款能夠自動(dòng)更新服務(wù)端狀態(tài)模型、通過(guò)狀態(tài)覆蓋和代碼覆蓋引導(dǎo)變異過(guò)程的模糊測(cè)試工具.之后,一些研究人員基于 AFLNET 開(kāi)發(fā)了更智能、更快速的模糊測(cè)試工具.
然而,這些工作均使用抓包的方式來(lái)獲取初始種子輸入.當(dāng)僅以一串消息序列作為模糊測(cè)試的初始輸入時(shí) ?[14] ,很難產(chǎn)生另一個(gè)有效的輸入.例如,模糊測(cè)試很難從一個(gè)具有特定含義的字符串變異到另一個(gè)具有特定含義的字符串.再比如,數(shù)據(jù)包是一個(gè)整體,里面各個(gè)字段相互聯(lián)系,模糊測(cè)試很難從一個(gè)符合語(yǔ)法語(yǔ)義的數(shù)據(jù)包變異到另一個(gè)符合語(yǔ)法語(yǔ)義的數(shù)據(jù)包.這個(gè)問(wèn)題有一個(gè)緩解措施,就是提供海量的、狀態(tài)覆蓋全面的數(shù)據(jù)集,對(duì)其進(jìn)行精簡(jiǎn)、裁剪后作為初始輸入,這也正是我們?cè)诠こ袒:郎y(cè)試時(shí)所做的事.當(dāng)擁有覆蓋面全的數(shù)據(jù)集后,變異過(guò)程有更大的概率產(chǎn)生新的感興趣的種子文件.然而,優(yōu)質(zhì)的數(shù)據(jù)集并不容易獲得.另一方面,即使我們擁有了海量的數(shù)據(jù)集,我們也不能確保它的狀態(tài)覆蓋面是全面的,因?yàn)樵趨f(xié)議規(guī)范中,有一部分,甚至是很大一部分的功能設(shè)計(jì)并不會(huì)在通常的通信過(guò)程中使用,而這一部分規(guī)范的具體實(shí)現(xiàn)往往可能造成漏洞.
我們提出了一款將基于數(shù)據(jù)模型生成測(cè)試用例,與通過(guò)字節(jié)級(jí)變異算法、消息級(jí)變異算法生成測(cè)試用例相結(jié)合的模糊測(cè)試工具BBFuzz來(lái)解決上述問(wèn)題.我們首先分析了對(duì)二進(jìn)制格式協(xié)議和人類可讀的ASCII格式協(xié)議進(jìn)行模糊測(cè)試時(shí)存在的差異,若使用同一種方案來(lái)對(duì)待這兩種不同形式的協(xié)議,正如AFLNET所做的,會(huì)對(duì)模糊測(cè)試的效果產(chǎn)生負(fù)面影響.BBFuzz區(qū)別對(duì)待二進(jìn)制格式協(xié)議和人類可讀的ASCII格式協(xié)議,以使模糊測(cè)試能夠更好地應(yīng)用在各種目標(biāo)協(xié)議上.同時(shí),BBFuzz為模糊測(cè)試的變異過(guò)程引入了基于數(shù)據(jù)模型生成測(cè)試用例的方案,以使模糊測(cè)試進(jìn)程能快速引入眾多感興趣的種子文件,即使僅以一串消息序列作為模糊測(cè)試的初始輸入,也能快速地覆蓋全面的狀態(tài).在模糊測(cè)試的后期,可以在一個(gè)合理的時(shí)機(jī)關(guān)閉基于數(shù)據(jù)模型生成測(cè)試用例的方案,以使用隨機(jī)性更強(qiáng)的字節(jié)級(jí)變異方案及消息級(jí)變異方案.我們使用二進(jìn)制格式流媒體協(xié)議 Real-Time Messaging Protocol(RTMP) 作為我們的測(cè)試目標(biāo),并在兩款知名的流媒體軟件上評(píng)估BBFuzz: SRS ?[15] 和ZLMediaKit ?[16] .我們?cè)赯LMediaKit和media-server ?[17] 上的RTMP模塊上分別挖掘到了一個(gè)被開(kāi)發(fā)者認(rèn)證的Zero-day漏洞,這兩個(gè)漏洞均已被開(kāi)發(fā)者修復(fù),并且分別被分配了CVE-2022-37237 和CVE-2022-40016的編號(hào).本文的實(shí)驗(yàn)結(jié)果表明,與AFLNET相比,BBFuzz在覆蓋率和種子隊(duì)列的數(shù)量上有更好的表現(xiàn).
本文的主要貢獻(xiàn)有:(1) 將基于人工數(shù)據(jù)模型生成測(cè)試用例的方案集成到具有字節(jié)級(jí)和消息級(jí)變異方式的模糊測(cè)試進(jìn)程中,并提出了BBFuzz,一種能夠在不具備良好構(gòu)建的種子集的情況下,快速為模糊測(cè)試進(jìn)程帶來(lái)覆蓋全面的、感興趣的種子集的方法;(2) 分析了二進(jìn)制格式協(xié)議和人類可讀的ASCII格式協(xié)議的差異性,并且BBFuzz針對(duì)二進(jìn)制格式協(xié)議進(jìn)行了額外的處理,通過(guò)識(shí)別變異后的種子文件的邊界來(lái)很好地處理各種各樣的協(xié)議;(3) 實(shí)驗(yàn)結(jié)果表明,本文提 出的BBFuzz在代碼覆蓋率和新增的種子數(shù)量上的表現(xiàn)都優(yōu)于AFLNET,且分別在兩款知名的流媒體軟件上挖掘到一個(gè)真實(shí)的漏洞,這兩個(gè)漏洞均已被開(kāi)發(fā)者認(rèn)證和修復(fù).
2 相關(guān)工作
當(dāng)前,已經(jīng)有許多被模糊測(cè)試社區(qū)廣泛認(rèn)可的灰盒模糊測(cè)試工具 ?[5,6] ,并且有許多研究人員致力于使灰盒模糊測(cè)試工具更快、更智能,例如ijon ?[9] , redqueen ?[10] , Nagy 等人的工作 ?[18] 和weizz ?[19] ,也有相關(guān)研究人員將灰盒模糊測(cè)試應(yīng)用于不同的平臺(tái)和目標(biāo),例如winnie ?[7] , kafl ?[8] , firmafl ?[20] ,然而,這些研究工作并不適用于我們的目標(biāo):協(xié)議.一方面,服務(wù)端往往具有狀態(tài)機(jī)模型,客戶端需要向服務(wù)端發(fā)送請(qǐng)求以推進(jìn)服務(wù)端的當(dāng)前狀態(tài),否則輸入會(huì)在早期就被服務(wù)端丟棄,而無(wú)法探測(cè)深層次的路徑.另一方面,協(xié)議往往具有一定的語(yǔ)法、語(yǔ)義規(guī)則,僅通過(guò)字節(jié)級(jí)的變異算法會(huì)產(chǎn)生大量無(wú)效的輸入.盡管使用這些通用文件型模糊測(cè)試工具仍然可對(duì)服務(wù)端進(jìn)行模糊測(cè)試,但都存在一定的弊端,我們?cè)诘?節(jié)引言中指出了這些方法的問(wèn)題.
近年來(lái),有許多專門(mén)為協(xié)議模糊測(cè)試開(kāi)發(fā)的工具,例如aflnet ?[13] , stateafl ?[21] , snapfuzz ?[22] 和snpsfuzzer ?[23] .也有一些針對(duì)于特定協(xié)議開(kāi)發(fā)的模糊測(cè)試工具,例如ICS3Fuzzer ?[24] 和TCP-Fuzz ?[25] .在這些方案中,比較具有代表性的工具是AFLNET.AFLNET將消息序列作為種子文件,通過(guò)解析服務(wù)端的響應(yīng)包來(lái)提取較為粗略的服務(wù)端狀態(tài)的變化,記錄種子文件中各個(gè)數(shù)據(jù)包導(dǎo)致的服務(wù)端狀態(tài)變化,通過(guò)這種方法,在客戶端構(gòu)建服務(wù)端的狀態(tài)機(jī)變化模型,同時(shí)將種子文件拆分為 M ??1 、 M ??2 、 M ??3 .在模糊測(cè)試時(shí),一次僅針對(duì)于一個(gè)服務(wù)端當(dāng)前狀態(tài)進(jìn)行測(cè)試,這種做法是非常有效的.AFLNET還在原有的字節(jié)級(jí)變異算法之上,添加了符合協(xié)議特性的消息級(jí)變異算法.基于AFLNET,Dongge Liu等人 ?[26] 使用了一種更為智能的狀態(tài)選擇算法.StateAFL ?[21] 使用插樁的方式來(lái)獲取更為全面的服務(wù)端狀態(tài)機(jī)表示.SnapFuzz ?[22] 使用快速同步通信、快照和重定向文件操作到定制的內(nèi)存文件系統(tǒng)上的方案來(lái)提高模糊測(cè)試的速度.SNPSFuzzer ?[23] 設(shè)計(jì)了一種消息鏈分析算法來(lái)探索更多、更深的協(xié)議狀態(tài).
不過(guò),由于協(xié)議具有一定的文法、語(yǔ)義,通過(guò)這些變異算法仍然難以覆蓋到全面的服務(wù)端狀態(tài).AFLSmart ?[27] 將Peach ?[28] 與模糊測(cè)試相結(jié)合,以使模糊測(cè)試工具對(duì)輸入的結(jié)構(gòu)感知.這種方案與我們的思路類似,但AFLSmart仍然無(wú)法完成我們工作,因?yàn)樗皇轻槍?duì)于協(xié)議設(shè)計(jì)的.
使用生成來(lái)進(jìn)行模糊測(cè)試已有許多表現(xiàn)得很好的方案,如nautilus ?[29] 、codealchemist ?[30] 、squirrel ?[31] .這些方案均采用將上下文無(wú)關(guān)語(yǔ)法轉(zhuǎn)化為AST(Abstract Syntax Tree),并在樹(shù)上執(zhí)行變異算法,然后將變異后的樹(shù)轉(zhuǎn)化為符合文法的測(cè)試用例的方法.然而,已有工作表明,協(xié)議數(shù)據(jù)包并不適用于用上下文無(wú)關(guān)語(yǔ)法表示 ?[32,33] ,對(duì)于協(xié)議數(shù)據(jù)包來(lái)說(shuō),使用數(shù)據(jù)模型來(lái)進(jìn)行描述是我們所知的合適的方案.
盡管Peach、Boofuzz仍然是當(dāng)前比較流行的基于生成的模糊測(cè)試方案,但是一方面他們是黑盒的,當(dāng)我們進(jìn)行灰盒模糊測(cè)試時(shí),盡管生成的數(shù)據(jù)是感興趣的,也不會(huì)讓它參與到后續(xù)的模糊測(cè)試之中;另一方面,它們的設(shè)計(jì)更多的是一個(gè)工具而不是一個(gè)接口,將它們?nèi)谌氲狡渌ぞ咧卸夹枰捎^的工作量.因此,我們使用FormatFuzzer ?[34] 作為我們的生成器,一款我們已知的最好的生成器接口.對(duì)于不同的模糊測(cè)試工具,可以方便地使用同一個(gè)由FormatFuzzer生成的so文件將生成器集成到自己的工作中.對(duì)于不同的格式,F(xiàn)ormatFuzzer僅需編寫(xiě)一份數(shù)據(jù)模型就可以同時(shí)完成解析和生成的工作,解析的結(jié)果可以參與到后續(xù)的模糊測(cè)試過(guò)程中.FormatFuzzer 的數(shù)據(jù)模型基于010 Template ?[35] 實(shí)現(xiàn),對(duì)于不同的格式,編寫(xiě)數(shù)據(jù)模型所做的人工工作并不會(huì)太多,例如,對(duì)于PNG格式,僅需使用493行代碼來(lái)實(shí)現(xiàn) ?[36] .
3 協(xié)議的分類與差異
就文法而言,協(xié)議大體上可以分為兩類:二進(jìn)制格式和人類可讀的ASCII格式 ?[32] .在AFLNET論文中,他們?cè)贔ile Transfer Protocol (FTP)和Real Time Streaming Protocol (RTSP)上進(jìn)行了評(píng)估實(shí)驗(yàn),這兩個(gè)協(xié)議都是人類可讀的ASCII格式的協(xié)議.盡管AFLNET實(shí)現(xiàn)了對(duì)于幾種二進(jìn)制格式協(xié)議的模糊測(cè)試方案 ?[37] ,如TLS、SSH,但我們可以看到AFLNET使用同一種思路來(lái)處理兩種不同類型協(xié)議的邊界,我們隨后將解釋這樣做的缺點(diǎn).在選定某種協(xié)議作為測(cè)試目標(biāo)后,這兩種不同類型的協(xié)議與模糊測(cè)試工作相關(guān)的差異就是其邊界識(shí)別的不同.
以RTSP協(xié)議為例,在人類可讀的ASCII格式中,存在諸如 “\\r\\n\\r\\n” 這樣的終結(jié)符,而在二進(jìn)制格式中,由字段來(lái)指示數(shù)據(jù)包的大小.以RTMP協(xié)議為例, “fmt + chunk id” 字段指示了頭部的大小, “body size” 字段指示了數(shù)據(jù)的長(zhǎng)度.對(duì)于符合文法、語(yǔ)義的數(shù)據(jù)包來(lái)說(shuō),要識(shí)別這兩種類型數(shù)據(jù)包的邊界都是容易且沒(méi)有爭(zhēng)議的.對(duì)于人類可讀的ASCII格式數(shù)據(jù)包,我們只需要一直讀取緩沖區(qū)直到遇到終結(jié)符 “\\r\\n\\r\\n”,在這之前的所有數(shù)據(jù)都可認(rèn)定為是同一個(gè)數(shù)據(jù)包.對(duì)于二進(jìn)制格式數(shù)據(jù)包,我們只需要讀取特定偏移的值,提取其語(yǔ)義后,就可以認(rèn)定同一個(gè)數(shù)據(jù)包的范圍,這也正是AFLNET所做的.然而,在模糊測(cè)試的過(guò)程中,我們不可避免地會(huì)發(fā)現(xiàn)很多不符合文法、語(yǔ)義的數(shù)據(jù)包,這也正是我們所期望的.當(dāng)產(chǎn)生這些數(shù)據(jù)包后,對(duì)于人類可讀的ASCII格式數(shù)據(jù)包,使用同樣的方式來(lái)識(shí)別邊界不會(huì)帶來(lái)消極影響,如表1所示.對(duì)于變異后的數(shù)據(jù),同樣可以很好地處理其邊界.在表1~表3中,每個(gè)表中內(nèi)容被分成三部分.第一、三部分為原來(lái)的region,第二部分為變異產(chǎn)生的新數(shù)據(jù),同樣的顏色在模糊測(cè)試過(guò)程中會(huì)被當(dāng)成同一個(gè)數(shù)據(jù)包.
如果我們使用同樣的方式來(lái)處理二進(jìn)制格式數(shù)據(jù)包,那么其邊界會(huì)被破壞掉,如表2所示.由于每次都從特定的偏移讀取數(shù)據(jù)并解析其語(yǔ)義,而模糊測(cè)試產(chǎn)生的隨機(jī)數(shù)據(jù)會(huì)參與到這個(gè)識(shí)別過(guò)程中,造成邊界的破壞.我們不需要一直為服務(wù)端提供符合文法的數(shù)據(jù),而應(yīng)該把解析過(guò)程交給服務(wù)端來(lái)做,以期望探測(cè)到更多的漏洞.我們可能更想要如表3所示的變異數(shù)據(jù).這種問(wèn)題,在resume時(shí)尤其明顯.AFLNET使用同一個(gè)函數(shù)來(lái)處理添加隊(duì)列、變異、重啟時(shí)的輸入.由于添加隊(duì)列時(shí)的初始輸入是符合文法、語(yǔ)義的,因此不會(huì)帶來(lái)任何問(wèn)題;且變異時(shí)帶來(lái)的影響正如我們分析表2時(shí)所描述的一致;而當(dāng)重啟時(shí),此時(shí)的輸入為變異后的數(shù)據(jù)包組合成的消息序列,AFLNET把消息序列分成 M ??1 、 M ??2 、 M ??3 , M ??1 將服務(wù)端狀態(tài)推進(jìn)到我們所要的測(cè)試的狀態(tài)上, M ??2 對(duì)當(dāng)前狀態(tài)執(zhí)行模糊測(cè)試, M ??3 為后續(xù)狀態(tài)的子消息序列.由于 M ??2 經(jīng)過(guò)變異,使用如表2所示的邊界識(shí)別方案會(huì)帶來(lái)邊界的破壞,這種破壞會(huì)從 M ??2 開(kāi)始,延續(xù)到 M ??3 中直到結(jié)束.因此,此時(shí)消息序列帶來(lái)的服務(wù)端狀態(tài)變化和resume前模糊測(cè)試產(chǎn)生的結(jié)果不一致.
二進(jìn)制格式數(shù)據(jù)包需要解析特定位置的語(yǔ)義來(lái)獲取數(shù)據(jù)包的大小,由于模糊測(cè)試產(chǎn)生的測(cè)試用例是不可預(yù)期的,若還是采用這種方案,正如AFLNET所做的,那么無(wú)論如何我們都無(wú)法很好地識(shí)別變異后的數(shù)據(jù)的邊界.我們采用另一種方案來(lái)表示變異后的數(shù)據(jù)包的邊界.在讀取初始輸入時(shí),我們同樣使用解析函數(shù)(extract)來(lái)識(shí)別數(shù)據(jù)包的邊界.因?yàn)?,此時(shí)的輸入可以認(rèn)為是符合文法、語(yǔ) 義的.在重啟模糊測(cè)試時(shí),對(duì)于目錄queue下的種子文件 A ,我們不使用解析函數(shù)來(lái)識(shí)別其數(shù)據(jù)包的邊界,而使用目錄replayable-queue下的記錄來(lái)識(shí)別數(shù)據(jù)包的邊界.因此,此時(shí)消息序列 A 中各個(gè)數(shù)據(jù)包的邊界和先前模糊測(cè)試時(shí)的一致.對(duì)于在測(cè)試過(guò)程中變異產(chǎn)生的 M ??2 ,我們將其視為一整個(gè)塊,而不調(diào)用解析函數(shù)(extract)將其拆分成多個(gè)數(shù)據(jù)包,通過(guò)這種方式,將解析操作轉(zhuǎn)移到了服務(wù)端執(zhí)行,以期望探測(cè)服務(wù)端預(yù)期外的解析導(dǎo)致的漏洞.
4 設(shè)計(jì)與實(shí)現(xiàn)
我們?yōu)槟:郎y(cè)試的變異過(guò)程引入了基于人工提供的數(shù)據(jù)模型生成測(cè)試用例的方案,其架構(gòu)如圖1所示.
我們使用FormatFuzzer ?[34] 作為BBFuzz的生成接口,我們?cè)诘?節(jié)中詳細(xì)解釋了我們選用該工具的原因.當(dāng)執(zhí)行模糊測(cè)試時(shí),以高概率選用變異方案,以相對(duì)較低的概率選用生成方案.選用生成方案的概率會(huì)隨著模糊測(cè)試的進(jìn)行不斷下降,并在一個(gè)合理的時(shí)間關(guān)閉生成方案.雖然基于數(shù)據(jù)模型生成測(cè)試用例也可以探測(cè)目標(biāo)潛在的漏洞,因?yàn)槌撕戏ǖ闹低猓善魍瑯訒?huì)隨機(jī)生成字段的值,但是在一定的生成次數(shù)之后,生成器的效果就會(huì)變得微乎其微.在模糊測(cè)試的后期,隨機(jī)變異(havoc)表現(xiàn)得更好,而在模糊測(cè)試的早期,生成器能快速地為模糊測(cè)試帶來(lái)許多感興趣的種子文件,并探測(cè)數(shù)據(jù)模型文法下的測(cè)試用例造成的漏洞.在本節(jié)中,我們將詳細(xì)描述生成器的實(shí)現(xiàn)細(xì)節(jié).
4.1 數(shù)據(jù)模型
BBFuzz使用FormatFuzzer作為生成接口,因此數(shù)據(jù)模型的描述方法與FormatFuzzer一致.協(xié)議中存在一些無(wú)法簡(jiǎn)單生成的字段,常見(jiàn)的如length、checksum、offset、compress、encode ?[33] ,對(duì)于其他容易生成的字段,我們僅需使用010Editor Templates Language ?[35] 來(lái)描述它.雖然010Editor Templates Language的本意是用于將二進(jìn)制文件解析成層次型的結(jié)構(gòu)(hierarchical structure),但是在FormatFuzzer中同樣的描述形式也可用于生成測(cè)試用例.對(duì)于無(wú)法簡(jiǎn)單生成的字段,F(xiàn)ormatFuzzer作出了相應(yīng)的擴(kuò)展,我們將在本節(jié)中簡(jiǎn)要地描述這些字段的描述方法.
(1) Length. Length字段直到數(shù)據(jù)生成前都是無(wú)法確定它的值的,因此一般采用先生成數(shù)據(jù)再返回來(lái)確定Length字段的值的方案,即使是在其他較簡(jiǎn)單的非協(xié)議數(shù)據(jù)生成的工具中,也能較為容易地描述該字段.表4展示了描述Length字段的方案,我們先記錄生成的數(shù)據(jù)塊的大小,隨后回到先前用于占位但不具有正確的值的Length字段的位置,將Length字段修改為正確的值.
(2) Constraints. 在協(xié)議數(shù)據(jù)包中,經(jīng)常會(huì)出現(xiàn)字段 y 依賴于字段 x 的情況.例如type字段的值決定了body的結(jié)構(gòu).當(dāng) x 在 y 之前生成時(shí),這種情況比較容易處理.我們只需要先生成 x ,再根據(jù) x 的值來(lái)決定 y 的生成即可.然而,當(dāng) x 在 y 之后生成時(shí),我們需要先固定 x 的值,再根據(jù) x 的值來(lái)決定 y 的生成.如表5所示,我們先用前瞻函數(shù)ReadByte( s )來(lái)決定 x 的值,一旦確定了 x 的值,在后續(xù)生成 x 時(shí)就會(huì)使用這個(gè)確定的值.由于 x 的值已經(jīng)提前確定了,那么就可以根據(jù) x 的值來(lái)決定 y 的生成.
(3) Chunk Ordering. 在某些文件結(jié)構(gòu)中,可能存在上下文敏感的塊順序.例如在PNG格式中,IHDR必須是文件的第一個(gè)塊,IEND必須是文件的最后一個(gè)塊,有些可選塊必須位于IDAT塊之前,有些可選塊則沒(méi)有限制.不過(guò),協(xié)議數(shù)據(jù)包通常不會(huì)存在上下文敏感的塊順序,更多時(shí)候,我們可能想從多種塊中隨機(jī)挑選一部分塊,并且允許重復(fù)塊的出現(xiàn)以探測(cè)潛在的漏洞,而不考慮塊之間的順序關(guān)系.
表6展示了從多種塊中隨機(jī)挑選一部分塊,并且允許重復(fù)塊的出現(xiàn)的方案.我們重復(fù)從塊列表中進(jìn)行挑選,并以給定的概率挑選退出標(biāo)識(shí).
(4) Compress and Encode. 在協(xié)議數(shù)據(jù)包中,對(duì)某些域進(jìn)行壓縮和編碼是很常見(jiàn)的.由于壓縮和編碼具有不同的算法,因此在BBFuzz中通過(guò)自定義的函數(shù)來(lái)處理壓縮和編碼,對(duì)于常見(jiàn)的算法則可以調(diào)用相應(yīng)的函數(shù)接口.
通過(guò)使用本節(jié)中所展示的數(shù)據(jù)模型的描述方法,我們可以很好地表示協(xié)議中的復(fù)雜字段,并生成符合文法的協(xié)議數(shù)據(jù)包.
4.2 決策種子池
我們使用智能變異(Smart Mutation)作為BBFuzz的生成器,因?yàn)樵摲桨冈贒utra等人 ?[34] 的實(shí)驗(yàn)中表現(xiàn)最好,我們將在下一節(jié)簡(jiǎn)要描述該算法.通過(guò)我們提供的數(shù)據(jù)模型,生成器能將數(shù)據(jù)包解析成Decision Seed,該過(guò)程類似于序列化,Decision Seed與數(shù)據(jù)包能夠相互轉(zhuǎn)化.在Smart Mutation中,會(huì)將各個(gè)測(cè)試用例的Decision Seed保存起來(lái),稱為決策種子池(Decision Pool),從池中隨機(jī)挑選Decision Seed(s)執(zhí)行智能變異算法,如抽象、替換、插入、刪除等,即可產(chǎn)生新的測(cè)試用例.
在協(xié)議模糊測(cè)試工具中 ?[13,21] ,我們使用消息序列(包含多個(gè)數(shù)據(jù)包)作為種子輸入,而對(duì)于生成器而言,同樣需要將種子文件解析成Decision Seed并放入池中,換句話說(shuō),生成器需要Decision Seed與種子文件的一一對(duì)應(yīng).然而此時(shí),種子隊(duì)列保存的內(nèi)容為消息序列,而生成器的對(duì)象為單個(gè)數(shù)據(jù)包,兩者產(chǎn)生了沖突.因此,我們?yōu)锽BFuzz創(chuàng)造了第二個(gè)隊(duì)列,專門(mén)用于保存由生成器生成的 M ??2 數(shù)據(jù)包,此時(shí)BBFuzz的種子隊(duì)列如圖2所示.
當(dāng)模糊測(cè)試產(chǎn)生感興趣的種子文件時(shí),會(huì)將種子文件,即消息序列添加到隊(duì)列中,這是模糊測(cè)試的主隊(duì)列.當(dāng)感興趣的種子文件的 M ??2 是由生成器產(chǎn)生時(shí),同時(shí)會(huì)將該 M ??2 添加到FORMAT QUEUE中, 并由生成器解析其相應(yīng)的Decision Seed,F(xiàn)ORMAT QUEUE及DECISION POOL供生成器使用,而QUEUE的含義與AFL保持一致.
在FormatFuzzer中,決策種子與隊(duì)列種子文件一一對(duì)應(yīng),這種形式表明,對(duì)于模糊測(cè)試變異產(chǎn)生的不符合文法的種子文件,也對(duì)其進(jìn)行了解析,并將其Decision Seed放入池中.然而,針對(duì)這些種子文件進(jìn)行解析的有效性(validity)往往很低.在BBFuzz中,我們僅對(duì)生成器產(chǎn)生的用例進(jìn)行解析而不解析變異產(chǎn)生的用例,因?yàn)槲覀兊闹饕康氖茄杆贋榉N子隊(duì)列提供許多感興趣的種子文件,以覆蓋眾多狀態(tài),而不是將生成器當(dāng)成主要的模糊測(cè)試工具.
4.3 生成算法
生成器使用如下幾種算法來(lái)產(chǎn)生新的測(cè)試用例:
(1)Smart Abstraction. 對(duì)于決策種子 A ,我們隨機(jī)選定 A 中的某一個(gè)塊 c 進(jìn)行替換,復(fù)制塊 c 之前的決策,并隨機(jī)產(chǎn)生一串decision bytes來(lái)替換塊 c 的決策,緊接著繼續(xù)復(fù)制塊c之后的決策.
(2) Smart Replacement. 對(duì)于決策種子 A 中的某一塊 c ??1 ,我們挑選另一個(gè)決策種子 B 中的某一塊 c ??2 ,復(fù)制 c ??1 之前的決策,并使用 c ??2 的決策替換 c ??1 的決策,緊接著繼續(xù)復(fù)制 c ??1 之后的決策.
(3) Smart Deletions/Insertions. 插入和刪除功能僅針對(duì)于可選塊進(jìn)行.生成器中可選塊的含義就像PNG格式中的bKGD塊,這些塊是可選的,但是可能需要符合一些位置的限制.在協(xié)議數(shù)據(jù)包中,由于通常不會(huì)存在上下文敏感的塊順序,因此我們通常不會(huì)采用這種描述形式.表6中所展示的描述形式也可以達(dá)到刪除/插入的效果.
5 實(shí)驗(yàn)設(shè)計(jì)與分析評(píng)估
我們將AFLNET作為我們實(shí)驗(yàn)的基準(zhǔn),并在兩款知名的開(kāi)源流媒體軟件,srs ?[15] 和ZLMediaKit ?[16] 上評(píng)估BBFuzz的有效性.我們選用RTMP協(xié)議 ?[38] 作為我們的測(cè)試目標(biāo),該協(xié)議在包含有直播功能的流媒體軟件中廣泛使用.我們首先擴(kuò)展AFLNET以使其支持RTMP協(xié)議,該協(xié)議在AFLNET中不被支持.其次,我們?yōu)樯善骶帉?xiě)了一份RTMP協(xié)議的數(shù)據(jù)描述模型,該數(shù)據(jù)模型被稱作Template.我們?yōu)锽BFuzz和AFLNET提供同一份初始輸入,該初始輸入通過(guò)抓包獲取 ?[14] ,啟動(dòng)服務(wù)器并推流后,使用vlc media player ?[39] 拉流以獲取初始消息序列.我們?yōu)锽BFuzz提供RTMP Template而不為AFLNET提供,因?yàn)锳FLNET不具備基于數(shù)據(jù)模型生成的功能.我們分別對(duì)srs和ZLMediaKit的RTMP模塊進(jìn)行3次模糊測(cè)試,取實(shí)驗(yàn)的平均值作為參考以緩解隨機(jī)性.在模糊測(cè)試過(guò)程中,我們同時(shí)對(duì)測(cè)試服務(wù)端進(jìn)行推流,以探索更多的服務(wù)端行為.我們?yōu)閟rs的模糊測(cè)試設(shè)置17的MAP_SIZE_POW2,為ZLMediaKit的模糊測(cè)試設(shè)置18的MAP_SIZE_POW2,因?yàn)閆LMediaKit的路徑多,而過(guò)高的map density會(huì)造成很多的路徑碰撞.我們?nèi)ap density和種子文件的數(shù)量作為指標(biāo)來(lái)評(píng)估兩款工具的表現(xiàn),并針對(duì)實(shí)驗(yàn)的結(jié)果進(jìn)行分析.我們的實(shí)驗(yàn)結(jié)果表明,BBFuzz在代碼覆蓋率和新增的種子數(shù)量上的表現(xiàn)都優(yōu)于AFLNET,并且分別在兩款知名的流媒體軟件上挖掘到一個(gè)真實(shí)的漏洞,這兩個(gè)漏洞均已被開(kāi)發(fā)者認(rèn)證和修復(fù).通過(guò)這種實(shí)驗(yàn)結(jié)果,可以驗(yàn)證BBFuzz能夠在不具備良好構(gòu)建的種子集的情況下,快速為模糊測(cè)試進(jìn)程帶來(lái)覆蓋全面的、感興趣的種子集.
5.1 代碼覆蓋率和新增的種子文件數(shù)量對(duì)比
我們?cè)诘谝淮蝔uzz_one執(zhí)行后記錄0 h時(shí)的狀態(tài),因此0 h具有初始的值.圖3展示了,BBFuzz在整個(gè)模糊測(cè)試過(guò)程中,都表現(xiàn)得比AFLNET好.AFLNET在10 h時(shí)探索的路徑與BBFuzz在4 h時(shí)探索的路徑相當(dāng).BBFuzz在模糊測(cè)試時(shí)的種子文件數(shù)量也一直比AFLNET多,這正如我們所期望的,因?yàn)锽BFuzz會(huì)為模糊測(cè)試提供許多的感興趣的、符合文法 的種子文件,而不僅僅是靠隨機(jī)變異來(lái)產(chǎn)生.然而, 在圖4中,我們可以看到, BBFuzz的種子文件數(shù)量一直和AFLNET的種子文件數(shù)量差不多.我們分析了這種結(jié)果:在對(duì)ZLMediaKit進(jìn)行模糊測(cè)試時(shí),其穩(wěn)定性并不高,這說(shuō)明了ZLMediaKit存在很多與測(cè)試模塊無(wú)關(guān)的代碼.盡管我們已經(jīng)在原生的 AFLNET 基礎(chǔ)上,添加了額外的同步機(jī)制,這也導(dǎo)致了我們實(shí)驗(yàn)時(shí)的速度比原生的AFLNET低,但是在一段時(shí)間的模糊測(cè)試后,其穩(wěn)定性必然會(huì)下降到一個(gè)趨近穩(wěn)定的值,這也說(shuō)明了這些代碼確實(shí)是和測(cè)試模塊無(wú)關(guān)的.而當(dāng)穩(wěn)定性并不高時(shí),模糊測(cè)試會(huì)將很多并不感興趣的種子文件當(dāng)成感興趣的種子文件添加到隊(duì)列里,造成種子隊(duì)列數(shù)量的虛高.從代碼覆蓋率的變化,我們可以看出這一點(diǎn),很顯然,差不多的種子文件數(shù)量,其得到的總的代碼覆蓋率卻有很大的差異,因?yàn)锽BFuzz的種子文件隊(duì)列中,具備更多的真正感興趣的種子文件.圖4展示了AFLNET在10 h時(shí)探索的路徑與BBFuzz在4 h時(shí)探索的路徑相當(dāng),而且在3 h以后,AFLNET所探索的路徑并沒(méi)有發(fā)生明顯的變化,因?yàn)閮H使用變異很難產(chǎn)生新的感興趣的種子文件.相比之下,BBFuzz所探索的路徑一直在穩(wěn)步增長(zhǎng).在模糊測(cè)試2~3 h時(shí),AFLNET的模糊測(cè)試有一個(gè)比較大的拐點(diǎn),這說(shuō)明對(duì)于ZLMediaKit來(lái)說(shuō),模糊測(cè)試可以比較穩(wěn)定地探測(cè)到3 h時(shí)所探測(cè)到的路徑.
5.2 漏洞的發(fā)現(xiàn)
我們分別在兩款知名的流媒體軟件中挖掘到一個(gè)真實(shí)的漏洞,包括ZLMediaKit和media-server ?[17] .在模糊測(cè)試ZLMediaKit時(shí),種子文件會(huì)使服務(wù)端設(shè)置一個(gè)過(guò)小的window size,這種行為會(huì)導(dǎo)致服務(wù)端發(fā)送sendAcknowledgement時(shí)無(wú)限遞歸,占滿??臻g,最后導(dǎo)致崩潰.該漏洞很容易通過(guò)生成器產(chǎn)生的數(shù)據(jù)探索到.在模糊測(cè)試media-server時(shí),種子文件在一個(gè)session內(nèi)向服務(wù)端發(fā)送兩次PLAY命令會(huì)引起服務(wù)端預(yù)期外的處理,最終導(dǎo)致UAF的發(fā)生.該漏洞可以通過(guò)生成器的重復(fù),或者消息級(jí)變異算法探索到,而對(duì)于不支持消息序列的模糊測(cè)試工具,則很難探測(cè)到該漏洞.
6 結(jié) 論
由于協(xié)議消息具有一定的結(jié)構(gòu)、語(yǔ)義、時(shí)序等要素,使用通用文件型模糊測(cè)試工具的改進(jìn)方案來(lái)進(jìn)行協(xié)議模糊測(cè)試仍然存在一些弊端,而現(xiàn)有的灰盒協(xié)議模糊測(cè)試研究工作對(duì)服務(wù)端狀態(tài)機(jī)的覆蓋依賴于初始種子集的覆蓋面.基于這些問(wèn)題,我們提出了BBFuzz,一款將基于人工編寫(xiě)的數(shù)據(jù)模型進(jìn)行測(cè)試用例生成與模糊測(cè)試進(jìn)程相結(jié)合的協(xié)議模糊測(cè)試工具.BBFuzz能夠在僅有一個(gè)初始輸入的情況下,快速為種子隊(duì)列提供眾多感興趣的種子文件,并且這些種子文件能夠覆蓋到較為全面的服務(wù)端狀態(tài).我們?cè)趦煽钪牧髅襟w軟件上評(píng)估BBFuzz.BBFuzz在map density和paths上的表現(xiàn)都優(yōu)于一款已經(jīng)存在的、具有代表性的協(xié)議模糊測(cè)試工具.BBFuzz挖掘到了兩個(gè)真實(shí)的漏洞.現(xiàn)如今,物聯(lián)網(wǎng)設(shè)備增長(zhǎng)迅速,其安全問(wèn)題也備受關(guān)注.我們注意到,在物聯(lián)網(wǎng)設(shè)備中協(xié)議被大量地使用,并且其中還有不少的私有協(xié)議.接下來(lái),我們計(jì)劃拓展BBFuzz以支持對(duì)物聯(lián)網(wǎng)設(shè)備協(xié)議安全的測(cè)試.
參考文獻(xiàn):
[1] ??Skyboxsecurity. ?Vulnerability and threat trends report 2022[EB/OL].[2022-12-22]. https://www.skyboxsecurity.com/wp-content/uploads/2022/04/skyboxsecurity-vulnerability-threat-trends-report-2022_041122.pdf.
[2] ?Schulzrinne, ?Columbia. {RFC2326}: Real time streaming protocol[EB/OL].[2022-12-22]. https://www.rfc-editor.org/rfc/rfc2326.html.
[3] ?Mitre. CVE-2019-7314[EB/OL].[2022-12-22]. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-7314.
[4] ?Mitre. ?CVE-2019-15232[EB/OL].[2022-12-22]. https://cve.mitre.org/cgi-bin/cvename.cgi?name= ??CVE-2019-15232.
[5] ?Michal Zalewski(lcamtuf).American fuzzy lop[EB/OL]. [2022-12-22]. https://github.com/google/ ?AFL.
[6] ?Fioraldi A, Maier D, Heuse M, ?et al . AFL++: combining incremental steps of fuzzing research[C]//Proceedings of the 14th USENIX Workshop on Offensive Technologies (WOOT 20). Online: USENIX Association, 2020: 10.
[7] ?Jung J, Tong S, Hu H, ?et al . Winnie: fuzzing windows applications with harness synthesis and fast cloning [C]//Proceedings of the 2021 Network and Distributed System Security Symposium (NDSS 2021). Online: ISOC, 2021: 24334.
[8] ?Schumilo ?S, Aschermann C, Gawlik R, ?et al. ?kAFL:hardware-assisted feedback fuzzing for OS kernels [C]//Proceedings of the 26th USENIX Security Symposium (USENIX Security 17). Vancouver, Canada: USENIX Association, 2017: 167.
[9] ?Aschermann C, Schumilo S, Abbasi A, ?et al . Ijon: exploring deep state spaces via fuzzing[C]//Proceedings of the 2020 IEEE Symposium on Security and Privacy (SP). San Francisco, USA: IEEE, 2020: 1597.
[10] ?Aschermann ?C, Schumilo S, Blazytko T, et al . REDQUEEN: fuzzing with input-to-state correspondence[C]//Proceedings of the 2019 Network and Distributed System Security Symposium (NDSS 2019). San Diego, USA: ISOC, 2019: 23371.
[11] LLVM organization. libFuzzer-a library for coverage-guided fuzz testing [EB/OL]. [2022-12-22]. https://llvm.org/docs/LibFuzzer.html.
[12] Jtpereyda. ?Boofuzz: network protocol fuzzing for humans[EB/OL].[2022-12-22]. https://github.com/jtpereyda/boofuzz.
[13] Pham V, Bohme M, Roychoudhury A. AFLNet: a greybox fuzzer for network protocols [C]//Proceedings of the 13th International Conference on Software Testing, Validation and Verification (ICST). Porto, Portugal: IEEE, 2020: 2159.
[14] Thuan P, Max M, Paul B, ?et al. ?Prepare message sequences as seed inputs[EB/OL]. [2022-12-22]. https://github.com/aflnet/aflnet#step-1-prepare-message-sequences-as-seed-inputs.
[15] Lin W, Hong X Z, Lin C D, ?et al . Simple realtime server[EB/OL]. [2022-12-22]. https://github.com/ossrs/srs.
[16] Xia C. ZLMediaKit[EB/OL]. [2022-12-22]. https://github.com/ZLMediaKit/ZLMediaKit.
[17] Chen I. Media-server [EB/OL]. [2022-12-22]. https://github.com/ireader/media-server.
[18] Nagy ?S, Hicks M. Full-speed fuzzing: reducing fuzzing overhead through coverage-guided tracing[C]//Proceedings of the 2019 IEEE Symposium on Security and Privacy (SP). San Francisco, USA: IEEE, 2019: 787.
[19] Fioraldi A, Daniele C, Coppa E. WEIZZ: automatic grey-box fuzzing for structured binary formats [C]//Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis. Online: ACM, 2020: 1.
[20] Zheng Y, Davanian A, Yin H, ?et al . FIRM-AFL:high-throughput greybox fuzzing of iot firmware via augmented process emulation [C]//Proceedings of the 28th USENIX Security Symposium (USENIX Security 19). Santa Clara, USA: USENIX Association, 2019: 1099.
[21] Natella R. StateAFL: greybox fuzzing for stateful network servers [J]. Empir Softw Eng, 2022: 27.
[22] Andronidis ?A, Cadar C. SnapFuzz: an efficient fuzzing framework for network applications[C]//Proceedings of the International Symposium on Software Testing and Analysis (ISSTA 2022). Online: ACM, 2022: 340.
[23] Li J, Li S, Sun G, ?et al . SNPSFuzzer: a fast greybox fuzzer for stateful network protocols using snapshots[J]. IEEE T Inf Foren Sec, 2022,17: 2673.
[24] Fang ?D, Song Z, Guan L, et al . ICS3Fuzzer: a framework for discovering protocol implementation bugs in ICS supervisory software by fuzzing [C]//Annual Computer Security Applications Conference 2021. Online: IEEE, 2021: 849.
[25] Zou Y, Bai J, Zhou J, ?et al . TCP-Fuzz: detecting memory and semantic bugs in TCP stacks with fuzzing [C]//2021 USENIX Annual Technical Conference. Online: USENIX Association, 2021: 489.
[26] Liu D, Pham V, Ernst G, ?et al. ?State selection algorithms and their impact on the performance of stateful network protocol fuzzing[C]//Proceedings of the International Conference on Software Analysis, Evolution and Reengineering (SANER). Honolulu, USA: IEEE, 2022: 720.
[27] Pham V, Marcel B, Santosa A, ?et al . Smart greybox fuzzing[J]. IEEE T Software Eng, 2019,47: 1980.
[28] Michael ?E. Peach fuzzing platform[EB/OL]. ?[2022-12-22]. https://gitlab.com/peachtech/peach- ??fuzzer-community.
[29] Aschermann C, Frassetto T, Holz T, ?et al . NAUTILUS: Fishing for deep bugs with grammars [C]//Proceedings of the 2019 Network and Distributed System Security Symposium (NDSS 2019). San Diego, USA: ISOC, 2019: 23412.
[31] Zhong R, Chen Y, Hu H, ?et al . Squirrel: testing database management systems with language validity and coverage feedback [C]//Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security. Online: ACM, 2020: 955.
[32] Pang R, Paxson V, Sommer R, ?et al. ?Binpac: a yacc for writing application protocol parsers[C]//Proceedings of the 6th ACM SIGCOMM Conference on Internet Measurement 2006. Rio de Janeriro, Brazil: ACM, 2006: 289.
[33] Bangert J, Zeldovich N. Nail: a practical tool for parsingand generating data formats[C]//Proceedings of the 11th USENIX Symposium on Operating Systems Design and Implementation (OSDI 14). Broomfield, USA: USENIX Association, 2014: 615.
[34] Dutra R, Gopinath R, Zeller A. FormatFuzzer: effective fuzzing of binary file formats[EB/OL]. [2023-10-29]. https://dl.acm.org/doi/10.1145/ ?3628157.
[35] Sweetscape ?Software. 010 Editor templates language reference [EB/OL]. [2022-12-22]. https://www.sweetscapecom/010editor/manual/TemplateVariables. ?htm.
[36] Dutra R, Gopinath R, Zeller A. PNG template example[EB/OL]. [2022-12-22]. https://github.com/uds-se/FormatFuzzer/blob/master/templates/png.bt.
[37] Pham ?V, Bohme M, Roychoudhury A. Aflnet header ?file[EB/OL]. [2022-12-22]. https://github.com/aflnet/aflnet/blob/master/aflnet.h.
[38] Hardeep P, Michael T. RTMP protocol specification[EB/OL]. [2022-12-22]. https://rtmp.veriskope.com/docs/spec/.
[39] Billy ?B, Sven H, Samuel H, ?et al . VLC media player[EB/OL]. [2022-12-22]. https://www.videolan.org/.
收稿日期: ?2023-01-05
基金項(xiàng)目: ?國(guó)家重點(diǎn)研發(fā)計(jì)劃項(xiàng)目(2021YFB3101803)
作者簡(jiǎn)介: ??翁嵩潿(1998-), 男, 碩士研究生, 研究方向?yàn)槎M(jìn)制安全.E-mail:wengsongwei2019@163.com
通訊作者: ?賈鵬. E-mail: pengjia@scu.edu.cn
四川大學(xué)學(xué)報(bào)(自然科學(xué)版)2024年1期