摘 要: 模糊測試通過向目標系統(tǒng)注入大量的非預期輸入找出系統(tǒng)漏洞,是安全檢測和漏洞挖掘的有效方法。針對網(wǎng)絡(luò)協(xié)議模糊測試的關(guān)鍵問題之一——測試用例生成方法進行研究,論述了網(wǎng)絡(luò)協(xié)議模糊測試的意義、方法和關(guān)鍵問題,在啟發(fā)式搜索算法和分類樹思想的基礎(chǔ)上提出了啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法,分別選取模糊器Peach和FTP作為驗證平臺與目標協(xié)議,借助IDAPro工具提取啟發(fā)算子并將其寫入配置文件,用于指導目標協(xié)議測試用例的生成過程,通過測試結(jié)果分析驗證了啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法的可行性與有效性。
關(guān)鍵詞: 網(wǎng)絡(luò)協(xié)議模糊測試; 測試用例生成; 啟發(fā)算子; Peach
中圖分類號: TN915.04?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)21?0036?04
Research on network protocol fuzzy test case generation method
based on heuristic search and classification tree
LIU Jingjing1, 2, YUAN Yaodong2
(1. School of Information Engineering, Zhengzhou University, Zhengzhou 450000, China; 2. Zhengzhou Shuqing Medical College, Zhengzhou 450064, China)
Abstract: The fuzzy test is an effective method of security detection and vulnerability mining, which can find out the system vulnerabilities by means of injecting massive unexpected inputs to the target system. The test case generation method as one of the key issues of the network protocol fuzzy test is studied. The significance, method and key issues of network protocol fuzzy test are discussed. The heuristic network protocol fuzzy test case generation method is proposed based on the heuristic search algorithm and classification tree thought. The Peach and FTP are selected as the verification platform and target protocol respectively. The tool IDA Pro is used to extract the heuristic operator, and write it into the configuration file to guide the test case generation process of target protocal. The test result verified the feasibility and effectiveness of fuzzy test case generation method of heuristic network protocol.
Keywords: network protocol fuzzy test; test case generation; heuristic operator; Peach
0 引 言
隨著現(xiàn)代軟件產(chǎn)業(yè)的發(fā)展,軟件規(guī)模不斷擴大,其內(nèi)部邏輯也變得更加復雜[1]。為了保證軟件的質(zhì)量,軟件測試環(huán)節(jié)在軟件生命周期中占據(jù)非常重要的地位,但仍然不可能徹底消滅軟件中所有的邏輯缺陷。模糊測試通過向目標系統(tǒng)提供非預期的輸入并異常監(jiān)視結(jié)果發(fā)現(xiàn)軟件漏洞,是安全檢測和漏洞挖掘的有效方法,也是近年來信息安全領(lǐng)域的研究熱點之一。網(wǎng)絡(luò)協(xié)議模糊測試發(fā)現(xiàn)的漏洞通常具有非常高的危險程度,所以被認為是多數(shù)安全研究者最感興趣的模糊測試類型[2]。在模糊測試的過程中,模糊測試數(shù)據(jù)生成和異常監(jiān)視這兩個關(guān)鍵環(huán)節(jié)需要研究者給予特別關(guān)注。本文對網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法[3]進行研究。
1 啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法
1.1 網(wǎng)絡(luò)協(xié)議分類樹的構(gòu)建過程
一棵網(wǎng)絡(luò)協(xié)議分類樹可以用五元組[PT=(P,F(xiàn),A,V,R)]表示。其中根節(jié)點[P]代表測試目標網(wǎng)絡(luò)協(xié)議;[F]代表目標網(wǎng)絡(luò)協(xié)議的協(xié)議域,[F=field1,field2,field3,…,fieldn;][A]代表協(xié)議域互不相交的屬性,[A=A1?A2?…?][An=attribute11, attribute12, …, attribute1m1, …, attributen1,][attributen2,…,attributenmn;][V]代表協(xié)議域的屬性值,[V=][V11∪V12∪…V1m1∪V21∪V22∪…∪Vn1∪Vn2∪…∪][Vnmn=][valuevalue∈Vij且i=1,2,…,n,j=1,2,…,mi;][R]代表協(xié)議分類樹中父節(jié)點和子節(jié)點之間的關(guān)系,包括目標協(xié)議[P]與協(xié)議域[F]之間的關(guān)系、協(xié)議域[F]與屬性[A]之間的關(guān)系、屬性[A]與屬性值[V]之間的關(guān)系等,[R=][relation1,relation2,relation3,]其中[relation1=
] [1≤i≤n,][relation2=
1.2 網(wǎng)絡(luò)協(xié)議模糊測試數(shù)據(jù)生成過程
基于分類樹的網(wǎng)絡(luò)協(xié)議模糊測試數(shù)據(jù)生成過程可以概括為四個步驟:
(1) 選定測試目標網(wǎng)絡(luò)協(xié)議[P,]并根據(jù)其規(guī)范劃分得到協(xié)議域集合[F=field1,field2,field3,…,fieldn,]該目標協(xié)議可以用[n]元序組[
(2) 針對步驟(1)中得到的每個協(xié)議域的屬性進行分類,得到描述協(xié)議域[fieldi]的屬性集合[Ai=attributei1,][attributei2,…,attributeimi,]其中每個屬性[attributeij]分別在離散的屬性值集合[Vij]中取值[(1≤i≤n,1≤j≤mi)。]
(3) 對每個協(xié)議域[fieldi]不同屬性的屬性值進行相互組合,得到面向該協(xié)議域的測試數(shù)據(jù)集合[Si=Vi1×][Vi2×…×Vimi(1≤i≤n) 。]
(4) 依次從面向協(xié)議域[fieldi]的測試數(shù)據(jù)集合[Si]中取值,對描述目標協(xié)議的[n]元序組
1.3 啟發(fā)算子在網(wǎng)絡(luò)協(xié)議分類樹中的引入
啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法基于分類樹的網(wǎng)絡(luò)協(xié)議模糊測試數(shù)據(jù)生成過程中加入了啟發(fā)算子的定義,利用啟發(fā)算子演變得到啟發(fā)式規(guī)則,用于指導每個協(xié)議域的測試數(shù)據(jù)生成過程[4]。
結(jié)合文中給出的基于分類樹的網(wǎng)絡(luò)協(xié)議模糊測試數(shù)據(jù)生成的具體過程,需要在步驟(2)中增加獲取啟發(fā)算子的操作,用于對協(xié)議域?qū)傩灾导蟍Vij]的精簡。由于應用啟發(fā)算子后并未對步驟(1)產(chǎn)生影響,而且該步驟的實現(xiàn)難度比較小,通常只需要對協(xié)議規(guī)范進行解讀便可以獲取用于描述目標協(xié)議的[n]元序組
啟發(fā)算子(Heuristic Operator)的定義可以用映射關(guān)系[fh:Vij→V*ij]描述。啟發(fā)算子的定義可以源于協(xié)議分類樹中父節(jié)點與子節(jié)點之間的關(guān)系集合[R,]也可以源于對目標網(wǎng)絡(luò)協(xié)議的協(xié)議規(guī)范分析,或者可以借助第三方工具進行提取[5]。
1.4 啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成過程
啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成過程需要利用啟發(fā)算子[h]實現(xiàn)協(xié)議域?qū)傩灾导系木啠瑸榱朔奖憔唧w的實現(xiàn)過程,可以把啟發(fā)算子寫入相應的配置文件[6]。
在配置文件啟發(fā)算子定義的基礎(chǔ)上可以演變得到形如“if…,then…”的啟發(fā)規(guī)則,用于剔除屬性值集合[Vij]中的無效值,從而得到精簡的屬性值集合[V*ij。]
面向協(xié)議域[fieldi]的測試數(shù)據(jù)集合[Si]的生成過程可以視作協(xié)議域的屬性值集合,進行笛卡爾乘積運算的過程,即[Si=Vi1×Vi2×…×Vimi(1≤i≤n)]。屬性值集合在應用啟發(fā)算子進行精簡之后元素個數(shù)減少,即[V*ij<][Vij][(1≤i≤n,1≤j≤mi)]。那么不難得出,精簡后面向協(xié)議域[fieldi]的測試數(shù)據(jù)集合滿足[S*i 任取[mi]元序組 2 模糊測試用例生成方法的實現(xiàn) 2.1 驗證平臺網(wǎng)絡(luò)協(xié)議模糊器的選取 根據(jù)各網(wǎng)絡(luò)協(xié)議模糊器與驗證平臺選取標準的匹配結(jié)果可知,模糊器Peach和Sulley相對于SPIKE而言,更加符合本文對驗證平臺的選取標準。考慮到模糊器Peach相對于Sulley而言對測試執(zhí)行前的準備工作要求更為簡單,而其維護更新情況更加頻繁,最終選取模糊器Peach作為啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法的驗證平臺。 2.2 啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成 2.2.1 目標協(xié)議與實施方案的選取 根據(jù)每個請求與之前的請求是否相關(guān),可以把網(wǎng)絡(luò)協(xié)議分為無狀態(tài)協(xié)議(Stateless Protocol)和有狀態(tài)協(xié)議(Stateful Protocol)[7]。無狀態(tài)協(xié)議是指網(wǎng)絡(luò)協(xié)議的相鄰數(shù)據(jù)包之間沒有上下文的關(guān)聯(lián)性;有狀態(tài)協(xié)議是指相鄰的數(shù)據(jù)包之間具有上下文的關(guān)聯(lián)性。 在實際運用中,有狀態(tài)協(xié)議比無狀態(tài)協(xié)議的應用更加普遍。本文選取有狀態(tài)協(xié)議的典型代表FTP協(xié)議作為目標協(xié)議,對啟發(fā)式模糊測試用例生成方法進行實例驗證。FTP協(xié)議采用客戶端/服務(wù)器的工作模式,在現(xiàn)實世界具有極為廣泛的應用,選取FTP作為模糊測試目標協(xié)議不僅具有普遍的現(xiàn)實意義,同時還能與本文對啟發(fā)式模糊測試用例生成方法的描述結(jié)合起來,避免出現(xiàn)針對相同步驟的多次重復分析[8]。 從客戶端連接遠程FTP服務(wù)程序的過程可以分為建立連接、傳送數(shù)據(jù)、釋放連接三個階段,具體的通信過程可以描述為: (1) 首先建立TCP連接,客戶端向FTP服務(wù)器發(fā)送USER命令表明身份; (2) 然后服務(wù)器要求客戶端輸入密碼,客戶端發(fā)送PASS命令將密碼發(fā)送給服務(wù)器,服務(wù)器對客戶端進行身份認證; (3) 身份認證通過后客戶端可以傳輸其他FTP命令進行文件操作,需要結(jié)束此次連接時用QUIT命令退出。 FTP客戶端與FTP服務(wù)器進行通信的過程中,首先生成一個TCP虛擬連接用于驗證控制信息,然后再生成一個單獨的TCP連接用于數(shù)據(jù)傳輸。具體如圖1所示。 圖1 FTP通信使用的兩個TCP連接 2.2.2 目標協(xié)議分類樹的構(gòu)建 FTP命令可以表示為三元序組 2.2.3 啟發(fā)算子的抽取與啟發(fā)規(guī)則的定義 文中選取FTP作為目標協(xié)議對啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法進行驗證,實現(xiàn)啟發(fā)算子的提取和定義之前,需要首先對FTP協(xié)議傳輸過程中的數(shù)據(jù)單位信息有所了解[9]。在計算機網(wǎng)絡(luò)中,對等層之間傳遞的數(shù)據(jù)單位稱為協(xié)議數(shù)據(jù)單元(Protocol Data Unit, PDU),OSI七層參考模型中的各層協(xié)議數(shù)據(jù)單元具體如表1所示。 目標協(xié)議FTP屬于OSI七層參考模型中的應用層協(xié)議,其協(xié)議數(shù)據(jù)單元是數(shù)據(jù)(Data),針對FTP協(xié)議的測試需要依托利用FTP協(xié)議進行通信的程序完成。本文借助IDA Pro工具實現(xiàn)針對測試目標程序的啟發(fā)算子的提取。利用IDA Pro工具提取啟發(fā)算子的具體操作步驟示意圖如圖2所示。 2.2.4 利用啟發(fā)算子指導測試數(shù)據(jù)的生成 啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法中,啟發(fā)算子的引入是為了減小測試用例生成過程的搜索空間,實現(xiàn)網(wǎng)絡(luò)協(xié)議模糊測試用例生成過程的優(yōu)化[10]。啟發(fā)算子配置文件constantList.conf和funcList.conf與具體的啟發(fā)規(guī)則之間的關(guān)系如圖3所示。 圖3 啟發(fā)算子及其配置文件與啟發(fā)規(guī)則的關(guān)系示意圖 在驗證平臺模糊器Peach完成對啟發(fā)算子配置文件的處理之后,就可以開始利用具體的啟發(fā)規(guī)則指導協(xié)議域測試數(shù)據(jù)的具體生成過程。啟發(fā)式的協(xié)議域測試數(shù)據(jù)由格式化字符串、普通字符串、整型值、不同編碼方式的字符串四個部分組成。 3 網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法的驗證 3.1 模糊測試方案與環(huán)境要求 啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法的實例驗證過程在Windows操作系統(tǒng)環(huán)境下進行。利用模糊器Peach2.3.8源碼在Windows平臺下執(zhí)行模糊測試所依賴的工具或者庫,主要包括網(wǎng)絡(luò)封包抓取工具Winpcap、調(diào)試工具Windbg、Python擴展等,要求在測試開始之前完成相應的安裝準備工作。 測試實施方案示意圖如圖4所示。從圖4中可知,模糊器Peach扮演客戶端的角色對FTP服務(wù)端程序的安全性進行測試,而模糊器所集成的監(jiān)控模塊在測試過程中用于收集測試目標的行為并分析判斷測試目標是否出現(xiàn)異常。 鑒于Open?FTPD1.2存在已知的安全漏洞,更適合作為模糊測試效果實例驗證的測試目標程序。采用該FTP服務(wù)端程序作為測試目標程序,在模糊器Peach的平臺上對啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法的有效性進行驗證??紤]到模糊測試的執(zhí)行時間,實例驗證過程只選擇FTP命令中最常用的USER命令進行測試,以簡化測試環(huán)節(jié)的處理。 利用模糊器Peach開始測試前,首先需要針對FTP服務(wù)端程序Open?FTPD定義相應的Pit文件openftp.xml,從而構(gòu)造出完整的模糊器。Pit文件中DataModel元素用于對數(shù)據(jù)模型進行定義,包括數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)關(guān)系等,一個Pit文件中可以定義多個數(shù)據(jù)模型。 Pit文件中的Test元素用于定義測試配置信息,用于指定測試中所用的狀態(tài)模型StateModel,Publisher等信息。其中狀態(tài)模型用于描述如何與目標程序進行通信,而Publisher用于定義模糊器Peach的I/O連接,構(gòu)造網(wǎng)絡(luò)協(xié)議數(shù)據(jù)流或者文件流等。 Pit文件中的Agent元素用于定義代理和監(jiān)視器信息,指定模糊器Peach在測試執(zhí)行過程中用于監(jiān)視測試目標程序異常的調(diào)試器。每個Pit文件中可以定義多個Agent元素,每個Agent元素中可以定義多個Monitor。 3.2 實驗驗證與結(jié)果分析 3.2.1 模糊測試效率分析 利用模糊器Peach的語法命令“peach?cpeach_xml_file[run_name]”分別對應用啟發(fā)式模糊測試用例生成方法前后所生成的測試用例數(shù)量進行計算。根據(jù)運行結(jié)果可知,改進前的測試用例為12 966個,而改進后的數(shù)量減少到2 532個,僅為原有測試用例總數(shù)的19.5%,證明啟發(fā)式模糊測試用例生成方法有效地減少了用例生成的總數(shù)量。 模糊測試通過向目標程序注入大量的畸形數(shù)據(jù)試圖發(fā)現(xiàn)測試目標中存在的漏洞,測試用例的數(shù)量直接關(guān)系到模糊測試的執(zhí)行時間,亦即模糊測試的效率。根據(jù)實驗結(jié)果可知,改進前的測試執(zhí)行時間為10小時16分鐘28秒,而改進后的執(zhí)行時間降低到22分鐘16秒,僅為改進前的測試執(zhí)行時間的約3.6%,顯著提升了模糊測試的效率。 3.2.2 發(fā)現(xiàn)漏洞能力分析 針對OpenFTPD1.2執(zhí)行模糊測試在應用啟發(fā)式模糊測試用例生成方法前后,均捕獲到的漏洞包括Tainted Data Controls Branch Selection和Tainted Data Passed To Function兩種類型,證明改進后的測試用例的有效性并沒有因為總數(shù)量的減少而削弱。 在能夠觸發(fā)測試目標程序異常的模糊測試用例數(shù)量方面,應用啟發(fā)式模糊測試用例生成方法前模糊器Peach觸發(fā)Tainted Data Controls Branch Selection異常的用例數(shù)量為2個,觸發(fā)Tainted Data Passed To Function異常的用例數(shù)量為18個。 應用啟發(fā)式模糊測試用例生成方法前模糊器Peach觸發(fā)Tainted Data Controls Branch Selection異常的用例數(shù)量為12個,觸發(fā)Tainted Data Passed To Function異常的用例數(shù)量為22個。 改進前觸發(fā)測試目標程序異常的測試用例總數(shù)為20個,占測試用例總數(shù)量的比例為[2012 966≈]0.15%;改進后觸發(fā)測試目標程序異常的測試用例總數(shù)為34個,占測試用例總數(shù)量的比例為[342 532≈]1.34%,有效測試用例的比例約為改進前的9倍,證明了啟發(fā)式模糊測試用例生成方法的有效性。 3.2.3 測試用例詳細分析 針對應用啟發(fā)式模糊測試用例生成方法前后的有效測試用例做詳細比較,可以把改動前后有效測試用例的存在情況分為三種情況,具體如表2所示。 4 結(jié) 論 本文在啟發(fā)式搜索算法和分類樹思想的基礎(chǔ)上提出了啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法,并對該方法的可行性和有效性進行了實例驗證。文中對啟發(fā)式網(wǎng)絡(luò)協(xié)議模糊測試用例生成方法的研究仍然存在很多不足之處,目前尚未對OSI參考模型中其他層的網(wǎng)絡(luò)協(xié)議進行具體實現(xiàn)與驗證,需要在后續(xù)的研究過程中進行更加深入的探討,在具體實現(xiàn)和實例驗證的基礎(chǔ)上總結(jié)提取啟發(fā)式算子的常用方法。 參考文獻 [1] 李偉明,張愛芳,劉建財,等.網(wǎng)絡(luò)協(xié)議的自動化模糊測試漏洞挖掘方法[J].計算機學報,2011,34(2):242?255. [2] 李卓君.一種新的協(xié)議安全漏洞檢測方法[J].計算機安全,2012(7):79?82. [3] 張寶峰,張翀斌,許源.基于模糊測試的網(wǎng)絡(luò)協(xié)議漏洞挖掘[J].清華大學學報(自然科學版),2009,49(z2):2113?2118. [4] 李玉,錢雪忠.啟發(fā)式遺傳算法求解兩兩組合測試用例集[J].計算機工程與設(shè)計,2011,32(5):1722?1724. [5] 潘曉英,陳皓.基于組織進化粒子群優(yōu)化的測試用例自動生成[J].計算機應用研究,2012,29(6):2065?2067. [6] 田江,高熾揚,李亞偉.基于智能算法的測試數(shù)據(jù)自動生成模型研究[J].信息安全與技術(shù),2010(11):27?29. [7] 崔應霞,李龍澍,姚晟.組合測試用例集的動態(tài)生成算法[J].電子科技大學學報,2011,40(7):612?619. [8] 黃玉涵,曾凡平,潘能剛,等.基于搜索算法的測試用例優(yōu)化問題研究[J].小型微型計算機系統(tǒng),2011,32(5):840?844. [9] 游亮,盧炎生.測試用例集啟發(fā)式約簡算法分析與評價[J].計算機科學,2011,38(12):147?150. [10] 劉龍霞,吳軍華.基于分類樹和貪心算法的測試數(shù)據(jù)自動生成方法[J].計算機工程與設(shè)計,2011,32(8):2734?2736.