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

基于字段感知的文本協議灰盒模糊測試方法

2024-10-14 00:00:00孫語韜徐向華
計算機應用研究 2024年10期

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

關鍵詞:網絡安全; 協議測試; 模糊測試; 字段感知; 字段變異能量度量; 細粒度狀態刻畫

中圖分類號:TP311 文獻標志碼:A

文章編號: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 引言

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

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

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

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

本文的主要貢獻如下:

a)提出了基于字段感知的文本協議模糊測試方法。使用字段感知方法,學習協議模板,提高測試用例接受率。在此基礎上,使用字段級變異策略、字段能量度量方法和基于請求消息類型的狀態刻畫方法,提高測試效率。

b)實現了一個基于字段感知的文本協議模糊測試方法的原型模糊器FPFuzzer(field perception fuzzer),并評估其效果。實驗表明,FPFuzzer產生的測試用例的接受率可以達到AFLNET的3~9倍,實現5~10倍的測試加速,提升3%的分支覆蓋。

1 研究動機

與一般的軟件不同,網絡協議實現通常對收到的報文具有較高的格式要求,對于不能滿足基本格式要求的報文,通常不會進行實際的處理,而是返回錯誤信息。例如,RTSP(real time streaming protocol)協議的一個著名開源實現live555,其處理客戶端發送來的請求報文的邏輯如圖1所示。

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

大部分協議的實現都會在收到客戶端發來的請求報文后進行類似的檢查。不符合協議要求的報文通常是無法進入協議實現中各類請求報文的處理邏輯的,它們在報文解析階段或請求類型判別階段就會被拒絕。由此可知,協議模糊器產生的不符合協議基本要求的報文主要用于測試協議實現通過報文解析的邊界條件,挖掘其中可能存在的解析錯誤問題。而對協議實現的請求處理邏輯進行測試,則需要能夠通過協議實現基本檢查的大體上正確的報文。

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

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

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

換言之,AFLNET產生的測試用例只有不到5%的比例可以進入live555實際的報文處理邏輯中,這樣的比例明顯過低,顯然會降低基于變異的協議模糊測試的效率。在某種意義上來說,適當提高基于變異的協議模糊測試產生的測試用例符合協議基本要求的比例,在功效上相當于加快了協議模糊測試處理測試用例的速度。

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

2 解決方案

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

為此,本文在基于變異的模糊測試中引入模板學習的概念,提出一種基于變異加生成的全新協議模糊測試方法。在保留基于變異的協議模糊測試易于使用的優點的同時,自動學習協議報文模板,并使用模板指導測試用例的生成和狀態機的構建,提高測試用例被被測協議實現接受的比例,從而提高測試效率。該方法的核心在于對報文進行有針對性的變異,其與傳統基于變異的協議模糊測試方法的核心區別如圖3所示。

從整體上看,本文通過模板學習獲取報文的字段信息和每個字段的合法取值,以此減小生成測試用例時的變異粒度;通過字段變異能量度量每個字段是否適合進行字段級的變異,將更多測試時間用于更適合變異的字段。此外,本文還通過基于請求消息類型的狀態刻畫方法,利用已經學習到的模板信息對被測協議狀態進行更細粒度的刻畫,提高狀態機的準確性。

2.1 報文模板學習方法

如前所述,為了提高生成的測試用例符合被測協議基本要求的概率,本文在傳統的基于變異的協議模糊測試中引入了模板學習的概念。協議通常會對報文包含的字段數量及關鍵字段的取值進行檢查,一旦發現當前報文不符合協議的要求,就會將其拒絕。為了提高測試用例被被測協議實現接受的概率,就必須同時考慮這兩個方面。因此,模板學習方法同樣需要包含報文字段劃分和字段合法取值學習兩個方面。

2.1.1 字段劃分

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

文本協議與二進制協議不同,單個報文包含的字段數量和每個字段的長度通常都是不固定的,各個字段之間直接使用分隔符進行區分。因此,本文直接利用文本協議的這一特點,在將種子加入隊列前,根據分隔符,將其中的每個報文劃分為字段列表。其中,分隔符單獨作為一個字段。這種方式可以獲取被測協議報文的大致報文結構,雖然可能出現將部分字段內部的符號誤認為分隔符,導致該字段被截斷的問題,但實際對生成有效測試用例的影響較小。

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

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

輸入:AFLNET為當前種子構建的結構體q;當前被測協議使用的分隔符的集合D。

輸出:添加了字段信息的當前種子的結構體q。

1 //依次讀入當前種子的每個報文

2 for r in q->regions do

3 //將實際報文讀入為字符串,并記錄報文長度

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

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

6 //初始化報文劃分的位置

7 last_byte=-1

8 now_byte=0

9 //依次讀取當前報文的每個字節

10 while last_byte <r_length do

11 //找到屬于分隔符的字節

12 if r_text[now_byte] in D then

13 /*判斷當前需要添加的是一個字段還是兩個字段,并將字段添加到當前種子對應報文的結構體中*/

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//返回更新了字段信息的結構體

28return q

2.1.2 字段字典學習

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

基于這一思想,本文將初始種子中單一報文包含的最少字段數定義為必要字段數,將所有報文的前必要字段數個字段定義為必要字段,而將其余字段定義為非必要字段。前述的固定字段大概率被分為了必要字段。因此,本文為每個必要字段單獨構建一個字段字典,而對于所有非必要字段,則使用一個統一的字段字典。

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

算法2 字段字典構建算法

輸入:初始種子隊列queue;必要字段數min_fields。

輸出:每個字段對應的字段字典組成的列表d_list。

1 //創建空的字段字典列表

2 d_list=createDicts(min_fields+1)

3 //遍歷種子隊列中的每個種子

4 for q in queue do

5 //遍歷當前種子包含的每個報文

6 for r in q->regions do

7 //遍歷當前報文的所有字段

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

9 /*添加到對應的字段字典中,如果已經存在當前取值,則計數加1,否則,設置計數為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

在模糊測試階段會對字段字典進行動態更新。當發現新的種子時,使用產生當前種子所變異報文的每個字段值更新字段字典。更新過程如算法2的第7~16行。

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

如前所述,本文方法的核心在于學習報文模板,并根據學習到的報文模板進行細粒度的變異,以提高產生有效測試用例的概率。因此,本文在保留基于變異的協議模糊測試原始的變異策略外,還引入了字段級的變異策略。

同時,不同的字段進行隨機變異的價值不同。例如,對于取值受限的關鍵字段進行隨機變異,產生的絕大部分測試用例都將完全不符合被測協議的基本要求,價值較低。因此,在對報文進行變異時,需要計算其中每個字段的變異能量,確定對每個字段進行隨機變異的次數,將更多測試時間用于變異潛在價值更大的字段。

2.2.1 變異策略

本文引入的字段級變異策略可以分為確定性字段變異和非確定性字段變異兩大類。其中,確定性變異策略作用的結果是可以預測的,對任意一個種子使用此類策略能夠產生的測試用例的數量都是確定的。因此,每個種子僅在第一次變異時使用確定性變異策略。而非確定性變異策略產生的測試用例難以預測,每次應用都能產生不同的測試用例,因此每次對種子進行變異時都會使用。但正因為如此,非確定性變異沒有明確的變異次數限制,對一個種子進行多少非確定性變異需要模糊器指定。此外,由于使用非確定性變異策略的結果難以預料,為了減少對報文格式的破壞,本文僅對非分隔符字段使用非確定性變異。

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

1)確定性變異策略

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

2)非確定性變異策略

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

2.2.2 變異能量度量

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

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

根據上述思想,本文將字段變異能量分為字段基礎變異能量和字段實際變異能量。其中,字段基礎變異能量是全局的,用于刻畫字段本身的隨機變異價值。而字段實際變異能量是每個報文單獨的,使用所屬種子的變異價值和該報文中每個字段取值的稀有度對字段基礎變異能量進行了修正。

1)字段基礎變異能量

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

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

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

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

其中:D(x)表示當前計算的是第x個字段的多樣性;values(x)表示第x個字段在初始種子中出現過的取值數量;Rtotal構建當前字段字典時使用的報文總數;fmin表示必要字段數;fmax表示構建字段字典的種子中單個報文包含的最大字段數。

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

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

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

其中:Eb(x)為計算得到的第x個字段的基礎變異能量;fmin表示必要字段數;fmax表示用于構建字段字典的種子中單個報文包含的最大字段數;φ(d)為未經修正的映射函數,具體為

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

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

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

通過上述方式可以在測試準備階段得到每個字段的基礎變異能量,但是在模糊測試過程中,還需要根據實際測試情況,對每個字段的基礎變異能量進行更新。具體地,如果對某個字段進行非確定性變異產生了新種子,則可以認為,對該字段進行非確定性變異確實具有潛在價值,應該增大該字段的基礎變異能量。此外,一般認為,發現新種子所用的變異次數越少,則該字段的潛在價值越大;同樣地,歷史上對該字段進行非確定性變異產生的種子越多,則該字段的潛在價值也越大。基于這一思想,在每次發現新種子時,使用式(5)對當前進行非確定性變異的字段進行的基礎變異能量更新:

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

其中:Eb(x)′代表第x個字段更新后的字段基礎變異能量;Eb(x)代表第x個字段更新前的字段基礎變異能量;Seedn(x)代表對當前字段進行非確定性變異產生的種子的數量;M(x)代表本次測試對當前字段進行非確定性變異的次數。

2)字段實際變異能量

如前所述,在模糊測試階段中,每次對當前選擇的報文進行變異前,都需要根據當前變異的報文所屬的種子本身的價值(種子整體的變異能量)和當前報文中每個字段實際取值的稀有程度來修正字段基礎變異能量,得到每個字段的實際變異能量。根據之前的分析,對于整體價值大的種子中的所有字段,都應該分配更多的實際變異能量;對于取值稀有的字段,則應該分配更少的實際變異能量。

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

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

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

其中:R(x)表示第x個字段當前取值的稀有度;valuetimes(x)表示第x個字段的取值在對應的字段字典中的計數(出現次數);Rtotal表示所有構建字段字典時使用的報文總數。

之后,根據當前種子本身的變異能量、每個字段當前的基礎變異能量和每個字段當前取值的稀有度,計算每個字段的實際變異能量。同計算字段基礎變異能量時相同,對于非必要字段,仍需要使用單個報文最多包含多少非必要字段進行修正。特別的,如前所述,本文不會對分隔符字段使用非確定性變異策略,因此規定分隔符字段的實際變異能量為-1。計算方法為

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

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

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

其中:E(x)表示第x個字段的實際變異能量;Es代表當前種子的整體能量;Eb(x)代表第x個字段的基礎變異能量;R(x)表示第x個字段當前取值的稀有度;fmin表示必要字段數;fmax表示構建字段字典的種子中單個報文包含的最大字段數。

2.3 基于請求消息類型的狀態刻畫方法

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

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

上述細粒度狀態刻畫方法可以使用算法3描述。在發送當前測試用例并獲得AFLNET給出的響應碼序列(狀態序列)后,首先創建與原始狀態序列等長的空的細粒度狀態序列(第2行)。然后,遍歷當前測試用例中的每個報文(第4行),如果協議實現處理當前報文后返回表示正確的響應碼,則將當前報文的請求類型和響應碼拼接,然后將其哈希值作為細粒度狀態添加到細粒度狀態序列中(第6~8行);否則,直接將響應碼的哈希值作為細粒度狀態添加到細粒度狀態序列中(第9、10行)。遍歷完當前測試用例中的所有報文,則細粒度狀態序列構建完成。

算法3 基于請求消息類型的狀態刻畫算法

輸入:當前測試用例的報文序列kl_message;原始的狀態序列S_sequence;當前協議表示成功接受報文的響應碼的集合S_code;當前協議的關鍵字段編號key。

輸出:細分后的狀態序列FS_sequence。

1 創建細分后的狀態序列(此時所有值為空)

2 FS_sequence=createSequence(len(S_sequence))

3 /*遍歷報文序列和對應的原始狀態序列(省略兩者不對齊(即有的報文沒有收到響應)時的處理邏輯)*/

4 for i in len(S_sequence) do

5 /*如果當前狀態表示成功接受報文,則進行細分,否則直接使用響應碼(為了統一格式,兩者都需要散列)*/

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 整體流程

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

可以看到,FPFuzzer的整個測試流程可以分為測試準備階段和模糊測試階段。其中,測試準備階段逐一讀入初始種子并進行相應的處理以構建種子隊列。在讀入所有種子后,初始化字段字典并設置字段基礎變異能量。而模糊測試階段則是一個無限循環。每次選擇一個狀態和其對應的一個種子進行變異,產生大量測試用例。在測試過程中,不斷保存新種子、更新字段字典和狀態機,以供后續測試使用。

具體地,實際進行模糊測試時,FPFuzzer首先進入測試準備階段。在該階段中,FPFuzzer首先依次讀入初始種子語料庫中的每個種子,每讀入一個種子,就將其對應的報文序列發送給被測協議實現,獲取被測協議實現的回復報文序列。之后,一方面將當前種子轉換為結構體,然后解析其中每個報文的字段,將字段信息保存在結構體中,將更新后的結構體加入種子隊列中;另一方面,解析得到的回復報文序列,提取每個回復報文的響應碼,組成響應碼序列,然后使用當前種子每個報文的字段劃分結果對響應碼序列進行增強,得到細粒度的狀態轉換并以此更新狀態機。在讀入所有初始種子后,FPFuzzer根據初始種子中單個報文包含的最少字段數確定必要字段數。然后,FPFuzzer使用種子隊列中所有種子已經劃分好的字段信息,構建每個字段對應的字段字典。最后,根據字段字典,計算每個字段的初始基礎變異能量。

完成上述準備工作后,FPFuzzer正式進入模糊測試階段。在該階段中,FPFuzzer每次根據協議狀態機選擇一個測試狀態,然后在該狀態對應的種子中選擇一個進行變異。之后,FPFuzzer根據當前待變異的報文每個字段的取值及該種子本身的變異能量,為每個字段計算一個實際變異能量。然后,依次使用各種變異策略,生成大量測試用例。每當生成一個測試用例,就將其發送給被測協議實現,獲取覆蓋率反饋和狀態轉換序列。如果該測試用例覆蓋了新分支,則將其保存為新種子,然后根據本次變異的字段更新字段基礎變異能量并使用本次變異的報文嘗試更新字段字典,如果出現新的狀態轉換,則更新狀態機。當完成對當前種子所有測試用例的測試后,重新選擇下一個測試狀態。整個模糊測試過程始終保持上述循環,直到耗盡測試人員給定的所有測試時間。

3 實驗評估

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

根據FPFuzzer的設計思想,需要驗證以下兩個問題:

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

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

1)測試數據集

為了盡可能地保證對比的公平性,本文選用與AFLNET的論文中相同的協議和具體實現作為被測對象,包括RTSP協議和FTP(file transfer protocol)協議兩個文本協議。選擇的RTSP協議實現為live555,具體測試目標為其中的live555MediaServer。而選擇的FTP協議實現為LightFTP,具體測試目標為其中的fftp。

2)實驗環境和實驗參數

本文在配備24個Intel Xeon E5-2620 v3內核和256 GB內存且系統為Ubuntu 18.04的服務器上進行全部的實驗。在測試時,每個模糊器都僅在一個內核上運行,但不限制內存占用量。

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

3.1 測試用例接受率

本文的出發點在于:基于變異的協議模糊測試產生的測試用例中能被被測協議實現接受的比例過低,嚴重影響測試效率。因此,為了評估本文方法的有效性,需要首先評估FPFuzzer是否可以提高生成的測試用例能被被測協議實現接受的比例。

具體地,在每個被測協議實現上進行了3次實驗,每次實驗測試1 h。在實驗中,每隔1 min采樣一次,統計截止到當前時刻為止產生的所有測試用例中被被測協議實現接受的比例。最終得到的在模糊測試過程中測試用例被被測協議實現接受的比例隨時間的變化趨勢,如圖6所示。

可以看到,原始的AFLNET產生的測試用例能被接受的比例很低。即使是在報文結構非常簡單的FTP協議中,截止到測試1 h為止,產生的測試用例的平均接受率也不足10%。而使用FPFuzzer,在RTSP協議上,可以實現40.37%的測試用例接受率,是AFLNET的9倍以上。在FTP協議中使用FPFuzzer,則可以實現31.40%的測試用例接受率,是AFLNET的3倍以上。這表明,FPFuzzer確實可以顯著提高測試用例被被測協議實現接受的比例。

3.2 模糊測試效率

如前所述,基于變異的協議模糊測試生成的測試用例被被測協議實現接受的比例過低,能夠對被測協議實現的實際處理邏輯進行測試的測試用例占比太低,最終嚴重影響整體測試效率。因此,從理論上看,應該可以通過提高測試用例被接受的比例的方式,實現大幅提高測試效率的最終目標。然而,雖然實驗已經證明FPFuzzer可以大幅提高測試用例被接受的比例,但實際是否可以實現大幅提高測試效率的預期目標仍有待實驗證明。

因此,本文通過實驗比較了AFLNET和FPFuzzer覆蓋分支的效率。具體地,在每個被測協議實現上進行3次實驗,每次實驗測試10 h,然后比較了AFLNET和FPFuzzer測試1 h、2 h、5 h和10 h時平均覆蓋的分支數,并計算了FPFuzzer當前覆蓋的分支數占AFLNET測試10 h所達到的最終覆蓋分支數的比例。結果如表1所示。

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

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

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

3.3 案例研究

為了明確本文方法在實際測試中的作用,本文以對FTP協議的“USER”報文的測試為例予以說明。

根據FTP協議的規定,與服務器連接后,客戶端首先需要發送“USER”報文來進行登錄。其中,可以使用真實的用戶名進行登錄,例如用戶名為“User1”,則登錄報文為“USER User1\r\n”。也可以使用匿名方式登錄,登錄報文統一為“USER anonymous\r\n”。無論使用何種登錄方式,發送的登錄報文均包含4個字段,其中第一個字段是請求類型,此時的值為“USER”;第二個字段為分隔符,此時的值為“ ”;第三個字段是用戶名,可以取各種值,最后一個字段為報文結束標識,此時的值為“\r\n”。

對該類報文的一個實例“USER ubuntu\r\n”分別使用AFLNET的方法和本文方法進行變異,產生的測試用例的典型實例如圖7所示。

可以看到,AFLNET對整個報文不加區分地進行變異,產生的測試用例基本完全失去了報文原有的結構,甚至連報文結束標志“\r\n”都可能被變異掉。因此,正如第1章中分析的那樣,傳統的基于變異的協議模糊測試產生的測試用例中能夠被被測協議實現接受并進行實際處理的報文的比例是很低的。與此同時,FPFuzzer產生的典型測試用例有較大概率保留報文的基本格式,更有可能產生能夠被被測協議實現接受的報文。

從上述實例中可以看到,本文方法確實可以提高生成的測試用例被被測協議實現接受的概率。因此,使用本文方法進行測試有更多機會探索被測協議實現的實際報文處理邏輯,從而大幅提高測試效率。

4 相關工作

4.1 基于變異的協議模糊測試

基于變異的協議模糊測試不需要人工提供的協議模板與狀態機,而是將真實流量作為初始種子,通過對種子的變異來探索被測協議實現并動態構建被測協議實現的狀態機。

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

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

協議模糊測試每次發送變異產生的測試報文前,需要先發送一系列的前綴報文,使服務器到達被測狀態,而這個過程是很耗時的。為了解決這一問題,提出了使用虛擬機來保存已經到達目標狀態的服務器的工作SNPSFuzzer(fuzzer for stateful network protocols using snapshots)[12]和Nyx-Net[11]。

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

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

4.2 輸入有格式的基于變異的模糊測試

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

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

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

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

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

5 結束語

基于變異的協議模糊測試,沒有考慮被測協議對報文格式的要求,導致產生的測試用例被接受率過低,影響測試效率。為了解決這一問題,本文提出了基于字段感知的文本協議灰盒模糊測試方法,通過字段感知方法學習報文模板,提高生成的測試用例的被接受率。在此基礎上,本文還提出了字段級變異策略、字段變異能量度量方法和基于請求消息類型的狀態刻畫方法,進一步提高測試效率。實驗表明,基于本文方法所實現的模糊器原型FPFuzzer確實可以有效提高生成的測試用例被被測協議實現接受的比例,并大幅提高整體測試效率。

參考文獻:

[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]喻波, 蘇金樹, 楊強, 等. 網絡協議軟件漏洞挖掘技術綜述[J]. 軟件學報, 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]李東, 郝艷妮, 彭升輝, 等. 國家自然科學基金委員會網絡安全現狀與展望[J]. 網絡與信息安全學報, 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]李艷, 王純子, 黃光球, 等. 網絡安全態勢感知分析框架與實現方法比較[J]. 電子學報, 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]張冠宇, 尚文利, 張博文, 等. 一種結合遺傳算法的工控協議模糊測試方法[J]. 計算機應用研究, 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]徐威, 李鵬, 張文鑌, 等. 網絡協議模糊測試綜述[J]. 計算機應用研究, 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.

主站蜘蛛池模板: 欧美97欧美综合色伦图| 青青草原国产精品啪啪视频| 亚洲一区免费看| 国产鲁鲁视频在线观看| 国产青榴视频在线观看网站| 久久精品人妻中文系列| 性色一区| 成人久久精品一区二区三区| 国产一区二区免费播放| 国产精品3p视频| 久久国产成人精品国产成人亚洲| 国产精品粉嫩| 54pao国产成人免费视频| 亚洲女人在线| 欧美中文字幕一区二区三区| 国产亚洲一区二区三区在线| 国产国产人免费视频成18| 亚洲国产精品成人久久综合影院| 国产精品久久久久久久久kt| 久久黄色免费电影| 伊人久久久久久久| 美女内射视频WWW网站午夜| 亚洲精品无码日韩国产不卡| 四虎国产永久在线观看| 日韩小视频在线观看| 无码区日韩专区免费系列 | 色婷婷久久| 免费国产好深啊好涨好硬视频| 免费观看男人免费桶女人视频| 日本亚洲最大的色成网站www| 欧美日韩国产成人在线观看| AV片亚洲国产男人的天堂| 人妻丝袜无码视频| 麻豆国产精品一二三在线观看| 午夜一级做a爰片久久毛片| 国产主播在线一区| 成人在线不卡视频| 色婷婷啪啪| 999在线免费视频| 成人国产精品网站在线看| 国产女人18毛片水真多1| 亚洲一区色| 国产欧美日韩视频怡春院| 91年精品国产福利线观看久久 | 国产成人1024精品| 手机看片1024久久精品你懂的| 2020亚洲精品无码| 亚洲最大综合网| 2020亚洲精品无码| 日韩小视频在线播放| 99热这里只有精品在线播放| 亚洲国产日韩视频观看| 久久精品无码国产一区二区三区| 亚洲妓女综合网995久久| 国产成人a毛片在线| 四虎国产精品永久在线网址| 波多野结衣视频网站| a毛片在线播放| 亚洲h视频在线| 在线看片免费人成视久网下载| 亚洲欧美极品| 国产高潮视频在线观看| 久久精品中文字幕少妇| 丁香婷婷激情综合激情| 婷婷综合色| 东京热一区二区三区无码视频| 久久久久人妻一区精品色奶水| 91精品福利自产拍在线观看| 国产中文在线亚洲精品官网| 日本人又色又爽的视频| 精品人妻一区二区三区蜜桃AⅤ | 婷婷综合亚洲| 91久久青青草原精品国产| 亚洲精品手机在线| 国产成人综合在线视频| 噜噜噜久久| 欧美一级爱操视频| 国产欧美日韩专区发布| 亚洲综合激情另类专区| 欧美劲爆第一页| 伊人AV天堂| 亚洲精品第1页|