本發(fā)明涉及軟件安全測(cè)試的技術(shù)領(lǐng)域,特別是涉及一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法和裝置。
背景技術(shù):
隨著信息技術(shù)的快速發(fā)展與廣泛應(yīng)用,計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)滲透到人們生活中的各個(gè)部分,人們生活的進(jìn)步也越來(lái)越依賴(lài)于網(wǎng)絡(luò)的高效、安全與穩(wěn)定。保障網(wǎng)絡(luò)安全的一個(gè)重要前提就是挖掘并修復(fù)系統(tǒng)中的軟件漏洞,而軟件漏洞的挖掘更多地是通過(guò)軟件測(cè)試來(lái)完成。
模糊測(cè)試作為一種黑盒測(cè)試技術(shù),是軟件工業(yè)界應(yīng)用最為廣泛、效果最好的軟件測(cè)試方法之一,它主要是通過(guò)向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來(lái)發(fā)現(xiàn)軟件漏洞。其核心思想是自動(dòng)或半自動(dòng)的生成隨機(jī)數(shù)據(jù)輸入到一個(gè)程序中,并監(jiān)視程序異常,如崩潰,斷言失敗,日志異常等,以發(fā)現(xiàn)可能的程序錯(cuò)誤。在模糊測(cè)試過(guò)程中,獲取可以迭代測(cè)試用例的協(xié)議描述文件是非常重要的一個(gè)步驟。
然而,傳統(tǒng)的模糊測(cè)試技術(shù)主要依賴(lài)于人工來(lái)分析協(xié)議組成信息,然后根據(jù)協(xié)議組成信息手動(dòng)創(chuàng)建協(xié)議描述文件,導(dǎo)致模糊測(cè)試的效率低下,而且當(dāng)協(xié)議組成信息有變更時(shí),維護(hù)成本高。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要針對(duì)上述技術(shù)問(wèn)題,提供一種高效率、低維護(hù)成本的基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法和裝置。
一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法,所述方法包括:
抓取并存儲(chǔ)業(yè)務(wù)請(qǐng)求包;
獲取所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型;
根據(jù)所述協(xié)議類(lèi)型解析出協(xié)議組成信息,并將所述協(xié)議類(lèi)型和所述協(xié)議組 成信息保存為協(xié)議定義文件;
在所述協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件。
一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置,所述裝置包括:
業(yè)務(wù)請(qǐng)求包抓取模塊,用于抓取并存儲(chǔ)業(yè)務(wù)請(qǐng)求包;
協(xié)議類(lèi)型獲取模塊,用于獲取所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型;
解析模塊,用于根據(jù)所述協(xié)議類(lèi)型解析出協(xié)議組成信息,并將所述協(xié)議類(lèi)型和所述協(xié)議組成信息保存為協(xié)議定義文件;
協(xié)議描述文件生成模塊,用于在所述協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件。
上述基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法和裝置,通過(guò)抓取業(yè)務(wù)請(qǐng)求包,并獲取所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型,這樣根據(jù)協(xié)議類(lèi)型就可以解析出業(yè)務(wù)請(qǐng)求包的協(xié)議組成信息,然后再在所述協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件,不需要人工手動(dòng)創(chuàng)建協(xié)議描述文件,從而提高了模糊測(cè)試的效率;另外,當(dāng)協(xié)議組成信息有變更時(shí),也會(huì)自動(dòng)根據(jù)變更后的協(xié)議組成信息生成協(xié)議描述文件,從而有效的降低了維護(hù)成本。
附圖說(shuō)明
圖1為一實(shí)施例中基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法實(shí)現(xiàn)的應(yīng)用環(huán)境圖;
圖2為一個(gè)實(shí)施例中業(yè)務(wù)終端的內(nèi)部結(jié)構(gòu)圖;
圖3為一個(gè)實(shí)施例中基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法的流程示意圖;
圖4為一個(gè)實(shí)施例中獲取業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型的具體流程圖;
圖5為一個(gè)實(shí)施例中在協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件的具體流程圖;
圖6為一個(gè)具體應(yīng)用場(chǎng)景中生成協(xié)議定義文件的示意圖;
圖7為一個(gè)具體應(yīng)用場(chǎng)景中生成協(xié)議描述文件的示意圖;
圖8為一個(gè)實(shí)施例中基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置的結(jié)構(gòu)框圖;
圖9為另一個(gè)實(shí)施例中基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,為一個(gè)實(shí)施例中基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法實(shí)現(xiàn)的應(yīng)用環(huán)境圖。該應(yīng)用環(huán)境包括業(yè)務(wù)終端102、服務(wù)器104和被測(cè)目標(biāo)106。其中業(yè)務(wù)終端102可以是直接產(chǎn)生業(yè)務(wù)請(qǐng)求包的臺(tái)式計(jì)算機(jī)、手機(jī)、筆記本電腦或者平板電腦等,也可以是對(duì)業(yè)務(wù)請(qǐng)求包進(jìn)行轉(zhuǎn)發(fā)的一個(gè)中介服務(wù)器等。業(yè)務(wù)終端102上可以運(yùn)行各種應(yīng)用,例如各種充值應(yīng)用、購(gòu)物應(yīng)用等,這些應(yīng)用在為用戶(hù)提供服務(wù)的過(guò)程中會(huì)產(chǎn)生一些業(yè)務(wù)請(qǐng)求包。業(yè)務(wù)請(qǐng)求包可以是用戶(hù)通過(guò)業(yè)務(wù)終端102查看商品詳情、下單、支付等各種操作而向服務(wù)器104發(fā)起的請(qǐng)求包。業(yè)務(wù)終端102和服務(wù)器104通過(guò)網(wǎng)絡(luò)進(jìn)行通信。被測(cè)目標(biāo)106可以為包含待測(cè)軟件的終端或服務(wù)器等,業(yè)務(wù)終端102在最終生成協(xié)議描述文件之后就可以得到大量的測(cè)試數(shù)據(jù),將這些測(cè)試數(shù)據(jù)發(fā)送至被測(cè)目標(biāo)106以進(jìn)行模糊測(cè)試。
在一個(gè)實(shí)施例中,上述圖1中的業(yè)務(wù)終端102的內(nèi)部結(jié)構(gòu)示意圖如圖2所示。該業(yè)務(wù)終端102包括通過(guò)系統(tǒng)總線連接的處理器、內(nèi)存儲(chǔ)器、非易失性存儲(chǔ)介質(zhì)、輸入設(shè)備和網(wǎng)絡(luò)接口。其中,該業(yè)務(wù)終端102的存儲(chǔ)介質(zhì)存儲(chǔ)有操作系統(tǒng)和一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置,該基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置用于實(shí)現(xiàn)一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法。該業(yè)務(wù)終端102的處理器被配置為執(zhí)行一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法,用于提供計(jì)算和控制能力,支撐整個(gè)業(yè)務(wù)終端102的運(yùn)行,該業(yè)務(wù)終端102的內(nèi)存儲(chǔ)器為存儲(chǔ)介質(zhì)中的基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置的運(yùn)行提供環(huán)境,該業(yè)務(wù)終端102的網(wǎng)絡(luò)接口用于與服務(wù)器104進(jìn)行網(wǎng)絡(luò)通信,如發(fā)送業(yè)務(wù)請(qǐng)求包至服務(wù)器104等。該業(yè)務(wù)終端102的輸入設(shè)備用于進(jìn)行業(yè)務(wù)操作等以使業(yè)務(wù)終端102產(chǎn)生業(yè)務(wù)請(qǐng)求包。
自動(dòng)化協(xié)議適配(automatic protocol adapt)是指自動(dòng)抓取業(yè)務(wù)請(qǐng)求包,并 根據(jù)業(yè)務(wù)請(qǐng)求包對(duì)應(yīng)的協(xié)議格式解析協(xié)議組成信息,然后根據(jù)協(xié)議類(lèi)型加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義以生成可以自動(dòng)迭代測(cè)試用例的協(xié)議描述文件的過(guò)程。
如圖3所示,為一個(gè)實(shí)施例中基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法的流程圖。圖3中的基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法以運(yùn)行于圖1中的業(yè)務(wù)終端進(jìn)行舉例說(shuō)明,所述方法包括如下步驟:
步驟S302:抓取并存儲(chǔ)業(yè)務(wù)請(qǐng)求包。
具體的,業(yè)務(wù)終端安裝有相關(guān)應(yīng)用的客戶(hù)端軟件,該客戶(hù)端軟件可用于自動(dòng)抓取業(yè)務(wù)請(qǐng)求包。業(yè)務(wù)請(qǐng)求包是指用戶(hù)通過(guò)業(yè)務(wù)終端對(duì)相關(guān)應(yīng)用進(jìn)行操作時(shí)所產(chǎn)生的業(yè)務(wù)數(shù)據(jù)包,比如在充值應(yīng)用中查看商品詳情頁(yè)、下單、支付等操作都會(huì)向服務(wù)器發(fā)起業(yè)務(wù)請(qǐng)求,從而產(chǎn)生業(yè)務(wù)請(qǐng)求包。用戶(hù)通過(guò)安裝在業(yè)務(wù)終端的客戶(hù)端軟件來(lái)抓取這些業(yè)務(wù)請(qǐng)求包,并同時(shí)對(duì)業(yè)務(wù)請(qǐng)求包進(jìn)行存儲(chǔ)。
步驟S304:獲取業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型。
具體的,每種協(xié)議類(lèi)型的協(xié)議格式都不同,在業(yè)務(wù)終端與服務(wù)器的通信過(guò)程中,使用某種類(lèi)型的協(xié)議就必須遵循其對(duì)應(yīng)的協(xié)議格式才能正確通信,因此,獲取業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型是非常必要的一個(gè)步驟。
在一個(gè)實(shí)施例中,協(xié)議類(lèi)型可以是常用的公共協(xié)議,如http、ftp、soap等,也可以是各種應(yīng)用程序自定義的私有協(xié)議。
步驟S306:根據(jù)協(xié)議類(lèi)型解析出協(xié)議組成信息,并將協(xié)議類(lèi)型和協(xié)議組成信息保存為協(xié)議定義文件。
具體的,在獲取到業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型之后,先構(gòu)建一個(gè)協(xié)議解析器,然后利用協(xié)議解析器解析出該協(xié)議的協(xié)議組成信息,解析時(shí)會(huì)用到協(xié)議格式知識(shí)。協(xié)議格式知識(shí)是指關(guān)于協(xié)議規(guī)范及各部分組成格式的知識(shí)。比如http的協(xié)議組成格式由請(qǐng)求行、請(qǐng)求報(bào)頭、請(qǐng)求正文所組成,請(qǐng)求行以一個(gè)方法符號(hào)開(kāi)頭,以空格分開(kāi),后面跟著請(qǐng)求的URI(Uniform Resource identifier,統(tǒng)一資源標(biāo)識(shí)符)和協(xié)議的版本,然后以一個(gè)回車(chē)和換行隔開(kāi)請(qǐng)求行和請(qǐng)求報(bào)頭;請(qǐng)求報(bào)頭和請(qǐng)求正文之間有個(gè)空行。
基于以上的協(xié)議格式知識(shí),解析出相應(yīng)的協(xié)議組成信息,而且只選取可以區(qū)別每個(gè)獨(dú)立請(qǐng)求和影響請(qǐng)求有效性的關(guān)鍵信息,比如host、cgi名、url參數(shù)列 表、cookie(包含會(huì)話(huà)信息,比如登錄狀態(tài))、http請(qǐng)求類(lèi)型等。
如果http請(qǐng)求類(lèi)型為post,那么在解析post類(lèi)請(qǐng)求的body內(nèi)容時(shí),需要確定body內(nèi)容的格式(key-value、json、xml)。Xml格式以<?xml>開(kāi)頭,key-value格式以&間隔key和value,json格式是一個(gè)json數(shù)據(jù),通過(guò)上述特征可以很容易地辨別出body內(nèi)容的格式,并將解析的內(nèi)容存入到協(xié)議定義文件中,便于步驟S308中針對(duì)不同的body內(nèi)容格式進(jìn)行參數(shù)化。
可以理解,協(xié)議定義文件包含了協(xié)議類(lèi)型和協(xié)議組成信息。
步驟S308:在協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件。
具體的,從協(xié)議定義文件中可以讀取到協(xié)議的類(lèi)型,按照該協(xié)議的協(xié)議格式知識(shí),加入模糊測(cè)試數(shù)據(jù)類(lèi)型定義,以對(duì)協(xié)議定義文件中的內(nèi)容進(jìn)行拼裝,就可以反向構(gòu)建一條新的符合該協(xié)議的請(qǐng)求,即協(xié)議描述文件。
協(xié)議描述文件描述了協(xié)議的格式以及各組成參數(shù)的數(shù)據(jù)類(lèi)型、初始值等。協(xié)議描述文件可以生成單獨(dú)的請(qǐng)求,將這些請(qǐng)求組合在一起可以組成會(huì)話(huà)。通過(guò)協(xié)議描述文件中嵌入的模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,利用各數(shù)據(jù)類(lèi)型的測(cè)試數(shù)據(jù)生成規(guī)則可以迭代生成大量的測(cè)試數(shù)據(jù)。將這些測(cè)試數(shù)據(jù)發(fā)送到被測(cè)目標(biāo)就可以對(duì)被測(cè)目標(biāo)進(jìn)行測(cè)試,這也是模糊測(cè)試的基礎(chǔ)。
上述基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法,通過(guò)抓取業(yè)務(wù)請(qǐng)求包,并獲取所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型,這樣根據(jù)協(xié)議類(lèi)型就可以解析出業(yè)務(wù)請(qǐng)求包的協(xié)議組成信息,然后再在所述協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件,不需要人工手動(dòng)創(chuàng)建協(xié)議描述文件,從而提高了模糊測(cè)試的效率;另外,當(dāng)協(xié)議組成信息有變更時(shí),也會(huì)自動(dòng)根據(jù)變更后的協(xié)議組成信息生成協(xié)議描述文件,從而有效的降低了維護(hù)成本。
如圖4所示,在一個(gè)實(shí)施例中,獲取業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型的步驟包括:
步驟S402:構(gòu)建協(xié)議格式特征庫(kù)。
具體的,每種類(lèi)型的協(xié)議都有對(duì)應(yīng)的格式特征,將不同類(lèi)型的協(xié)議的格式特征存儲(chǔ)在一起,以構(gòu)建一個(gè)協(xié)議格式特征庫(kù)。
步驟S404:將業(yè)務(wù)請(qǐng)求包所采用的協(xié)議格式與協(xié)議格式特征庫(kù)中的協(xié)議格 式進(jìn)行匹配。
將業(yè)務(wù)請(qǐng)求包所采用的協(xié)議格式與特征庫(kù)中的協(xié)議格式一一進(jìn)行匹配以區(qū)分不同的協(xié)議類(lèi)型。如果匹配成功則輸出匹配結(jié)果,如果匹配不成功,即業(yè)務(wù)請(qǐng)求包為其他應(yīng)用程序自定義的協(xié)議格式,無(wú)法在協(xié)議格式特征庫(kù)中找到對(duì)應(yīng)的協(xié)議格式,則丟棄該業(yè)務(wù)請(qǐng)求包,不進(jìn)行處理。
步驟S406:根據(jù)匹配結(jié)果確定業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型。
匹配成功后,就可以根據(jù)匹配結(jié)果確定業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型。
請(qǐng)參照?qǐng)D5,在一個(gè)實(shí)施例中,在協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件的步驟包括:
步驟S502:根據(jù)協(xié)議定義文件選取相應(yīng)的協(xié)議適配器。
具體的,在解析業(yè)務(wù)請(qǐng)求包時(shí)會(huì)把業(yè)務(wù)請(qǐng)求包所屬的協(xié)議類(lèi)型保存到協(xié)議定義文件中(proto_type字段),這樣就可以直接根據(jù)協(xié)議類(lèi)型來(lái)找到對(duì)應(yīng)的協(xié)議適配器。
在一個(gè)實(shí)施例中,協(xié)議適配器可以維護(hù)公共協(xié)議的格式封裝,如http協(xié)議、tcp/ip協(xié)議、rpc協(xié)議及soap協(xié)議等。協(xié)議適配器需要提供對(duì)應(yīng)協(xié)議的無(wú)差別調(diào)用,當(dāng)選用某協(xié)議時(shí),可以將模糊測(cè)試的數(shù)據(jù)類(lèi)型定義按照該協(xié)議的要求進(jìn)行組裝并注入被測(cè)目標(biāo)。
在一個(gè)實(shí)施例中,系統(tǒng)提供可供擴(kuò)展的接口,可以定義新的協(xié)議并開(kāi)發(fā)新的適配器,但是必須遵循以下協(xié)議規(guī)范,如表1所示。
表1:開(kāi)發(fā)新協(xié)議的協(xié)議規(guī)范
步驟S504:按照協(xié)議格式加入數(shù)據(jù)類(lèi)型定義以拼裝出協(xié)議描述文件。
具體的,協(xié)議適配器可以按照協(xié)議格式知識(shí),加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定 義以對(duì)協(xié)議解析器解析出的協(xié)議組成信息進(jìn)行改造,從而反向構(gòu)建為一個(gè)新的符合該協(xié)議的請(qǐng)求,即協(xié)議描述文件。
在一個(gè)實(shí)施例中,上述加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義之前,實(shí)現(xiàn)了對(duì)模糊測(cè)試的基礎(chǔ)數(shù)據(jù)類(lèi)型的二次封裝,將所有的基礎(chǔ)數(shù)據(jù)類(lèi)型封裝在一個(gè)新的數(shù)據(jù)類(lèi)型中,這樣在生成協(xié)議描述文件時(shí)不需要對(duì)協(xié)議參數(shù)的具體數(shù)據(jù)類(lèi)型進(jìn)行分析、判斷,直接全部使用新封裝的數(shù)據(jù)類(lèi)型,避免了協(xié)議解析過(guò)程中對(duì)參數(shù)類(lèi)型進(jìn)行分析的繁瑣過(guò)程。新的數(shù)據(jù)類(lèi)型在生成測(cè)試用例時(shí)會(huì)用到所有基礎(chǔ)數(shù)據(jù)類(lèi)型的數(shù)據(jù)生成規(guī)則,不需要對(duì)進(jìn)行模糊測(cè)試用例迭代的字段進(jìn)行數(shù)據(jù)類(lèi)型的分析,從而提升了模糊測(cè)試的自動(dòng)化程度。因?yàn)樵讷@取到的業(yè)務(wù)請(qǐng)求包中只有該字段的一個(gè)初始值,根據(jù)該初始值很難做到準(zhǔn)確無(wú)誤地分析出該字段的數(shù)據(jù)類(lèi)型,如果要做到準(zhǔn)確無(wú)誤地分析,則需要了解被測(cè)目標(biāo)對(duì)這些字段的定義,而這需要介入人工分析的過(guò)程,大大降低了模糊測(cè)試的自動(dòng)化程度。那么,相應(yīng)地,如果不需要對(duì)進(jìn)行模糊測(cè)試用例迭代的字段進(jìn)行數(shù)據(jù)類(lèi)型的分析,可以提升模糊測(cè)試的自動(dòng)化程度。
進(jìn)一步地,在一個(gè)實(shí)施例中,按照協(xié)議格式加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義以拼裝出協(xié)議描述文件的步驟之后,還包括:根據(jù)模糊測(cè)試的數(shù)據(jù)類(lèi)型定義對(duì)應(yīng)的數(shù)據(jù)生成規(guī)則生成測(cè)試數(shù)據(jù);將所述測(cè)試數(shù)據(jù)發(fā)送到被測(cè)目標(biāo)以進(jìn)行模糊測(cè)試。
下面通過(guò)具體應(yīng)用場(chǎng)景來(lái)說(shuō)明上述基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法的原理,該應(yīng)用場(chǎng)景以業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型為http進(jìn)行舉例說(shuō)明。
如圖6所示,在業(yè)務(wù)終端抓取并存儲(chǔ)業(yè)務(wù)請(qǐng)求包之后,通過(guò)將該業(yè)務(wù)請(qǐng)求包與預(yù)先建立的協(xié)議格式特征庫(kù)中的協(xié)議進(jìn)行匹配,獲取到業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型為http?;趆ttp的格式知識(shí),解析出http類(lèi)的關(guān)鍵組成為http請(qǐng)求類(lèi)型、host、cgi名、url參數(shù)列表以及cookie等。然后判斷請(qǐng)求類(lèi)型是否為post,若是,則進(jìn)一步解析post類(lèi)請(qǐng)求的body內(nèi)容,并確定body內(nèi)容是key-value、xml還是json。最后將所有解析內(nèi)容(http類(lèi)的關(guān)鍵組成、body內(nèi)容)及協(xié)議類(lèi)型一并保存為協(xié)議定義文件。若請(qǐng)求類(lèi)型不是post,那么直接將http類(lèi)的關(guān)鍵組成 及協(xié)議類(lèi)型一并保存為協(xié)議定義文件。
如圖7所示,在生成協(xié)議描述文件的過(guò)程中,首先讀取協(xié)議定義文件中的協(xié)議類(lèi)型,然后根據(jù)協(xié)議類(lèi)型選取相應(yīng)的協(xié)議適配器,該協(xié)議適配器根據(jù)協(xié)議格式知識(shí)用協(xié)議定義文件中的協(xié)議組成信息拼裝http請(qǐng)求行,然后用固定內(nèi)容和協(xié)議定義文件中傳入的host拼裝http請(qǐng)求報(bào)頭(如果有cookie,則將cookie內(nèi)容參數(shù)化后并入請(qǐng)求報(bào)頭)。接著判斷http的請(qǐng)求類(lèi)型,如果請(qǐng)求類(lèi)型為post,則根據(jù)body內(nèi)容的格式對(duì)模糊測(cè)試的數(shù)據(jù)類(lèi)型參數(shù)化,然后將拼裝的http協(xié)議(http請(qǐng)求行和http請(qǐng)求報(bào)頭)保存為協(xié)議描述文件。
進(jìn)一步地,在一個(gè)實(shí)施例中,從生成協(xié)議描述文件到完成模糊測(cè)試的整個(gè)過(guò)程為:首先根據(jù)協(xié)議描述文件生成會(huì)話(huà)定義文件,其中會(huì)話(huà)定義文件包括接口運(yùn)行機(jī)器、服務(wù)名及啟動(dòng)和停止命令等。然后再批量生成會(huì)話(huà)管理文件,會(huì)話(huà)管理文件中是按模塊保存對(duì)應(yīng)的CGI。以模塊為單位掃描會(huì)話(huà)管理文件下的每個(gè)模塊目錄,并從模塊目錄下隨機(jī)找一個(gè)CGI_ID對(duì)應(yīng)的會(huì)話(huà)定義文件,解析出模塊的部署機(jī)器、編譯機(jī)配置信息,另外還需對(duì)被測(cè)目標(biāo)原有的覆蓋率數(shù)據(jù)進(jìn)行備份。數(shù)據(jù)備份之后,就開(kāi)始對(duì)該模塊目錄下的CGI發(fā)起測(cè)試,并收集測(cè)試過(guò)程數(shù)據(jù),最后生成被測(cè)CGI的測(cè)試報(bào)告(測(cè)試報(bào)告包括測(cè)試用例和crash信息等)。接著判斷該模塊下的CGI是否已全部執(zhí)行完,若否,則繼續(xù)對(duì)該模塊目錄下的CGI發(fā)起測(cè)試,若是,則將覆蓋率數(shù)據(jù)同步到編譯機(jī),并用工具生成該模塊的覆蓋率報(bào)告、還原測(cè)試目標(biāo)原有的覆蓋率數(shù)據(jù),最后再判斷所有的模塊是否都測(cè)試完畢,若是,則生成匯總測(cè)試報(bào)告并發(fā)送郵件,若否,則繼續(xù)以模塊為單位掃描管理文件下的每個(gè)模塊目錄。
如圖8所示,在一個(gè)實(shí)施例中,提供了一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置800,具有實(shí)現(xiàn)上述各個(gè)實(shí)施例的基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法的功能。該基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置800包括業(yè)務(wù)請(qǐng)求包抓取模塊802、協(xié)議類(lèi)型獲取模塊804、解析模塊806以及協(xié)議描述文件生成模塊808。
具體的,業(yè)務(wù)請(qǐng)求包抓取模塊802用于抓取并存儲(chǔ)業(yè)務(wù)請(qǐng)求包。
協(xié)議類(lèi)型獲取模塊804用于獲取所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型。
解析模塊806用于根據(jù)所述協(xié)議類(lèi)型解析出協(xié)議組成信息,并將所述協(xié)議類(lèi)型和所述協(xié)議組成信息保存為協(xié)議定義文件。
協(xié)議描述文件生成模塊808用于在所述協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件。
在一個(gè)實(shí)施例中,協(xié)議類(lèi)型獲取模塊804包括數(shù)據(jù)庫(kù)構(gòu)建單元、協(xié)議格式匹配單元和協(xié)議類(lèi)型確定單元。所述數(shù)據(jù)庫(kù)構(gòu)建單元用于構(gòu)建協(xié)議格式特征庫(kù);所述協(xié)議格式匹配單元用于將所述業(yè)務(wù)請(qǐng)求包所采用的協(xié)議格式與所述協(xié)議格式特征庫(kù)中的協(xié)議格式進(jìn)行匹配;所述協(xié)議類(lèi)型確定單元用于根據(jù)匹配結(jié)果確定所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型。
在一個(gè)實(shí)施例中,解析模塊806包括解析器構(gòu)建單元和解析單元,所述解析器構(gòu)建單元用于根據(jù)所述協(xié)議類(lèi)型構(gòu)建協(xié)議解析器;所述解析單元用于利用所述協(xié)議解析器解析出協(xié)議組成信息。
在一個(gè)實(shí)施例中協(xié)議描述文件生成模塊808包括協(xié)議適配器選取單元和拼裝單元,所述協(xié)議適配器選取單元用于根據(jù)所述協(xié)議定義文件選取相應(yīng)的協(xié)議適配器;所述拼裝單元用于按照所述協(xié)議格式加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義以拼裝出協(xié)議描述文件。
如圖9所示,在一個(gè)實(shí)施例中,提供了另一種基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置900,具有實(shí)現(xiàn)上述各個(gè)實(shí)施例的基于自動(dòng)化協(xié)議適配的模糊測(cè)試方法的功能。該基于自動(dòng)化協(xié)議適配的模糊測(cè)試裝置包括業(yè)務(wù)請(qǐng)求包抓取模塊902、協(xié)議類(lèi)型獲取模塊904、解析模塊906、協(xié)議描述文件生成模塊908、測(cè)試數(shù)據(jù)生成模塊910以及測(cè)試數(shù)據(jù)發(fā)送模塊912。
具體的,業(yè)務(wù)請(qǐng)求包抓取模塊902用于抓取并存儲(chǔ)業(yè)務(wù)請(qǐng)求包。
協(xié)議類(lèi)型獲取模塊904用于獲取所述業(yè)務(wù)請(qǐng)求包的協(xié)議類(lèi)型。
解析模塊906用于根據(jù)所述協(xié)議類(lèi)型解析出協(xié)議組成信息,并將所述協(xié)議類(lèi)型和所述協(xié)議組成信息保存為協(xié)議定義文件。
協(xié)議描述文件生成模塊908用于在所述協(xié)議定義文件中加入模糊測(cè)試的數(shù)據(jù)類(lèi)型定義,以反向構(gòu)建協(xié)議描述文件。
測(cè)試數(shù)據(jù)生成模塊910用于根據(jù)所述模糊測(cè)試的數(shù)據(jù)類(lèi)型定義對(duì)應(yīng)的數(shù)據(jù) 生成規(guī)則生成測(cè)試數(shù)據(jù)。
測(cè)試數(shù)據(jù)發(fā)送模塊912用于將所述測(cè)試數(shù)據(jù)發(fā)送到被測(cè)目標(biāo)以進(jìn)行模糊測(cè)試。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤(pán)、只讀存儲(chǔ)記憶體(Read-Only Memory,ROM)等非易失性存儲(chǔ)介質(zhì),或隨機(jī)存儲(chǔ)記憶體(Random Access Memory,RAM)等。
以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡(jiǎn)潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說(shuō)明書(shū)記載的范圍。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專(zhuān)利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專(zhuān)利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。