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