• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

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

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

    中圖分類號:TP311 文獻(xiàn)標(biāo)志碼: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 引言

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

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

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

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

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

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

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

    1 研究動機(jī)

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

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

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

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

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

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

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

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

    2 解決方案

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

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

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

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

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

    2.1.1 字段劃分

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

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

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

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

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

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

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

    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 //依次讀取當(dāng)前報文的每個字節(jié)

    10 while last_byte <r_length do

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

    12 if r_text[now_byte] in D then

    13 /*判斷當(dāng)前需要添加的是一個字段還是兩個字段,并將字段添加到當(dāng)前種子對應(yīng)報文的結(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í)報文每個字段的合法取值,本文提出了字段字典值學(xué)習(xí)方法。如前文所述,文本協(xié)議單個報文包含的字段數(shù)量通常不是固定的。因此,需要首先確定設(shè)置字段字典的數(shù)量。通常情況下,文本協(xié)議的一個報文可以包含固定字段、選項和數(shù)據(jù)這三類字段,其中固定字段的位置和個數(shù)一般都是確定的,且通常位于報文的開頭,而選項和數(shù)據(jù)部分通常位于固定字段之后,且可以包含也可以不包含,可以包含一個也可以包含多個,是不能確定的。同時,報文的固定字段更有可能取值受限,而后續(xù)的選項和數(shù)據(jù)部分則沒有太大的限制。因此,關(guān)鍵是為每個固定字段分別建立字段字典,而對于其余的選項或數(shù)據(jù)字段,可以使用一個統(tǒng)一的字典。

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

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

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

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

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

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

    2 d_list=createDicts(min_fields+1)

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

    4 for q in queue do

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

    6 for r in q->regions do

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

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

    9 /*添加到對應(yīng)的字段字典中,如果已經(jīng)存在當(dāng)前取值,則計數(shù)加1,否則,設(shè)置計數(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

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

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

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

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

    2.2.1 變異策略

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

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

    1)確定性變異策略

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

    2)非確定性變異策略

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

    2.2.2 變異能量度量

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

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

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

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

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

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

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

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

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

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

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

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

    其中:Eb(x)為計算得到的第x個字段的基礎(chǔ)變異能量;fmin表示必要字段數(shù);fmax表示用于構(gòu)建字段字典的種子中單個報文包含的最大字段數(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)

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

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

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

    2)字段實際變異能量

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

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

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

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

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

    之后,根據(jù)當(dāng)前種子本身的變異能量、每個字段當(dāng)前的基礎(chǔ)變異能量和每個字段當(dāng)前取值的稀有度,計算每個字段的實際變異能量。同計算字段基礎(chǔ)變異能量時相同,對于非必要字段,仍需要使用單個報文最多包含多少非必要字段進(jìn)行修正。特別的,如前所述,本文不會對分隔符字段使用非確定性變異策略,因此規(guī)定分隔符字段的實際變異能量為-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代表當(dāng)前種子的整體能量;Eb(x)代表第x個字段的基礎(chǔ)變異能量;R(x)表示第x個字段當(dāng)前取值的稀有度;fmin表示必要字段數(shù);fmax表示構(gòu)建字段字典的種子中單個報文包含的最大字段數(shù)。

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

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

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

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

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

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

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

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

    2 FS_sequence=createSequence(len(S_sequence))

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

    4 for i in len(S_sequence) do

    5 /*如果當(dāng)前狀態(tài)表示成功接受報文,則進(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 整體流程

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

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

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

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

    3 實驗評估

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

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

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

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

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

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

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

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

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

    3.1 測試用例接受率

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

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

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

    3.2 模糊測試效率

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

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

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

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

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

    3.3 案例研究

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

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

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

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

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

    4 相關(guān)工作

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

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

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

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

    協(xié)議模糊測試每次發(fā)送變異產(chǎn)生的測試報文前,需要先發(fā)送一系列的前綴報文,使服務(wù)器到達(dá)被測狀態(tài),而這個過程是很耗時的。為了解決這一問題,提出了使用虛擬機(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]提出了使用被測協(xié)議實現(xiàn)的部分長期變量的值來刻畫狀態(tài)的方法。它們各自提出了一系列狀態(tài)變量應(yīng)該滿足的條件,以此查找協(xié)議實現(xiàn)中可能用于表示狀態(tài)的長期變量,然后通過將這些變量值進(jìn)行散列來表示狀態(tài),使得狀態(tài)機(jī)更加細(xì)粒度。

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

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

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

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

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

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

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

    5 結(jié)束語

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

    參考文獻(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é)報, 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é)基金委員會網(wǎng)絡(luò)安全現(xiàn)狀與展望[J]. 網(wǎng)絡(luò)與信息安全學(xué)報, 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)勢感知分析框架與實現(xiàn)方法比較[J]. 電子學(xué)報, 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é)議模糊測試方法[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é)議模糊測試綜述[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.

    黄色怎么调成土黄色| 国产精品伦人一区二区| 欧美3d第一页| 亚洲在线观看片| 看十八女毛片水多多多| 亚洲精品视频女| 国产av不卡久久| 色播亚洲综合网| 亚洲精品第二区| 午夜精品一区二区三区免费看| 欧美激情国产日韩精品一区| 寂寞人妻少妇视频99o| 国内揄拍国产精品人妻在线| 免费观看性生交大片5| 免费黄色在线免费观看| 日韩在线高清观看一区二区三区| 亚洲av中文av极速乱| 大片电影免费在线观看免费| 最近2019中文字幕mv第一页| 可以在线观看毛片的网站| 大话2 男鬼变身卡| 国产黄a三级三级三级人| 亚洲高清免费不卡视频| 久久精品国产a三级三级三级| 久久精品国产亚洲av涩爱| 亚洲激情五月婷婷啪啪| 男女边吃奶边做爰视频| 在线免费十八禁| 成人美女网站在线观看视频| 夜夜看夜夜爽夜夜摸| 草草在线视频免费看| 91在线精品国自产拍蜜月| 国产精品一二三区在线看| a级一级毛片免费在线观看| 纵有疾风起免费观看全集完整版| 国国产精品蜜臀av免费| 天堂俺去俺来也www色官网| 亚洲人成网站在线观看播放| av播播在线观看一区| av一本久久久久| 亚洲国产色片| 97超碰精品成人国产| 天天躁夜夜躁狠狠久久av| 久久人人爽人人爽人人片va| 亚洲精品第二区| 看黄色毛片网站| 成人毛片a级毛片在线播放| 国产成年人精品一区二区| 久久久久九九精品影院| 联通29元200g的流量卡| 久久久久久九九精品二区国产| 国产精品人妻久久久影院| 男插女下体视频免费在线播放| 国产91av在线免费观看| 欧美日韩综合久久久久久| 亚洲综合色惰| 18禁裸乳无遮挡免费网站照片| 亚洲图色成人| .国产精品久久| 亚洲怡红院男人天堂| 亚洲婷婷狠狠爱综合网| 国产成人精品一,二区| 国产精品久久久久久久电影| 国产黄a三级三级三级人| 丝袜脚勾引网站| 99re6热这里在线精品视频| 午夜福利在线在线| 久久97久久精品| 欧美成人精品欧美一级黄| 国产探花极品一区二区| 美女主播在线视频| 亚洲aⅴ乱码一区二区在线播放| 久热久热在线精品观看| 三级男女做爰猛烈吃奶摸视频| 又大又黄又爽视频免费| 最近手机中文字幕大全| 国产高清三级在线| 欧美精品一区二区大全| 青春草亚洲视频在线观看| 国产美女午夜福利| 亚洲精品一区蜜桃| 丝袜喷水一区| 搞女人的毛片| 看十八女毛片水多多多| 成人免费观看视频高清| 国产午夜福利久久久久久| 成人毛片60女人毛片免费| 免费观看a级毛片全部| 国产亚洲91精品色在线| 国产精品女同一区二区软件| 能在线免费看毛片的网站| 秋霞在线观看毛片| 国产久久久一区二区三区| 成人午夜精彩视频在线观看| 一个人看的www免费观看视频| 日韩欧美 国产精品| 免费观看a级毛片全部| 国产av不卡久久| 欧美zozozo另类| 亚洲欧美中文字幕日韩二区| 国产 一区 欧美 日韩| 九九在线视频观看精品| 日韩大片免费观看网站| 亚洲欧美一区二区三区国产| 伊人久久精品亚洲午夜| 99久久中文字幕三级久久日本| 亚洲欧美清纯卡通| 国产精品人妻久久久久久| 国产黄频视频在线观看| 国产免费一区二区三区四区乱码| 亚洲丝袜综合中文字幕| 日产精品乱码卡一卡2卡三| 一级二级三级毛片免费看| 美女视频免费永久观看网站| 亚洲国产高清在线一区二区三| 亚洲国产欧美在线一区| 美女高潮的动态| 九草在线视频观看| 各种免费的搞黄视频| 久久久久网色| 欧美人与善性xxx| 又大又黄又爽视频免费| 亚洲精品国产av成人精品| 联通29元200g的流量卡| 日本色播在线视频| 国产亚洲av嫩草精品影院| 成人综合一区亚洲| 黄片无遮挡物在线观看| 国产免费一区二区三区四区乱码| 久久久精品免费免费高清| 国产精品国产三级专区第一集| 久久综合国产亚洲精品| 国产大屁股一区二区在线视频| 人妻夜夜爽99麻豆av| 嫩草影院精品99| 极品教师在线视频| 成年女人看的毛片在线观看| 天美传媒精品一区二区| 欧美一级a爱片免费观看看| 亚洲激情五月婷婷啪啪| 18禁在线无遮挡免费观看视频| 国产精品麻豆人妻色哟哟久久| 身体一侧抽搐| 午夜免费鲁丝| 亚洲人成网站在线播| 精品国产一区二区三区久久久樱花 | 久久午夜福利片| 校园人妻丝袜中文字幕| 久久国内精品自在自线图片| 日本黄色片子视频| 男人添女人高潮全过程视频| www.av在线官网国产| 大话2 男鬼变身卡| 国产精品秋霞免费鲁丝片| 亚洲av一区综合| 国内精品宾馆在线| 嘟嘟电影网在线观看| 少妇的逼水好多| 国产成人精品久久久久久| 亚洲国产精品专区欧美| av在线播放精品| 麻豆精品久久久久久蜜桃| 美女被艹到高潮喷水动态| 成人亚洲欧美一区二区av| 精品久久久久久久久亚洲| 国产黄片视频在线免费观看| 亚洲av成人精品一区久久| 午夜日本视频在线| 能在线免费看毛片的网站| 人妻 亚洲 视频| 亚洲成人中文字幕在线播放| 男插女下体视频免费在线播放| 欧美潮喷喷水| 草草在线视频免费看| 国产淫片久久久久久久久| 熟女av电影| 成人国产麻豆网| 国产老妇伦熟女老妇高清| 国产成人一区二区在线| 五月玫瑰六月丁香| 国产爽快片一区二区三区| 亚洲欧美精品自产自拍| 欧美zozozo另类| 一级爰片在线观看| 日韩中字成人| 男人爽女人下面视频在线观看| 国产精品不卡视频一区二区| 五月玫瑰六月丁香| 高清毛片免费看| 亚洲av欧美aⅴ国产| 欧美日韩视频高清一区二区三区二| 亚洲精品一区蜜桃| 国内少妇人妻偷人精品xxx网站| 免费大片18禁| 中文字幕久久专区| 精品一区二区免费观看| 一级av片app| 国产午夜福利久久久久久| 国产精品女同一区二区软件| 亚洲在线观看片| 中文天堂在线官网| 最后的刺客免费高清国语| 午夜免费男女啪啪视频观看| 丰满人妻一区二区三区视频av| 日韩一区二区三区影片| 亚洲最大成人中文| 亚洲精品成人久久久久久| 国产精品国产三级国产av玫瑰| 日本免费在线观看一区| 精品一区二区免费观看| 91久久精品国产一区二区成人| 在现免费观看毛片| 国产色爽女视频免费观看| 国产永久视频网站| 各种免费的搞黄视频| 亚洲av免费高清在线观看| 极品少妇高潮喷水抽搐| 久久女婷五月综合色啪小说 | 亚洲综合色惰| 欧美成人一区二区免费高清观看| 如何舔出高潮| 国产精品不卡视频一区二区| 日韩一本色道免费dvd| 青春草亚洲视频在线观看| 久久99热6这里只有精品| 国产欧美日韩精品一区二区| 国产一区二区三区av在线| 最近最新中文字幕免费大全7| 亚洲aⅴ乱码一区二区在线播放| 亚洲精品中文字幕在线视频 | 草草在线视频免费看| 综合色av麻豆| 国产69精品久久久久777片| a级一级毛片免费在线观看| 成人毛片a级毛片在线播放| xxx大片免费视频| 成年人午夜在线观看视频| 男女那种视频在线观看| 熟女av电影| 99热网站在线观看| 在线观看免费高清a一片| 中文字幕免费在线视频6| 国产精品.久久久| 一区二区av电影网| 嫩草影院入口| 亚洲天堂国产精品一区在线| 成人亚洲欧美一区二区av| 男女国产视频网站| 2021少妇久久久久久久久久久| 又爽又黄a免费视频| 国产精品久久久久久久电影| 国产精品三级大全| 亚洲成人久久爱视频| 内地一区二区视频在线| 国产亚洲精品久久久com| av在线老鸭窝| 日韩av不卡免费在线播放| 国产视频首页在线观看| 亚洲成人久久爱视频| tube8黄色片| 欧美日韩一区二区视频在线观看视频在线 | 在线亚洲精品国产二区图片欧美 | 成年版毛片免费区| 国产一区二区在线观看日韩| 丰满乱子伦码专区| 国产中年淑女户外野战色| 国产综合懂色| 欧美日韩一区二区视频在线观看视频在线 | 身体一侧抽搐| 日日啪夜夜爽| 男人添女人高潮全过程视频| 人妻夜夜爽99麻豆av| 亚洲精品色激情综合| 欧美激情在线99| 在线观看人妻少妇| 男女啪啪激烈高潮av片| 免费大片18禁| 久久久久国产精品人妻一区二区| av在线亚洲专区| 99久久精品热视频| 精品一区二区三区视频在线| av在线亚洲专区| 亚洲av免费在线观看| 性色av一级| av福利片在线观看| 九色成人免费人妻av| 韩国高清视频一区二区三区| 日本三级黄在线观看| 人体艺术视频欧美日本| 菩萨蛮人人尽说江南好唐韦庄| 国产精品一区www在线观看| 80岁老熟妇乱子伦牲交| 亚洲精品久久久久久婷婷小说| 中国国产av一级| 麻豆乱淫一区二区| 伦精品一区二区三区| 深夜a级毛片| 国产成人免费无遮挡视频| 中文字幕免费在线视频6| 你懂的网址亚洲精品在线观看| 在线观看三级黄色| 国产黄色视频一区二区在线观看| 亚洲精品一二三| 免费播放大片免费观看视频在线观看| 久久6这里有精品| 极品少妇高潮喷水抽搐| 久久热精品热| 青青草视频在线视频观看| 国产在线一区二区三区精| 国产免费福利视频在线观看| 日韩强制内射视频| 国产欧美日韩一区二区三区在线 | 少妇人妻久久综合中文| 国产在线一区二区三区精| 亚洲成人中文字幕在线播放| 91精品国产九色| 只有这里有精品99| 国产伦精品一区二区三区四那| 午夜日本视频在线| 国产中年淑女户外野战色| 日韩欧美 国产精品| 大香蕉97超碰在线| 国产精品久久久久久久电影| 大片免费播放器 马上看| 亚洲在久久综合| 国产精品精品国产色婷婷| 一级毛片aaaaaa免费看小| 亚洲国产av新网站| 免费看av在线观看网站| 亚洲熟女精品中文字幕| 婷婷色av中文字幕| 国产一区二区三区av在线| 日韩一区二区三区影片| 欧美亚洲 丝袜 人妻 在线| 狂野欧美激情性bbbbbb| 男人舔奶头视频| 人妻少妇偷人精品九色| 久久精品人妻少妇| 99热全是精品| 国产黄频视频在线观看| 男人狂女人下面高潮的视频| 五月伊人婷婷丁香| 熟妇人妻不卡中文字幕| 成人国产麻豆网| 中文字幕亚洲精品专区| 久久精品久久久久久噜噜老黄| 嘟嘟电影网在线观看| 街头女战士在线观看网站| 国产乱来视频区| 日韩一本色道免费dvd| 国产精品久久久久久精品电影小说 | 久久精品国产亚洲av天美| 看非洲黑人一级黄片| 极品教师在线视频| 久久久久精品久久久久真实原创| 特大巨黑吊av在线直播| 欧美bdsm另类| 日本三级黄在线观看| 日韩不卡一区二区三区视频在线| 亚洲美女搞黄在线观看| 亚洲伊人久久精品综合| 久久久a久久爽久久v久久| 久久久久久伊人网av| 尤物成人国产欧美一区二区三区| 国产精品一及| 99热这里只有是精品50| 国产亚洲91精品色在线| 亚洲av中文字字幕乱码综合| 久久久精品欧美日韩精品| 欧美高清成人免费视频www| 亚洲精品国产色婷婷电影| 久久久精品免费免费高清| 亚洲国产欧美人成| 欧美高清成人免费视频www| 国产视频首页在线观看| 91精品一卡2卡3卡4卡| 久久影院123| 尾随美女入室| av在线播放精品| 岛国毛片在线播放| 欧美xxxx黑人xx丫x性爽| 在线a可以看的网站| 大片免费播放器 马上看| 久久女婷五月综合色啪小说 | 国产精品人妻久久久久久| 国产高清国产精品国产三级 | 婷婷色麻豆天堂久久| 秋霞在线观看毛片| 91aial.com中文字幕在线观看| 国产精品一二三区在线看| 亚洲成人精品中文字幕电影| 狠狠精品人妻久久久久久综合| 男女下面进入的视频免费午夜| 91精品国产九色| 精品人妻偷拍中文字幕| 国产精品三级大全| 日本wwww免费看| 精品人妻熟女av久视频| 国产白丝娇喘喷水9色精品| 色哟哟·www| 国产在线一区二区三区精| 日产精品乱码卡一卡2卡三| 一本一本综合久久| 亚洲欧美日韩东京热| 男女边吃奶边做爰视频| 别揉我奶头 嗯啊视频| 国产极品天堂在线| 亚洲精品国产av成人精品| 免费看光身美女| 成人特级av手机在线观看| 免费黄频网站在线观看国产| 成人黄色视频免费在线看| 狂野欧美白嫩少妇大欣赏| 一级毛片黄色毛片免费观看视频| 成人漫画全彩无遮挡| 国产探花在线观看一区二区| 精品一区二区免费观看| 蜜桃亚洲精品一区二区三区| 在线观看av片永久免费下载| 免费在线观看成人毛片| 日本色播在线视频| 日日啪夜夜爽| 国产男女内射视频| 亚洲性久久影院| 啦啦啦中文免费视频观看日本| 国产一区二区三区综合在线观看 | 国产老妇伦熟女老妇高清| 天天躁夜夜躁狠狠久久av| 人妻系列 视频| av免费观看日本| av线在线观看网站| 中国三级夫妇交换| 午夜视频国产福利| 日本爱情动作片www.在线观看| 亚洲国产日韩一区二区| 久久午夜福利片| 国产成人精品久久久久久| 亚洲欧美一区二区三区国产| 久久国产乱子免费精品| 亚洲美女搞黄在线观看| 在线观看三级黄色| 91精品一卡2卡3卡4卡| 啦啦啦中文免费视频观看日本| 黄色日韩在线| 日本欧美国产在线视频| 亚洲av中文av极速乱| 国产精品伦人一区二区| 街头女战士在线观看网站| 亚洲国产色片| 成人亚洲精品一区在线观看 | 男女下面进入的视频免费午夜| 99久国产av精品国产电影| 午夜福利在线观看免费完整高清在| 少妇的逼好多水| 国产色爽女视频免费观看| 一区二区av电影网| 特大巨黑吊av在线直播| 中文欧美无线码| 国产乱来视频区| 亚洲精品乱码久久久久久按摩| 午夜福利视频1000在线观看| 三级男女做爰猛烈吃奶摸视频| 91在线精品国自产拍蜜月| 人人妻人人爽人人添夜夜欢视频 | 久久久久久久亚洲中文字幕| 久久久久久伊人网av| 别揉我奶头 嗯啊视频| 国产一区二区在线观看日韩| 久久久久网色| 免费黄网站久久成人精品| 成年女人看的毛片在线观看| 嫩草影院入口| 成人亚洲精品一区在线观看 | 亚洲国产日韩一区二区| 国产一区二区亚洲精品在线观看| 国产91av在线免费观看| 国产精品无大码| 久久99热6这里只有精品| 久久精品久久久久久噜噜老黄| 最近最新中文字幕大全电影3| 麻豆国产97在线/欧美| 国产精品99久久久久久久久| 插阴视频在线观看视频| 国产成人精品福利久久| 国产精品熟女久久久久浪| 日产精品乱码卡一卡2卡三| 亚洲久久久久久中文字幕| 777米奇影视久久| 国产精品不卡视频一区二区| 亚洲婷婷狠狠爱综合网| 日韩欧美 国产精品| 女人被狂操c到高潮| 亚洲国产av新网站| 成人综合一区亚洲| 天美传媒精品一区二区| 高清午夜精品一区二区三区| 三级国产精品片| 久久久久精品久久久久真实原创| 午夜精品一区二区三区免费看| 国产高清国产精品国产三级 | 亚洲欧美精品专区久久| 国产日韩欧美亚洲二区| 国产一区二区亚洲精品在线观看| 国产欧美亚洲国产| 国产老妇伦熟女老妇高清| 欧美日韩在线观看h| 97在线人人人人妻| 欧美另类一区| 人人妻人人澡人人爽人人夜夜| 国产片特级美女逼逼视频| av播播在线观看一区| videos熟女内射| 久久久精品欧美日韩精品| 亚洲经典国产精华液单| 最近的中文字幕免费完整| 日韩伦理黄色片| 夜夜爽夜夜爽视频| 69人妻影院| 国产成人精品久久久久久| 热re99久久精品国产66热6| av免费在线看不卡| 日日摸夜夜添夜夜添av毛片| 欧美xxxx黑人xx丫x性爽| 日韩av在线免费看完整版不卡| 狠狠精品人妻久久久久久综合| 又粗又硬又长又爽又黄的视频| 国产成人一区二区在线| 久久国内精品自在自线图片| 欧美日韩视频精品一区| 真实男女啪啪啪动态图| 国产精品女同一区二区软件| 免费观看在线日韩| 干丝袜人妻中文字幕| 日日撸夜夜添| 国产伦在线观看视频一区| 能在线免费看毛片的网站| 日日啪夜夜撸| 新久久久久国产一级毛片| 亚洲最大成人av| 老司机影院毛片| 韩国av在线不卡| 高清日韩中文字幕在线| 亚洲精品一二三| 亚洲综合精品二区| 国产精品无大码| 精品久久久噜噜| 黄色怎么调成土黄色| 国内精品美女久久久久久| 欧美成人精品欧美一级黄| 国产av不卡久久| 精品酒店卫生间| 日韩 亚洲 欧美在线| 国产精品秋霞免费鲁丝片| 国产精品国产av在线观看| 国产精品久久久久久av不卡| 亚洲av中文av极速乱| 涩涩av久久男人的天堂| 青青草视频在线视频观看| 国产成人精品久久久久久| 晚上一个人看的免费电影| 高清av免费在线| 亚洲色图av天堂| 亚洲欧美日韩另类电影网站 | 亚洲内射少妇av| 亚洲色图av天堂| 亚洲精品第二区| 高清日韩中文字幕在线| 99re6热这里在线精品视频| 成年人午夜在线观看视频| 免费播放大片免费观看视频在线观看| 一级爰片在线观看| 久久久久久久午夜电影| 99精国产麻豆久久婷婷| 超碰97精品在线观看| 777米奇影视久久| 99久久九九国产精品国产免费| 欧美成人a在线观看| 永久网站在线| 在线免费十八禁| 国产一级毛片在线| 欧美日韩在线观看h| 狠狠精品人妻久久久久久综合| 精品国产乱码久久久久久小说| 中文字幕亚洲精品专区| 少妇丰满av| 又黄又爽又刺激的免费视频.| 97超视频在线观看视频| 成人综合一区亚洲| 搡老乐熟女国产| 十八禁网站网址无遮挡 | 亚洲欧洲日产国产| 国产成人a区在线观看| 国产国拍精品亚洲av在线观看| 国产探花在线观看一区二区| 国产一区二区亚洲精品在线观看| 亚洲人成网站在线观看播放| 在线观看美女被高潮喷水网站| 少妇高潮的动态图| 日韩免费高清中文字幕av| 欧美精品一区二区大全| a级毛色黄片| 少妇被粗大猛烈的视频| 尤物成人国产欧美一区二区三区| 国产精品人妻久久久影院| 久久久欧美国产精品| 日日摸夜夜添夜夜爱| 高清午夜精品一区二区三区| 亚洲欧美一区二区三区国产| 哪个播放器可以免费观看大片| 亚洲国产精品国产精品| 亚洲内射少妇av| 久久精品国产亚洲av涩爱| 国产在视频线精品| 亚洲精品日韩在线中文字幕| 午夜精品国产一区二区电影 |