亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于字段感知的文本協(xié)議灰盒模糊測(cè)試方法

        2024-10-14 00:00:00孫語韜徐向華
        計(jì)算機(jī)應(yīng)用研究 2024年10期

        摘 要:基于變異的灰盒協(xié)議模糊測(cè)試方法使用便捷、可擴(kuò)展性好,但缺乏協(xié)議報(bào)文格式信息,只能對(duì)報(bào)文整體進(jìn)行變異以產(chǎn)生測(cè)試用例,導(dǎo)致生成的大部分測(cè)試報(bào)文會(huì)被被測(cè)協(xié)議實(shí)現(xiàn)直接拒絕,嚴(yán)重影響測(cè)試效率。針對(duì)這一問題,提出了基于字段感知的文本協(xié)議模糊測(cè)試方法。該方法在基于變異的協(xié)議模糊測(cè)試中加入了模板學(xué)習(xí)的概念,使用分隔符劃分報(bào)文字段,使用字段字典獲取每個(gè)字段的合法取值;然后,針對(duì)劃分后的報(bào)文,設(shè)計(jì)了多種字段級(jí)的變異策略,并根據(jù)每個(gè)字段可能的取值數(shù)量和覆蓋率反饋計(jì)算相應(yīng)的字段變異能量;此外,還利用對(duì)報(bào)文進(jìn)行字段劃分的結(jié)果,對(duì)被測(cè)協(xié)議實(shí)現(xiàn)的狀態(tài)進(jìn)行更細(xì)粒度的刻畫。實(shí)驗(yàn)結(jié)果表明,該方法可以提高經(jīng)典的基于變異的協(xié)議模糊測(cè)試框架AFLNET產(chǎn)生的可被被測(cè)協(xié)議實(shí)現(xiàn)接受的測(cè)試用例的比例,進(jìn)而將測(cè)試效率提高到5倍以上。這表明基于變異的協(xié)議模糊測(cè)試方法普遍存在的可被接受的測(cè)試用例比例過低的問題確實(shí)會(huì)影響最終的測(cè)試效率,改善測(cè)試用例的被接受率可以大幅提高測(cè)試效率。

        關(guān)鍵詞:網(wǎng)絡(luò)安全; 協(xié)議測(cè)試; 模糊測(cè)試; 字段感知; 字段變異能量度量; 細(xì)粒度狀態(tài)刻畫

        中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A

        文章編號(hào):1001-3695(2024)10-032-3110-09

        doi:10.19734/j.issn.1001-3695.2024.01.0035

        Greybox fuzzing method for text protocol based on field perception

        Sun Yutao, Xu Xianghua

        (School of Computer Science, Hangzhou Dianzi University, Hangzhou 310018, China)

        Abstract:The mutation-based grey-box protocol fuzzing methods are convenient and highly scalable. However, they lack the message format information of the protocol under test, resulting in most of the messages in test cases being rejected by the target protocol implementation, severely affecting the testing efficiency. To address this issue, this paper proposed a greybox fuzzing method for text protocol based on field perception. This method incorporated the concept of template learning into mutation-based protocol fuzzing. It used delimiters to segment message fields and utilized a field dictionary to obtain valid values for each field. Subsequently, this paper designed multiple field-level mutation strategies for the segmented messages and calculated the corresponding field mutation energy based on the number of valid values and coverage feedback. Moreover, this approach leveraged the results of message field segmentation to provide a more fine-grained characterization of the protocol implementation state. Experimental results demonstrate that this method can improve the proportion of test cases accepted by the target protocol implementation generated by the classic mutation-based protocol fuzzing framework AFLNET, thereby increasing testing efficiency over five times. It proves that the low acceptance rate of test cases in the commonly used mutation-based protocol fuzzing methods decrease the overall testing efficiency, and increasing the test case acceptance rate can improve the testing efficiency significantly.

        Key words:network security; protocol testing; fuzzing; field perception; field’s mutation energy measurement; fine-grained state characterization

        0 引言

        協(xié)議模糊測(cè)試?yán)^承了軟件模糊測(cè)試高效、易用的特點(diǎn),并針對(duì)有狀態(tài)協(xié)議添加了狀態(tài)選擇機(jī)制[1,2],是目前流行的網(wǎng)絡(luò)協(xié)議測(cè)試技術(shù)之一[3],在網(wǎng)絡(luò)安全問題日益突出的今天[4~7]顯得尤為重要。根據(jù)生成測(cè)試用例的方式這一關(guān)鍵問題,可以將協(xié)議模糊測(cè)試大體分為基于生成的協(xié)議模糊測(cè)試和基于變異的協(xié)議模糊測(cè)試兩類。其中,基于生成的協(xié)議模糊測(cè)試[8,9]需要人工編寫協(xié)議報(bào)文模板和狀態(tài)機(jī),以生成符合協(xié)議規(guī)范的測(cè)試用例。然而,編寫協(xié)議報(bào)文模板和狀態(tài)機(jī)的工作量巨大,且很難保證人工編寫的結(jié)果完全準(zhǔn)確[10],導(dǎo)致此類模糊測(cè)試方法實(shí)際使用并不方便。而基于變異的協(xié)議模糊測(cè)試[11~17]使用被測(cè)協(xié)議實(shí)現(xiàn)的真實(shí)流量或人工構(gòu)造的部分報(bào)文作為初始種子,通過對(duì)其進(jìn)行變異生成測(cè)試用例,不需要人工編寫協(xié)議報(bào)文模板和狀態(tài)機(jī),是協(xié)議模糊測(cè)試最新的研究熱點(diǎn)。

        AFLNET[11]是首個(gè)基于變異的協(xié)議模糊測(cè)試框架[18],也是當(dāng)前各個(gè)基于變異的協(xié)議模糊器的基礎(chǔ)。它使用被測(cè)協(xié)議實(shí)現(xiàn)的真實(shí)流量作為初始種子,并通過對(duì)種子的變異產(chǎn)生測(cè)試用例。同時(shí),它將服務(wù)器每次返回的響應(yīng)碼作為此時(shí)的協(xié)議實(shí)現(xiàn)狀態(tài),在測(cè)試過程中動(dòng)態(tài)構(gòu)建被測(cè)協(xié)議實(shí)現(xiàn)的狀態(tài)機(jī)。在此基礎(chǔ)上,文獻(xiàn)[13,16]使用快照保存被測(cè)協(xié)議實(shí)現(xiàn)的各個(gè)狀態(tài),避免重復(fù)發(fā)送前綴報(bào)文序列的開銷,以提高協(xié)議測(cè)試的吞吐量。針對(duì)使用響應(yīng)碼表示協(xié)議實(shí)現(xiàn)狀態(tài)可能導(dǎo)致狀態(tài)機(jī)構(gòu)建不準(zhǔn)確的問題,文獻(xiàn)[14,15]提出了使用協(xié)議實(shí)現(xiàn)中的特定長(zhǎng)期變量的哈希值來更為準(zhǔn)確地刻畫協(xié)議狀態(tài)的方法,以此改進(jìn)基于變異的協(xié)議模糊的測(cè)試性能。

        然而,基于變異的協(xié)議模糊測(cè)試方法缺少被測(cè)協(xié)議的報(bào)文格式信息,只能識(shí)別報(bào)文的結(jié)束位置。對(duì)于每個(gè)報(bào)文,此類模糊測(cè)試方法則只會(huì)將其視為一個(gè)完整的字節(jié)流。在產(chǎn)生測(cè)試用例時(shí),此類模糊測(cè)試工具采用類似于軟件模糊測(cè)試中的變異方法,將變異算子直接作用于整個(gè)報(bào)文。這樣得到的測(cè)試用例有很大概率與種子中的原始報(bào)文差異巨大,不符合被測(cè)協(xié)議實(shí)現(xiàn)的基本要求,導(dǎo)致該測(cè)試用例無法通過被測(cè)協(xié)議實(shí)現(xiàn)的報(bào)文解析,被直接丟棄。此類測(cè)試用例的比例過高,顯然會(huì)影響協(xié)議模糊測(cè)試的整體效率。

        針對(duì)基于變異的協(xié)議模糊測(cè)試產(chǎn)生的測(cè)試用例中能被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例過低的問題,本文將基于生成的協(xié)議模糊測(cè)試中的部分思想引入到基于變異的協(xié)議模糊測(cè)試中,提出了一種基于字段感知的文本協(xié)議灰盒模糊測(cè)試方法。為了提高產(chǎn)生的測(cè)試用例符合被測(cè)協(xié)議實(shí)現(xiàn)的基本要求的概率,該方法使用分隔符對(duì)種子中的每個(gè)報(bào)文進(jìn)行字段劃分,并為劃分得到的每個(gè)字段分別建立一個(gè)字段字典,用于記錄該字段出現(xiàn)過的合法取值及每個(gè)取值在種子中出現(xiàn)的次數(shù)。然后,為每個(gè)字段分別計(jì)算字段變異能量,減少對(duì)不適合進(jìn)行隨機(jī)變異的字段進(jìn)行隨機(jī)變異的次數(shù)。在上述改進(jìn)的基礎(chǔ)上,為了緩解基于變異的協(xié)議模糊測(cè)試的典型工作AFLNET所存在的狀態(tài)劃分粒度過粗的問題,利用字段劃分的結(jié)果對(duì)協(xié)議狀態(tài)進(jìn)行細(xì)粒度的刻畫,為模糊測(cè)試提供更準(zhǔn)確的引導(dǎo)。

        本文的主要貢獻(xiàn)如下:

        a)提出了基于字段感知的文本協(xié)議模糊測(cè)試方法。使用字段感知方法,學(xué)習(xí)協(xié)議模板,提高測(cè)試用例接受率。在此基礎(chǔ)上,使用字段級(jí)變異策略、字段能量度量方法和基于請(qǐng)求消息類型的狀態(tài)刻畫方法,提高測(cè)試效率。

        b)實(shí)現(xiàn)了一個(gè)基于字段感知的文本協(xié)議模糊測(cè)試方法的原型模糊器FPFuzzer(field perception fuzzer),并評(píng)估其效果。實(shí)驗(yàn)表明,F(xiàn)PFuzzer產(chǎn)生的測(cè)試用例的接受率可以達(dá)到AFLNET的3~9倍,實(shí)現(xiàn)5~10倍的測(cè)試加速,提升3%的分支覆蓋。

        1 研究動(dòng)機(jī)

        與一般的軟件不同,網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)通常對(duì)收到的報(bào)文具有較高的格式要求,對(duì)于不能滿足基本格式要求的報(bào)文,通常不會(huì)進(jìn)行實(shí)際的處理,而是返回錯(cuò)誤信息。例如,RTSP(real time streaming protocol)協(xié)議的一個(gè)著名開源實(shí)現(xiàn)live555,其處理客戶端發(fā)送來的請(qǐng)求報(bào)文的邏輯如圖1所示。

        收到報(bào)文后,live555服務(wù)器首先會(huì)對(duì)收到的報(bào)文進(jìn)行解析,提取其中包含的各個(gè)字段。在解析報(bào)文的過程中,如果發(fā)現(xiàn)該報(bào)文的格式錯(cuò)誤,例如缺少必要的字段,則會(huì)跳過之后的處理步驟,直接返回包含錯(cuò)誤類型代碼的回復(fù)報(bào)文。否則,根據(jù)請(qǐng)求類型字段(FTP協(xié)議中為第一個(gè)字段)的值,進(jìn)入對(duì)應(yīng)的處理邏輯,對(duì)報(bào)文進(jìn)行實(shí)際處理。如果請(qǐng)求類型字段的值不是live555服務(wù)器支持的類型,則同樣會(huì)跳過處理階段,直接返回包含錯(cuò)誤類型代碼的回復(fù)報(bào)文。只有當(dāng)報(bào)文格式符合RTSP協(xié)議的基本要求且請(qǐng)求類型字段的值合法時(shí),才能進(jìn)入live555服務(wù)器的實(shí)際處理邏輯,完成請(qǐng)求報(bào)文所要求的操作。

        大部分協(xié)議的實(shí)現(xiàn)都會(huì)在收到客戶端發(fā)來的請(qǐng)求報(bào)文后進(jìn)行類似的檢查。不符合協(xié)議要求的報(bào)文通常是無法進(jìn)入?yún)f(xié)議實(shí)現(xiàn)中各類請(qǐng)求報(bào)文的處理邏輯的,它們?cè)趫?bào)文解析階段或請(qǐng)求類型判別階段就會(huì)被拒絕。由此可知,協(xié)議模糊器產(chǎn)生的不符合協(xié)議基本要求的報(bào)文主要用于測(cè)試協(xié)議實(shí)現(xiàn)通過報(bào)文解析的邊界條件,挖掘其中可能存在的解析錯(cuò)誤問題。而對(duì)協(xié)議實(shí)現(xiàn)的請(qǐng)求處理邏輯進(jìn)行測(cè)試,則需要能夠通過協(xié)議實(shí)現(xiàn)基本檢查的大體上正確的報(bào)文。

        這兩類測(cè)試用例都有助于對(duì)協(xié)議實(shí)現(xiàn)進(jìn)行全面的測(cè)試,保持這兩類測(cè)試用例的比例處于合理區(qū)間才能得到最好的測(cè)試效果。然而,基于變異的模糊測(cè)試方法完全沒有考慮報(bào)文格式的問題,而是將整個(gè)報(bào)文作為字節(jié)流進(jìn)行變異,無疑會(huì)導(dǎo)致產(chǎn)生的測(cè)試用例大部分都不符合被測(cè)協(xié)議的基本要求。且隨著測(cè)試時(shí)間的推移,越來越多完全不符合協(xié)議規(guī)范的測(cè)試用例被保存為新種子,以這些本身就不符合被測(cè)協(xié)議基本要求的種子為基礎(chǔ)產(chǎn)生的測(cè)試用例能夠進(jìn)入被測(cè)協(xié)議實(shí)現(xiàn)實(shí)際報(bào)文處理邏輯的可能性愈發(fā)渺茫。這就導(dǎo)致了基于變異的協(xié)議模糊測(cè)試對(duì)被測(cè)協(xié)議實(shí)現(xiàn)實(shí)際處理邏輯的測(cè)試效率低下。

        為了驗(yàn)證上述問題在實(shí)際測(cè)試中的嚴(yán)重程度,本文使用基于變異的協(xié)議模糊測(cè)試的一個(gè)典型模糊器AFLNET對(duì)live555服務(wù)器進(jìn)行測(cè)試,收集其中可以通過live555自身的檢測(cè)進(jìn)入實(shí)際處理邏輯的測(cè)試用例的占比。具體地,本文在使用Ubuntu 18.04系統(tǒng)、配備24個(gè)Intel Xeon E5-2620 v3內(nèi)核和256 GB 內(nèi)存的服務(wù)器上對(duì)live555進(jìn)行為期1 h的模糊測(cè)試。在測(cè)試中,每隔1 min采樣一次,記錄截止到目前為止產(chǎn)生的所有測(cè)試用例中被服務(wù)器接受的比例。為了提高測(cè)試結(jié)果的可信程度,本文重復(fù)進(jìn)行該實(shí)驗(yàn)3次。測(cè)試結(jié)果如圖2所示。

        可以看到,AFLNET對(duì)報(bào)文進(jìn)行整體變異產(chǎn)生的測(cè)試用例確實(shí)大部分完全不符合協(xié)議的基本要求,且隨著測(cè)試時(shí)間的推移,產(chǎn)生可以被被測(cè)協(xié)議實(shí)現(xiàn)接受的測(cè)試用例的概率持續(xù)下降。實(shí)際上,對(duì)于RTSP協(xié)議這種具有較多字段的報(bào)文而言,測(cè)試用例接受率的下降速度是非常驚人的。開始測(cè)試10 min后,測(cè)試用例的平均接受率就已經(jīng)低于10%;此后,測(cè)試用例接受率進(jìn)一步下降,在開始測(cè)試1 h后,平均測(cè)試用例接受率跌破5%。

        換言之,AFLNET產(chǎn)生的測(cè)試用例只有不到5%的比例可以進(jìn)入live555實(shí)際的報(bào)文處理邏輯中,這樣的比例明顯過低,顯然會(huì)降低基于變異的協(xié)議模糊測(cè)試的效率。在某種意義上來說,適當(dāng)提高基于變異的協(xié)議模糊測(cè)試產(chǎn)生的測(cè)試用例符合協(xié)議基本要求的比例,在功效上相當(dāng)于加快了協(xié)議模糊測(cè)試處理測(cè)試用例的速度。

        綜上所述,現(xiàn)有基于變異的協(xié)議模糊測(cè)試生成的測(cè)試用例中能被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例過低,嚴(yán)重影響了測(cè)試效率。因此,為基于變異的協(xié)議模糊測(cè)試提出一種能夠提高測(cè)試用例被接受率的方法,是提高測(cè)試效率的必然需求。

        2 解決方案

        基于變異的協(xié)議模糊測(cè)試都存在測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)直接拒絕的比例過高的問題,這是由于此類協(xié)議模糊測(cè)試方法變異粒度(整個(gè)報(bào)文)過粗導(dǎo)致的固有問題。而基于生成的協(xié)議模糊測(cè)試使用人工輸入的報(bào)文模板指導(dǎo)測(cè)試用例的生成,可以知道每個(gè)報(bào)文包含哪些字段、每個(gè)字段的類型及每個(gè)字段的默認(rèn)取值等關(guān)鍵信息,生成的測(cè)試用例被拒絕的概率遠(yuǎn)低于基于變異的協(xié)議模糊測(cè)試。但基于生成的協(xié)議模糊測(cè)試對(duì)測(cè)試人員提出了很高的要求,需要測(cè)試人員給出被測(cè)協(xié)議的所有報(bào)文模板和完整的狀態(tài)機(jī),實(shí)際使用困難較大。

        為此,本文在基于變異的模糊測(cè)試中引入模板學(xué)習(xí)的概念,提出一種基于變異加生成的全新協(xié)議模糊測(cè)試方法。在保留基于變異的協(xié)議模糊測(cè)試易于使用的優(yōu)點(diǎn)的同時(shí),自動(dòng)學(xué)習(xí)協(xié)議報(bào)文模板,并使用模板指導(dǎo)測(cè)試用例的生成和狀態(tài)機(jī)的構(gòu)建,提高測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例,從而提高測(cè)試效率。該方法的核心在于對(duì)報(bào)文進(jìn)行有針對(duì)性的變異,其與傳統(tǒng)基于變異的協(xié)議模糊測(cè)試方法的核心區(qū)別如圖3所示。

        從整體上看,本文通過模板學(xué)習(xí)獲取報(bào)文的字段信息和每個(gè)字段的合法取值,以此減小生成測(cè)試用例時(shí)的變異粒度;通過字段變異能量度量每個(gè)字段是否適合進(jìn)行字段級(jí)的變異,將更多測(cè)試時(shí)間用于更適合變異的字段。此外,本文還通過基于請(qǐng)求消息類型的狀態(tài)刻畫方法,利用已經(jīng)學(xué)習(xí)到的模板信息對(duì)被測(cè)協(xié)議狀態(tài)進(jìn)行更細(xì)粒度的刻畫,提高狀態(tài)機(jī)的準(zhǔn)確性。

        2.1 報(bào)文模板學(xué)習(xí)方法

        如前所述,為了提高生成的測(cè)試用例符合被測(cè)協(xié)議基本要求的概率,本文在傳統(tǒng)的基于變異的協(xié)議模糊測(cè)試中引入了模板學(xué)習(xí)的概念。協(xié)議通常會(huì)對(duì)報(bào)文包含的字段數(shù)量及關(guān)鍵字段的取值進(jìn)行檢查,一旦發(fā)現(xiàn)當(dāng)前報(bào)文不符合協(xié)議的要求,就會(huì)將其拒絕。為了提高測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的概率,就必須同時(shí)考慮這兩個(gè)方面。因此,模板學(xué)習(xí)方法同樣需要包含報(bào)文字段劃分和字段合法取值學(xué)習(xí)兩個(gè)方面。

        2.1.1 字段劃分

        為了獲取報(bào)文包含的字段信息,本文提出了基于分隔符的字段劃分方法。

        文本協(xié)議與二進(jìn)制協(xié)議不同,單個(gè)報(bào)文包含的字段數(shù)量和每個(gè)字段的長(zhǎng)度通常都是不固定的,各個(gè)字段之間直接使用分隔符進(jìn)行區(qū)分。因此,本文直接利用文本協(xié)議的這一特點(diǎn),在將種子加入隊(duì)列前,根據(jù)分隔符,將其中的每個(gè)報(bào)文劃分為字段列表。其中,分隔符單獨(dú)作為一個(gè)字段。這種方式可以獲取被測(cè)協(xié)議報(bào)文的大致報(bào)文結(jié)構(gòu),雖然可能出現(xiàn)將部分字段內(nèi)部的符號(hào)誤認(rèn)為分隔符,導(dǎo)致該字段被截?cái)嗟膯栴},但實(shí)際對(duì)生成有效測(cè)試用例的影響較小。

        對(duì)于種子中的每個(gè)報(bào)文進(jìn)行劃分的方法可以用算法1描述。依次讀入當(dāng)前種子的每個(gè)報(bào)文(第2行),每當(dāng)讀入一個(gè)報(bào)文,即對(duì)該報(bào)文進(jìn)行劃分。完成讀入過程,則完成了整個(gè)種子所有報(bào)文的劃分,最終信息存放在一個(gè)結(jié)構(gòu)體中(第28行)。對(duì)于當(dāng)前要?jiǎng)澐值膱?bào)文,則:首先記錄當(dāng)前報(bào)文的長(zhǎng)度(第4和5行)。然后初始化當(dāng)前檢查的字節(jié)位置(第7行)和截止到目前為止劃分出的最后一個(gè)字段的結(jié)束字節(jié)位置(第8行)。然后,依次讀入當(dāng)前報(bào)文的每個(gè)字節(jié)(第10行),如果當(dāng)前讀入的字節(jié)不是分隔符,則繼續(xù)讀入下一個(gè)字節(jié)(第24行);否則,如果當(dāng)前字節(jié)前不存在沒有被分配到字段的字節(jié),則將當(dāng)前字節(jié)作為一個(gè)字段添加到種子結(jié)構(gòu)體中(第14~16行),否則,將當(dāng)前字節(jié)之前所有未被分配的字節(jié)作為一個(gè)字段、當(dāng)前字節(jié)作為另一個(gè)字段,依次添加到種子結(jié)構(gòu)體中(第18~20行)。

        算法1 基于分隔符的字段劃分算法

        輸入:AFLNET為當(dāng)前種子構(gòu)建的結(jié)構(gòu)體q;當(dāng)前被測(cè)協(xié)議使用的分隔符的集合D。

        輸出:添加了字段信息的當(dāng)前種子的結(jié)構(gòu)體q。

        1 //依次讀入當(dāng)前種子的每個(gè)報(bào)文

        2 for r in q->regions do

        3 //將實(shí)際報(bào)文讀入為字符串,并記錄報(bào)文長(zhǎng)度

        4 r_text=readFile(q->fname,r->start_byte,r->end_byte)

        5 r_length =r->end_byte -r->start_byte

        6 //初始化報(bào)文劃分的位置

        7 last_byte=-1

        8 now_byte=0

        9 //依次讀取當(dāng)前報(bào)文的每個(gè)字節(jié)

        10 while last_byte <r_length do

        11 //找到屬于分隔符的字節(jié)

        12 if r_text[now_byte] in D then

        13 /*判斷當(dāng)前需要添加的是一個(gè)字段還是兩個(gè)字段,并將字段添加到當(dāng)前種子對(duì)應(yīng)報(bào)文的結(jié)構(gòu)體中*/

        14 if last_byte =now_byte-1 then

        15 r->fields.add(r_text,now_byte, 1, is_delimiter)

        16 r->field_count += 1

        17 else

        18 r->fields.add(r_text,last_byte+1,now_byte–last_byte-1)

        19 r->fields.add(r_text,now_byte, 1, is_delimiter)

        20 r->field_count +=2

        21 end if

        22 last_byte =now_byte

        23 end if

        24 now_byte++

        25 end while

        26end for

        27//返回更新了字段信息的結(jié)構(gòu)體

        28return q

        2.1.2 字段字典學(xué)習(xí)

        為了學(xué)習(xí)報(bào)文每個(gè)字段的合法取值,本文提出了字段字典值學(xué)習(xí)方法。如前文所述,文本協(xié)議單個(gè)報(bào)文包含的字段數(shù)量通常不是固定的。因此,需要首先確定設(shè)置字段字典的數(shù)量。通常情況下,文本協(xié)議的一個(gè)報(bào)文可以包含固定字段、選項(xiàng)和數(shù)據(jù)這三類字段,其中固定字段的位置和個(gè)數(shù)一般都是確定的,且通常位于報(bào)文的開頭,而選項(xiàng)和數(shù)據(jù)部分通常位于固定字段之后,且可以包含也可以不包含,可以包含一個(gè)也可以包含多個(gè),是不能確定的。同時(shí),報(bào)文的固定字段更有可能取值受限,而后續(xù)的選項(xiàng)和數(shù)據(jù)部分則沒有太大的限制。因此,關(guān)鍵是為每個(gè)固定字段分別建立字段字典,而對(duì)于其余的選項(xiàng)或數(shù)據(jù)字段,可以使用一個(gè)統(tǒng)一的字典。

        基于這一思想,本文將初始種子中單一報(bào)文包含的最少字段數(shù)定義為必要字段數(shù),將所有報(bào)文的前必要字段數(shù)個(gè)字段定義為必要字段,而將其余字段定義為非必要字段。前述的固定字段大概率被分為了必要字段。因此,本文為每個(gè)必要字段單獨(dú)構(gòu)建一個(gè)字段字典,而對(duì)于所有非必要字段,則使用一個(gè)統(tǒng)一的字段字典。

        在測(cè)試準(zhǔn)備階段讀入所有初始種子后,開始構(gòu)建初始的字段字典,具體的構(gòu)建方法如算法2所示。首先,創(chuàng)建必要字段數(shù)量加1個(gè)字段字典,共同組成字段字典列表,其中每個(gè)字段字典初始均為空(第2行)。然后,遍歷初始種子隊(duì)列中每個(gè)種子中的每個(gè)報(bào)文(第4~6行),每遍歷一個(gè)報(bào)文,則遍歷其中的每個(gè)字段(第8行)。如果當(dāng)前字段的值已經(jīng)存在于對(duì)應(yīng)的字段字典中,則將該取值的計(jì)數(shù)加1(第10、11行);否則,將該取值添加到對(duì)應(yīng)的字段字典中并設(shè)置計(jì)數(shù)為1(第12~14行)。遍歷完所有種子后,即完成全部字段字典的構(gòu)建。

        算法2 字段字典構(gòu)建算法

        輸入:初始種子隊(duì)列queue;必要字段數(shù)min_fields。

        輸出:每個(gè)字段對(duì)應(yīng)的字段字典組成的列表d_list。

        1 //創(chuàng)建空的字段字典列表

        2 d_list=createDicts(min_fields+1)

        3 //遍歷種子隊(duì)列中的每個(gè)種子

        4 for q in queue do

        5 //遍歷當(dāng)前種子包含的每個(gè)報(bào)文

        6 for r in q->regions do

        7 //遍歷當(dāng)前報(bào)文的所有字段

        8 for index in len(r->field_count) do

        9 /*添加到對(duì)應(yīng)的字段字典中,如果已經(jīng)存在當(dāng)前取值,則計(jì)數(shù)加1,否則,設(shè)置計(jì)數(shù)為1*/

        10 if r->fields[index] in d_list[index] then

        11 d_list[index][r->fields[index]] +=1

        12 else

        13 d_list[index].add (r->fields[index])

        14 d_list[index][r->fields[index]]=1

        15 end if

        16 end for

        17 end for

        18end for

        19return d_list

        在模糊測(cè)試階段會(huì)對(duì)字段字典進(jìn)行動(dòng)態(tài)更新。當(dāng)發(fā)現(xiàn)新的種子時(shí),使用產(chǎn)生當(dāng)前種子所變異報(bào)文的每個(gè)字段值更新字段字典。更新過程如算法2的第7~16行。

        2.2 變異策略及變異能量度量

        如前所述,本文方法的核心在于學(xué)習(xí)報(bào)文模板,并根據(jù)學(xué)習(xí)到的報(bào)文模板進(jìn)行細(xì)粒度的變異,以提高產(chǎn)生有效測(cè)試用例的概率。因此,本文在保留基于變異的協(xié)議模糊測(cè)試原始的變異策略外,還引入了字段級(jí)的變異策略。

        同時(shí),不同的字段進(jìn)行隨機(jī)變異的價(jià)值不同。例如,對(duì)于取值受限的關(guān)鍵字段進(jìn)行隨機(jī)變異,產(chǎn)生的絕大部分測(cè)試用例都將完全不符合被測(cè)協(xié)議的基本要求,價(jià)值較低。因此,在對(duì)報(bào)文進(jìn)行變異時(shí),需要計(jì)算其中每個(gè)字段的變異能量,確定對(duì)每個(gè)字段進(jìn)行隨機(jī)變異的次數(shù),將更多測(cè)試時(shí)間用于變異潛在價(jià)值更大的字段。

        2.2.1 變異策略

        本文引入的字段級(jí)變異策略可以分為確定性字段變異和非確定性字段變異兩大類。其中,確定性變異策略作用的結(jié)果是可以預(yù)測(cè)的,對(duì)任意一個(gè)種子使用此類策略能夠產(chǎn)生的測(cè)試用例的數(shù)量都是確定的。因此,每個(gè)種子僅在第一次變異時(shí)使用確定性變異策略。而非確定性變異策略產(chǎn)生的測(cè)試用例難以預(yù)測(cè),每次應(yīng)用都能產(chǎn)生不同的測(cè)試用例,因此每次對(duì)種子進(jìn)行變異時(shí)都會(huì)使用。但正因?yàn)槿绱?,非確定性變異沒有明確的變異次數(shù)限制,對(duì)一個(gè)種子進(jìn)行多少非確定性變異需要模糊器指定。此外,由于使用非確定性變異策略的結(jié)果難以預(yù)料,為了減少對(duì)報(bào)文格式的破壞,本文僅對(duì)非分隔符字段使用非確定性變異。

        具體地,本文使用的字段變異策略如下:

        1)確定性變異策略

        對(duì)于分隔符字段依次使用兩種策略。a)字段字典替換:依次將當(dāng)前字段替換為對(duì)應(yīng)的字段字典中的各個(gè)值;b)特殊字符替換:依次將當(dāng)前字段替換為預(yù)先定義好的一系列特殊字符值。對(duì)于非分隔符字段則依次使用以下兩種策略。a)一位翻轉(zhuǎn):依次翻轉(zhuǎn)當(dāng)前字段值的每一位;b)字典值替換/插入。依次將當(dāng)前字段替換為各個(gè)字典值(包括人工提供的字典和自動(dòng)構(gòu)建的字段字典),再依次在當(dāng)前字段前/后插入這些字典值。

        2)非確定性變異策略

        對(duì)于非分隔符字段依次使用以下三種策略,每種策略生成的測(cè)試用例數(shù)由字段變異能量決定。a)超長(zhǎng)特殊字符:隨機(jī)使用預(yù)先定義好的容易導(dǎo)致崩潰的特殊字符的大量重復(fù)(長(zhǎng)c0e2b2fafd85271a622777a41318a692aac38a5f164833ce839d730cb468d665度隨機(jī))來替換當(dāng)前字段;b)字段重復(fù):從當(dāng)前報(bào)文中隨機(jī)復(fù)制一個(gè)字段,并隨機(jī)拼接到當(dāng)前字段的前面或后面;c)字段級(jí)大破壞:類似于Havoc策略[19],根據(jù)字段長(zhǎng)度隨機(jī)一個(gè)變異次數(shù),對(duì)當(dāng)前字段進(jìn)行這一次數(shù)的累積變異。其中,每次變異的方法包括:(a)一位翻轉(zhuǎn);(b)隨機(jī)設(shè)置其中一個(gè)字節(jié)的值;(c)隨機(jī)刪除一些連續(xù)字節(jié)(長(zhǎng)度隨機(jī));(d)隨機(jī)插入一些連續(xù)字節(jié)(長(zhǎng)度隨機(jī));(e)隨機(jī)替換一些連續(xù)字節(jié)。

        2.2.2 變異能量度量

        如前所述,對(duì)不同字段進(jìn)行非確定性變異的價(jià)值是不同的。為了提高測(cè)試效率,將更多測(cè)試時(shí)間用于潛在價(jià)值更大的字段,需要為每個(gè)實(shí)際進(jìn)行非確定性變異的字段計(jì)算一個(gè)字段變異能量,以確定每個(gè)字段進(jìn)行非確定性變異的次數(shù)(其中,超長(zhǎng)特殊字符策略和字段重復(fù)策略分別分到1/5的字段變異能量,字段級(jí)大破壞策略分到3/5的字段變異能量)。

        在實(shí)際測(cè)試中,本文觀察到,特定種子的特定字段的潛在變異價(jià)值主要受兩個(gè)方面的因素影響:a)該字段本身是否適合隨機(jī)變異;b)當(dāng)前種子及種子中該字段的取值是否有趣。首先,如前所述,協(xié)議實(shí)現(xiàn)對(duì)不同字段的約束強(qiáng)度是不同的,這就導(dǎo)致了對(duì)不同字段隨機(jī)變異的價(jià)值不同。例如,有的字段可能只有少數(shù)幾個(gè)合法的取值,對(duì)這樣的字段進(jìn)行隨機(jī)變異的價(jià)值顯然比較低。而有些字段能夠影響協(xié)議實(shí)現(xiàn)的處理邏輯,但本身的取值可以在一個(gè)范圍內(nèi)變化。對(duì)這樣的字段進(jìn)行隨機(jī)變異,顯然更有可能觸發(fā)被測(cè)協(xié)議多種處理邏輯,對(duì)全面測(cè)試被測(cè)協(xié)議有很大幫助。其次,實(shí)際每個(gè)種子本身的價(jià)值也有所不同,這會(huì)影響到對(duì)其中每個(gè)字段進(jìn)行變異的價(jià)值。更關(guān)鍵的是,當(dāng)前種子中各個(gè)字段的實(shí)際取值會(huì)影響保留該字段不進(jìn)行變異的價(jià)值。例如,某個(gè)字段有兩種合法的取值,其中該字段取值為a的種子有99個(gè),而取值為b的種子僅1個(gè)。此時(shí),對(duì)該字段取值為b的種子進(jìn)行測(cè)試時(shí),就不應(yīng)該對(duì)該字段進(jìn)行過多的變異。

        根據(jù)上述思想,本文將字段變異能量分為字段基礎(chǔ)變異能量和字段實(shí)際變異能量。其中,字段基礎(chǔ)變異能量是全局的,用于刻畫字段本身的隨機(jī)變異價(jià)值。而字段實(shí)際變異能量是每個(gè)報(bào)文單獨(dú)的,使用所屬種子的變異價(jià)值和該報(bào)文中每個(gè)字段取值的稀有度對(duì)字段基礎(chǔ)變異能量進(jìn)行了修正。

        1)字段基礎(chǔ)變異能量

        在測(cè)試準(zhǔn)備階段中,當(dāng)構(gòu)建完字段字典后開始計(jì)算每個(gè)字段的基礎(chǔ)變異能量。和構(gòu)建字段字典時(shí)一致,所有非必要字段共用一個(gè)基礎(chǔ)變異能量,且由于非必要字段的特殊性,計(jì)算其基礎(chǔ)變異能量的方式與必要字段略有不同。通常情況下,一個(gè)字段在所有種子中出現(xiàn)過的合法取值越少,這個(gè)字段是取值受限字段的可能性就越大,應(yīng)該分配更少的字段變異能量。因此,本文根據(jù)每個(gè)字段的取值多樣性計(jì)算其基礎(chǔ)變異能量,并在模糊測(cè)試過程中逐漸更新。

        首先,根據(jù)每個(gè)字段對(duì)應(yīng)的字段字典中包含的合法取值數(shù)量及構(gòu)建該字段字典使用的報(bào)文數(shù)量計(jì)算每個(gè)字段在初始種子中的多樣性。特別地,對(duì)于非必要字段而言,由于所有非必要字段共用一個(gè)字段字典,所以在計(jì)算其取值多樣性時(shí)需要考慮該字段字典實(shí)際包含的字段數(shù)量的最大值。具體計(jì)算方法如式(1)所示。

        D(x)=values(x)Rtotal x∈[1,fmin]

        values(x)Rtotal×(fmax-fmin)x=fmin+1(1)

        其中:D(x)表示當(dāng)前計(jì)算的是第x個(gè)字段的多樣性;values(x)表示第x個(gè)字段在初始種子中出現(xiàn)過的取值數(shù)量;Rtotal構(gòu)建當(dāng)前字段字典時(shí)使用的報(bào)文總數(shù);fmin表示必要字段數(shù);fmax表示構(gòu)建字段字典的種子中單個(gè)報(bào)文包含的最大字段數(shù)。

        根據(jù)筆者以往的測(cè)試經(jīng)驗(yàn),每個(gè)字段的變異次數(shù)在幾十次時(shí),整體測(cè)試效率較好。因此,需要將取值為[0,1]的字段多樣性映射到一條取值為[1,100]的光滑曲線上,以此作為字段基礎(chǔ)變異能量??紤]到字段多樣性的取值接近0或1的概率很低,為了凸顯中間取值的字段的差異,本文使用sigmoid函數(shù)的變形來實(shí)現(xiàn)此映射。具體如式(2)所示。

        Eb(x)=φ(D(x)) x∈[1,fmin]

        φ(D(x))×(fmax-fmin)x=fmin+1(2)

        其中:Eb(x)為計(jì)算得到的第x個(gè)字段的基礎(chǔ)變異能量;fmin表示必要字段數(shù);fmax表示用于構(gòu)建字段字典的種子中單個(gè)報(bào)文包含的最大字段數(shù);φ(d)為未經(jīng)修正的映射函數(shù),具體為

        φ(d)=1+99d×(f(d)-f(0))f(1)-f(0)(3)

        其中:f(d)是sigmoid函數(shù)的變形,如式(4)所示。

        f(d)=1001+e-10(d-0.5)(4)

        通過上述方式可以在測(cè)試準(zhǔn)備階段得到每個(gè)字段的基礎(chǔ)變異能量,但是在模糊測(cè)試過程中,還需要根據(jù)實(shí)際測(cè)試情況,對(duì)每個(gè)字段的基礎(chǔ)變異能量進(jìn)行更新。具體地,如果對(duì)某個(gè)字段進(jìn)行非確定性變異產(chǎn)生了新種子,則可以認(rèn)為,對(duì)該字段進(jìn)行非確定性變異確實(shí)具有潛在價(jià)值,應(yīng)該增大該字段的基礎(chǔ)變異能量。此外,一般認(rèn)為,發(fā)現(xiàn)新種子所用的變異次數(shù)越少,則該字段的潛在價(jià)值越大;同樣地,歷史上對(duì)該字段進(jìn)行非確定性變異產(chǎn)生的種子越多,則該字段的潛在價(jià)值也越大?;谶@一思想,在每次發(fā)現(xiàn)新種子時(shí),使用式(5)對(duì)當(dāng)前進(jìn)行非確定性變異的字段進(jìn)行的基礎(chǔ)變異能量更新:

        Eb(x)′=Eb(x)+Seedn(x)M(x)(5)

        其中:Eb(x)′代表第x個(gè)字段更新后的字段基礎(chǔ)變異能量;Eb(x)代表第x個(gè)字段更新前的字段基礎(chǔ)變異能量;Seedn(x)代表對(duì)當(dāng)前字段進(jìn)行非確定性變異產(chǎn)生的種子的數(shù)量;M(x)代表本次測(cè)試對(duì)當(dāng)前字段進(jìn)行非確定性變異的次數(shù)。

        2)字段實(shí)際變異能量

        如前所述,在模糊測(cè)試階段中,每次對(duì)當(dāng)前選擇的報(bào)文進(jìn)行變異前,都需要根據(jù)當(dāng)前變異的報(bào)文所屬的種子本身的價(jià)值(種子整體的變異能量)和當(dāng)前報(bào)文中每個(gè)字段實(shí)際取值的稀有程度來修正字段基礎(chǔ)變異能量,得到每個(gè)字段的實(shí)際變異能量。根據(jù)之前的分析,對(duì)于整體價(jià)值大的種子中的所有字段,都應(yīng)該分配更多的實(shí)際變異能量;對(duì)于取值稀有的字段,則應(yīng)該分配更少的實(shí)際變異能量。

        基于這一思想,首先根據(jù)每個(gè)字段的當(dāng)前取值在字段字典中是否出現(xiàn)或記錄的出現(xiàn)次數(shù),計(jì)算字段取值的稀有度。如果出現(xiàn)過,則稀有度為其出現(xiàn)的次數(shù)占所有取值總出現(xiàn)次數(shù)的比例,否則,規(guī)定為所有取值總出現(xiàn)次數(shù)的倒數(shù)的十分之一。具體計(jì)算方法如式(6)所示。

        R(x)=valuetimes(x)Rtotal 字段字典中存在當(dāng)前取值

        0.1Rtotal字段字典中不存在當(dāng)前取值(6)

        其中:R(x)表示第x個(gè)字段當(dāng)前取值的稀有度;valuetimes(x)表示第x個(gè)字段的取值在對(duì)應(yīng)的字段字典中的計(jì)數(shù)(出現(xiàn)次數(shù));Rtotal表示所有構(gòu)建字段字典時(shí)使用的報(bào)文總數(shù)。

        之后,根據(jù)當(dāng)前種子本身的變異能量、每個(gè)字段當(dāng)前的基礎(chǔ)變異能量和每個(gè)字段當(dāng)前取值的稀有度,計(jì)算每個(gè)字段的實(shí)際變異能量。同計(jì)算字段基礎(chǔ)變異能量時(shí)相同,對(duì)于非必要字段,仍需要使用單個(gè)報(bào)文最多包含多少非必要字段進(jìn)行修正。特別的,如前所述,本文不會(huì)對(duì)分隔符字段使用非確定性變異策略,因此規(guī)定分隔符字段的實(shí)際變異能量為-1。計(jì)算方法為

        E(x)=Es×Eb(x)×R(x)100 x∈[1,fmin]

        Es×Eb(x)×R(x)100×(fmax-fmin)x=fmin+1

        -1第x個(gè)字段是分隔符字段(71p2tIxkB8MtR+2vPeYH/dA==

        其中:E(x)表示第x個(gè)字段的實(shí)際變異能量;Es代表當(dāng)前種子的整體能量;Eb(x)代表第x個(gè)字段的基礎(chǔ)變異能量;R(x)表示第x個(gè)字段當(dāng)前取值的稀有度;fmin表示必要字段數(shù);fmax表示構(gòu)建字段字典的種子中單個(gè)報(bào)文包含的最大字段數(shù)。

        2.3 基于請(qǐng)求消息類型的狀態(tài)刻畫方法

        通常情況下,協(xié)議實(shí)現(xiàn)對(duì)不同類型的請(qǐng)求報(bào)文具有不同的處理邏輯。因此,在成功處理不同類型的請(qǐng)求報(bào)文后,協(xié)議實(shí)現(xiàn)的實(shí)際狀態(tài)通常也是不同的。然而,一些文本協(xié)議只要正確處理收到的請(qǐng)求報(bào)文都會(huì)返回相同的響應(yīng)報(bào)文,導(dǎo)致以協(xié)議實(shí)現(xiàn)的響應(yīng)碼刻畫協(xié)議狀態(tài)的方法無法區(qū)分協(xié)議實(shí)現(xiàn)正確處理不同類型的請(qǐng)求后的狀態(tài),顯然會(huì)影響測(cè)試效果。如圖4(a)的例子所示,在以options→setup→play→errtype的順序向RTSP協(xié)議實(shí)現(xiàn)live555發(fā)送報(bào)文后(其中,errtype不是一種真實(shí)存在的報(bào)文類型,而是代表請(qǐng)求類型字段取值不合法的任意報(bào)文),AFLNET無法區(qū)分live555服務(wù)器在接受options報(bào)文、setup報(bào)文和play報(bào)文后的狀態(tài)。然而,live555服務(wù)器在接受這些報(bào)文后,允許接受的報(bào)文類型的集合都是不同的,表明這些狀態(tài)實(shí)際并不相同。

        因此,本文提出了基于請(qǐng)求消息類型的狀態(tài)刻畫方法,對(duì)上述被混淆的狀態(tài)進(jìn)行細(xì)分,從而更準(zhǔn)確地指導(dǎo)測(cè)試狀態(tài)和對(duì)應(yīng)種子的選擇。對(duì)于表示正確處理了請(qǐng)求報(bào)文的響應(yīng)碼對(duì)應(yīng)的狀態(tài),該方法使用被測(cè)協(xié)議實(shí)現(xiàn)當(dāng)前接受并處理的請(qǐng)求報(bào)文的類型字段的值進(jìn)行細(xì)分。具體地,將前一個(gè)請(qǐng)求報(bào)文的類型字段(可以人工指定,默認(rèn)是報(bào)文的第一個(gè)字段)的值和響應(yīng)碼拼接成一個(gè)字符串,然后對(duì)該字符串進(jìn)行哈希運(yùn)算,將得到的值作為細(xì)分后的狀態(tài)。對(duì)于其他響應(yīng)碼(主要是各種類型的錯(cuò)誤代碼)代表的狀態(tài),則僅對(duì)該響應(yīng)碼進(jìn)行哈希,以此作為被測(cè)協(xié)議實(shí)現(xiàn)的狀態(tài)。如圖4(b)所示,同樣以options→setup→play→errtype的順序向RTSP協(xié)議實(shí)現(xiàn)live555發(fā)送報(bào)文后,該方法可以區(qū)分live555服務(wù)器在接受每個(gè)報(bào)文后的狀態(tài)。這表明這種狀態(tài)刻畫方法比AFLNET刻畫的狀態(tài)更為精準(zhǔn),有利于在模糊測(cè)試中指導(dǎo)測(cè)試狀態(tài)和本次變異種子的選擇。

        上述細(xì)粒度狀態(tài)刻畫方法可以使用算法3描述。在發(fā)送當(dāng)前測(cè)試用例并獲得AFLNET給出的響應(yīng)碼序列(狀態(tài)序列)后,首先創(chuàng)建與原始狀態(tài)序列等長(zhǎng)的空的細(xì)粒度狀態(tài)序列(第2行)。然后,遍歷當(dāng)前測(cè)試用例中的每個(gè)報(bào)文(第4行),如果協(xié)議實(shí)現(xiàn)處理當(dāng)前報(bào)文后返回表示正確的響應(yīng)碼,則將當(dāng)前報(bào)文的請(qǐng)求類型和響應(yīng)碼拼接,然后將其哈希值作為細(xì)粒度狀態(tài)添加到細(xì)粒度狀態(tài)序列中(第6~8行);否則,直接將響應(yīng)碼的哈希值作為細(xì)粒度狀態(tài)添加到細(xì)粒度狀態(tài)序列中(第9、10行)。遍歷完當(dāng)前測(cè)試用例中的所有報(bào)文,則細(xì)粒度狀態(tài)序列構(gòu)建完成。

        算法3 基于請(qǐng)求消息類型的狀態(tài)刻畫算法

        輸入:當(dāng)前測(cè)試用例的報(bào)文序列kl_message;原始的狀態(tài)序列S_sequence;當(dāng)前協(xié)議表示成功接受報(bào)文的響應(yīng)碼的集合S_code;當(dāng)前協(xié)議的關(guān)鍵字段編號(hào)key。

        輸出:細(xì)分后的狀態(tài)序列FS_sequence。

        1 創(chuàng)建細(xì)分后的狀態(tài)序列(此時(shí)所有值為空)

        2 FS_sequence=createSequence(len(S_sequence))

        3 /*遍歷報(bào)文序列和對(duì)應(yīng)的原始狀態(tài)序列(省略兩者不對(duì)齊(即有的報(bào)文沒有收到響應(yīng))時(shí)的處理邏輯)*/

        4 for i in len(S_sequence) do

        5 /*如果當(dāng)前狀態(tài)表示成功接受報(bào)文,則進(jìn)行細(xì)分,否則直接使用響應(yīng)碼(為了統(tǒng)一格式,兩者都需要散列)*/

        6 if S_sequence[i] in S_code then

        7 F_state=str(S_sequence[i])+kl_message[i]->fields[key]

        8 FS_sequence[i]=hash32(F_state)

        9 else

        10 FS_sequence[i] = hash32(str(S_sequence[i]))

        11 end if

        12end for

        13return FS_sequence

        2.4 整體流程

        本文對(duì)典型的基于變異的協(xié)議模糊框架AFLNET的測(cè)試流程進(jìn)行修改,得到基于字段感知的文本協(xié)議灰盒模糊測(cè)試方法,其測(cè)試流程如圖5所示。

        可以看到,F(xiàn)PFuzzer的整個(gè)測(cè)試流程可以分為測(cè)試準(zhǔn)備階段和模糊測(cè)試階段。其中,測(cè)試準(zhǔn)備階段逐一讀入初始種子并進(jìn)行相應(yīng)的處理以構(gòu)建種子隊(duì)列。在讀入所有種子后,初始化字段字典并設(shè)置字段基礎(chǔ)變異能量。而模糊測(cè)試階段則是一個(gè)無限循環(huán)。每次選擇一個(gè)狀態(tài)和其對(duì)應(yīng)的一個(gè)種子進(jìn)行變異,產(chǎn)生大量測(cè)試用例。在測(cè)試過程中,不斷保存新種子、更新字段字典和狀態(tài)機(jī),以供后續(xù)測(cè)試使用。

        具體地,實(shí)際進(jìn)行模糊測(cè)試時(shí),F(xiàn)PFuzzer首先進(jìn)入測(cè)試準(zhǔn)備階段。在該階段中,F(xiàn)PFuzzer首先依次讀入初始種子語料庫中的每個(gè)種子,每讀入一個(gè)種子,就將其對(duì)應(yīng)的報(bào)文序列發(fā)送給被測(cè)協(xié)議實(shí)現(xiàn),獲取被測(cè)協(xié)議實(shí)現(xiàn)的回復(fù)報(bào)文序列。之后,一方面將當(dāng)前種子轉(zhuǎn)換為結(jié)構(gòu)體,然后解析其中每個(gè)報(bào)文的字段,將字段信息保存在結(jié)構(gòu)體中,將更新后的結(jié)構(gòu)體加入種子隊(duì)列中;另一方面,解析得到的回復(fù)報(bào)文序列,提取每個(gè)回復(fù)報(bào)文的響應(yīng)碼,組成響應(yīng)碼序列,然后使用當(dāng)前種子每個(gè)報(bào)文的字段劃分結(jié)果對(duì)響應(yīng)碼序列進(jìn)行增強(qiáng),得到細(xì)粒度的狀態(tài)轉(zhuǎn)換并以此更新狀態(tài)機(jī)。在讀入所有初始種子后,F(xiàn)PFuzzer根據(jù)初始種子中單個(gè)報(bào)文包含的最少字段數(shù)確定必要字段數(shù)。然后,F(xiàn)PFuzzer使用種子隊(duì)列中所有種子已經(jīng)劃分好的字段信息,構(gòu)建每個(gè)字段對(duì)應(yīng)的字段字典。最后,根據(jù)字段字典,計(jì)算每個(gè)字段的初始基礎(chǔ)變異能量。

        完成上述準(zhǔn)備工作后,F(xiàn)PFuzzer正式進(jìn)入模糊測(cè)試階段。在該階段中,F(xiàn)PFuzzer每次根據(jù)協(xié)議狀態(tài)機(jī)選擇一個(gè)測(cè)試狀態(tài),然后在該狀態(tài)對(duì)應(yīng)的種子中選擇一個(gè)進(jìn)行變異。之后,F(xiàn)PFuzzer根據(jù)當(dāng)前待變異的報(bào)文每個(gè)字段的取值及該種子本身的變異能量,為每個(gè)字段計(jì)算一個(gè)實(shí)際變異能量。然后,依次使用各種變異策略,生成大量測(cè)試用例。每當(dāng)生成一個(gè)測(cè)試用例,就將其發(fā)送給被測(cè)協(xié)議實(shí)現(xiàn),獲取覆蓋率反饋和狀態(tài)轉(zhuǎn)換序列。如果該測(cè)試用例覆蓋了新分支,則將其保存為新種子,然后根據(jù)本次變異的字段更新字段基礎(chǔ)變異能量并使用本次變異的報(bào)文嘗試更新字段字典,如果出現(xiàn)新的狀態(tài)轉(zhuǎn)換,則更新狀態(tài)機(jī)。當(dāng)完成對(duì)當(dāng)前種子所有測(cè)試用例的測(cè)試后,重新選擇下一個(gè)測(cè)試狀態(tài)。整個(gè)模糊測(cè)試過程始終保持上述循環(huán),直到耗盡測(cè)試人員給定的所有測(cè)試時(shí)間。

        3 實(shí)驗(yàn)評(píng)估

        為了評(píng)估本文方法的有效性,通過在AFLNET中添加5 500多行C代碼實(shí)現(xiàn)了模糊器原型FPFuzzer。該模糊器原型除第2章提到的策略外,其余部分與AFLNET完全相同。因此,之后的實(shí)驗(yàn)以AFLNET為基準(zhǔn),避免其他策略對(duì)結(jié)果的干擾。

        根據(jù)FPFuzzer的設(shè)計(jì)思想,需要驗(yàn)證以下兩個(gè)問題:

        問題1:FPFuzzer是否可以提高測(cè)試用例的接受率?

        問題2:FPFuzzer是否可以提高模糊測(cè)試效率?

        1)測(cè)試數(shù)據(jù)集

        為了盡可能地保證對(duì)比的公平性,本文選用與AFLNET的論文中相同的協(xié)議和具體實(shí)現(xiàn)作為被測(cè)對(duì)象,包括RTSP協(xié)議和FTP(file transfer protocol)協(xié)議兩個(gè)文本協(xié)議。選擇的RTSP協(xié)議實(shí)現(xiàn)為live555,具體測(cè)試目標(biāo)為其中的live555MediaServer。而選擇的FTP協(xié)議實(shí)現(xiàn)為L(zhǎng)ightFTP,具體測(cè)試目標(biāo)為其中的fftp。

        2)實(shí)驗(yàn)環(huán)境和實(shí)驗(yàn)參數(shù)

        本文在配備24個(gè)Intel Xeon E5-2620 v3內(nèi)核和256 GB內(nèi)存且系統(tǒng)為Ubuntu 18.04的服務(wù)器上進(jìn)行全部的實(shí)驗(yàn)。在測(cè)試時(shí),每個(gè)模糊器都僅在一個(gè)內(nèi)核上運(yùn)行,但不限制內(nèi)存占用量。

        為了提高評(píng)估結(jié)果的可信度,在以下所有實(shí)驗(yàn)中,啟動(dòng)模糊測(cè)試的參數(shù)設(shè)置(包括單個(gè)測(cè)試用例的超時(shí)時(shí)長(zhǎng)、清理腳本、狀態(tài)選擇算法、種子選擇算法、是否使用假陰性減少模式等)全部與AFLNET項(xiàng)目文檔中給出的建議相同。

        3.1 測(cè)試用例接受率

        本文的出發(fā)點(diǎn)在于:基于變異的協(xié)議模糊測(cè)試產(chǎn)生的測(cè)試用例中能被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例過低,嚴(yán)重影響測(cè)試效率。因此,為了評(píng)估本文方法的有效性,需要首先評(píng)估FPFuzzer是否可以提高生成的測(cè)試用例能被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例。

        具體地,在每個(gè)被測(cè)協(xié)議實(shí)現(xiàn)上進(jìn)行了3次實(shí)驗(yàn),每次實(shí)驗(yàn)測(cè)試1 h。在實(shí)驗(yàn)中,每隔1 min采樣一次,統(tǒng)計(jì)截止到當(dāng)前時(shí)刻為止產(chǎn)生的所有測(cè)試用例中被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例。最終得到的在模糊測(cè)試過程中測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例隨時(shí)間的變化趨勢(shì),如圖6所示。

        可以看到,原始的AFLNET產(chǎn)生的測(cè)試用例能被接受的比例很低。即使是在報(bào)文結(jié)構(gòu)非常簡(jiǎn)單的FTP協(xié)議中,截止到測(cè)試1 h為止,產(chǎn)生的測(cè)試用例的平均接受率也不足10%。而使用FPFuzzer,在RTSP協(xié)議上,可以實(shí)現(xiàn)40.37%的測(cè)試用例接受率,是AFLNET的9倍以上。在FTP協(xié)議中使用FPFuzzer,則可以實(shí)現(xiàn)31.40%的測(cè)試用例接受率,是AFLNET的3倍以上。這表明,F(xiàn)PFuzzer確實(shí)可以顯著提高測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例。

        3.2 模糊測(cè)試效率

        如前所述,基于變異的協(xié)議模糊測(cè)試生成的測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例過低,能夠?qū)Ρ粶y(cè)協(xié)議實(shí)現(xiàn)的實(shí)際處理邏輯進(jìn)行測(cè)試的測(cè)試用例占比太低,最終嚴(yán)重影響整體測(cè)試效率。因此,從理論上看,應(yīng)該可以通過提高測(cè)試用例被接受的比例的方式,實(shí)現(xiàn)大幅提高測(cè)試效率的最終目標(biāo)。然而,雖然實(shí)驗(yàn)已經(jīng)證明FPFuzzer可以大幅提高測(cè)試用例被接受的比例,但實(shí)際是否可以實(shí)現(xiàn)大幅提高測(cè)試效率的預(yù)期目標(biāo)仍有待實(shí)驗(yàn)證明。

        因此,本文通過實(shí)驗(yàn)比較了AFLNET和FPFuzzer覆蓋分支的效率。具體地,在每個(gè)被測(cè)協(xié)議實(shí)現(xiàn)上進(jìn)行3次實(shí)驗(yàn),每次實(shí)驗(yàn)測(cè)試10 h,然后比較了AFLNET和FPFuzzer測(cè)試1 h、2 h、5 h和10 h時(shí)平均覆蓋的分支數(shù),并計(jì)算了FPFuzzer當(dāng)前覆蓋的分支數(shù)占AFLNET測(cè)試10 h所達(dá)到的最終覆蓋分支數(shù)的比例。結(jié)果如表1所示。

        可以看到,對(duì)于RTSP協(xié)議而言,F(xiàn)PFuzzer只需要測(cè)試1 h就可以達(dá)到AFLNET測(cè)試10 h的分支覆蓋水平,實(shí)現(xiàn)了10倍加速。對(duì)于FTP協(xié)議而言,F(xiàn)PFuzzer也只需要測(cè)試2 h就可以達(dá)到AFLNET測(cè)試10 h的分支覆蓋水平,實(shí)現(xiàn)5倍加速。FPFuzzer在這兩個(gè)被測(cè)協(xié)議上表現(xiàn)出的加速倍率與測(cè)試用例接受率的提高比例高度相關(guān),完全符合預(yù)期。這表明本文方法確實(shí)和第1章中分析的一致,可以通過提高生成的測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例來大幅提高整體測(cè)試效率。

        此外,由于FPFuzzer大幅提高了測(cè)試效率,同樣測(cè)試10 h所能覆蓋的分支數(shù)也會(huì)受益。因此,本文還額外比較了AFLNET和FPFuzzer測(cè)試10 h最終能夠覆蓋的分支數(shù),并計(jì)算了其顯著性。本文使用未配對(duì)的t-test來計(jì)算顯著性,并假設(shè)每個(gè)模糊器在每個(gè)被測(cè)協(xié)議上的測(cè)試結(jié)果都符合高斯分布,每次測(cè)試的結(jié)果是從具有相同標(biāo)準(zhǔn)差的總體中進(jìn)行抽樣的。顯著性水平以“*”表示,其中“ns”表示P值≥0.05,“*”表示P值<0.05,“**”表示P值<0.01,“***”表示P值<0.001。測(cè)試結(jié)果如表2所示。

        可以看到,在RTSP和FTP協(xié)議上,F(xiàn)PFuzzer分別比AFLNET多覆蓋2.79%和4.30%的分支。雖然提升比例不高,但均具有顯著性,表明該提升非常穩(wěn)定并非偶然。這表明FPFuzzer在大幅提高測(cè)試效率后,確實(shí)可以提高模糊測(cè)試的最終效果。

        3.3 案例研究

        為了明確本文方法在實(shí)際測(cè)試中的作用,本文以對(duì)FTP協(xié)議的“USER”報(bào)文的測(cè)試為例予以說明。

        根據(jù)FTP協(xié)議的規(guī)定,與服務(wù)器連接后,客戶端首先需要發(fā)送“USER”報(bào)文來進(jìn)行登錄。其中,可以使用真實(shí)的用戶名進(jìn)行登錄,例如用戶名為“User1”,則登錄報(bào)文為“USER User1\r\n”。也可以使用匿名方式登錄,登錄報(bào)文統(tǒng)一為“USER anonymous\r\n”。無論使用何種登錄方式,發(fā)送的登錄報(bào)文均包含4個(gè)字段,其中第一個(gè)字段是請(qǐng)求類型,此時(shí)的值為“USER”;第二個(gè)字段為分隔符,此時(shí)的值為“ ”;第三個(gè)字段是用戶名,可以取各種值,最后一個(gè)字段為報(bào)文結(jié)束標(biāo)識(shí),此時(shí)的值為“\r\n”。

        對(duì)該類報(bào)文的一個(gè)實(shí)例“USER ubuntu\r\n”分別使用AFLNET的方法和本文方法進(jìn)行變異,產(chǎn)生的測(cè)試用例的典型實(shí)例如圖7所示。

        可以看到,AFLNET對(duì)整個(gè)報(bào)文不加區(qū)分地進(jìn)行變異,產(chǎn)生的測(cè)試用例基本完全失去了報(bào)文原有的結(jié)構(gòu),甚至連報(bào)文結(jié)束標(biāo)志“\r\n”都可能被變異掉。因此,正如第1章中分析的那樣,傳統(tǒng)的基于變異的協(xié)議模糊測(cè)試產(chǎn)生的測(cè)試用例中能夠被被測(cè)協(xié)議實(shí)現(xiàn)接受并進(jìn)行實(shí)際處理的報(bào)文的比例是很低的。與此同時(shí),F(xiàn)PFuzzer產(chǎn)生的典型測(cè)試用例有較大概率保留報(bào)文的基本格式,更有可能產(chǎn)生能夠被被測(cè)協(xié)議實(shí)現(xiàn)接受的報(bào)文。

        從上述實(shí)例中可以看到,本文方法確實(shí)可以提高生成的測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的概率。因此,使用本文方法進(jìn)行測(cè)試有更多機(jī)會(huì)探索被測(cè)協(xié)議實(shí)現(xiàn)的實(shí)際報(bào)文處理邏輯,從而大幅提高測(cè)試效率。

        4 相關(guān)工作

        4.1 基于變異的協(xié)議模糊測(cè)試

        基于變異的協(xié)議模糊測(cè)試不需要人工提供的協(xié)議模板與狀態(tài)機(jī),而是將真實(shí)流量作為初始種子,通過對(duì)種子的變異來探索被測(cè)協(xié)議實(shí)現(xiàn)并動(dòng)態(tài)構(gòu)建被測(cè)協(xié)議實(shí)現(xiàn)的狀態(tài)機(jī)。

        AFLNET[11]是首個(gè)基于變異的協(xié)議模糊測(cè)試框架(AFLNWE是無狀態(tài)的,不是真正意義上的協(xié)議模糊器),給出了基于變異的協(xié)議模糊器的基本工作流程和整體思想。它使用真實(shí)流量作為初始種子,使用被測(cè)協(xié)議實(shí)現(xiàn)返回的消息的響應(yīng)碼作為被測(cè)協(xié)議實(shí)現(xiàn)的當(dāng)前狀態(tài),可以自動(dòng)構(gòu)建狀態(tài)機(jī),提高了協(xié)議模糊測(cè)試的便捷程度。

        協(xié)議模糊測(cè)試中發(fā)送測(cè)試用例需要通過網(wǎng)絡(luò)(一般通過TCP套接字),這一過程是比較耗時(shí)的。為了加快發(fā)送測(cè)試用例的過程,增加協(xié)議模糊測(cè)試的吞吐量,SnapFuzz[16]提出了將TCP套接字替換為UNIX套接字的方法。

        協(xié)議模糊測(cè)試每次發(fā)送變異產(chǎn)生的測(cè)試報(bào)文前,需要先發(fā)送一系列的前綴報(bào)文,使服務(wù)器到達(dá)被測(cè)狀態(tài),而這個(gè)過程是很耗時(shí)的。為了解決這一問題,提出了使用虛擬機(jī)來保存已經(jīng)到達(dá)目標(biāo)狀態(tài)的服務(wù)器的工作SNPSFuzzer(fuzzer for stateful network protocols using snapshots)[12]和Nyx-Net[11]。

        由于很多協(xié)議的響應(yīng)碼種類很有限,AFLNET提出的基于服務(wù)器響應(yīng)碼的狀態(tài)機(jī)是比較粗略的。為了提高狀態(tài)機(jī)的精度,StateAFL[14]和NSFuzz[15]提出了使用被測(cè)協(xié)議實(shí)現(xiàn)的部分長(zhǎng)期變量的值來刻畫狀態(tài)的方法。它們各自提出了一系列狀態(tài)變量應(yīng)該滿足的條件,以此查找協(xié)議實(shí)現(xiàn)中可能用于表示狀態(tài)的長(zhǎng)期變量,然后通過將這些變量值進(jìn)行散列來表示狀態(tài),使得狀態(tài)機(jī)更加細(xì)粒度。

        上述工作都是對(duì)基于變異的協(xié)議模糊測(cè)試的有益改進(jìn)。然而,它們都將待變異的報(bào)文視為字節(jié)流,沒有考慮協(xié)議對(duì)報(bào)文格式的要求,導(dǎo)致測(cè)試用例的有效率低。本文著力于此提出了字段感知方法,通過基于分隔符的字段劃分方法和字段字典值學(xué)習(xí)方法,顯著提高了測(cè)試用例的被接受率。

        4.2 輸入有格式的基于變異的模糊測(cè)試

        在軟件模糊測(cè)試中,也存在輸入是有格式的文件(例如jpg、elf、MP3等)的情況,使用傳統(tǒng)的基于變異的模糊測(cè)試方法同樣存在測(cè)試用例大概率通不過被測(cè)軟件的檢測(cè),無法進(jìn)入實(shí)際處理的問題。為此,有研究提出了針對(duì)輸入是有格式的文件的軟件進(jìn)行模糊測(cè)試的基于變異的模糊方法。

        針對(duì)這一問題,AFLsmart[20]首先給出了一種解決方案,使用Peach Pit描述被測(cè)程序所需輸入的格式、取值范圍等,在模糊測(cè)試時(shí),使用這些信息解析要變異的種子,然后根據(jù)結(jié)構(gòu)信息對(duì)種子進(jìn)行針對(duì)性變異,大概率保持生成的測(cè)試用例的結(jié)構(gòu)完整性和語義完整性。

        這種方式需要提供格式模板,使基于變異的模糊測(cè)試的一大優(yōu)點(diǎn)——易用性,受到巨大的挑戰(zhàn)。而且,與有格式文件相比,協(xié)議格式是更加復(fù)雜的,人工書寫協(xié)議的格式文件實(shí)際上很難保證完全正確。本文著力于解決在沒有人工提供報(bào)文模板的前提下,猜測(cè)被測(cè)協(xié)議可能的格式要求。

        而ProFuzzer[21]提出了一種基于字節(jié)猜測(cè)的解決方案。在開始測(cè)試前,它先對(duì)種子的每一個(gè)字節(jié)的256種可能的取值分別進(jìn)行測(cè)試,得到每個(gè)字節(jié)取值對(duì)整體分支覆蓋數(shù)影響的分布,并合并相鄰且分布相似的字節(jié)組成字段。之后,再根據(jù)分布的具體模式,將每個(gè)字段分為6大類(斷言、原始數(shù)據(jù)、枚舉、循環(huán)計(jì)數(shù)、偏移量、大?。?,并記錄每個(gè)字段允許的取值范圍。在測(cè)試時(shí),根據(jù)字段的種類分配不同的變異能量,且對(duì)于關(guān)鍵類型的字段,在變異時(shí)大概率使其符合其取值范圍。

        這種方式適用的前提是每個(gè)字段的長(zhǎng)度相對(duì)固定,否則,將無法得到較為通用的協(xié)議模板。而如果對(duì)于每個(gè)種子都要重新猜測(cè)字段,則其消耗是不可接受的。因此,這種方法可能適用于二進(jìn)制協(xié)議,但對(duì)字段長(zhǎng)度、字段數(shù)量都不固定的文本協(xié)議來說,是不適用的。本文著力于根據(jù)文本協(xié)議的特點(diǎn),提出專門針對(duì)文本協(xié)議的字段感知方法。

        5 結(jié)束語

        基于變異的協(xié)議模糊測(cè)試,沒有考慮被測(cè)協(xié)議對(duì)報(bào)文格式的要求,導(dǎo)致產(chǎn)生的測(cè)試用例被接受率過低,影響測(cè)試效率。為了解決這一問題,本文提出了基于字段感知的文本協(xié)議灰盒模糊測(cè)試方法,通過字段感知方法學(xué)習(xí)報(bào)文模板,提高生成的測(cè)試用例的被接受率。在此基礎(chǔ)上,本文還提出了字段級(jí)變異策略、字段變異能量度量方法和基于請(qǐng)求消息類型的狀態(tài)刻畫方法,進(jìn)一步提高測(cè)試效率。實(shí)驗(yàn)表明,基于本文方法所實(shí)現(xiàn)的模糊器原型FPFuzzer確實(shí)可以有效提高生成的測(cè)試用例被被測(cè)協(xié)議實(shí)現(xiàn)接受的比例,并大幅提高整體測(cè)試效率。

        參考文獻(xiàn):

        [1]Zhu Xiaogang, Wen Sheng, Seyit C,et al. Fuzzing: a survey for roadmap[J]. ACM Computing Surveys, 2022, 54(11s): 1-36.

        [2]Liang Hongliang, Pei Xiaoxiao, Jia Xiaodong,et al. Fuzzing: state of the art[J]. IEEE Trans on Reliability, 2018, 67(3): 1199-1218.

        [3]喻波, 蘇金樹, 楊強(qiáng), 等. 網(wǎng)絡(luò)協(xié)議軟件漏洞挖掘技術(shù)綜述[J]. 軟件學(xué)報(bào), 2023, 35(2): 1-27. (Yu Bo, Su Jinsu, Yang Qiang,et al. Survey on vulnerability mining techniques of network protocol software[J]. Journal of Software, 2023, 35(2): 1-27.)

        [4]李東, 郝艷妮, 彭升輝, 等. 國家自然科學(xué)基金委員會(huì)網(wǎng)絡(luò)安全現(xiàn)狀與展望[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2022, 8(6): 90-101. (Li Dong, Hao Yanni, Peng Shenghui,et al. Network security of the national natural science foundation of China: today and prospects[J]. Chinese Journal of Network and Information Security, 2022, 8(6): 92-101.)

        [5]李艷, 王純子, 黃光球, 等. 網(wǎng)絡(luò)安全態(tài)勢(shì)感知分析框架與實(shí)現(xiàn)方法比較[J]. 電子學(xué)報(bào), 2019, 47(4): 927-945. (Li Yan, Wang Chunzi, Huang Guangqiu,et al. A survey of architecture and implementation method on cyber security situation awareness analysis[J]. Acta Electonica Sinica, 2019, 47(4): 927-945.)

        [6]Mamdouh A, Sadiq A. Security risks in the software development lifecycle[J]. International Journal of Recent Technology and Engineering, 2019, 8(3): 7048-7055.

        [7]Shipra P, Rajesh K S, Angappa G,et al. Cyber security risks in globalized supply chains: conceptual framework[J]. Journal of Global Operations and Strategic Sourcing, 2020, 13(1): 103-128.

        [8]Eddington M. peach-fuzzer-community[EB/OL]. (2021-03-30)[2024-04-02]. https://gitlab.com/peachtech/peach-fuzzer-community.

        [9]Joshua P, Maximilian L, Ryan,et al. BooFuzz: network protocol fuz-zing for humans[EB/OL]. (2023-10-09) [2024-04-02]. https://github.com/ jtpereyda/boofuzz.

        [10]Luo Zhengxiong, Yu Junze, Zuo Feilong,et al. BLEEM: packet sequence oriented fuzzing for protocol implementations[C]//Proc of USENIX Security Symposium. Berkeley, CA: USENIX Association Press, 2023: 4481-4498.

        [11]Van Thuan P, Marcel B, Abhik R. AFLNET: a greybox fuzzer for network protocols[C]//Proc of the 13th International Conference on Software Testing, Validation and Verification. Piscataway, NJ: IEEE Press, 2020: 460-465.

        [12]Li Junqiang, Li Senyi, Sun Gang,et al. SNPSFuzzer: a dast greybox fuzzer for stateful network protocols using snapshots[J]. IEEE Trans on Information Forensics and Security, 2022, 17: 2673-2687.

        [13]Sergej S, Cornelius A, Andrea J,et al. NYX-Net: network fuzzing with incremental snapshots[C]//Proc of the 7th European Conference on Computer Systems. New York: ACM Press, 2022: 166-180.

        [14]Roberto N. StateAFL: greybox fuzzing for stateful network servers[J]. Empirical Software Engineering, 2022, 27(7): 191.

        [15]Qin Shisong, Hu Fan, Ma Zheyu,et al. NSFuzz: towards efficient and state-aware network service fuzzing[J]. ACM Trans on Software Engineering and Methodology, 2023, 32(6): 1-26.

        [16]Anastasios A, Cristian C. SnapFuzz: high-throughput fuzzing of network applications[C]//Proc of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis. New York: ACM Press, 2022: 340-351.

        [17]張冠宇, 尚文利, 張博文, 等. 一種結(jié)合遺傳算法的工控協(xié)議模糊測(cè)試方法[J]. 計(jì)算機(jī)應(yīng)用研究, 2021, 38(3): 680-684. (Zhang Guanyu, Shang Wenli, Zhang Bowen,et al. Fuzzy test me-thod for industrial control protocol combining genetic algorithm[J]. Application Research of Computers, 2021, 38(3): 680-684.)

        [18]徐威, 李鵬, 張文鑌, 等. 網(wǎng)絡(luò)協(xié)議模糊測(cè)試綜述[J]. 計(jì)算機(jī)應(yīng)用研究, 2023, 40(8): 2241-2249. (Xu Wei, Li Peng, Zhang Wenbin,et al. Survey of network protocol fuzzing[J]. Application Research of Computers, 2023, 40(8): 2241-2249.)

        [19]Wu Mingyuan, Jiang Ling, Xiang Jiahong,et al. One fuzzing strategy to rule them all[C]//Proc of the 44th International Conference on Software Engineering. New York: ACM Press, 2022: 1634-1645.

        [20]Van Thuan P, Marcel B, Andrew E S,et al. Smart greybox fuzzing[J]. IEEE Trans on Software Engineering, 2019, 47(9): 1980-1997.

        [21]You Wei, Wang Xueqiang, Ma Shiqing,et al. ProFuzzer: on-the-fly input type probing for better zero-day vulnerability discovery[C]//Proc of IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE Press, 2019: 769-786.

        精品香蕉久久久午夜福利| 谷原希美中文字幕在线| 大地资源网在线观看免费官网 | 久久精品免费视频亚洲| 免费乱理伦片在线观看| 三级4级全黄60分钟| 视频一区精品自拍| 中文字幕一区二区人妻在线不卡| 中文字幕精品一区二区三区| 中文字幕日本人妻久久久免费| 午夜福利视频合集1000| 自慰高潮网站在线观看 | 深夜福利国产| 国产视频激情视频在线观看| 日本熟日本熟妇中文在线观看| 成 人 网 站 免 费 av| 中文字幕一区二区三区日韩网 | 乱码窝窝久久国产无人精品| 久久亚洲国产成人精品性色| 国产精品白浆一区二区免费看| 亚洲国产精品成人一区二区三区 | 亚洲无码专区无码| 亚洲精品熟女乱色一区| 丝袜美腿亚洲第一免费 | 初尝黑人嗷嗷叫中文字幕| av在线免费观看你懂的| 亚洲国产av一区二区四季 | 亚洲无码图| av在线高清观看亚洲| 色天使综合婷婷国产日韩av| 国产精品无需播放器| 成人免费毛片在线播放| 老熟妇乱子伦牲交视频| 激情内射亚州一区二区三区爱妻| 国产亚洲欧美在线播放网站| 成av人大片免费看的网站| 亚洲字幕av一区二区三区四区| 精品国产一区二区三区19| 精品亚洲乱码一区二区三区| 狠狠色噜噜狠狠狠狠97首创麻豆| 亚洲国产成人久久一区|