本發(fā)明涉及網(wǎng)絡(luò)漏洞挖掘技術(shù)領(lǐng)域,具體說(shuō)是基于fuzzing算法的分布式異構(gòu)網(wǎng)絡(luò)漏洞挖掘方法。
背景技術(shù):
在軟硬件產(chǎn)品的開(kāi)發(fā)過(guò)程當(dāng)中,產(chǎn)品的測(cè)試是非常重要而且必不可少的過(guò)程,因此各大廠家都非常注重軟硬件產(chǎn)品的測(cè)試過(guò)程,常見(jiàn)的軟硬件產(chǎn)品的測(cè)試技術(shù)包括:白盒測(cè)試,黑盒測(cè)試和灰盒測(cè)試等。不同的測(cè)試方法,要求獲得被測(cè)系統(tǒng)的不同層次的資源,其中黑盒測(cè)試幾乎不要求任何被測(cè)系統(tǒng)的任何資源。在分布式異構(gòu)網(wǎng)絡(luò)當(dāng)中,各種網(wǎng)絡(luò)設(shè)備紛繁復(fù)雜,軟件產(chǎn)品也多種多樣,因此黑盒測(cè)試和灰盒測(cè)試,可以在分布式異構(gòu)網(wǎng)絡(luò)當(dāng)中起到較好的效果。
近年來(lái),模糊測(cè)試(fuzzing測(cè)試)作為一種有名的黑盒測(cè)試技術(shù),廣泛地被應(yīng)用在軟件產(chǎn)品測(cè)試當(dāng)中。模糊測(cè)試的原理是:通過(guò)向測(cè)試目標(biāo)發(fā)送非預(yù)期的輸入并監(jiān)控輸出中的異常來(lái)發(fā)現(xiàn)軟件或者硬件中的故障。典型而言,模糊測(cè)試?yán)冒胱詣?dòng)化或者全自動(dòng)化的方法重復(fù)的向測(cè)試目標(biāo)提供輸入,并且實(shí)時(shí)監(jiān)控測(cè)試目標(biāo)的運(yùn)行情況,觀察測(cè)試目標(biāo)的反應(yīng),進(jìn)而期待挖掘相應(yīng)的漏洞。
目前用于模糊測(cè)試技術(shù)的主要方式有兩種,分別是:基于生成的模糊測(cè)試和基于變異的模糊測(cè)試。
基于生成的模糊測(cè)試需要事先對(duì)網(wǎng)絡(luò)協(xié)議或文件的格式進(jìn)行分析研究,并將其描述出來(lái),通常情況下協(xié)議分析人員將格式規(guī)范通過(guò)腳本文件來(lái)描述,然后根據(jù)這些腳本文件來(lái)產(chǎn)生大量的測(cè)試用例,構(gòu)造的數(shù)據(jù)一方面要符合腳本文件中的格式規(guī)范,以防測(cè)試目標(biāo)直接丟棄非法的用例,達(dá)不到測(cè)試的效果,另一方面也要盡可能的有特殊性,如邊界值、格式字符串等,增加觸發(fā)漏洞的可能性。
基于變異的模糊測(cè)試又分為隨機(jī)變異和啟發(fā)變異,這種模糊測(cè)試算法需要一個(gè)樣本文件作為測(cè)試用例構(gòu)造的樣本。
現(xiàn)有的網(wǎng)絡(luò)模糊測(cè)試(fuzzing測(cè)試),其主要采用如圖1所示技術(shù)架構(gòu)對(duì)測(cè)試目標(biāo)進(jìn)行漏洞挖掘。該技術(shù)架構(gòu)大致可以分成兩部分,第一部分是模糊測(cè)試引擎部分(簡(jiǎn)稱引擎),它主要負(fù)責(zé)產(chǎn)生相應(yīng)的測(cè)試用例,根據(jù)樣本文件或腳本文件中的分析結(jié)果,生成相應(yīng)的畸形數(shù)據(jù),用于后續(xù)測(cè)試目標(biāo)的注入,即非預(yù)期的輸入。第二部分是目標(biāo)監(jiān)控模塊(簡(jiǎn)稱代理),該部分主要負(fù)責(zé)對(duì)測(cè)試目標(biāo)進(jìn)行監(jiān)控,觀察其相對(duì)于畸形數(shù)據(jù)輸入的反應(yīng),從而確定測(cè)試目標(biāo)是否存在相應(yīng)的漏洞。
現(xiàn)有的網(wǎng)絡(luò)模糊測(cè)試(fuzzing)的工作流程如下:
fuzzing測(cè)試是通過(guò)向測(cè)試目標(biāo)發(fā)送大量的半有效數(shù)據(jù)并觀測(cè)輸出結(jié)果來(lái)實(shí)現(xiàn)的,它利用半自動(dòng)或是全自動(dòng)的方式發(fā)送數(shù)據(jù)。fuzzing測(cè)試的工作流程一般都會(huì)包含以下步驟,如圖2所示:
(1)確定測(cè)試目標(biāo)
確定測(cè)試目標(biāo)可以使測(cè)試更加明確。在科技迅速發(fā)展的今天,模糊測(cè)試已經(jīng)有了較成熟的發(fā)展,對(duì)于不同的測(cè)試目標(biāo),選擇對(duì)應(yīng)的工具或者是測(cè)試框架,能夠節(jié)省開(kāi)發(fā)成本,節(jié)約測(cè)試時(shí)間。所以,測(cè)試目標(biāo)的確定決定了所選用的測(cè)試工具和方法的類型。
(2)分析輸入矩陣
大多數(shù)的安全漏洞的產(chǎn)生都是因?yàn)閷?duì)程序的輸入數(shù)據(jù)沒(méi)有進(jìn)行校驗(yàn)或?qū)Ψ欠ㄝ斎霙](méi)有給出明確的處理標(biāo)準(zhǔn)導(dǎo)致的,所以,確定輸入矩陣是fuzzing測(cè)試能否成功的關(guān)鍵。輸入矩陣應(yīng)該盡可能的包含能夠引起程序崩潰的各類非預(yù)期的輸入,例如文件名、注冊(cè)表鍵值、命令行參數(shù)、配置信息、環(huán)境變量等信息。盲目的測(cè)試,在浪費(fèi)人力和時(shí)間的同時(shí)可能也無(wú)法滿足測(cè)試的要求。
(3)構(gòu)造測(cè)試用例
在深入分析輸入矩陣應(yīng)該包含的內(nèi)容之后,就可以根據(jù)分析結(jié)果構(gòu)造測(cè)試用例。fuzzing測(cè)試一般通過(guò)半自動(dòng)或者全自動(dòng)的方式發(fā)送輸入數(shù)據(jù),所以,需要將測(cè)試用例寫(xiě)成形式化語(yǔ)言,例如適合模糊測(cè)試器fuzzer讀取并產(chǎn)生測(cè)試用例的腳本文件。通過(guò)人工的方式構(gòu)造出測(cè)試用例形式化文件后,后續(xù)的測(cè)試過(guò)程就可以通過(guò)自動(dòng)化的方式進(jìn)行。在這個(gè)過(guò)程中,要針對(duì)測(cè)試目標(biāo),綜合考慮其他的因素,選擇合適的測(cè)試用例構(gòu)造方式,打好漏洞挖掘的基礎(chǔ)。
(4)啟動(dòng)模糊測(cè)試
這個(gè)過(guò)程一般是一個(gè)自動(dòng)化過(guò)程,它與上一步并行發(fā)生,在構(gòu)造測(cè)試用例的同時(shí),模糊測(cè)試器會(huì)連接測(cè)試目標(biāo),執(zhí)行被測(cè)試應(yīng)用,并向測(cè)試目標(biāo)發(fā)送數(shù)據(jù)。
(5)監(jiān)控異常和錯(cuò)誤
這個(gè)步驟是一個(gè)非常重要的步驟,在發(fā)送的大量測(cè)試用例中,并不是每個(gè)測(cè)試用例都會(huì)導(dǎo)致測(cè)試目標(biāo)崩潰,所以,需要對(duì)導(dǎo)致異常產(chǎn)生的測(cè)試用例進(jìn)行記錄。監(jiān)控和記錄崩潰信息對(duì)于后續(xù)的分析工作至關(guān)重要,如果缺少這一步,在測(cè)試目標(biāo)崩潰后就無(wú)法確定是哪些數(shù)據(jù)導(dǎo)致了異常的發(fā)生,從而整個(gè)測(cè)試就是失敗的。
(6)分析可利用漏洞
這個(gè)步驟在模糊測(cè)試中并不是必須的一步,在完成模糊測(cè)試后,對(duì)于檢測(cè)出的錯(cuò)誤和異常,根據(jù)安全目的要判斷其是否有被利用的可能,這個(gè)過(guò)程一般是手工完成,分析者需要有相當(dāng)?shù)乃胶图夹g(shù),測(cè)試者可以將結(jié)果提交給安全審計(jì)人員,而不用由自己完成這個(gè)過(guò)程。
現(xiàn)階段存在的fuzzing測(cè)試技術(shù),雖然已經(jīng)比較成熟,但是依舊存在一些缺點(diǎn),有進(jìn)一步改進(jìn)的空間。
1.現(xiàn)有fuzzing測(cè)試技術(shù),針對(duì)協(xié)議的覆蓋效率不夠高,很多技術(shù)方案只能夠?qū)ο鄳?yīng)的協(xié)議的某些狀態(tài)和字段進(jìn)行測(cè)試,不能夠完整的覆蓋整個(gè)協(xié)議的執(zhí)行路徑,因此導(dǎo)致漏洞挖掘的效率不夠高。
2.現(xiàn)有的fuzzing測(cè)試技術(shù),自動(dòng)化程度偏低,很多測(cè)試技術(shù),都依賴于人工輸入,或者大量的人工干擾,也沒(méi)有可供使用的友好的人機(jī)交互界面,導(dǎo)致漏洞挖掘和fuzzing測(cè)試的門(mén)檻過(guò)高,不易于大規(guī)模推廣。
3.現(xiàn)有的fuzzing測(cè)試技術(shù),很多缺乏相應(yīng)的數(shù)據(jù)持久層,不利于后續(xù)的進(jìn)一步分析,導(dǎo)致漏洞挖掘和測(cè)試的效果大打折扣。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供基于fuzzing算法的分布式異構(gòu)網(wǎng)絡(luò)漏洞挖掘方法,適用于分布式異構(gòu)網(wǎng)絡(luò)系統(tǒng),協(xié)議狀態(tài)路徑全覆蓋,自動(dòng)化程度較高。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:
基于fuzzing算法的分布式異構(gòu)網(wǎng)絡(luò)漏洞挖掘方法,包括如下步驟:
步驟1,協(xié)議解析:抓取測(cè)試目標(biāo)的網(wǎng)絡(luò)數(shù)據(jù)包,對(duì)測(cè)試目標(biāo)的網(wǎng)絡(luò)協(xié)議進(jìn)行解析,確定測(cè)試目標(biāo)所使用的協(xié)議和相應(yīng)的協(xié)議關(guān)鍵信息;
步驟2,協(xié)議測(cè)試腳本構(gòu)建:根據(jù)協(xié)議解析的結(jié)果,對(duì)協(xié)議關(guān)鍵信息進(jìn)行全面的描述,對(duì)不同的數(shù)據(jù)格式進(jìn)行相應(yīng)的建模,確定協(xié)議所表現(xiàn)出來(lái)的各種不同的數(shù)據(jù)格式和相應(yīng)的字段信息,輸出為對(duì)應(yīng)的協(xié)議數(shù)據(jù)的信息向量,即生成協(xié)議測(cè)試腳本;
步驟3,協(xié)議漏洞挖掘路徑圖構(gòu)建:根據(jù)協(xié)議測(cè)試腳本,將協(xié)議的各個(gè)運(yùn)行狀態(tài)或者指令進(jìn)行組合,串聯(lián)成有向無(wú)環(huán)圖,即協(xié)議漏洞挖掘路徑圖,表征協(xié)議棧的運(yùn)行路徑;
步驟4,用戶通過(guò)主控制器向腳本發(fā)送流程控制器傳遞控制指令,控制漏洞挖掘的暫停和運(yùn)行;
步驟5,腳本發(fā)送流程控制器根據(jù)協(xié)議漏洞挖掘路徑圖和相應(yīng)的控制指令,向測(cè)試目標(biāo)發(fā)送相應(yīng)的測(cè)試腳本,向目標(biāo)監(jiān)視器發(fā)送相應(yīng)的控制指令,同時(shí)接收來(lái)自目標(biāo)監(jiān)視器的監(jiān)測(cè)信息,以判斷是否觸發(fā)了相應(yīng)的漏洞;
步驟6,數(shù)據(jù)顯示與存儲(chǔ):主控制器將發(fā)送的測(cè)試腳本和測(cè)試的漏洞信息進(jìn)行存儲(chǔ),并在信息顯示頁(yè)面中顯示。
在上述技術(shù)方案的基礎(chǔ)上,步驟1中所述的協(xié)議關(guān)鍵信息包括協(xié)議格式、校驗(yàn)方式、協(xié)議的各個(gè)狀態(tài)和指令。
在上述技術(shù)方案的基礎(chǔ)上,步驟1中采用多序列漸進(jìn)比對(duì)算法對(duì)抓取到網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析。
在上述技術(shù)方案的基礎(chǔ)上,步驟1中所述協(xié)議解析具體包括以下步驟:
步驟11,獲取大量的網(wǎng)絡(luò)數(shù)據(jù)包;
步驟12,對(duì)抓取的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行初步處理,過(guò)濾無(wú)效數(shù)據(jù)、重組分片數(shù)據(jù)、提取應(yīng)用層報(bào)文;
步驟13,對(duì)于獲取的應(yīng)用層報(bào)文進(jìn)行報(bào)文分析,將相似的報(bào)文序列放在一個(gè)小組中,方便之后格式分析時(shí)使用,在進(jìn)行報(bào)文聚類和報(bào)文小組分類時(shí),利用匹配規(guī)則,將之前的應(yīng)用層報(bào)文分為不同的分組;
步驟14,在協(xié)議格式分析時(shí),分析獲取報(bào)文格式,分析的單位是步驟13中獲得的不同類型的報(bào)文小組,通過(guò)多序列漸進(jìn)比對(duì)算法,分析出協(xié)議關(guān)鍵信息。
在上述技術(shù)方案的基礎(chǔ)上,步驟2中,所述協(xié)議測(cè)試腳本包括協(xié)議命令格式和協(xié)議文本描述。
在上述技術(shù)方案的基礎(chǔ)上,步驟3中,將協(xié)議的各個(gè)運(yùn)行狀態(tài)或者指令進(jìn)行組合,構(gòu)成一幅有向無(wú)環(huán)圖,然后采用圖遍歷算法,以遞歸的形式,遍歷所有的協(xié)議運(yùn)行路徑。
在上述技術(shù)方案的基礎(chǔ)上,步驟5中,目標(biāo)監(jiān)視器采用系統(tǒng)api構(gòu)建調(diào)試器,所述調(diào)試器被綁定在測(cè)試目標(biāo)的進(jìn)程上,實(shí)時(shí)的監(jiān)控測(cè)試目標(biāo)的運(yùn)行狀態(tài),當(dāng)測(cè)試目標(biāo)出現(xiàn)錯(cuò)誤時(shí),所述調(diào)試器便會(huì)讀取相應(yīng)的漏洞信息,同時(shí)傳送給腳本發(fā)送流程控制器。
在上述技術(shù)方案的基礎(chǔ)上,步驟6中,所述主控制器集成了相應(yīng)的網(wǎng)絡(luò)服務(wù)器進(jìn)程,提供相應(yīng)的操作界面,處理用戶的輸入,同時(shí)將腳本發(fā)送流程控制器的腳本信息、漏洞信息等相應(yīng)信息顯示在用戶界面中,并且實(shí)時(shí)的顯示漏洞挖掘的進(jìn)度,后臺(tái)的流量情況等。
本發(fā)明所述的基于fuzzing算法的分布式異構(gòu)網(wǎng)絡(luò)漏洞挖掘方法,可用于分布式異構(gòu)網(wǎng)絡(luò)系統(tǒng)中,相應(yīng)軟件的測(cè)試,采用自動(dòng)化程度較高的方式解析相應(yīng)的網(wǎng)絡(luò)協(xié)議,進(jìn)行協(xié)議的建模,然后構(gòu)建用于表征協(xié)議各個(gè)路徑和狀態(tài)的有向無(wú)環(huán)圖,從而對(duì)整個(gè)協(xié)議進(jìn)行全方位的測(cè)試和分析,可以有效的對(duì)相關(guān)網(wǎng)絡(luò)協(xié)議進(jìn)行高覆蓋率的漏洞挖掘測(cè)試,能夠?qū)崿F(xiàn)完整的漏洞挖掘測(cè)試和相應(yīng)的效果顯示。同時(shí),本發(fā)明提供友好的人機(jī)交互界面,可以實(shí)時(shí)向操作人員傳遞數(shù)據(jù)腳本發(fā)送內(nèi)容,挖掘進(jìn)程,漏洞描述等相應(yīng)漏洞挖掘信息,同時(shí)支持?jǐn)?shù)據(jù)存儲(chǔ),操作人員可以在事后對(duì)整個(gè)測(cè)試過(guò)程進(jìn)行進(jìn)一步的分析。
本發(fā)明具有以下有益效果:
1.采用自動(dòng)化程度較高的方法進(jìn)行測(cè)試目標(biāo)的協(xié)議解析;
2.提供更加有效的數(shù)據(jù)表示方法,從而更好的對(duì)協(xié)議進(jìn)行建模,并指定相應(yīng)的模糊字段;
3.提供更加全面的協(xié)議運(yùn)行路徑,提高了對(duì)協(xié)議挖掘的覆蓋率和有效性,降低測(cè)試的遺漏概率;
4.提供友好的操作界面,方便操作人員的操作,降低漏洞挖掘的入門(mén)門(mén)檻,并且可以實(shí)時(shí)顯示相應(yīng)的信息,便于用戶查看。
附圖說(shuō)明
本發(fā)明有如下附圖:
圖1現(xiàn)有的網(wǎng)絡(luò)模糊測(cè)試技術(shù)架構(gòu)示意圖。
圖2fuzzing測(cè)試的工作流程示意圖。
圖3本發(fā)明所述方法的示意圖。
圖4協(xié)議解析的工作流程示意圖。
圖5ftp協(xié)議典型的協(xié)議路徑圖。
圖6ftp應(yīng)用測(cè)試框架。
圖7一條典型的ftp指令報(bào)文建模。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
如圖3所示,本發(fā)明所述的基于fuzzing算法的分布式異構(gòu)網(wǎng)絡(luò)漏洞挖掘方法,包括如下步驟:
步驟1,協(xié)議解析:抓取測(cè)試目標(biāo)的網(wǎng)絡(luò)數(shù)據(jù)包,對(duì)測(cè)試目標(biāo)的網(wǎng)絡(luò)協(xié)議進(jìn)行解析,確定測(cè)試目標(biāo)所使用的協(xié)議和相應(yīng)的協(xié)議關(guān)鍵信息;
步驟2,協(xié)議測(cè)試腳本構(gòu)建:根據(jù)協(xié)議解析的結(jié)果,對(duì)協(xié)議關(guān)鍵信息進(jìn)行全面的描述,對(duì)不同的數(shù)據(jù)格式進(jìn)行相應(yīng)的建模,確定協(xié)議所表現(xiàn)出來(lái)的各種不同的數(shù)據(jù)格式和相應(yīng)的字段信息,輸出為對(duì)應(yīng)的協(xié)議數(shù)據(jù)的信息向量,即生成協(xié)議測(cè)試腳本;
步驟3,協(xié)議漏洞挖掘路徑圖構(gòu)建:根據(jù)協(xié)議測(cè)試腳本,將協(xié)議的各個(gè)運(yùn)行狀態(tài)或者指令進(jìn)行組合,串聯(lián)成有向無(wú)環(huán)圖,即協(xié)議漏洞挖掘路徑圖,表征協(xié)議棧的運(yùn)行路徑;
步驟4,用戶通過(guò)主控制器向腳本發(fā)送流程控制器傳遞控制指令,控制漏洞挖掘的暫停和運(yùn)行;
步驟5,腳本發(fā)送流程控制器根據(jù)協(xié)議漏洞挖掘路徑圖和相應(yīng)的控制指令,向測(cè)試目標(biāo)發(fā)送相應(yīng)的測(cè)試腳本,向目標(biāo)監(jiān)視器發(fā)送相應(yīng)的控制指令,同時(shí)接收來(lái)自目標(biāo)監(jiān)視器的監(jiān)測(cè)信息,以判斷是否觸發(fā)了相應(yīng)的漏洞;
步驟6,數(shù)據(jù)顯示與存儲(chǔ):主控制器將發(fā)送的測(cè)試腳本和測(cè)試的漏洞信息進(jìn)行存儲(chǔ),并在信息顯示頁(yè)面中顯示。
在上述技術(shù)方案的基礎(chǔ)上,步驟1中所述的協(xié)議關(guān)鍵信息包括協(xié)議格式、校驗(yàn)方式、協(xié)議的各個(gè)狀態(tài)和指令。
在本發(fā)明中,在分析輸入矩陣時(shí),協(xié)議解析模塊會(huì)抓取網(wǎng)絡(luò)的流量,進(jìn)行全面的自動(dòng)化分析,從而確定測(cè)試目標(biāo)所使用的協(xié)議和相應(yīng)的數(shù)據(jù)格式,分析出相應(yīng)的數(shù)據(jù)結(jié)構(gòu),進(jìn)而完成協(xié)議建模。在當(dāng)前的模糊測(cè)試技術(shù)方案中,在分析輸入矩陣這個(gè)步驟中,主要采用手工審閱協(xié)議文檔或者獲取測(cè)試目標(biāo)接口文檔的方式,進(jìn)行協(xié)議的解析和建模,這對(duì)于一些閉源軟件和無(wú)法獲取內(nèi)部相關(guān)信息的測(cè)試目標(biāo),往往無(wú)法進(jìn)行有效的協(xié)議建模和分析。本發(fā)明提出的自動(dòng)解析方法,很好的突破了這個(gè)障礙。
本發(fā)明中的協(xié)議解析采用多序列漸進(jìn)比對(duì)算法對(duì)抓取到網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析,通過(guò)這種自動(dòng)化解析,可以識(shí)別協(xié)議報(bào)文中的可變域和不可變域,文本域和二進(jìn)制域以及分隔符域等,進(jìn)而完成整個(gè)協(xié)議分析,為后續(xù)的協(xié)議測(cè)試腳本建模提供依據(jù)。
協(xié)議解析包括以下步驟(如圖4所示):
首先,需要獲取大量的網(wǎng)絡(luò)數(shù)據(jù)包,這是基于數(shù)據(jù)流分析方法的操作對(duì)象;
接著,對(duì)抓取的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行初步處理,過(guò)濾無(wú)效數(shù)據(jù)、重組分片數(shù)據(jù)、提取應(yīng)用層報(bào)文;
然后,對(duì)于獲取的初始的應(yīng)用層報(bào)文進(jìn)行報(bào)文分析,將相似的報(bào)文序列放在一個(gè)小組中,方便之后格式分析時(shí)使用,在報(bào)文聚類模塊和分類報(bào)文小組模塊中,利用匹配規(guī)則,將之前應(yīng)用層報(bào)文分為不同的分組;
最后,在協(xié)議格式分析模塊,分析獲取報(bào)文格式,分析的單位是上一個(gè)步驟中獲得的不同類型的報(bào)文小組,通過(guò)多序列漸進(jìn)比對(duì)算法,分析出報(bào)文協(xié)議格式,從而得到構(gòu)造測(cè)試用例腳本需要的先驗(yàn)知識(shí)。
在報(bào)文協(xié)議格式分析部分,本方案采用的多序列漸進(jìn)比對(duì)算法,是在生物工程中的基因比對(duì)算法的基礎(chǔ)上進(jìn)行改進(jìn)。漸進(jìn)比對(duì)算法的主要思想是使用動(dòng)態(tài)規(guī)劃法,迭代地進(jìn)行雙序列比對(duì),開(kāi)始時(shí)是兩條序列的比對(duì),逐漸加入新的序列,直到所有需要被比對(duì)的序列都完成比對(duì)。通過(guò)報(bào)文分類,可以認(rèn)為得到的每個(gè)報(bào)文分組中的報(bào)文是相同類型的。報(bào)文的長(zhǎng)度是判斷報(bào)文是否相似的重要因素。本發(fā)明通過(guò)報(bào)文長(zhǎng)度決定序列的比對(duì)順序,將每個(gè)報(bào)文分組中的報(bào)文按從短到長(zhǎng)進(jìn)行排序,漸進(jìn)比對(duì)從最短的兩個(gè)報(bào)文開(kāi)始,逐漸完成整個(gè)比對(duì)過(guò)程。
在上述技術(shù)方案的基礎(chǔ)上,根據(jù)協(xié)議解析的結(jié)果,對(duì)協(xié)議格式、校驗(yàn)方式、協(xié)議的各個(gè)狀態(tài)或者指令等協(xié)議關(guān)鍵信息進(jìn)行全面的描述,并且組合成特定的數(shù)據(jù)結(jié)構(gòu),完整的代表協(xié)議在被實(shí)現(xiàn)時(shí)所發(fā)送的數(shù)據(jù)包格式。本方案提供了多種可供選擇的數(shù)據(jù)形式,包括靜態(tài)數(shù)據(jù),二進(jìn)制數(shù)據(jù),分隔符和字符串等,其中每一種數(shù)據(jù)形式都可以選擇是否在挖掘過(guò)程當(dāng)中進(jìn)行變異,然后通過(guò)將上述數(shù)據(jù)和協(xié)議分析的各個(gè)域進(jìn)行匹配和變異設(shè)定,即可以構(gòu)建完整的測(cè)試腳本,可以對(duì)相應(yīng)的協(xié)議字段進(jìn)行大規(guī)模的變異,以提升漏洞挖掘的成功率。
在現(xiàn)有的技術(shù)方案中,根據(jù)協(xié)議建模的結(jié)果,在啟動(dòng)模糊測(cè)試階段,通常只能對(duì)網(wǎng)絡(luò)協(xié)議的某個(gè)狀態(tài)或者某條命令進(jìn)行測(cè)試,無(wú)法對(duì)整個(gè)協(xié)議棧的運(yùn)行狀態(tài)進(jìn)行全面的、高覆蓋性的模糊測(cè)試。在本發(fā)明中,根據(jù)測(cè)試協(xié)議腳本所提供的目標(biāo)測(cè)試協(xié)議的相關(guān)信息,對(duì)協(xié)議的各個(gè)運(yùn)行狀態(tài)或者多條指令進(jìn)行組合,將他們串聯(lián)成一張有向無(wú)環(huán)圖,表征協(xié)議棧的運(yùn)行路徑,進(jìn)而形成完整的漏洞挖掘會(huì)話,對(duì)協(xié)議的每一條運(yùn)行路徑和命令組合都可以進(jìn)行模糊測(cè)試,從而提高了模糊測(cè)試的有效性。然后通過(guò)特定的數(shù)據(jù)結(jié)構(gòu)將該圖的相關(guān)信息,傳遞給腳本發(fā)送流程控制器,進(jìn)而執(zhí)行測(cè)試。
不同的協(xié)議有不同的協(xié)議狀態(tài)和運(yùn)行方式,很多應(yīng)用層協(xié)議在運(yùn)行過(guò)程當(dāng)中有著明顯的運(yùn)行狀態(tài)。以ftp協(xié)議為例(如圖5所示),典型的ftp服務(wù)器會(huì)在初始登錄過(guò)程當(dāng)中,要求用戶輸入用戶名和密碼,這一過(guò)程可以等效為向用戶發(fā)送兩個(gè)分別以u(píng)ser和pass關(guān)鍵字字段為起始的報(bào)文,服務(wù)器解析這兩個(gè)報(bào)文,以完成登錄過(guò)程。完成相應(yīng)的前序操作之后,客戶端才可以向服務(wù)器發(fā)送請(qǐng)求,以完成其他操作,包括建立文件目錄(mkd),刪除文件(dele)等操作,這些操作都要求在完成其前序操作的基礎(chǔ)上進(jìn)行進(jìn)一步的操作,在系統(tǒng)建模過(guò)程當(dāng)中,反映為必須為這些操作設(shè)置前序操作路徑,將這一系列操作和協(xié)議運(yùn)行狀態(tài),進(jìn)行建模,便可以得到完整的協(xié)議運(yùn)行狀態(tài)圖,以表征協(xié)議的完整運(yùn)行狀態(tài),同時(shí)保證目標(biāo)程序在各個(gè)不同的路徑上都可以順利運(yùn)行。
協(xié)議測(cè)試腳本的構(gòu)建和協(xié)議漏洞挖掘路徑圖的構(gòu)建可以完整的模擬測(cè)試目標(biāo)在運(yùn)行過(guò)程當(dāng)中,協(xié)議棧的運(yùn)行路徑,因此在漏洞挖掘過(guò)程當(dāng)中,可以完整的測(cè)試所有的路徑,以保證做到高覆蓋率。
在上述技術(shù)方案的基礎(chǔ)上,根據(jù)協(xié)議漏洞挖掘路徑圖和相應(yīng)的控制指令,腳本發(fā)送流程控制器向測(cè)試目標(biāo)發(fā)送相應(yīng)的測(cè)試腳本,向目標(biāo)監(jiān)視器發(fā)送相應(yīng)的控制指令,同時(shí)接收來(lái)自目標(biāo)監(jiān)視器的監(jiān)測(cè)信息,以判斷是否觸發(fā)了相應(yīng)的漏洞。
在上述技術(shù)方案的基礎(chǔ)上,針對(duì)測(cè)試目標(biāo)的不同,對(duì)測(cè)試目標(biāo)的監(jiān)控手段也存在差異,對(duì)于運(yùn)行與完整的操作系統(tǒng)的軟件,測(cè)試目標(biāo)監(jiān)視器,主要是采用相應(yīng)的系統(tǒng)api構(gòu)建調(diào)試器,該調(diào)試器被綁定在測(cè)試目標(biāo)的進(jìn)程上,實(shí)時(shí)的監(jiān)控測(cè)試目標(biāo)的運(yùn)行狀態(tài),一旦測(cè)試目標(biāo)出現(xiàn)錯(cuò)誤,它便會(huì)讀取相應(yīng)的出錯(cuò)信息,同時(shí)傳送給腳本發(fā)送流程控制器。
在現(xiàn)有的模糊測(cè)試技術(shù)架構(gòu)中,往往不注重測(cè)試腳本數(shù)據(jù)和漏洞信息的保存。本發(fā)明在模糊測(cè)試的基礎(chǔ)上,設(shè)計(jì)了主控制器,具有數(shù)據(jù)存儲(chǔ)和顯示功能,可以對(duì)發(fā)送的測(cè)試腳本數(shù)據(jù)和漏洞信息進(jìn)行存儲(chǔ),并且設(shè)計(jì)了比較友善的信息顯示頁(yè)面,以供測(cè)試人員使用;也可以向腳本發(fā)送和流程控制模塊傳遞相應(yīng)的控制指令,控制系統(tǒng)的暫停和運(yùn)行等。
主控制器中集成了相應(yīng)的網(wǎng)絡(luò)服務(wù)器進(jìn)程,它提供相應(yīng)的操作界面,處理用戶的輸入,同時(shí)將腳本發(fā)送流程控制器發(fā)送的腳本信息、漏洞信息等相應(yīng)信息顯示在用戶界面當(dāng)中,并且它還可以實(shí)時(shí)的顯示漏洞挖掘的進(jìn)度,后臺(tái)的流量情況等。
傳統(tǒng)的漏洞挖掘方法,自動(dòng)化程度低,門(mén)檻較高,無(wú)法向普通的維護(hù)人員提供良好的操作界面,它們的操作方式,一般采用較多的命令行操作方式,操作復(fù)雜,對(duì)操作人員有著較高的專業(yè)水平要求。通常,在漏洞挖掘過(guò)程當(dāng)中,使用人員需要對(duì)相關(guān)協(xié)議進(jìn)行建模,然后手工構(gòu)建協(xié)議模型,進(jìn)而向測(cè)試目標(biāo)發(fā)送相應(yīng)的測(cè)試腳本,其中測(cè)試腳本可能無(wú)法完全覆蓋協(xié)議的運(yùn)行路徑,因此還要采用復(fù)用的方式,分多次發(fā)送,因此效率不高。本發(fā)明采用有向無(wú)環(huán)圖這種數(shù)據(jù)結(jié)構(gòu),結(jié)合相應(yīng)的遍歷算法,覆蓋協(xié)議的全路徑,使得協(xié)議測(cè)試的覆蓋率更加全面,更加富有效率。
以下為本方案在分布式異構(gòu)網(wǎng)絡(luò)當(dāng)中的應(yīng)用示例。
對(duì)于本技術(shù)方案,采用ftp協(xié)議作為應(yīng)用示例,ftp協(xié)議是一種文件傳輸協(xié)議,在分布式異構(gòu)網(wǎng)絡(luò)中應(yīng)用廣泛,它廣泛的被用于文件備份,文件上傳,文件下載,運(yùn)維記錄備份和下載等領(lǐng)域。
我們?cè)诖颂帉?duì)ftp服務(wù)器進(jìn)行相應(yīng)的模糊測(cè)試,漏洞挖掘器工作在客戶端,其不斷的向ftp服務(wù)器發(fā)送腳本,并且接收來(lái)自服務(wù)器端的進(jìn)程調(diào)試信息和網(wǎng)絡(luò)連接信息,實(shí)時(shí)監(jiān)控目標(biāo)測(cè)試軟件的工作狀態(tài),從而分析目標(biāo)測(cè)試軟件中是否存在漏洞,其大致的工作框架如圖6所示。
如圖6所示,漏洞挖掘器在客戶端不斷的向相應(yīng)的ftp服務(wù)器發(fā)送生成的腳本信息,并且通過(guò)網(wǎng)絡(luò)監(jiān)視代理和進(jìn)程監(jiān)視代理監(jiān)測(cè)ftp服務(wù)器的運(yùn)行狀態(tài),進(jìn)而評(píng)估是否觸發(fā)了ftp服務(wù)器中存在的漏洞。對(duì)于ftp協(xié)議的建模,可以將一條典型的ftp指令報(bào)文建模成如圖7所示的形式。圖7所示為一條通過(guò)本發(fā)明所述的技術(shù)方案所構(gòu)建出的ftp指令的數(shù)據(jù)格式,表征了在該指令中,可以進(jìn)行變異的數(shù)據(jù)域以及不可變的數(shù)據(jù)域和分隔符。
其中,對(duì)命令提示符,分隔符,字符串和結(jié)束控制符等固定內(nèi)容的字段,本發(fā)明都不會(huì)對(duì)其進(jìn)行相應(yīng)的變異,只對(duì)第三個(gè)字段,這一字段通常是可變的,在本例中它代表登錄ftp服務(wù)器時(shí)具體的用戶名,在實(shí)際的應(yīng)用過(guò)程當(dāng)中,這一字段應(yīng)當(dāng)是一個(gè)可以變化的字段,因此在本方案當(dāng)中,將會(huì)對(duì)該字段進(jìn)行變異,構(gòu)建數(shù)量巨大的腳本,進(jìn)而發(fā)送給ftp服務(wù)器。
對(duì)于ftp協(xié)議,各種命令之間存在一定的依存關(guān)系,譬如cwd,mkd等命令必須在user和pass命令之后運(yùn)行,而cwd和mkd等命令之間又是相互獨(dú)立的,因此我們需要根據(jù)這種協(xié)議各個(gè)命令之間的工作方式,構(gòu)建協(xié)議的運(yùn)行路徑,顯然這是一個(gè)典型的圖形結(jié)構(gòu),通常復(fù)雜的協(xié)議可能會(huì)被映射成為一個(gè)有向無(wú)環(huán)圖。本方案就是根據(jù)這個(gè)有向無(wú)環(huán)圖對(duì)整個(gè)協(xié)議進(jìn)行測(cè)試。
除此之外,本技術(shù)方案,還集成了友好的操作界面,操作人員可以方便的選取相應(yīng)的網(wǎng)絡(luò)中的測(cè)試設(shè)備,點(diǎn)擊開(kāi)始挖掘按鈕,后臺(tái)的漏洞挖掘器便會(huì)開(kāi)始工作,無(wú)需其他配置和繁瑣的操作。
本發(fā)明提供了完整的分布式異構(gòu)網(wǎng)絡(luò)漏洞挖掘方法,包括協(xié)議解析,協(xié)議建模方法、協(xié)議漏洞挖掘路徑圖構(gòu)建方法、測(cè)試目標(biāo)監(jiān)控方法和信息顯示頁(yè)面。本發(fā)明中的協(xié)議解析方法,首先抓取大量的網(wǎng)絡(luò)協(xié)議報(bào)文,充分利用了多序列漸進(jìn)比對(duì)算法的優(yōu)勢(shì),對(duì)網(wǎng)絡(luò)中的大量報(bào)文進(jìn)行相應(yīng)的過(guò)濾,分類和處理,通過(guò)多次迭代的比對(duì),從而分析出相應(yīng)的協(xié)議格式,為后續(xù)的協(xié)議建模和協(xié)議漏洞挖掘路徑圖的構(gòu)建提供依據(jù)。這也使得針對(duì)一些未知協(xié)議格式的網(wǎng)絡(luò)協(xié)議漏洞挖掘變得可能。其次,協(xié)議漏洞挖掘路徑圖構(gòu)建方法,使得測(cè)試可以做到對(duì)協(xié)議進(jìn)行完整的建模,可以對(duì)指定的字段進(jìn)行相應(yīng)的模糊測(cè)試,使得漏洞挖掘測(cè)試可以更加全面的對(duì)整個(gè)協(xié)議進(jìn)行測(cè)試,做到覆蓋率更高,有效性更強(qiáng)。
本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。