999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

BBFuzz:一種基于輸入結構感知的協議模糊測試方案

2024-04-29 11:33:39翁嵩潿賈鵬周安民
四川大學學報(自然科學版) 2024年1期

翁嵩潿 賈鵬 周安民

幾乎所有需要通信的系統都離不開協議的設計,若協議棧存在漏洞,攻擊者可以通過 Zero-Click 的方式達成拒絕服務攻擊、信息竊取甚至是遠程代碼執行.協議消息具有一定的結構、語義、時序等要素,通用型模糊測試工具很難有效地對服務端進行模糊測試.近年來,有不少灰盒協議模糊測試的研究工作,其中比較具有代表性的工作是AFLNET,然而這些研究工作對服務端狀態機的覆蓋依賴于初始種子集的覆蓋面.本文首先分析了AFLNET無法完善處理二進制格式協議的缺陷,并提出了BBFuzz,一款基于人工編寫的數據模型進行測試用例生成的協議模糊測試工具.BBFuzz能夠在僅有一個初始輸入的情況下,快速為種子隊列提供眾多感興趣的種子文件,并且這些種子文件能夠覆蓋到較為全面的服務端狀態.同時,BBFuzz能夠很好地支持兩種不同類型的協議的模糊測試,即人類可讀的ASCII格式和二進制格式的協議.本文實現了BBFuzz對RTMP協議的支持,并在兩款知名的流媒體軟件的RTMP模塊上評估BBFuzz.評估結果表明,BBFuzz在map density和paths上的表現都優于AFLNET.對于RTMP模塊,本文在ZLMediaKit和media-server上分別挖掘到一個真實的漏洞,并且這兩個漏洞都已經被分配了HIGH級別的CVE編號.

模糊測試; 協議模糊測試; 軟件測試; 協議安全

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 引 言

軟件漏洞每年都會對政府、企業和研究機構等組織帶來巨大的經濟損失 ?[1] .若能在軟件測試階段,盡可能發現潛在的漏洞,就能大幅減少產品發布后由于漏洞帶來的損失.因此,軟件測試技術是不可或缺的.在軟件的組件之中,協議的安全至關重要.協議是通信雙方必須共同遵從的一組約定,如消息的結構、含義、時序等.桌面計算機、移動手機、物聯網設備、工業控制系統和航空航天系統等,幾乎所有需要通信的系統都離不開協議的設計(本文中的協議一般指計算機網絡協議).雖然協議的設計存在規范 ?[2] ,但是由于各個開發商對于規范的解讀、編碼時的實現各不相同,因此服務端中可能存在各種各樣的安全問題 ?[3,4] .并且由于服務端需要處理來自所有客戶端的請求(當同處于一個網絡環境下時),因此,服務端永遠都暴露在可受攻擊的環境下.若服務端的協議棧存在漏洞,攻擊者可以通過 Zero-Click 的方式達成拒絕服務攻擊、信息竊取甚至是遠程代碼執行.

模糊測試是近幾年最為流行的軟件測試技術之一,在工業界和學術界被廣泛使用,并挖掘了大量的漏洞證明其有效性,例如afl ?[5] , afl++ ?[6] , winnie ?[7] , kafl ?[8] .如今仍有許多研究人員致力于使模糊測試更快、更高效,例如ijon ?[9] , redqueen ?[10] ,然而他們主要針對具有通用文件型輸入的測試目標.協議模糊測試的主要目標為服務端,服務端往往具有狀態機來表示其不同的狀態,需要客戶端通過消息序列來改變服務端的當前狀態,以執行不同的處理邏輯.另一方面,在數據交互過程中,有時客戶端需要從服務端的響應包中提取數據,參與到后續的請求中.這兩個問題,對于測試目標為無狀態、接收通用文件型輸入的模糊測試工具而言,是很難處理的,這些模糊測試工具會產生大量在早期就被服務端丟棄的無效用例,并且難以推進服務端的當前狀態.

研究人員提出了一些改進方案,例如編寫一個 harness 來對測試目標進行指定狀態下的單元測試 ?[11] ,或者將消息序列拼接成一個文件作為輸入 ?[5] .然而,這些方法都存在一定的弊端.編寫 harness 進行單元測試是使用通用模糊測試工具進行協議模糊測試的有效選擇,然而一個 harness 所能覆蓋的范圍十分有限.并且模糊測試的效果十分依賴于人工編寫的 harness 的質量.拼接消息序列并不是一個好的方案,因為協議的數據交互往往需要依賴時序.

Boofuzz ?[12] 仍然是如今比較流行的協議模糊測試工具.其基于人工提供的協議狀態模型,以及在某個狀態下所接受的數據語法來生成消息序列.盡管該工具的有效性非常依賴于開發者對于協議規范的理解所構造的狀態模型和數據模型,不過該工具不需要獲取測試目標的任何信息,因此在進行黑盒模糊測試時,其仍然是一個不錯的選擇.然而,當能夠進行灰盒模糊測試時,即使產生的種子文件是感興趣的,例如發現了不在狀態模型中的狀態,該工具也不會保存任何信息.AFLNET ?[13] 指出了這個問題,并開發了一款能夠自動更新服務端狀態模型、通過狀態覆蓋和代碼覆蓋引導變異過程的模糊測試工具.之后,一些研究人員基于 AFLNET 開發了更智能、更快速的模糊測試工具.

然而,這些工作均使用抓包的方式來獲取初始種子輸入.當僅以一串消息序列作為模糊測試的初始輸入時 ?[14] ,很難產生另一個有效的輸入.例如,模糊測試很難從一個具有特定含義的字符串變異到另一個具有特定含義的字符串.再比如,數據包是一個整體,里面各個字段相互聯系,模糊測試很難從一個符合語法語義的數據包變異到另一個符合語法語義的數據包.這個問題有一個緩解措施,就是提供海量的、狀態覆蓋全面的數據集,對其進行精簡、裁剪后作為初始輸入,這也正是我們在工程化模糊測試時所做的事.當擁有覆蓋面全的數據集后,變異過程有更大的概率產生新的感興趣的種子文件.然而,優質的數據集并不容易獲得.另一方面,即使我們擁有了海量的數據集,我們也不能確保它的狀態覆蓋面是全面的,因為在協議規范中,有一部分,甚至是很大一部分的功能設計并不會在通常的通信過程中使用,而這一部分規范的具體實現往往可能造成漏洞.

我們提出了一款將基于數據模型生成測試用例,與通過字節級變異算法、消息級變異算法生成測試用例相結合的模糊測試工具BBFuzz來解決上述問題.我們首先分析了對二進制格式協議和人類可讀的ASCII格式協議進行模糊測試時存在的差異,若使用同一種方案來對待這兩種不同形式的協議,正如AFLNET所做的,會對模糊測試的效果產生負面影響.BBFuzz區別對待二進制格式協議和人類可讀的ASCII格式協議,以使模糊測試能夠更好地應用在各種目標協議上.同時,BBFuzz為模糊測試的變異過程引入了基于數據模型生成測試用例的方案,以使模糊測試進程能快速引入眾多感興趣的種子文件,即使僅以一串消息序列作為模糊測試的初始輸入,也能快速地覆蓋全面的狀態.在模糊測試的后期,可以在一個合理的時機關閉基于數據模型生成測試用例的方案,以使用隨機性更強的字節級變異方案及消息級變異方案.我們使用二進制格式流媒體協議 Real-Time Messaging Protocol(RTMP) 作為我們的測試目標,并在兩款知名的流媒體軟件上評估BBFuzz: SRS ?[15] 和ZLMediaKit ?[16] .我們在ZLMediaKit和media-server ?[17] 上的RTMP模塊上分別挖掘到了一個被開發者認證的Zero-day漏洞,這兩個漏洞均已被開發者修復,并且分別被分配了CVE-2022-37237 和CVE-2022-40016的編號.本文的實驗結果表明,與AFLNET相比,BBFuzz在覆蓋率和種子隊列的數量上有更好的表現.

本文的主要貢獻有:(1) 將基于人工數據模型生成測試用例的方案集成到具有字節級和消息級變異方式的模糊測試進程中,并提出了BBFuzz,一種能夠在不具備良好構建的種子集的情況下,快速為模糊測試進程帶來覆蓋全面的、感興趣的種子集的方法;(2) 分析了二進制格式協議和人類可讀的ASCII格式協議的差異性,并且BBFuzz針對二進制格式協議進行了額外的處理,通過識別變異后的種子文件的邊界來很好地處理各種各樣的協議;(3) 實驗結果表明,本文提 出的BBFuzz在代碼覆蓋率和新增的種子數量上的表現都優于AFLNET,且分別在兩款知名的流媒體軟件上挖掘到一個真實的漏洞,這兩個漏洞均已被開發者認證和修復.

2 相關工作

當前,已經有許多被模糊測試社區廣泛認可的灰盒模糊測試工具 ?[5,6] ,并且有許多研究人員致力于使灰盒模糊測試工具更快、更智能,例如ijon ?[9] , redqueen ?[10] , Nagy 等人的工作 ?[18] 和weizz ?[19] ,也有相關研究人員將灰盒模糊測試應用于不同的平臺和目標,例如winnie ?[7] , kafl ?[8] , firmafl ?[20] ,然而,這些研究工作并不適用于我們的目標:協議.一方面,服務端往往具有狀態機模型,客戶端需要向服務端發送請求以推進服務端的當前狀態,否則輸入會在早期就被服務端丟棄,而無法探測深層次的路徑.另一方面,協議往往具有一定的語法、語義規則,僅通過字節級的變異算法會產生大量無效的輸入.盡管使用這些通用文件型模糊測試工具仍然可對服務端進行模糊測試,但都存在一定的弊端,我們在第1節引言中指出了這些方法的問題.

近年來,有許多專門為協議模糊測試開發的工具,例如aflnet ?[13] , stateafl ?[21] , snapfuzz ?[22] 和snpsfuzzer ?[23] .也有一些針對于特定協議開發的模糊測試工具,例如ICS3Fuzzer ?[24] 和TCP-Fuzz ?[25] .在這些方案中,比較具有代表性的工具是AFLNET.AFLNET將消息序列作為種子文件,通過解析服務端的響應包來提取較為粗略的服務端狀態的變化,記錄種子文件中各個數據包導致的服務端狀態變化,通過這種方法,在客戶端構建服務端的狀態機變化模型,同時將種子文件拆分為 M ??1 、 M ??2 、 M ??3 .在模糊測試時,一次僅針對于一個服務端當前狀態進行測試,這種做法是非常有效的.AFLNET還在原有的字節級變異算法之上,添加了符合協議特性的消息級變異算法.基于AFLNET,Dongge Liu等人 ?[26] 使用了一種更為智能的狀態選擇算法.StateAFL ?[21] 使用插樁的方式來獲取更為全面的服務端狀態機表示.SnapFuzz ?[22] 使用快速同步通信、快照和重定向文件操作到定制的內存文件系統上的方案來提高模糊測試的速度.SNPSFuzzer ?[23] 設計了一種消息鏈分析算法來探索更多、更深的協議狀態.

不過,由于協議具有一定的文法、語義,通過這些變異算法仍然難以覆蓋到全面的服務端狀態.AFLSmart ?[27] 將Peach ?[28] 與模糊測試相結合,以使模糊測試工具對輸入的結構感知.這種方案與我們的思路類似,但AFLSmart仍然無法完成我們工作,因為它不是針對于協議設計的.

使用生成來進行模糊測試已有許多表現得很好的方案,如nautilus ?[29] 、codealchemist ?[30] 、squirrel ?[31] .這些方案均采用將上下文無關語法轉化為AST(Abstract Syntax Tree),并在樹上執行變異算法,然后將變異后的樹轉化為符合文法的測試用例的方法.然而,已有工作表明,協議數據包并不適用于用上下文無關語法表示 ?[32,33] ,對于協議數據包來說,使用數據模型來進行描述是我們所知的合適的方案.

盡管Peach、Boofuzz仍然是當前比較流行的基于生成的模糊測試方案,但是一方面他們是黑盒的,當我們進行灰盒模糊測試時,盡管生成的數據是感興趣的,也不會讓它參與到后續的模糊測試之中;另一方面,它們的設計更多的是一個工具而不是一個接口,將它們融入到其它工具之中都需要可觀的工作量.因此,我們使用FormatFuzzer ?[34] 作為我們的生成器,一款我們已知的最好的生成器接口.對于不同的模糊測試工具,可以方便地使用同一個由FormatFuzzer生成的so文件將生成器集成到自己的工作中.對于不同的格式,FormatFuzzer僅需編寫一份數據模型就可以同時完成解析和生成的工作,解析的結果可以參與到后續的模糊測試過程中.FormatFuzzer 的數據模型基于010 Template ?[35] 實現,對于不同的格式,編寫數據模型所做的人工工作并不會太多,例如,對于PNG格式,僅需使用493行代碼來實現 ?[36] .

3 協議的分類與差異

就文法而言,協議大體上可以分為兩類:二進制格式和人類可讀的ASCII格式 ?[32] .在AFLNET論文中,他們在File Transfer Protocol (FTP)和Real Time Streaming Protocol (RTSP)上進行了評估實驗,這兩個協議都是人類可讀的ASCII格式的協議.盡管AFLNET實現了對于幾種二進制格式協議的模糊測試方案 ?[37] ,如TLS、SSH,但我們可以看到AFLNET使用同一種思路來處理兩種不同類型協議的邊界,我們隨后將解釋這樣做的缺點.在選定某種協議作為測試目標后,這兩種不同類型的協議與模糊測試工作相關的差異就是其邊界識別的不同.

以RTSP協議為例,在人類可讀的ASCII格式中,存在諸如 “\\r\\n\\r\\n” 這樣的終結符,而在二進制格式中,由字段來指示數據包的大小.以RTMP協議為例, “fmt + chunk id” 字段指示了頭部的大小, “body size” 字段指示了數據的長度.對于符合文法、語義的數據包來說,要識別這兩種類型數據包的邊界都是容易且沒有爭議的.對于人類可讀的ASCII格式數據包,我們只需要一直讀取緩沖區直到遇到終結符 “\\r\\n\\r\\n”,在這之前的所有數據都可認定為是同一個數據包.對于二進制格式數據包,我們只需要讀取特定偏移的值,提取其語義后,就可以認定同一個數據包的范圍,這也正是AFLNET所做的.然而,在模糊測試的過程中,我們不可避免地會發現很多不符合文法、語義的數據包,這也正是我們所期望的.當產生這些數據包后,對于人類可讀的ASCII格式數據包,使用同樣的方式來識別邊界不會帶來消極影響,如表1所示.對于變異后的數據,同樣可以很好地處理其邊界.在表1~表3中,每個表中內容被分成三部分.第一、三部分為原來的region,第二部分為變異產生的新數據,同樣的顏色在模糊測試過程中會被當成同一個數據包.

如果我們使用同樣的方式來處理二進制格式數據包,那么其邊界會被破壞掉,如表2所示.由于每次都從特定的偏移讀取數據并解析其語義,而模糊測試產生的隨機數據會參與到這個識別過程中,造成邊界的破壞.我們不需要一直為服務端提供符合文法的數據,而應該把解析過程交給服務端來做,以期望探測到更多的漏洞.我們可能更想要如表3所示的變異數據.這種問題,在resume時尤其明顯.AFLNET使用同一個函數來處理添加隊列、變異、重啟時的輸入.由于添加隊列時的初始輸入是符合文法、語義的,因此不會帶來任何問題;且變異時帶來的影響正如我們分析表2時所描述的一致;而當重啟時,此時的輸入為變異后的數據包組合成的消息序列,AFLNET把消息序列分成 M ??1 、 M ??2 、 M ??3 , M ??1 將服務端狀態推進到我們所要的測試的狀態上, M ??2 對當前狀態執行模糊測試, M ??3 為后續狀態的子消息序列.由于 M ??2 經過變異,使用如表2所示的邊界識別方案會帶來邊界的破壞,這種破壞會從 M ??2 開始,延續到 M ??3 中直到結束.因此,此時消息序列帶來的服務端狀態變化和resume前模糊測試產生的結果不一致.

二進制格式數據包需要解析特定位置的語義來獲取數據包的大小,由于模糊測試產生的測試用例是不可預期的,若還是采用這種方案,正如AFLNET所做的,那么無論如何我們都無法很好地識別變異后的數據的邊界.我們采用另一種方案來表示變異后的數據包的邊界.在讀取初始輸入時,我們同樣使用解析函數(extract)來識別數據包的邊界.因為,此時的輸入可以認為是符合文法、語 義的.在重啟模糊測試時,對于目錄queue下的種子文件 A ,我們不使用解析函數來識別其數據包的邊界,而使用目錄replayable-queue下的記錄來識別數據包的邊界.因此,此時消息序列 A 中各個數據包的邊界和先前模糊測試時的一致.對于在測試過程中變異產生的 M ??2 ,我們將其視為一整個塊,而不調用解析函數(extract)將其拆分成多個數據包,通過這種方式,將解析操作轉移到了服務端執行,以期望探測服務端預期外的解析導致的漏洞.

4 設計與實現

我們為模糊測試的變異過程引入了基于人工提供的數據模型生成測試用例的方案,其架構如圖1所示.

我們使用FormatFuzzer ?[34] 作為BBFuzz的生成接口,我們在第2節中詳細解釋了我們選用該工具的原因.當執行模糊測試時,以高概率選用變異方案,以相對較低的概率選用生成方案.選用生成方案的概率會隨著模糊測試的進行不斷下降,并在一個合理的時間關閉生成方案.雖然基于數據模型生成測試用例也可以探測目標潛在的漏洞,因為除了合法的值外,生成器同樣會隨機生成字段的值,但是在一定的生成次數之后,生成器的效果就會變得微乎其微.在模糊測試的后期,隨機變異(havoc)表現得更好,而在模糊測試的早期,生成器能快速地為模糊測試帶來許多感興趣的種子文件,并探測數據模型文法下的測試用例造成的漏洞.在本節中,我們將詳細描述生成器的實現細節.

4.1 數據模型

BBFuzz使用FormatFuzzer作為生成接口,因此數據模型的描述方法與FormatFuzzer一致.協議中存在一些無法簡單生成的字段,常見的如length、checksum、offset、compress、encode ?[33] ,對于其他容易生成的字段,我們僅需使用010Editor Templates Language ?[35] 來描述它.雖然010Editor Templates Language的本意是用于將二進制文件解析成層次型的結構(hierarchical structure),但是在FormatFuzzer中同樣的描述形式也可用于生成測試用例.對于無法簡單生成的字段,FormatFuzzer作出了相應的擴展,我們將在本節中簡要地描述這些字段的描述方法.

(1) Length. Length字段直到數據生成前都是無法確定它的值的,因此一般采用先生成數據再返回來確定Length字段的值的方案,即使是在其他較簡單的非協議數據生成的工具中,也能較為容易地描述該字段.表4展示了描述Length字段的方案,我們先記錄生成的數據塊的大小,隨后回到先前用于占位但不具有正確的值的Length字段的位置,將Length字段修改為正確的值.

(2) Constraints. 在協議數據包中,經常會出現字段 y 依賴于字段 x 的情況.例如type字段的值決定了body的結構.當 x 在 y 之前生成時,這種情況比較容易處理.我們只需要先生成 x ,再根據 x 的值來決定 y 的生成即可.然而,當 x 在 y 之后生成時,我們需要先固定 x 的值,再根據 x 的值來決定 y 的生成.如表5所示,我們先用前瞻函數ReadByte( s )來決定 x 的值,一旦確定了 x 的值,在后續生成 x 時就會使用這個確定的值.由于 x 的值已經提前確定了,那么就可以根據 x 的值來決定 y 的生成.

(3) Chunk Ordering. 在某些文件結構中,可能存在上下文敏感的塊順序.例如在PNG格式中,IHDR必須是文件的第一個塊,IEND必須是文件的最后一個塊,有些可選塊必須位于IDAT塊之前,有些可選塊則沒有限制.不過,協議數據包通常不會存在上下文敏感的塊順序,更多時候,我們可能想從多種塊中隨機挑選一部分塊,并且允許重復塊的出現以探測潛在的漏洞,而不考慮塊之間的順序關系.

表6展示了從多種塊中隨機挑選一部分塊,并且允許重復塊的出現的方案.我們重復從塊列表中進行挑選,并以給定的概率挑選退出標識.

(4) Compress and Encode. 在協議數據包中,對某些域進行壓縮和編碼是很常見的.由于壓縮和編碼具有不同的算法,因此在BBFuzz中通過自定義的函數來處理壓縮和編碼,對于常見的算法則可以調用相應的函數接口.

通過使用本節中所展示的數據模型的描述方法,我們可以很好地表示協議中的復雜字段,并生成符合文法的協議數據包.

4.2 決策種子池

我們使用智能變異(Smart Mutation)作為BBFuzz的生成器,因為該方案在Dutra等人 ?[34] 的實驗中表現最好,我們將在下一節簡要描述該算法.通過我們提供的數據模型,生成器能將數據包解析成Decision Seed,該過程類似于序列化,Decision Seed與數據包能夠相互轉化.在Smart Mutation中,會將各個測試用例的Decision Seed保存起來,稱為決策種子池(Decision Pool),從池中隨機挑選Decision Seed(s)執行智能變異算法,如抽象、替換、插入、刪除等,即可產生新的測試用例.

在協議模糊測試工具中 ?[13,21] ,我們使用消息序列(包含多個數據包)作為種子輸入,而對于生成器而言,同樣需要將種子文件解析成Decision Seed并放入池中,換句話說,生成器需要Decision Seed與種子文件的一一對應.然而此時,種子隊列保存的內容為消息序列,而生成器的對象為單個數據包,兩者產生了沖突.因此,我們為BBFuzz創造了第二個隊列,專門用于保存由生成器生成的 M ??2 數據包,此時BBFuzz的種子隊列如圖2所示.

當模糊測試產生感興趣的種子文件時,會將種子文件,即消息序列添加到隊列中,這是模糊測試的主隊列.當感興趣的種子文件的 M ??2 是由生成器產生時,同時會將該 M ??2 添加到FORMAT QUEUE中, 并由生成器解析其相應的Decision Seed,FORMAT QUEUE及DECISION POOL供生成器使用,而QUEUE的含義與AFL保持一致.

在FormatFuzzer中,決策種子與隊列種子文件一一對應,這種形式表明,對于模糊測試變異產生的不符合文法的種子文件,也對其進行了解析,并將其Decision Seed放入池中.然而,針對這些種子文件進行解析的有效性(validity)往往很低.在BBFuzz中,我們僅對生成器產生的用例進行解析而不解析變異產生的用例,因為我們的主要目的是迅速為種子隊列提供許多感興趣的種子文件,以覆蓋眾多狀態,而不是將生成器當成主要的模糊測試工具.

4.3 生成算法

生成器使用如下幾種算法來產生新的測試用例:

(1)Smart Abstraction. 對于決策種子 A ,我們隨機選定 A 中的某一個塊 c 進行替換,復制塊 c 之前的決策,并隨機產生一串decision bytes來替換塊 c 的決策,緊接著繼續復制塊c之后的決策.

(2) Smart Replacement. 對于決策種子 A 中的某一塊 c ??1 ,我們挑選另一個決策種子 B 中的某一塊 c ??2 ,復制 c ??1 之前的決策,并使用 c ??2 的決策替換 c ??1 的決策,緊接著繼續復制 c ??1 之后的決策.

(3) Smart Deletions/Insertions. 插入和刪除功能僅針對于可選塊進行.生成器中可選塊的含義就像PNG格式中的bKGD塊,這些塊是可選的,但是可能需要符合一些位置的限制.在協議數據包中,由于通常不會存在上下文敏感的塊順序,因此我們通常不會采用這種描述形式.表6中所展示的描述形式也可以達到刪除/插入的效果.

5 實驗設計與分析評估

我們將AFLNET作為我們實驗的基準,并在兩款知名的開源流媒體軟件,srs ?[15] 和ZLMediaKit ?[16] 上評估BBFuzz的有效性.我們選用RTMP協議 ?[38] 作為我們的測試目標,該協議在包含有直播功能的流媒體軟件中廣泛使用.我們首先擴展AFLNET以使其支持RTMP協議,該協議在AFLNET中不被支持.其次,我們為生成器編寫了一份RTMP協議的數據描述模型,該數據模型被稱作Template.我們為BBFuzz和AFLNET提供同一份初始輸入,該初始輸入通過抓包獲取 ?[14] ,啟動服務器并推流后,使用vlc media player ?[39] 拉流以獲取初始消息序列.我們為BBFuzz提供RTMP Template而不為AFLNET提供,因為AFLNET不具備基于數據模型生成的功能.我們分別對srs和ZLMediaKit的RTMP模塊進行3次模糊測試,取實驗的平均值作為參考以緩解隨機性.在模糊測試過程中,我們同時對測試服務端進行推流,以探索更多的服務端行為.我們為srs的模糊測試設置17的MAP_SIZE_POW2,為ZLMediaKit的模糊測試設置18的MAP_SIZE_POW2,因為ZLMediaKit的路徑多,而過高的map density會造成很多的路徑碰撞.我們取map density和種子文件的數量作為指標來評估兩款工具的表現,并針對實驗的結果進行分析.我們的實驗結果表明,BBFuzz在代碼覆蓋率和新增的種子數量上的表現都優于AFLNET,并且分別在兩款知名的流媒體軟件上挖掘到一個真實的漏洞,這兩個漏洞均已被開發者認證和修復.通過這種實驗結果,可以驗證BBFuzz能夠在不具備良好構建的種子集的情況下,快速為模糊測試進程帶來覆蓋全面的、感興趣的種子集.

5.1 代碼覆蓋率和新增的種子文件數量對比

我們在第一次fuzz_one執行后記錄0 h時的狀態,因此0 h具有初始的值.圖3展示了,BBFuzz在整個模糊測試過程中,都表現得比AFLNET好.AFLNET在10 h時探索的路徑與BBFuzz在4 h時探索的路徑相當.BBFuzz在模糊測試時的種子文件數量也一直比AFLNET多,這正如我們所期望的,因為BBFuzz會為模糊測試提供許多的感興趣的、符合文法 的種子文件,而不僅僅是靠隨機變異來產生.然而, 在圖4中,我們可以看到, BBFuzz的種子文件數量一直和AFLNET的種子文件數量差不多.我們分析了這種結果:在對ZLMediaKit進行模糊測試時,其穩定性并不高,這說明了ZLMediaKit存在很多與測試模塊無關的代碼.盡管我們已經在原生的 AFLNET 基礎上,添加了額外的同步機制,這也導致了我們實驗時的速度比原生的AFLNET低,但是在一段時間的模糊測試后,其穩定性必然會下降到一個趨近穩定的值,這也說明了這些代碼確實是和測試模塊無關的.而當穩定性并不高時,模糊測試會將很多并不感興趣的種子文件當成感興趣的種子文件添加到隊列里,造成種子隊列數量的虛高.從代碼覆蓋率的變化,我們可以看出這一點,很顯然,差不多的種子文件數量,其得到的總的代碼覆蓋率卻有很大的差異,因為BBFuzz的種子文件隊列中,具備更多的真正感興趣的種子文件.圖4展示了AFLNET在10 h時探索的路徑與BBFuzz在4 h時探索的路徑相當,而且在3 h以后,AFLNET所探索的路徑并沒有發生明顯的變化,因為僅使用變異很難產生新的感興趣的種子文件.相比之下,BBFuzz所探索的路徑一直在穩步增長.在模糊測試2~3 h時,AFLNET的模糊測試有一個比較大的拐點,這說明對于ZLMediaKit來說,模糊測試可以比較穩定地探測到3 h時所探測到的路徑.

5.2 漏洞的發現

我們分別在兩款知名的流媒體軟件中挖掘到一個真實的漏洞,包括ZLMediaKit和media-server ?[17] .在模糊測試ZLMediaKit時,種子文件會使服務端設置一個過小的window size,這種行為會導致服務端發送sendAcknowledgement時無限遞歸,占滿棧空間,最后導致崩潰.該漏洞很容易通過生成器產生的數據探索到.在模糊測試media-server時,種子文件在一個session內向服務端發送兩次PLAY命令會引起服務端預期外的處理,最終導致UAF的發生.該漏洞可以通過生成器的重復,或者消息級變異算法探索到,而對于不支持消息序列的模糊測試工具,則很難探測到該漏洞.

6 結 論

由于協議消息具有一定的結構、語義、時序等要素,使用通用文件型模糊測試工具的改進方案來進行協議模糊測試仍然存在一些弊端,而現有的灰盒協議模糊測試研究工作對服務端狀態機的覆蓋依賴于初始種子集的覆蓋面.基于這些問題,我們提出了BBFuzz,一款將基于人工編寫的數據模型進行測試用例生成與模糊測試進程相結合的協議模糊測試工具.BBFuzz能夠在僅有一個初始輸入的情況下,快速為種子隊列提供眾多感興趣的種子文件,并且這些種子文件能夠覆蓋到較為全面的服務端狀態.我們在兩款知名的流媒體軟件上評估BBFuzz.BBFuzz在map density和paths上的表現都優于一款已經存在的、具有代表性的協議模糊測試工具.BBFuzz挖掘到了兩個真實的漏洞.現如今,物聯網設備增長迅速,其安全問題也備受關注.我們注意到,在物聯網設備中協議被大量地使用,并且其中還有不少的私有協議.接下來,我們計劃拓展BBFuzz以支持對物聯網設備協議安全的測試.

參考文獻:

[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

基金項目: ?國家重點研發計劃項目(2021YFB3101803)

作者簡介: ??翁嵩潿(1998-), 男, 碩士研究生, 研究方向為二進制安全.E-mail:wengsongwei2019@163.com

通訊作者: ?賈鵬. E-mail: pengjia@scu.edu.cn

主站蜘蛛池模板: 狠狠综合久久久久综| 日韩欧美国产另类| 三区在线视频| 国产日本欧美在线观看| 在线看国产精品| 欧美日韩一区二区在线播放| 久热中文字幕在线| 亚洲欧美日韩视频一区| 亚洲欧美天堂网| 国产精品不卡片视频免费观看| 午夜激情婷婷| 久热精品免费| 国产91导航| 久久精品国产免费观看频道| 国产一级做美女做受视频| 性欧美久久| 永久免费精品视频| 亚洲免费黄色网| 女人18毛片水真多国产| 亚洲欧州色色免费AV| 亚洲娇小与黑人巨大交| 国产成人精品优优av| 国产chinese男男gay视频网| 国产女同自拍视频| 国产精品区网红主播在线观看| 久久久无码人妻精品无码| 亚洲永久免费网站| 亚洲日韩精品无码专区| 国产福利在线观看精品| 日韩欧美中文字幕一本| 亚洲国产成人在线| 国产超碰一区二区三区| 久久久久青草线综合超碰| 亚洲熟女偷拍| 在线精品自拍| 亚洲成人在线免费| 一本大道AV人久久综合| 精品视频一区在线观看| 精品国产电影久久九九| 无码久看视频| 一级一毛片a级毛片| 亚洲91精品视频| 国产成人AV大片大片在线播放 | 国产浮力第一页永久地址| 亚洲国产成人精品无码区性色| 国产精品亚洲日韩AⅤ在线观看| 久久伊人久久亚洲综合| 天堂成人在线视频| 久久特级毛片| 国产欧美视频综合二区| 99精品热视频这里只有精品7| 99久久精品国产综合婷婷| 亚洲精品色AV无码看| 亚洲成人一区二区三区| 亚洲成人www| 中文毛片无遮挡播放免费| 亚洲日本中文字幕天堂网| 日韩小视频在线观看| vvvv98国产成人综合青青| 国产一区二区三区在线观看免费| 久久国产V一级毛多内射| 欧美日韩v| 国产精品综合色区在线观看| 一级毛片基地| 国产成人久久综合777777麻豆| 九九免费观看全部免费视频| 在线视频亚洲欧美| 92午夜福利影院一区二区三区| 麻豆精品在线视频| 国产精品3p视频| 中文字幕在线观| 天天综合网在线| 亚洲国产精品一区二区高清无码久久| 精品丝袜美腿国产一区| 凹凸国产分类在线观看| 国产成人精品一区二区秒拍1o| 丰满人妻一区二区三区视频| 日韩黄色在线| 亚洲a免费| 国产chinese男男gay视频网| 免费无码AV片在线观看中文| 久久鸭综合久久国产|