專利名稱:一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法
技術(shù)領(lǐng)域:
本發(fā)明針對大型軟件的安全測試和漏洞挖掘,尤其是針對狀態(tài)協(xié)議實(shí)現(xiàn)軟件的安 全測試,可以應(yīng)用于對可靠性和安全性要求較高的協(xié)議實(shí)現(xiàn)軟件的安全測試中。
背景技術(shù):
隨著信息技術(shù)深入發(fā)展與廣泛應(yīng)用,計(jì)算機(jī)軟件已滲透到人們生活中的各個角 落,軟件系統(tǒng)對人們的生活和生產(chǎn)帶來的影響越來越大,社會的發(fā)展和穩(wěn)定也愈加依賴于 各種軟件系統(tǒng)的高效、安全與穩(wěn)定。然而,在這些軟件系統(tǒng)為全球提供著高效、便捷的各類 電子化服務(wù)與海量信息數(shù)據(jù)的交換的同時,隱含其中的軟件漏洞也像是一顆顆定時炸彈, 時刻威脅著全球經(jīng)濟(jì)與社會秩序的穩(wěn)健與安定。目前,軟件漏洞的發(fā)現(xiàn)已經(jīng)成為黑客入侵、 竊取和破壞的突破口,甚至成為軍事信息對抗以及打擊敵對信息管理與指揮系統(tǒng)的關(guān)鍵。模糊測試(Fuzzing),作為一種黑盒測試技術(shù),是軟件工業(yè)界和學(xué)術(shù)界應(yīng)用最為廣 泛、效果最好的安全測試方法之一。其基本的構(gòu)想是,構(gòu)造經(jīng)變異的畸形的數(shù)據(jù)輸入給目標(biāo) 系統(tǒng),并監(jiān)視系統(tǒng)的運(yùn)行狀態(tài),如果目標(biāo)系統(tǒng)出現(xiàn)異常,則一個軟件缺陷被發(fā)現(xiàn),如果這個 缺陷可以被攻擊者利用,那么它就可以被認(rèn)為是一個漏洞。模糊測試的一般步驟包括1)按照一定的規(guī)則產(chǎn)生測試用例集合;2)向目標(biāo)測試系統(tǒng)逐個輸入測試用例,并觀察目標(biāo)系統(tǒng)的運(yùn)行狀態(tài);3)若目標(biāo)系統(tǒng)出現(xiàn)異常,則把異常狀態(tài)記錄下來,并生成異常報(bào)告;4)測試人員根據(jù)異常報(bào)告分析該異常是否為軟件漏洞。在模糊測試中,影響測試效果和效率的最關(guān)鍵步驟是測試用例的生成,如何生成 高質(zhì)量、高覆蓋的測試用例集合時模糊測試研究的重要內(nèi)容。狀態(tài)協(xié)議是指需要多個有序的報(bào)文交互才能完成其功能的一類協(xié)議。目前,在協(xié) 議的設(shè)計(jì)時,出于可靠性和安全性的考慮,大部分的協(xié)議都包括握手或驗(yàn)證階段。而且,隨 著網(wǎng)絡(luò)技術(shù)深入而廣泛的應(yīng)用,應(yīng)用層網(wǎng)絡(luò)協(xié)議越來越復(fù)雜、龐大,例如如VoIP應(yīng)用中的 基礎(chǔ)協(xié)議SIP Cession Initiation Protocol)就是一個復(fù)雜的應(yīng)用層協(xié)議。因此,狀態(tài)網(wǎng) 絡(luò)協(xié)議的應(yīng)用具有廣泛性和普遍性,對狀態(tài)網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)軟件的模糊測試的研究具有廣泛 的應(yīng)用價(jià)值。在狀態(tài)協(xié)議的測試中,除了需要考慮測試的代碼覆蓋率以外,協(xié)議狀態(tài)的覆蓋率 也是非常重要的一個指標(biāo)。然而,這兩個指標(biāo)具有密切的內(nèi)在聯(lián)系。協(xié)議實(shí)現(xiàn)軟件實(shí)現(xiàn)的 就是對協(xié)議消息的解析、處理,因此對協(xié)議狀態(tài)中的路徑對應(yīng)的就是程序中的執(zhí)行路徑,對 協(xié)議的狀態(tài)路徑的覆蓋也就是對程序執(zhí)行路徑的覆蓋。然而,目前的模糊器對狀態(tài)協(xié)議的支持還遠(yuǎn)遠(yuǎn)不夠。狀態(tài)協(xié)議往往包括握手、認(rèn) 證等過程,如果測試用例的生成不考慮狀態(tài)的轉(zhuǎn)換,而采用傳統(tǒng)的隨機(jī)變異生成方法,那么 目標(biāo)程序在處理測試用例時就會在開始的狀態(tài)放棄后續(xù)的處理過程,被測試的僅僅是第一 個交互狀態(tài),被測試程序很難進(jìn)入到后續(xù)狀態(tài)中,從而導(dǎo)致測試的覆蓋率較低、測試效率較差。
發(fā)明內(nèi)容
本發(fā)明的目的在于支持狀態(tài)協(xié)議實(shí)現(xiàn)軟件的測試,提高狀態(tài)協(xié)議實(shí)現(xiàn)軟件模糊測
試的效率和覆蓋率。為實(shí)現(xiàn)本發(fā)明的目的,采用的技術(shù)方案包括以下步驟1)捕獲目標(biāo)狀態(tài)協(xié)議實(shí)現(xiàn)軟件的正常交互流量;2)從捕獲流量中識別和提取協(xié)議交互消息以及消息交換過程,最終生成一定格式 的協(xié)議腳本文件;3)遍歷目標(biāo)程序協(xié)議狀態(tài)機(jī),產(chǎn)生準(zhǔn)備變異的正常測試用例;4)將正常測試用例變異生成畸形測試用例,執(zhí)行模糊測試。進(jìn)一步地,步驟1)捕獲目標(biāo)狀態(tài)協(xié)議實(shí)現(xiàn)軟件的正常交互流量的方法包括1. 1)把目標(biāo)程序和與之通信的客戶端(或服務(wù)端)安裝在真實(shí)或模擬的環(huán)境中, 建立網(wǎng)絡(luò)環(huán)境,保證能與目標(biāo)正常通信,并且功能正常;1. 2)在目標(biāo)程序通信的接口處,開啟網(wǎng)絡(luò)嗅探和抓包工具,準(zhǔn)備捕獲目標(biāo)程序的 正常通信流量;1. 3)發(fā)起與目標(biāo)程序的正常通信,并盡可能全面地遍歷目標(biāo)程序的各種功能,保 證捕獲的流量包括目標(biāo)程序的所有功能狀態(tài)。在步驟1)中捕獲了正常流量后,步驟2、從捕獲流量中識別和提取協(xié)議交互消息 以及消息交換過程,最終生成一定格式的協(xié)議腳本文件,具體包括2. 1)從通信流量中確定目標(biāo)程序通信的協(xié)議、端口信息,并記錄在腳本文件中;2. 2)提取目標(biāo)程序通信消息。從通信流量中提取目標(biāo)程序通信的內(nèi)容,以傳輸層 (TCP、UPD)報(bào)文為單位,我們把一個報(bào)文定義為一個消息,并對這些消息進(jìn)行編號,內(nèi)容相 同的消息被看作是同一個消息;這些消息內(nèi)容記錄在腳本文件中;2. 3)提取目標(biāo)程序消息通信狀態(tài)機(jī)。按照通信流量中,目標(biāo)程序消息通信的過程, 建立目標(biāo)程序協(xié)議狀態(tài)機(jī);狀態(tài)機(jī)從初始狀態(tài)開始,以消息交互為條件驅(qū)動狀態(tài)遷移,消息 交互產(chǎn)生新的狀態(tài);把狀態(tài)機(jī)以一定形式記錄在腳本文件中。進(jìn)一步地,步驟幻遍歷協(xié)議狀態(tài)機(jī),產(chǎn)生準(zhǔn)備變異的測試用例的方法包括3. 1)使用程序讀取目標(biāo)程序協(xié)議狀態(tài)機(jī)腳本文件,并解析成程序內(nèi)部的狀態(tài)機(jī);3. 2)從狀態(tài)機(jī)的初始節(jié)點(diǎn)開始,遍歷以初始節(jié)點(diǎn)為開始節(jié)點(diǎn)的所有路徑,得到的 每一條路徑就是一個待變異的正常測試用例;3. 3)在狀態(tài)機(jī)遍歷過程中,如果出現(xiàn)環(huán)路,為避免遍歷過程無休止進(jìn)行,通過設(shè)置 一個最長的路徑長度來解決對環(huán)路的遍歷。進(jìn)一步地,步驟4)變異生成畸形測試用例,執(zhí)行模糊測試的方法包括4. 1)對步驟幻中遍歷狀態(tài)機(jī)獲得的正常測試用例進(jìn)行變異,生成畸形測試用例; 變異的具體方法是,把易觸發(fā)程序錯誤的字符串、邊界二進(jìn)制值等異常元素,插入到正常測 試用例中,或使用異常元素替換正常測試用例中的數(shù)據(jù);4. 2)把4. 1)中生成的畸形測試用例逐個輸入給目標(biāo)程序,并觀察目標(biāo)程序的運(yùn) 行狀態(tài),如果目標(biāo)程序出現(xiàn)異常,則生成異常報(bào)告提交給測試人員做進(jìn)一步的分析。與現(xiàn)有技術(shù)相比,本發(fā)明可以達(dá)到的技術(shù)效果是
本發(fā)明方法通過識別目標(biāo)程序正常通信的消息及其交互過程,建立狀態(tài)協(xié)議狀態(tài) 機(jī)腳本,并通過遍歷協(xié)議狀態(tài)機(jī)生成測試用例,從而能夠顯著提高對狀態(tài)協(xié)議實(shí)現(xiàn)軟件的
測試覆蓋率。
圖1是本發(fā)明的總體流程圖;圖2是狀態(tài)協(xié)議腳本文件示例;圖3是協(xié)議狀態(tài)機(jī)的遍歷方法。
具體實(shí)施例方式下面結(jié)合附圖,更詳細(xì)地介紹本發(fā)明的具體實(shí)施方式
。步驟1),捕獲目標(biāo)狀態(tài)協(xié)議實(shí)現(xiàn)軟件的正常交互流量。狀態(tài)協(xié)議包括FTP、SIP等網(wǎng)絡(luò)協(xié)議,本實(shí)施例以FTP服務(wù)器的模糊測試為例說明 本發(fā)明的方法。1. 1)安裝目標(biāo)程序的正常功能環(huán)境。使FTP服務(wù)器以及FTP客戶端能夠正常通 信,保證登陸、查看、下載、上傳等FTP功能能夠正常使用;1.2)開啟網(wǎng)絡(luò)嗅探和抓包工具,準(zhǔn)備捕獲目標(biāo)程序的正常通信流量。目前常用的 抓包工具有Wireshark、Tcpdump等,這些工具都能準(zhǔn)確的捕獲指定接口的網(wǎng)絡(luò)報(bào)文,并以 特定的格式保存下來,方便進(jìn)一步的分析;1. 3)發(fā)起與目標(biāo)程序的正常通信,并盡可能全面地遍歷目標(biāo)程序的各種功能,保 證捕獲的流量包括目標(biāo)程序的所有功能狀態(tài)。在本實(shí)施例中,我們盡可能地使用FTP的所 有功能,包括ACCT、⑶UP、NOOP等一些不經(jīng)常使用的命令。步驟幻,從捕獲流量中識別和提取協(xié)議交互消息以及消息交換過程,最終生成一 定格式的協(xié)議腳本文件。2. 1)提取目標(biāo)程序通信的協(xié)議、端口信息。因?yàn)閭鬏攲雍蛡鬏攲右韵碌膮f(xié)議都是 公開格式的,從捕獲的報(bào)文中,我們能夠提取目標(biāo)程序通信的協(xié)議和端口,如圖2,本實(shí)施例 中的目標(biāo)軟件使用TCP協(xié)議、21號端口 ;2. 2)提取目標(biāo)程序通信消息。從通信流量中提取目標(biāo)程序通信的內(nèi)容,以傳輸層 (TCP、UPD)報(bào)文為單位,我們把一個報(bào)文定義為一個消息,并對這些消息進(jìn)行編號,內(nèi)容相 同的消息被看做是同一個消息;因?yàn)槟壳敖^大部分網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)都是基于TCP/IP協(xié)議,因此針對這些軟件的 測試用例主要是應(yīng)用層數(shù)據(jù)。如圖2,“Message Mode”標(biāo)簽下定義了 M1、M2、M3、M4消息模 式,這些數(shù)據(jù)都是應(yīng)用層數(shù)據(jù),執(zhí)行測試時,再保證這些用例通過相應(yīng)協(xié)議和端口輸入到目 標(biāo)程序中;2. 3)提取目標(biāo)程序消息通信狀態(tài)機(jī)。按照通信流量中,目標(biāo)程序消息通信的過程, 建立目標(biāo)程序協(xié)議狀態(tài)機(jī);狀態(tài)機(jī)從初始狀態(tài)開始,以消息交互為條件驅(qū)動狀態(tài)遷移,消息 交互產(chǎn)生新的狀態(tài);本發(fā)明中,所有狀態(tài)機(jī)都有一個初始狀態(tài)S0,程序的初始狀態(tài)就是狀態(tài)機(jī)的初始 狀態(tài)。如圖2, "State Trans”(狀態(tài)遷移)標(biāo)簽下,<S0, Recv, Ml, Sl>表明,在初始狀態(tài)下,測試器接收到消息Ml后(即目標(biāo)程序發(fā)送消息M1),狀態(tài)機(jī)遷移到Si。所有這些狀態(tài) 遷移的定義就構(gòu)成了目標(biāo)軟件的協(xié)議狀態(tài)機(jī)。步驟幻,遍歷協(xié)議狀態(tài)機(jī),產(chǎn)生準(zhǔn)備變異的測試用例。3. 1)使用程序讀取目標(biāo)程序協(xié)議狀態(tài)機(jī)腳本文件,并解析成程序內(nèi)部的狀態(tài)機(jī);3. 2)從狀態(tài)機(jī)的初始節(jié)點(diǎn)開始,遍歷以初始節(jié)點(diǎn)為開始節(jié)點(diǎn)的所有路徑,得到的 每一條路徑就是一個待變異的正常測試用例;如圖3,圖中表示的是一個具有7個狀態(tài)的網(wǎng)絡(luò)協(xié)議的狀態(tài)變遷圖,其中狀態(tài)之間 的聯(lián)系表示接受或發(fā)送一個交互報(bào)文。在測試S5狀態(tài)時,就至少需要考慮<M1,M3,M6>和 <M2,M4,M6>這兩條路徑,在生成測試用例時,需要保證測試用例能驅(qū)動程序成功到達(dá)S5狀 態(tài)。甚至,我們還需要考慮狀態(tài)環(huán)路的問題,如圖中S4在經(jīng)過M8消息后又回到SO狀態(tài),那 么我們就還需考慮形如<M1,M3,M8,M2,M4,M6>這類路徑。3. 3)在狀態(tài)機(jī)遍歷過程中,如果出現(xiàn)環(huán)路,為避免遍歷過程無休止進(jìn)行,可以通過 設(shè)置一個最長的路徑長度來解決對環(huán)路的遍歷,這種處理方法和IP協(xié)議中的TTL是類似 的。步驟4)變異生成畸形測試用例,執(zhí)行Fuzzing測試。4. 1)對步驟幻中遍歷狀態(tài)機(jī)獲得的正常測試用例進(jìn)行變異,生成畸形測試用例;4. 2)把4. 1)中生成的畸形測試用例逐個輸入給目標(biāo)程序,并觀察目標(biāo)程序的運(yùn) 行狀態(tài),如果目標(biāo)程序出現(xiàn)異常,則生成異常報(bào)告提交給測試人員做進(jìn)一步的分析。
權(quán)利要求
1.一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法,其特征在于,包括以下步驟1)捕獲目標(biāo)狀態(tài)協(xié)議實(shí)現(xiàn)軟件的正常交互流量;2)從捕獲流量中識別和提取協(xié)議交互消息以及消息交換過程,最終生成一定格式的協(xié) 議腳本文件;3)遍歷目標(biāo)程序協(xié)議狀態(tài)機(jī),產(chǎn)生準(zhǔn)備變異的正常測試用例;4)將正常測試用例變異生成畸形測試用例,執(zhí)行模糊測試。
2.根據(jù)權(quán)利要求1所述的一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法,其特征在于, 步驟1)捕獲目標(biāo)狀態(tài)協(xié)議實(shí)現(xiàn)軟件的正常交互流量的方法包括.1.1)把目標(biāo)程序和與之通信的客戶端(或服務(wù)端)安裝在真實(shí)或模擬的環(huán)境中,建立 網(wǎng)絡(luò)環(huán)境,保證能與目標(biāo)正常通信,并且功能正常;.1.2)在目標(biāo)程序通信的接口處,開啟網(wǎng)絡(luò)嗅探和抓包工具,準(zhǔn)備捕獲目標(biāo)程序的正常 通信流量;.1.3)發(fā)起與目標(biāo)程序的正常通信,并盡可能全面地遍歷目標(biāo)程序的各種功能,保證捕 獲的流量包括目標(biāo)程序的所有功能狀態(tài)。
3.根據(jù)權(quán)利要求1所述的一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法,其特征在于, 步驟2、從捕獲流量中識別和提取協(xié)議交互消息以及消息交換過程,最終生成一定格式的 協(xié)議腳本文件,具體包括.2.1)從通信流量中確定目標(biāo)程序通信的協(xié)議、端口信息,并記錄在腳本文件中;.2.2)提取目標(biāo)程序通信消息。從通信流量中提取目標(biāo)程序通信的內(nèi)容,以傳輸層報(bào)文 為單位,我們把一個報(bào)文定義為一個消息,并對這些消息進(jìn)行編號,內(nèi)容相同的消息被看作 是同一個消息;這些消息內(nèi)容記錄在腳本文件中;.2.3)提取目標(biāo)程序消息通信狀態(tài)機(jī)。按照通信流量中,目標(biāo)程序消息通信的過程,建立 目標(biāo)程序協(xié)議狀態(tài)機(jī);狀態(tài)機(jī)從初始狀態(tài)開始,以消息交互為條件驅(qū)動狀態(tài)遷移,消息交互 產(chǎn)生新的狀態(tài);把狀態(tài)機(jī)以一定形式記錄在腳本文件中。
4.根據(jù)權(quán)利要求1所述的一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法,其特征在于, 步驟幻遍歷協(xié)議狀態(tài)機(jī),產(chǎn)生準(zhǔn)備變異的測試用例的方法包括.3.1)使用程序讀取目標(biāo)程序協(xié)議狀態(tài)機(jī)腳本文件,并解析成程序內(nèi)部的狀態(tài)機(jī);.3. 2)從狀態(tài)機(jī)的初始節(jié)點(diǎn)開始,遍歷以初始節(jié)點(diǎn)為開始節(jié)點(diǎn)的所有路徑,得到的每一 條路徑就是一個待變異的正常測試用例;.3.3)在狀態(tài)機(jī)遍歷過程中,如果出現(xiàn)環(huán)路,為避免遍歷過程無休止進(jìn)行,通過設(shè)置一個 最長的路徑長度來解決對環(huán)路的遍歷。
5.根據(jù)權(quán)利要求1所述的一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法,其特征在于, 步驟4)變異生成畸形測試用例,執(zhí)行模糊測試的方法包括.4.1)對步驟幻中遍歷狀態(tài)機(jī)獲得的正常測試用例進(jìn)行變異,生成畸形測試用例;.4.2)把4. 1)中生成的畸形測試用例逐個輸入給目標(biāo)程序,并觀察目標(biāo)程序的運(yùn)行狀態(tài),如果目標(biāo)程序出現(xiàn)異常,則生成異常報(bào)告提交給測試人員做進(jìn)一步的分析。
全文摘要
本發(fā)明公開了一種面向狀態(tài)協(xié)議實(shí)現(xiàn)軟件的模糊測試方法。其步驟包括1)捕獲目標(biāo)狀態(tài)協(xié)議實(shí)現(xiàn)軟件的正常交互流量;2)從捕獲流量中識別和提取協(xié)議交互消息以及消息交換過程,最終生成一定格式的協(xié)議腳本文件;3)遍歷目標(biāo)程序協(xié)議狀態(tài)機(jī),產(chǎn)生準(zhǔn)備變異的正常測試用例;4)將正常測試用例變異生成畸形測試用例,執(zhí)行模糊測試。本發(fā)明方法通過識別目標(biāo)程序正常通信的消息及其交互過程,建立狀態(tài)協(xié)議狀態(tài)機(jī)腳本,并通過遍歷協(xié)議狀態(tài)機(jī)生成測試用例,從而能夠顯著提高對狀態(tài)協(xié)議實(shí)現(xiàn)軟件的測試覆蓋率。
文檔編號G06F21/00GK102087631SQ20111005609
公開日2011年6月8日 申請日期2011年3月9日 優(yōu)先權(quán)日2011年3月9日
發(fā)明者喬林波, 吳逸倫, 張博鋒, 李美劍, 王勇軍, 解培岱, 賴志權(quán) 申請人:中國人民解放軍國發(fā)科學(xué)技術(shù)大學(xué)