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

    一種基于協(xié)議格式智能推斷的灰盒測試技術(shù)

    2023-12-16 10:29:40劉華玉甘水滔尹小康柳曉龍劉勝利李宏亮
    計算機工程 2023年12期
    關(guān)鍵詞:關(guān)鍵字字段報文

    劉華玉,甘水滔,尹小康,柳曉龍,劉勝利,李宏亮

    (1.戰(zhàn)略支援部隊信息工程大學 網(wǎng)絡空間安全學院,鄭州 450001;2.數(shù)學工程與先進計算國家重點實驗室,江蘇 無錫 214215;3.清華大學 網(wǎng)絡研究院,北京 100084;4.江南計算技術(shù)研究所,江蘇 無錫 214083)

    0 概述

    隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡安全問題近年來備受關(guān)注。網(wǎng)絡協(xié)議作為互聯(lián)網(wǎng)通信的基礎(chǔ),其安全性一直是學術(shù)界面臨的重大難題。協(xié)議在設(shè)計和實現(xiàn)時可能存在安全問題,網(wǎng)絡通信的易達性和傳播性會嚴重威脅用戶的隱私安全以及整個互聯(lián)網(wǎng)絡的安全。

    2017 年5 月爆發(fā)的WannaCry 勒索軟件攻擊,利用“永恒之藍”漏洞廣泛傳播,短時間內(nèi)超過150 個國家和30 萬用戶遭到攻擊,給全球大量計算機用戶造成數(shù)十億美元的經(jīng)濟損失[1]。2020 年,360CERT監(jiān)測發(fā)現(xiàn),國外研究團隊發(fā)布的DNS 協(xié)議實現(xiàn)的邏輯錯誤,攻擊者通過發(fā)起指向惡意name-server 的DNS 查詢請求,可以造成遞歸服務器和特定域名服務器拒絕服務影響[2]。這些協(xié)議級漏洞利用非法用戶數(shù)據(jù)被服務器解析后,服務器產(chǎn)生非預期的執(zhí)行行為,最終造成拒絕服務攻擊或者遠程執(zhí)行攻擊等。因此,針對網(wǎng)絡協(xié)議實現(xiàn)的漏洞挖掘技術(shù)研究是當前的主流方向之一。

    1990 年,MILLER 等[3]提出模糊測試概念,主要用來檢測目標程序的魯棒性。目前模糊測試技術(shù)[4-6]已經(jīng)成為一種重要的程序脆弱性分析方法,在網(wǎng)絡協(xié)議安全研究中具有自動化程度高、效率高等優(yōu)勢?,F(xiàn)有的針對網(wǎng)絡協(xié)議的模糊測試技術(shù)主要有以Peach[7]為主的 黑盒測 試方法和以AFLNet[8]為 主的灰盒測試方法。Peach 等黑盒測試需要協(xié)議的格式信息,依賴于人工知識儲備,人工成本高,可擴展性較差。AFLNet 是首次提出針對協(xié)議的灰盒測試方法,僅需要少量協(xié)議信息即可指導完成測試,但在測試過程中忽略了協(xié)議本身的格式信息,變異策略隨機性強,導致測試效率低等問題。

    為解決當前研究中存在的問題,本文提出一種基于協(xié)議逆向工程自動識別協(xié)議格式來輔助模糊測試的方法,主要包括:基于對齊聚類的智能化協(xié)議格式推斷模型和協(xié)議格式信息輔助的變異策略優(yōu)化。該方法在對TinyDTLS、OpenSSL 等程序的模糊測試中不僅能夠提高目標程序的邊覆蓋率,而且在最新版本TinyDTLS 程序中觸發(fā)一個緩沖區(qū)溢出類型崩潰,該崩潰在AFLNet 中無法觸發(fā)。

    1 相關(guān)工作

    1.1 網(wǎng)絡協(xié)議模糊測試

    近年來,針對網(wǎng)絡協(xié)議的模糊測試得到了廣泛的研究。現(xiàn)有的協(xié)議模糊測試研究方法主要分為基于測試用例生成和基于種子變異兩類[9]。

    目前基于測試用例生成的模糊測試主要以黑盒測試[10-11]為主,針對網(wǎng)絡協(xié)議的測試,代表工具有Protos[12]以 及Peach。2001 年,KAKSONEN 等[12]提出了Protos,實現(xiàn)了針對網(wǎng)絡協(xié)議的模糊測試,這也標志著模糊測試技術(shù)成為程序脆弱性分析的實用性工具。Protos 為不同的網(wǎng)絡協(xié)議提供了不同的測試用例集,通過故障注入的方式測試協(xié)議軟件安全性,測試人員通過指定協(xié)議格式中的字段來生成測試用例。Peach 剛開始主要被用于文件的模糊測試中,經(jīng)過多次升級改進,目前適用于測試網(wǎng)絡協(xié)議等多種類型程序,而且至今仍然在被使用。

    基于種子變異的協(xié)議模糊測試方法以灰盒測試為主。近年來,隨著AFL[13]的提出,通過程序輕量級插樁實現(xiàn)基于覆蓋率引導的灰盒測試方法成為主流模糊測試方式。AFLNet 是針對狀態(tài)網(wǎng)絡協(xié)議的灰盒測試工具,AFLNet 以覆蓋率為導向,采用插樁的方法監(jiān)控程序邊路徑覆蓋情況,引導種子變異以探索更多的路徑。AFLNet 僅需要少量的協(xié)議知識用于提取請求消息和構(gòu)建協(xié)議狀態(tài)機,自主性高,并且易于擴展,是目前成熟且應用最為廣泛的協(xié)議模糊工具。此后,針對網(wǎng)絡協(xié)議的灰盒測試技術(shù)得到發(fā)展,研究人員提出并實現(xiàn)了許多工具。StateAFL[14]是一種將被測程序內(nèi)存狀態(tài)映射為唯一的狀態(tài)標識符,從而推斷目標服務器的當前協(xié)議狀態(tài),無須手動為協(xié)議定制。SPFuzz[15]通過預定義協(xié)議規(guī)范等來增強測試用例的有效性。SNPSFuzzer[16]提出一種基于快照的測試方法,通過在特定位置存儲程序的上下文信息,并在需要模糊相關(guān)狀態(tài)時恢復上下文信息,提升測試速度。這些工具通過協(xié)議狀態(tài)推斷、協(xié)議分析、種子功率調(diào)度[17]等多方面的改進,在實際應用過程中取得一定進展。

    1.2 協(xié)議逆向

    協(xié)議逆向技術(shù)是在沒有或少量協(xié)議規(guī)范知識的條件下,通過對協(xié)議實體的網(wǎng)絡輸入輸出和指令執(zhí)行流程等進行跟蹤分析,提取網(wǎng)絡協(xié)議基本描述和狀態(tài)機等信息[18-20]。根據(jù)現(xiàn)有的研究方法,協(xié)議逆向技術(shù)主要分為基于Network Trace 和基于Tainted Data 兩類。

    基于Network Trace 的協(xié)議逆向技術(shù),即基于報文的協(xié)議逆向技術(shù),依賴于wireshark 等抓包工具捕獲協(xié)議流量進行逆向分析的技術(shù)。該技術(shù)針對協(xié)議字段的取值變化和特征推斷協(xié)議的信息,典型的代表是由文獻[21]在2004 年啟動并發(fā)布的PI(Protocol Informatics)項目。該項目引入了多序列對比算法[22],并根據(jù)相同類型報文聚類的統(tǒng)計特征對報文格式進行分析。Discover[23]使用報文序列分析方法實現(xiàn)完整的協(xié)議格式提取,該技術(shù)在推斷消息格式時模擬報文解析的過程,能夠有效識別依賴于消息本身的字段。

    基于Tainted Data 的協(xié)議逆向技術(shù),也即基于指令序列的協(xié)議逆向技術(shù),主要通過動態(tài)污點分析技術(shù)跟蹤分析服務器程序?qū)笪牡慕馕隽鞒?,根?jù)程序?qū)笪牡慕馕鰜硗茢鄥f(xié)議格式。Polyglot[24]提出利用該技術(shù)自動解析協(xié)議格式,Polyglot 采用shadowing 方法監(jiān)視程序?qū)脭?shù)據(jù)的處理過程,根據(jù)數(shù)據(jù)處理過程中的二進制信息來提取有關(guān)字段邊界和關(guān)鍵字的信息。AutoFormat[25]提出基于指令軌跡的協(xié)議識別技術(shù),該技術(shù)可分為上下文感知的執(zhí)行監(jiān)控模塊和協(xié)議字段識別模塊。

    基于Tainted Data 的協(xié)議逆向技術(shù)利用協(xié)議實現(xiàn)的詳細數(shù)據(jù)處理流程,可以在逆向工程中實現(xiàn)較高的精度,但存在固件獲取、二進制程序混淆等困難?;贜etwork Trace 的協(xié)議逆向技術(shù)只需考慮通信過程的數(shù)據(jù)包,不需要程序源碼,具有良好的逆向效果。

    1.3 存在的問題

    針對日益復雜的網(wǎng)絡協(xié)議,模糊測試技術(shù)是目前最為實用的安全分析技術(shù)之一,但現(xiàn)有的研究方案依然存在以下問題:

    1)人工成本高。現(xiàn)有的網(wǎng)絡協(xié)議黑盒測試工具需要大量的協(xié)議知識輔助測試,依賴人工構(gòu)建協(xié)議模型和數(shù)據(jù)模型。實驗時要求測試人員需要精確掌握協(xié)議規(guī)范,還要熟悉工具的使用,以此才能夠構(gòu)建耦合效果良好的模型,這不僅給測試人員增加了大量的工作,而且協(xié)議測試的效果完全取決于模型的好壞,這使得工具的可擴展性變差。

    2)變異策略缺乏協(xié)議格式信息指導。代碼塊1為TinyDTLS 程序中處理收到消息的部分源碼。

    研究發(fā)現(xiàn),程序在這部分會將收到消息的實際長度msglen 與消息內(nèi)的長度字段length 進行比較(第15 行)。如果變異得到的測試用例無法通過此校驗,將無法探索更深的路徑。然而現(xiàn)有的狀態(tài)協(xié)議灰盒測試方法大多是作為AFL 的擴展,直接采用AFL 中的隨機變異策略,忽略了協(xié)議格式信息,很多測試用例無法通過服務器的初步數(shù)據(jù)校驗(第8、9、15 行),造成大量的無效測試用例,降低了測試的性能。

    為解決上述問題,本文提出一種基于對齊聚類的智能化協(xié)議格式推斷模型ProCluster,用于指導灰盒測試中協(xié)議狀態(tài)機構(gòu)建和種子的變異。該模型通過自動提取協(xié)議關(guān)鍵字和推斷相應類型,來輔助種子變異策略生成更符合協(xié)議規(guī)范的測試用例,以此加速提升模糊測試的代碼覆蓋能力和脆弱路徑發(fā)現(xiàn)能力。

    2 本文方法

    為了解決面向通信協(xié)議的模糊測試中代碼覆蓋率低、變異策略缺乏協(xié)議信息指導等問題,本文將協(xié)議逆向技術(shù)應用到灰盒測試中,提出一種基于對齊聚類的智能化協(xié)議灰盒測試方法ProCluster。考慮到協(xié)議逆向的成本,利用基于Network Trace 的協(xié)議逆向技術(shù)獲取協(xié)議格式,然后根據(jù)設(shè)計的變異策略在協(xié)議格式信息的指導下對種子進行變異,得到更多符合預期的測試用例用于對網(wǎng)絡協(xié)議的測試。

    2.1 框架設(shè)計

    本文所提灰盒測試方法的框架如圖1 所示,主要包括協(xié)議識別、狀態(tài)機構(gòu)造以及種子變異3 個模塊。ProCluster 首先利用協(xié)議識別模塊將前期通過wireshark 等工具抓取的數(shù)據(jù)包進行自動化解析,然后將得到的協(xié)議格式等結(jié)果作為模糊測試引擎的輸入,來輔助后續(xù)模糊測試工作。

    圖1 基于協(xié)議格式智能推斷的灰盒測試技術(shù)框架Fig.1 Framework of gray-box test technology based on intelligent inference of protocol format

    協(xié)議識別、狀態(tài)機構(gòu)造以及種子變異3 個模塊的介紹如下:

    1)協(xié)議識別模塊

    該模塊基于Network Trace 的協(xié)議逆向技術(shù)實現(xiàn)。該模塊以原始網(wǎng)絡數(shù)據(jù)包為輸入,經(jīng)過預處理得到消息序列作為初始種子,進一步推斷解析得到協(xié)議關(guān)鍵字和協(xié)議格式,用于后續(xù)構(gòu)造狀態(tài)機和種子變異。

    2)狀態(tài)機構(gòu)造模塊

    該模塊主要利用前一階段中識別的關(guān)鍵字作為響應消息的狀態(tài)識別碼,以此在測試過程中自動化構(gòu)建狀態(tài)轉(zhuǎn)移圖,更進一步指導變異過程。與AFLNet 相比,本文提出的方法省略了人工提取協(xié)議狀態(tài)的過程,無須手動為協(xié)議定制,使得測試更為自動化。

    3)種子變異模塊

    針對變異策略缺乏協(xié)議格式信息指導問題,該模塊以AFLNet 為原型,在原有變異規(guī)則基礎(chǔ)上設(shè)計消息序列變異策略,并根據(jù)協(xié)議格式信息實現(xiàn)針對協(xié)議字段的變異策略,使模糊工具能夠更加高效地發(fā)現(xiàn)一些常規(guī)的安全漏洞。

    2.2 協(xié)議格式識別模塊

    本文采用基于Network Trace 的協(xié)議識別技術(shù)。分析此類技術(shù)現(xiàn)有的研究方法又可以分為基于對齊聚類方法和基于token 的方法。基于對齊聚類方法,現(xiàn)有的研究主要通過利用各種對齊算法對齊消息并計算消息的相似性分數(shù),得到的結(jié)果與閾值進行比較,依據(jù)此進行聚類并分析。但是預設(shè)置的閾值對協(xié)議本身敏感,因此這些方法魯棒性低?;趖oken的研究方法將消息拆分為token,然后根據(jù)token 值對消息進行分組。這類方法依賴于預定義的token分隔符,而且將字段限制在token 級別,在分析過程中很容易造成冗余,降低正確率。

    本文考慮在對齊消息的基礎(chǔ)上,利用概率分析的方法提取狀態(tài)協(xié)議中的消息狀態(tài),即消息中的關(guān)鍵字,然后依據(jù)關(guān)鍵字完成消息聚類,最后對簇內(nèi)的消息進行格式推斷解析。協(xié)議格式識別算法如下:

    算法1 協(xié)議格式識別算法

    1)多序列比對算法

    現(xiàn)有研究中針對協(xié)議序列比對大多使用雙序列比對算法[26-27],而考慮到報文序列較多情況下會影響整體的性能,本文使用多序列比對算法對報文序列進行對齊操作。文獻[28]針對三類多序列比對算法在報文序列上的性能和效果做出了分析和測試,本文在此基礎(chǔ)上考慮使用基于迭代細化策略的漸進比對算法。該方法首先對齊最相似的報文序列,然后將其他序列逐步添加到對齊結(jié)果中,隨后迭代地重新排列初始全局比對結(jié)果的序列子集,以提高精度。

    2)生成候選關(guān)鍵字

    本節(jié)考慮為了使生成的候選關(guān)鍵字盡最大可能包含協(xié)議的真實關(guān)鍵字,需要保守地構(gòu)造候選關(guān)鍵字列表。

    利用上文多序列對齊的結(jié)果,將報文分割為字段。針對文本類協(xié)議主要依據(jù)“空格”等分隔符進行字段劃分,針對二進制協(xié)議,以字節(jié)為單位進行字段劃分。根據(jù)前期初步對齊結(jié)果分析所有字段在所有消息中值的變化。對此,可以區(qū)分出靜態(tài)字段(該字段在所有消息中不發(fā)生變化,標記為“S”)和動態(tài)字段(標記為“D”),對于連續(xù)的靜態(tài)字段可以合并成更大的靜態(tài)字段。為了構(gòu)建保守的候選關(guān)鍵字列表,本文不僅將單位字節(jié)的動態(tài)字段視為候選關(guān)鍵字,而且在單位字節(jié)的基礎(chǔ)上考慮將連續(xù)的動態(tài)字段整體作為一個候選關(guān)鍵字。考慮實際的協(xié)議設(shè)計以及避免造成后續(xù)計算浪費,本文設(shè)置候選關(guān)鍵字長度的閾值為3。至此,生成了一個保守的候選關(guān)鍵字列表。

    3)概率分析

    本節(jié)對候選關(guān)鍵字進行概率分析,篩選出最為可能的協(xié)議關(guān)鍵字。本文主要基于兩個直觀的觀察來對候選關(guān)鍵字進行概率分析,分別是根據(jù)候選關(guān)鍵字聚類后簇的相似度得分以及簇規(guī)模。

    根據(jù)前期的對齊結(jié)果,計算兩兩報文序列的相似度得分,并以此構(gòu)造報文序列的相似度得分矩陣。然后利用相似度矩陣計算聚類后簇內(nèi)的相似度得分和簇間的相似度得分。直觀地認為簇內(nèi)的相似度得分應該總是大于簇間的相似度得分,然而情況并不理想,兩類得分會出現(xiàn)重疊的現(xiàn)象。

    現(xiàn)有研究中大多直接根據(jù)相似度得分與閾值之間的大小關(guān)系來進行判斷,但在實際應用中閾值對協(xié)議依賴性強,固定的閾值在協(xié)議逆向分析中很難得到置信的結(jié)果?;诖?,本文提出假設(shè):基于閾值的聚類結(jié)果中存在同類型消息被聚類到不同的簇中,不同類型的消息被聚類到同一簇中,即錯誤不匹配(False Non-Match,F(xiàn)NM)和錯誤匹配(False Match,F(xiàn)M)。根據(jù)針對多序列比對的研究[29],本文設(shè)置取值從0~1 的閾值t,通過錯誤匹配率曲線和錯誤不匹配率曲線得到等錯誤率(Equal Error Rate,EER)值,該值描述聚類結(jié)果總體準確性。分別給出錯誤匹配率和錯誤不匹配率的計算公式,如式(1)、式(2)所示:

    其中:RFM表示錯誤匹配率;RFNM表示錯誤不匹配率;Sinter_i為第i個簇間相似度分數(shù);N為簇間相似度分數(shù)的個數(shù),i?[1,N];Sinner_j為第j個簇內(nèi)相似度分數(shù);M為簇內(nèi)相似度分數(shù)的個數(shù),j?[1,M]。

    最后根據(jù)式(3)得到一個關(guān)于當前候選關(guān)鍵字基于相似度分數(shù)的置信度值p:

    其中:E為等錯誤率值。

    本文在研究過程中發(fā)現(xiàn),對于基于相似度分數(shù)的概率,存在一個突出問題。當存在某個候選關(guān)鍵字聚類后有過多的簇時,此時該候選關(guān)鍵字的置信度會比較高,對后續(xù)格式分析干擾嚴重。因此,對該值設(shè)置一個基于簇規(guī)模的權(quán)重。

    針對簇規(guī)模,本文分析真正的關(guān)鍵字聚類后的結(jié)果,得出以下結(jié)論:針對非刻意捕獲的報文序列,生成的簇數(shù)量適中,且很少存在單個消息為獨立簇。根據(jù)上述結(jié)論,給出候選關(guān)鍵字基于簇規(guī)模的權(quán)重配置w:

    其中:Nsingle-message表示僅有一條消息的簇數(shù)量;Ncluster表示簇總數(shù)。

    最后本文利用因子圖計算得到候選關(guān)鍵字的后驗概率,概率最大的即為協(xié)議關(guān)鍵字。假設(shè)多序列對比沒有正確對齊,因此無法正確識別關(guān)鍵字。盡管如此,根據(jù)前面分析得到的關(guān)鍵字進行聚類,簇內(nèi)消息的結(jié)構(gòu)差異可能會減少。因此,對于每個簇,執(zhí)行多序列對比和概率關(guān)鍵字分析。隨后將新的關(guān)鍵字與原始關(guān)鍵字進行比較,如果新的關(guān)鍵字可以在所有消息獲得更好的區(qū)分效果,則用新的關(guān)鍵字替換原始關(guān)鍵字。重復該過程,直到無法識別更好的關(guān)鍵字。

    4)格式推斷

    對于最終的聚類結(jié)果,每個簇中均為同一類型消息。最后本文利用啟發(fā)式方法對消息中的長度、cookie 等字段進行恢復。對于長度字段(標記為“L”),本文主要基于消息長度的差值與同一類型消息中對齊字段的差值進行比較確定。針對cookie 字段(標記為“C”),使用RolePlayer[30]中的啟發(fā)式方法來識別。

    利用wireshark 抓取的DTLS(Datagram Transport Layer Security)協(xié)議數(shù)據(jù)報文對本文提出的模型進行測試。如圖2 所示,本文提出的模型能夠區(qū)分協(xié)議數(shù)據(jù)中的靜態(tài)字段和動態(tài)字段,準確識別協(xié)議數(shù)據(jù)的關(guān)鍵字,并在后續(xù)推斷分析時能夠識別到DTLS協(xié)議中的長度字段。本文的目標是利用協(xié)議逆向技術(shù)來輔助模糊測試,不進行精準的協(xié)議格式解析工作,因此圖2 展示的結(jié)果中大多只分析靜態(tài)字段或動態(tài)字段,不進行深入解析。

    圖2 協(xié)議識別結(jié)果Fig.2 The results of protocol identification

    2.3 種子變異模塊

    本模塊在AFLNet 原有的變異策略基礎(chǔ)上分析其中的不足之處,并提出新的優(yōu)化變異策略。AFLNet 現(xiàn)有的變異策略包括確定性變異和隨機變異階段。確定性變異階段主要包括位和字節(jié)的變異,這類針對數(shù)據(jù)報文的變異策略在實際中很難有出色的表現(xiàn),而且會耗費大量的時間。因此,大多在實際操作過程中禁用確定性變異階段,直接進入隨機變異階段。在運行過程中,隨機變異階段通常占有較大比例,而且該階段也通常會覆蓋更多的新路徑。但是隨機變異階段對種子的變異盲目隨機,這會產(chǎn)生大量無效的種子,從而造成模糊效率低下的問題。本文提出消息序列變異策略,并針對原有隨機變異策略進行優(yōu)化。

    首先本文設(shè)計并實現(xiàn)消息序列變異策略。為了能夠變異得到高度切合程序處理的消息,將當前選擇的消息完整地插入該消息序列的任意位置,保持了消息的完整結(jié)構(gòu),也期待能夠獲得更多的狀態(tài)轉(zhuǎn)換。

    然后優(yōu)化隨機變異階段對種子的變異。結(jié)合前面對網(wǎng)絡報文的分析,得到在報文序列中存在一些靜態(tài)字段,而且可以直觀地感受到編程人員在處理這些字段時并不會花費過多的篇幅。也就是在模糊測試過程中變異這類字段,很難會覆蓋到新的執(zhí)行路徑,那么在隨機變異階段再對這類字段進行變異,往往沒有收獲,還降低了模糊測試的效率。因此,為了降低隨機變異階段種子變異的盲目性,本文提出大幅減小甚至不去對種子的靜態(tài)字段進行變異操作,降低了目標程序的執(zhí)行次數(shù)。

    另外,前期協(xié)議逆向中除了區(qū)分靜態(tài)字段和動態(tài)字段外,也分析得到了長度字段。針對長度字段,本文提出的變異方法是利用一些特殊值替換該字段的原有值,以此來測試該字段能否觸發(fā)程序崩潰,如表1 所示。

    表1 字段變異策略Table 1 Field mutation strategy

    對于報文中的其他字段,本文仍以AFLNet 中的隨機變異機制為主要變異方法。為降低變異過程中的隨機性,本文針對前面提到的靜態(tài)字段和長度字段進行調(diào)整,恢復靜態(tài)字段的原有值,并將長度字段賦值為變異后報文的長度。

    3 實驗評估

    本文的實驗是在一臺Ubuntu 18.04 系統(tǒng)上完成的。實驗中提出兩個指標來評價模糊測試工具的性能:一個是觸發(fā)程序崩潰的數(shù)量;另一個是路徑覆蓋,即在測試過程中被測程序覆蓋的路徑數(shù)。本文針對DTLS 協(xié)議和TLS(Transport Layer Security)協(xié)議進行了測試評估:在Eclipse 的TinyDTLS 公開庫上測試DTLS 協(xié)議;在OpenSSL 公開庫上測試TLS協(xié)議。為了保證實驗的公平性,本文選取相同的輸入在同一臺虛擬機中完成實驗。

    3.1 邊覆蓋能力評估

    本文以AFLNet 作為基準程序,利用邊覆蓋對所提方法進行評估。利用AFLNet 和本文設(shè)計的工具ProCluster 分別對TinyDTLS 和OpenSSL 公開庫進行24 h 測試,并分析了測試結(jié)果。表2 所示為最終實驗結(jié)果。

    表2 在TinyDTLS 和OpenSSL 上的測試結(jié)果Table 2 Test results on TinyDTLS and OpenSSL

    由于這兩類協(xié)議均為加密傳輸協(xié)議,測試主要集中在協(xié)議握手階段,很難覆蓋到后續(xù)的狀態(tài)轉(zhuǎn)換,因此覆蓋率都保持相對較低的水平??梢钥吹?,本文所提方法ProCluster 在兩個公開庫的測試中均表現(xiàn)優(yōu)于AFLNet。結(jié)果表明,本文所提的方法具有更好地發(fā)現(xiàn)更多路徑的能力。

    本文進一步比較分析了邊覆蓋數(shù)在兩個公開庫中的實時性能,如圖3 所示。

    圖3 邊覆蓋數(shù)的實時性能比較Fig.3 Real-time performance comparison of the number of edge coverages

    AFLNet 在隨機變異階段隨機性強,而且變異得到的消息很難保持消息內(nèi)的依賴關(guān)系,這樣會產(chǎn)生大量無效測試用例,最終導致性能不佳。根據(jù)觀察,本文方法ProCluster 能夠發(fā)現(xiàn)更多的狀態(tài)轉(zhuǎn)換和路徑覆蓋,主要依賴于設(shè)計的基于消息序列的變異策略,以及在隨機變異得到新的消息時會嘗試恢復靜態(tài)字段、長度字段等消息內(nèi)依賴關(guān)系,使得消息更可能符合規(guī)范。ProCluster 能夠解決代碼塊1 中所處理的長度字段等消息內(nèi)依賴關(guān)系,變異得到測試用例后,恢復消息內(nèi)的靜態(tài)字段(代碼塊1 中第8 行msg[1]的數(shù)據(jù)和9 行msg[2]的數(shù)據(jù)),并根據(jù)消息實際長度對消息內(nèi)長度字段length(代碼塊1 中第12 行的數(shù)據(jù))賦值,使測試用例可以通過目標程序?qū)@些特殊字段的校驗(代碼塊1 第8、9、15 行),更進一步去深入探索被測程序的功能路徑。而AFLNet 利用隨機變異策略得到的測試用例,幾乎無法通過相應的數(shù)據(jù)校驗(代碼塊1 第8、9、15 行),不能更深入地探索程序路徑。因此,本文的方法在實驗時能夠獲得更高的程序覆蓋率。

    3.2 觸發(fā)崩潰路徑產(chǎn)生的能力評估

    DTLS 即數(shù)據(jù)包傳輸層協(xié)議。該協(xié)議在TLS 協(xié)議基礎(chǔ)上進行擴展,使之能夠支持UDP 協(xié)議。TinyDTLS 是DTLS 協(xié)議的一個公開實現(xiàn)。在針對TinyDTLS 公開庫的模糊測試過程中,ProCluster 多次觸發(fā)程序崩潰,而基準對比工具AFLNet 在測試時沒有觸發(fā)任何崩潰。

    對程序崩潰進行分析,發(fā)現(xiàn)當服務器接收數(shù)據(jù)的長度大于設(shè)置的最大長度時,服務器會自動截斷多余數(shù)據(jù),但在后續(xù)處理時只考慮接收數(shù)據(jù)的大小和消息內(nèi)長度依賴之間的關(guān)系,忽略了實際保存在指針中的數(shù)據(jù)長度小于該值,最終造成緩沖區(qū)溢出。因為服務器在處理過程中會校驗消息的長度字段值,ProCluster能夠在變異得到測試用例后,根據(jù)消息的實際長度自動對消息內(nèi)長度字段進行賦值,而AFLNet 變異得到的測試用例無法通過代碼塊1 中的長度字段校驗,因此在測試過程中不能觸發(fā)這類崩潰。

    4 結(jié)束語

    本文結(jié)合協(xié)議逆向分析技術(shù)設(shè)計并實現(xiàn)一種新的狀態(tài)協(xié)議灰盒測試方法。ProCluster 基于對齊聚類實現(xiàn)對協(xié)議格式的自動推斷,能夠?qū)崿F(xiàn)在消息字段級別進行變異操作,以生成更多符合規(guī)范的消息,并最大可能減少無效消息,從而獲得更好的性能。將該方法與AFLNet 在TinyDTLS 和OpenSSL 兩個公開庫上進行測試,結(jié)果表明,本文所提的方法在路徑覆蓋以及崩潰觸發(fā)各方面都優(yōu)于AFLNet。在針對協(xié)議實現(xiàn)的模糊測試研究中,基于字段的變異策略不僅能夠產(chǎn)生更符合程序預期的消息,而且能夠避免同基于位和字節(jié)的變異策略一樣產(chǎn)生大量無效的消息。本文方法在字段劃分時依然不夠精細化,下一步將研究實現(xiàn)像wireshark 一樣的消息解析器,以區(qū)分出更細粒度的字段。

    猜你喜歡
    關(guān)鍵字字段報文
    基于J1939 協(xié)議多包報文的時序研究及應用
    汽車電器(2022年9期)2022-11-07 02:16:24
    圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
    履職盡責求實效 真抓實干勇作為——十個關(guān)鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
    華人時刊(2022年1期)2022-04-26 13:39:28
    CTCS-2級報文數(shù)據(jù)管理需求分析和實現(xiàn)
    成功避開“關(guān)鍵字”
    淺析反駁類報文要點
    中國外匯(2019年11期)2019-08-27 02:06:30
    ATS與列車通信報文分析
    CNMARC304字段和314字段責任附注方式解析
    無正題名文獻著錄方法評述
    關(guān)于CNMARC的3--字段改革的必要性與可行性研究
    建湖县| 汝南县| 通道| 平定县| 彰化市| 汕尾市| 南汇区| 区。| 丹阳市| 尼木县| 汉川市| 察哈| 宝坻区| 涟水县| 海安县| 巴彦县| 鹤山市| 弥渡县| 罗城| 邯郸市| 进贤县| 郓城县| 利川市| 淄博市| 淮阳县| 禹州市| 昌乐县| 永泰县| 华容县| 进贤县| 吴川市| 陕西省| 高州市| 大冶市| 海阳市| 黑龙江省| 乌审旗| 横山县| 龙海市| 普兰县| 石城县|