劉津霖,付光遠(yuǎn),李海龍,汪洪橋
火箭軍工程大學(xué) 信息工程系,西安 710025
近年來,專有協(xié)議(proprietary protocol)的應(yīng)用越來越廣泛,尤其是在工業(yè)控制領(lǐng)域。工控系統(tǒng)在逐漸變得更加信息化、自動化和智能化的同時,也埋下了安全隱患。工業(yè)控制系統(tǒng)不同于傳統(tǒng)信息系統(tǒng),一旦遭受攻擊,會對國家安全造成重大打擊,如:核電站爆炸、電力系統(tǒng)癱瘓、城市交通停運(yùn)等。因此,研究工控系統(tǒng)安全關(guān)乎國家的戰(zhàn)略安全,研究意義重大。提升工控系統(tǒng)安全的主要方法是漏洞挖掘,防患于未然。其中,模糊測試被公認(rèn)為是最有效的漏洞挖掘方法,但是由于工控系統(tǒng)涉及的協(xié)議組成十分復(fù)雜,存在大量廠商自己定義的專有協(xié)議[1],這些專有協(xié)議沒有公開的資料說明,對協(xié)議的結(jié)構(gòu)和會話過程等信息無法輕易獲悉,給模糊測試造成了巨大的挑戰(zhàn)[2-3]。
針對專有協(xié)議的問題,可以采用協(xié)議逆向技術(shù),獲得專有協(xié)議的報文格式和協(xié)議狀態(tài)機(jī),將專有協(xié)議轉(zhuǎn)化成“公有協(xié)議”,再結(jié)合模糊測試技術(shù)對被測目標(biāo)進(jìn)行漏洞挖掘。對于協(xié)議逆向技術(shù)的研究已經(jīng)有了很多豐碩的成果,如:PI工程和它的改進(jìn)方法Discoverer[4]采用生物信息學(xué)序列比對算法逆向協(xié)議的報文格式,為專有協(xié)議逆向解析提供了新思路,但是得到的分析結(jié)果缺少語義信息;Prospex[5]、ScriptGen[6]等方法充分考慮到了報文的語義信息,定義報文的關(guān)鍵字作為協(xié)議的語義信息,使逆向的報文格式和協(xié)議狀態(tài)機(jī)更加完整。因此,協(xié)議關(guān)鍵字提取質(zhì)量的好壞直接影響協(xié)議的逆向結(jié)果。目前提取關(guān)鍵字應(yīng)用最多的方法是n-gram算法[7],即用一個大小為n的滑動窗口將報文劃分成等長的子序列。然而,這種方法會使大于n字節(jié)的協(xié)議關(guān)鍵字被分割,或者使小于n字節(jié)的協(xié)議關(guān)鍵字混入噪聲,從而影響協(xié)議逆向的效果。
本文提出的專有協(xié)議模糊測試方法,首先需要對流量數(shù)據(jù)進(jìn)行流測度和分類預(yù)處理,并且提取協(xié)議關(guān)鍵字。為解決n-gram方法只能將所有報文劃分為等長子序列的局限性,本文利用投票專家(Voting Expert,VE)算法提供更為準(zhǔn)確的關(guān)鍵字提取,并且針對VE算法在處理協(xié)議數(shù)據(jù)時存在節(jié)點(diǎn)空間爆炸的問題,基于有損計數(shù)算法對VE算法進(jìn)行了改進(jìn)。在成功獲取協(xié)議的關(guān)鍵字后,采用因果態(tài)分割重建算法重建未知專有協(xié)議的報文格式ε機(jī)。然后從每個會話中提取可以代表該會話的報文類型,將會話過程表示為一個報文類型序列,將所有的狀態(tài)轉(zhuǎn)換序列融合成一個確定有窮自動機(jī),即協(xié)議的狀態(tài)機(jī)。最后,根據(jù)逆向得到的有關(guān)協(xié)議的報文結(jié)構(gòu)和協(xié)議狀態(tài)機(jī)信息生成模糊測試用例,并對測試目標(biāo)進(jìn)行模糊測試。
投票專家算法[8],屬于局部貪心算法,主要是通過一個相對較小的滑動窗口,選擇最有可能的邊界位置對單詞分區(qū)。本文利用VE算法代替?zhèn)鹘y(tǒng)的n-gram算法,提取被測專有協(xié)議的關(guān)鍵字。
為了實(shí)現(xiàn)滑動窗口大小為L的VE算法,用一個深度為(L+1)的單詞查找樹(Trie)來保存數(shù)據(jù)流中所有可能發(fā)生的字節(jié)組合。
例如,字符序列為“abcabd”,窗口大小為2時,可以生成深度為3的樹,如圖1所示。從圖中可以看出子字符串a(chǎn)b出現(xiàn)兩次,并且每次a出現(xiàn)時,b都是緊隨其后。bc和bd各出現(xiàn)一次。

圖1 單詞查找樹示意圖
VE算法根據(jù)兩項(xiàng)指標(biāo)劃分單詞,一個是內(nèi)部熵(Internal entropy)用HI表示,代表該子序列在數(shù)據(jù)流中總是作為一個整體出現(xiàn),應(yīng)作為整體得到保留,表達(dá)式如式(1)所示:

其中,w代表子序列,而P(w)則表示該子序列出現(xiàn)的概率。HI的值越小,代表子序列w越常作為一個整體出現(xiàn)。
另外一個指標(biāo)是邊界熵(Boundary entropy)用HB(w)表示,若后續(xù)字節(jié)序列經(jīng)常變化,則認(rèn)定該字節(jié)后為一個詞之間的邊界,表達(dá)式如式(2)所示:

為了計算不同長度的子序列,需要對表達(dá)式進(jìn)行標(biāo)準(zhǔn)化。

VE算法可以分為兩個階段,第一個階段為投票階段(Voting phase),在大小為L的滑動窗口內(nèi)對可能是邊界的位置進(jìn)行投票。xIi和xBi分別表示在i處的內(nèi)部投票點(diǎn)(internal voting point)和邊界投票點(diǎn)(boundary voting point),j在0到L之間取值:

每個點(diǎn)x存在一個選票分?jǐn)?shù)(Vote Score)用V(x)表示,其計算規(guī)則如式(7)所示,1(·)代表一個指示函數(shù),如果x=y函數(shù)的值為1,否則為0。

第二個階段為判決階段(Decision phase),在判斷點(diǎn)x處為詞邊界時遵循以下兩條規(guī)則:
(1)點(diǎn)x得到的票數(shù)比相鄰點(diǎn)更多;
(2)得票數(shù)大于設(shè)定的閾值T。
通過VE算法可以得到字節(jié)序列中可能的詞邊界,將字節(jié)序列按一定的語義信息進(jìn)行劃分。
雖然VE算法在自然語言處理中得到了很好的分詞效果,但是在處理網(wǎng)絡(luò)流量時存在一些缺陷。如,節(jié)點(diǎn)空間爆炸問題。在處理自然語言時,由于傳統(tǒng)的組合習(xí)慣會限制某些子序列的發(fā)生,以英語為例,如當(dāng)出現(xiàn)“tio”時,后續(xù)的字符極有可能是“n”,這在某種程度上減少了子樹的數(shù)量,節(jié)省了存儲空間。但是在處理網(wǎng)絡(luò)協(xié)議數(shù)據(jù),特別是純二進(jìn)制數(shù)據(jù)時,網(wǎng)絡(luò)流量中子序列的分布概率更稀疏,往往會產(chǎn)生更多新的字節(jié)組合,從而導(dǎo)致占用大量存儲空間。
盡管VE算法在處理協(xié)議時會導(dǎo)致節(jié)點(diǎn)空間爆炸,但是通過觀察發(fā)現(xiàn),大多數(shù)節(jié)點(diǎn)的頻率非常低。因此,雖然捕獲所有節(jié)點(diǎn)需要一個巨大的存儲空間,但是只需要關(guān)注有足夠高的頻率的子集即可。
為了解決VE算法在處理協(xié)議時存在的問題,本文通過有損計數(shù)算法(Lossy Counting Algorithm,LCA)[9]對單詞查找樹進(jìn)行剪枝操作,刪除頻率非常低,不太可能是關(guān)鍵詞的后繼節(jié)點(diǎn),從而節(jié)省空間。
LCA算法是一種近似計算算法,可以通過定期消除低頻數(shù)據(jù)的方式,利用有限的內(nèi)存從數(shù)據(jù)流中返回高頻率數(shù)據(jù)項(xiàng),在處理實(shí)時大數(shù)據(jù)流上的頻率統(tǒng)計問題中得到了廣泛的應(yīng)用。本文的方法是利用LCA算法在修剪期內(nèi),對出現(xiàn)頻率低于設(shè)定閾值的子序列進(jìn)行剔除。LCA算法最為關(guān)鍵的參數(shù)就是最大錯誤率e,低錯誤率會保留更多的子序列但是會增加內(nèi)存的壓力,高錯誤率可以減少超出內(nèi)存的風(fēng)險但是可能會在剪枝操作中剔除一些有用的子序列,因此需要在兩者之間找到平衡。另外,雖然通過剪枝操作可以在單詞查找樹中剔除低頻的子序列,但是在計算選票分?jǐn)?shù)時需要考慮所有子序列,因此,本文增加了補(bǔ)償環(huán)節(jié),即將沒有出現(xiàn)在單詞查找樹中的子序列的出現(xiàn)頻率統(tǒng)一設(shè)定為e/2。
文中已給出改進(jìn)的投票專家算法ImproveVE的偽代碼(圖2)。算法的參數(shù)分別為P:流量數(shù)據(jù);M:剪枝期處理字節(jié)數(shù);L:滑動窗口大小;T:決定階段閾值。ImproveVE函數(shù)首先調(diào)用BuildTrie函數(shù)計算子序列的頻率(第6~16行),在各個剪枝期對低于頻率閾值的子序列節(jié)點(diǎn)進(jìn)行剔除(第17~21行)。構(gòu)建單詞查找樹,然后計算樹中所有子序列的熵值(第28~29行),并且補(bǔ)償被剪切子序列(第33行),計算相應(yīng)的熵值(第34行)。最后計算投票分?jǐn)?shù),確實(shí)可能的詞邊界(第36~41行),提取所有的候選關(guān)鍵字到集合W中(第42行)。
通過ImproveVE算法得到的只能稱之為候選關(guān)鍵字集合,所謂的關(guān)鍵字是指那些可以區(qū)分應(yīng)用協(xié)議的字節(jié)子序列。目標(biāo)是根據(jù)權(quán)值對候選關(guān)鍵字集合中的關(guān)鍵字進(jìn)行降序排序,提取排名靠前的子序列作為協(xié)議的關(guān)鍵字。因此,排序規(guī)則對特征詞的選取起決定性作用。
本文利用信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)——詞頻逆文檔頻率TF-IDF[10-11](Term Frequency-Inverse Document Frequency)作為特征詞排序的評判標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)需綜合考慮頻率與位置兩方面的信息。因?yàn)椋趫笪母袷街校嬖谌缭吹刂贰⒛康牡刂返刃畔ⅲm然出現(xiàn)的頻率會很高,但是對報文格式的表達(dá)沒有任何意義。
通過TF-IDF計算所有候選特征詞的權(quán)值后,選取排名在前k的子序列作為協(xié)議的關(guān)鍵字,用于協(xié)議的逆向解析過程。
3.2.1 報文格式

圖2 改進(jìn)的投票專家算法ImproveVE的偽代碼
在得到目標(biāo)協(xié)議的關(guān)鍵字集合后,利用ε機(jī)表示協(xié)議的報文格式。因?yàn)閰f(xié)議可以看作是一個隨機(jī)過程,構(gòu)成協(xié)議的字符串以一定的概率出現(xiàn),協(xié)議的內(nèi)部狀態(tài)與某些字符串的集合之間存在對應(yīng)關(guān)系。而隱馬爾科夫模型(Hidden Markov Mode,HMM)是一種只通過可觀察狀態(tài)就能求得系統(tǒng)隱藏的內(nèi)部狀態(tài)的統(tǒng)計模型。因此,可以運(yùn)用求解HMM的思想得到專有協(xié)議的報文結(jié)構(gòu)狀態(tài)機(jī)模型。ε機(jī)是一種特殊的隱馬爾科夫模型,可以對隨機(jī)過程進(jìn)行最小最優(yōu)預(yù)測,由因果態(tài)方程ε和狀態(tài)轉(zhuǎn)移矩陣T構(gòu)成[11]。所謂的因果態(tài)方程指的是歷史與歷史集合之間的一種映射關(guān)系。其定義如式(8)所示:

其中,和分別代表一個隨機(jī)過程的歷史和未來兩個部分,SL和SL分別表示歷史狀態(tài)的最后L個字符和未來狀態(tài)的最初L個字符。
目前,有幾種重建算法可以用于推斷ε機(jī)。如,因果態(tài)分割重建算法[12](Causal-State Splitting Reconstruction,CSSR)、狀態(tài)合并ε機(jī)推斷算法(State-merging ε-Machine Inference Algorithm)等。因果態(tài)分割重建算法與狀態(tài)合并ε機(jī)推斷算法最主要的區(qū)別是CSSR會利用一些關(guān)于因果態(tài)的狀態(tài)屬性來指導(dǎo)搜索和自動機(jī)建設(shè),并且收斂速度更快。CSSR的核心思想是分割——將一個有限的符號集分割成多個因果態(tài)。其偽代碼如圖3。

圖3 CSSR偽代碼
其總體思路:首先做零假設(shè)(Null Hypothesis),假設(shè)該隨機(jī)過程中的所有事件屬于同一個狀態(tài)。然后計算下一個事件的未來分布,通過Kolmogorov-Smirnov對零假設(shè)進(jìn)行假設(shè)檢驗(yàn),如果假設(shè)不被拒絕,新的分配被認(rèn)為與現(xiàn)有分布狀態(tài)相同,該事件被添加到這個狀態(tài),如果有任意一個事件不滿足于假設(shè)條件,則被分離出來構(gòu)成新的狀態(tài)。最后得到的狀態(tài)有可能數(shù)量十分龐大,但其中大部分是瞬時狀態(tài)。通過刪除瞬時狀態(tài),保留循環(huán)狀態(tài),得到最終的報文格式ε機(jī)。
具體過程如偽代碼所示,首先Initialization函數(shù)初始化(第1行),然后Sufficiency函數(shù)構(gòu)建因果態(tài)(第11~28行),最后Recursion函數(shù)用于消除瞬時狀態(tài),確定因果狀態(tài)機(jī)并填充轉(zhuǎn)換表(第11~28行)。在Sufficiency和Recursion函數(shù)中均調(diào)用了TEXT函數(shù)(第30~37行)和MOVE函數(shù)(第39~43行),分別用于進(jìn)行測試零假設(shè)和狀態(tài)的移動、合并操作。參數(shù)W代表用于構(gòu)建報文格式馬爾科夫模型的字母表,即提取的協(xié)議關(guān)鍵字集合;xˉ表示從W中提取的長度為N的序列,Lmax表示估計因果態(tài)時最大的歷史長度,α表示假設(shè)檢驗(yàn)的置信度。通過該算法可以重建協(xié)議的報文格式ε機(jī)。
3.2.2 協(xié)議狀態(tài)機(jī)
網(wǎng)絡(luò)通信是由一個潛在的狀態(tài)機(jī)驅(qū)動,當(dāng)某些事件觸發(fā)某些反應(yīng)時進(jìn)行狀態(tài)交換。報文格式信息僅僅可以反映協(xié)議的語法和語義信息,缺少揭示協(xié)議行為特征的時序信息。推斷協(xié)議的狀態(tài)機(jī)模型可以了解報文之間的相互關(guān)聯(lián),進(jìn)一步完善模糊測試器。
獲得協(xié)議報文格式后,需要對所有會話(Session)進(jìn)行分析,從每個會話中提取可以代表該會話的報文類型,將會話過程表示為一個報文類型序列,構(gòu)建APTA(Augmented Prefix Tree Acceptor)樹。
然后采用紅藍(lán)節(jié)點(diǎn)框架[13-15]對APTA樹進(jìn)行簡化,最后最小化馬爾科夫模型為一個有限狀態(tài)自動機(jī)(Deterministic Finite Automaton,DFA),即如果將所有的狀態(tài)轉(zhuǎn)換序列融合成一個確定有窮自動機(jī),那么這就是協(xié)議的狀態(tài)機(jī)。
另外,對于只能解決單項(xiàng)報文的專有協(xié)議模糊測試器,得到的協(xié)議狀態(tài)機(jī)顯然是不全面的。為了能夠應(yīng)對雙向報文,本文對事件序列進(jìn)行標(biāo)記,用以區(qū)分是來自客戶端或者是服務(wù)器端。將來自同方向的報文構(gòu)成一個轉(zhuǎn)換條件或者一個狀態(tài),這樣可以把會話中的消息看作是一個狀態(tài)轉(zhuǎn)換序列。例如,將服務(wù)器端到客戶端的方向的報文定為狀態(tài)機(jī)模型的邊(edge),將客戶端到服務(wù)器端的方向的報文定義為狀態(tài)機(jī)模型的節(jié)點(diǎn)(node),反之亦可。具體的做法是采用大小為k的序列滑動窗口進(jìn)行標(biāo)記,例如,假設(shè)觀察到的事件序列為a、b、c、d,并且是從客戶端和服務(wù)器端交替生成的,則k=2時,得到的結(jié)果如式(9)所示:

模糊測試是通過向測試目標(biāo)輸入非預(yù)期的數(shù)據(jù)并監(jiān)測輸出數(shù)據(jù)中的異常來發(fā)現(xiàn)測試目標(biāo)中可能存在的漏洞的方法[16]。生成測試用例就是產(chǎn)生這些用于測試的輸入數(shù)據(jù)的過程。
協(xié)議逆向階段可以得到有關(guān)協(xié)議的報文結(jié)構(gòu)和協(xié)議狀態(tài)機(jī)信息,這些信息可以用來生成模糊測試階段的測試用例。報文結(jié)構(gòu)可以用于構(gòu)造完整的數(shù)據(jù)包,對于報文中的固定部分通常不會造成漏洞,更多的是關(guān)注變長部分,確定生成模糊測試用例的測試點(diǎn)。而協(xié)議狀態(tài)機(jī)可以明確協(xié)議的交互行為,控制協(xié)議的接收與發(fā)送。協(xié)議逆向工程與模糊測試技術(shù)的完美結(jié)合可以針對特定協(xié)議生成模糊測試用例,并且對測試目標(biāo)進(jìn)行漏洞挖掘。
本文采用基于文法驅(qū)動[17-18]的模糊測試用例生成技術(shù),根據(jù)逆向得到的專有協(xié)議報文格式及狀態(tài)機(jī)信息,利用文法模型自動化生成測試用例。其流程如圖4所示。

圖4 生成測試用例流程圖
根據(jù)數(shù)據(jù)格式規(guī)范構(gòu)建文法模型,結(jié)合通過協(xié)議逆向工程得到的協(xié)議信息構(gòu)建文法分析樹。再利用模型中的屬性規(guī)則對文法元素實(shí)施選擇變異,進(jìn)而生成測試用例進(jìn)行模糊測試[19]。
本文從三個方面進(jìn)行實(shí)驗(yàn)分析驗(yàn)證:首先,利用公有協(xié)議FTP、HTTP和SMTP對ImproveVE算法提取關(guān)鍵字的性能進(jìn)行實(shí)驗(yàn)分析;其次,通過逆向Modbus TCP協(xié)議,并與已有協(xié)議規(guī)范比對,檢驗(yàn)?zāi)嫦虻男Ч蛔詈螅帽疚姆椒▽S袇f(xié)議WDB RPC進(jìn)行逆向分析,并且針對WDB RPC協(xié)議對嵌入式實(shí)時操作系統(tǒng)VxWorks進(jìn)行漏洞挖掘。
首先利用ImproveVE算法和傳統(tǒng)的n-gram算法分別對協(xié)議規(guī)范已知的公有協(xié)議FTP、HTTP和SMTP提取關(guān)鍵字,統(tǒng)計在一系列候選關(guān)鍵字集合排名前k項(xiàng)中提取的關(guān)鍵字?jǐn)?shù)量,根據(jù)提取的關(guān)鍵字與真正關(guān)鍵字之間的百分比評判算法的優(yōu)劣。在實(shí)驗(yàn)參數(shù)的選取上,選擇最為常用的n=3作為n-gram算法的窗口大小,VE算法的滑動窗口大小、閾值以及剪枝期處理字節(jié)數(shù)分別取值10、6和10 000 000。
如圖5的實(shí)驗(yàn)結(jié)果所示,ImproveVE算法相較于n-gram算法對報文子序列的劃分更為合理,提取的協(xié)議關(guān)鍵字更接近于真實(shí)情況。尤其是對FTP協(xié)議關(guān)鍵字的提取,其準(zhǔn)確率已接近98%,準(zhǔn)確地提取協(xié)議關(guān)鍵字更有利于對協(xié)議進(jìn)行逆向分析。
另外,針對VE算法處理協(xié)議數(shù)據(jù)時存在節(jié)點(diǎn)空間爆炸,占用大量內(nèi)存的問題,本文利用LCA算法對VE算法進(jìn)行了改進(jìn)。圖6是分別采用VE算法和改進(jìn)后的ImproveVE算法處理SMTP協(xié)議時所產(chǎn)生的節(jié)點(diǎn)數(shù)量比對。從直觀上不難發(fā)現(xiàn),改進(jìn)后的算法明顯降低了節(jié)點(diǎn)數(shù)量。值得注意的是,雖然改進(jìn)后的算法ImproveVE和VE算法相比減少了生成的節(jié)點(diǎn)數(shù)量,但是和n-gram相比,所占用的內(nèi)存空間仍然較大,這就需要在準(zhǔn)確性和資源占用兩者之間做權(quán)衡。根據(jù)本文的目的,對專有協(xié)議進(jìn)行模糊測試,顯然提取關(guān)鍵字的準(zhǔn)確性是首要因素。另外,通過對VE算法的改進(jìn),節(jié)省了大量內(nèi)存,對內(nèi)存資源的占用完全在可承受的范圍之內(nèi)。因此,準(zhǔn)確性這一指標(biāo)更為重要,ImproveVE算法能較好地完成針對專有協(xié)議的關(guān)鍵字提取任務(wù)。
對改進(jìn)的VE算法的性能進(jìn)行對比實(shí)驗(yàn)分析后,需要進(jìn)一步驗(yàn)證本文方法對專有協(xié)議的逆向效果。首先對公有協(xié)議Modbus TCP進(jìn)行逆向分析。
Modbus是用于工業(yè)現(xiàn)場的總線協(xié)議,屬于應(yīng)用層報文傳輸協(xié)議。Modbus TCP屬于Modbus標(biāo)準(zhǔn)的一種,屬于工業(yè)控制網(wǎng)絡(luò)范圍,是一種公有協(xié)議,Modbus TCP的報文格式與通過本文方法得到的報文格式ε機(jī)如圖7所示。

圖5 提取關(guān)鍵字的準(zhǔn)確率

圖6 ImproveVE算法減少節(jié)點(diǎn)數(shù)量

圖7 Modbus TCP報文格式與ε機(jī)
根據(jù)已有的Modbus TCP的報文格式,可以獲悉該協(xié)議由事務(wù)標(biāo)識符、協(xié)議標(biāo)識符、長度字段、功能字段、單元標(biāo)識符和負(fù)載構(gòu)成。該協(xié)議對應(yīng)的隱馬爾科夫模型由報文頭創(chuàng)建的6個狀態(tài)和相鄰狀態(tài)之間的轉(zhuǎn)換構(gòu)成,其中Σn代表n個連續(xù)的字節(jié),EOM代表消息是完整的,并準(zhǔn)備轉(zhuǎn)發(fā)。接下來通過300條流量數(shù)據(jù)對Modbus TCP協(xié)議進(jìn)行逆向分析,得到該協(xié)議的ε機(jī)。可以發(fā)現(xiàn),前三個字段被分配到了同一狀態(tài),這是因?yàn)樗鼈兊娜≈凳枪潭ǖ模虼嗽趯W(xué)習(xí)過程中自然被分配到同一狀態(tài)。雖然得到的ε機(jī)與真實(shí)的報文格式有所差異,不完全匹配,但卻是一個合理的分組,是完全基于觀察到的統(tǒng)計信息得到的結(jié)果。因?yàn)楸疚牡姆椒ㄊ且粋€增量學(xué)習(xí)的過程,如果有足夠多的訓(xùn)練數(shù)據(jù),字節(jié)將被分配到正確的字段。
另外,可以觀察到,通過因果態(tài)分割重建算法不僅很好地重建了Modbus TCP協(xié)議的報文結(jié)構(gòu)ε機(jī),并且區(qū)分出了不同的功能字段,如表1所示。
接下來利用本文的方法對專有協(xié)議WDB RPC進(jìn)行實(shí)驗(yàn)分析。WDB RPC屬于嵌入式實(shí)時操作系統(tǒng)VxWorks的專有協(xié)議,利用WDB RPC協(xié)議既能直接訪問系統(tǒng)的內(nèi)存,又能對VxWorks所有組件的工作狀態(tài)進(jìn)行監(jiān)控,如果組件發(fā)生異常,TAgent會利用WDB RPC協(xié)議自動告知當(dāng)前連接的調(diào)試器。WDB RPC屬于典型的專有協(xié)議,沒有公開的文檔說明,公司外部人員對該協(xié)議的結(jié)構(gòu)一無所知。WDB RPC目前有兩個版本,本文所研究的是WDB RPCv2,用于VxWorks 6.6及以上版本。本文通過500條WDB RPC流量數(shù)據(jù)對報文結(jié)構(gòu)進(jìn)行逆向分析,得到WDB RPC報文結(jié)構(gòu)的ε機(jī)如圖8所示。

表1 Modbus TCP部分字符與相對應(yīng)的功能

圖8 WDB RPC的ε機(jī)
通過協(xié)議逆向分析,可以獲得協(xié)議的報文格式和協(xié)議狀態(tài)機(jī)等信息,這些信息可以用于協(xié)議識別、異常檢測和智能模糊測試等諸多領(lǐng)域。本文主要是將協(xié)議逆向分析用于模糊測試,以解決由于工控領(lǐng)域存在大量專有協(xié)議給模糊測試帶來的實(shí)際困難。利用協(xié)議逆向階段得到的有關(guān)協(xié)議信息,生成模糊測試階段的測試用例,并對測試目標(biāo)實(shí)施漏洞挖掘。本文利用上述的VxWorks專有協(xié)議WDB RPC對嵌入式實(shí)時操作系統(tǒng)進(jìn)行模糊測試。VxWorks是由美國風(fēng)河(Wind River)開發(fā)的一款嵌入式實(shí)時操作系統(tǒng),該操作系統(tǒng)以其良好的可靠性和卓越的實(shí)時性被廣泛應(yīng)用于工業(yè)控制領(lǐng)域。
通過本文的專有協(xié)議模糊測試方法成功發(fā)現(xiàn),WDB RPC存在整數(shù)溢出漏洞,允許攻擊者修改設(shè)備內(nèi)存,存在安全隱患。當(dāng)攻擊者不斷地進(jìn)行寫內(nèi)存操作會造成系統(tǒng)崩潰。圖9為VxWorks操作系統(tǒng)正常的啟動畫面,以及當(dāng)利用WDB RPC的漏洞寫入大量的內(nèi)存后,造成系統(tǒng)的崩潰。造成圖中所示現(xiàn)象的原因可能是在顯示的過程中正好出現(xiàn)了系統(tǒng)的崩潰。

圖9 VxWorks系統(tǒng)正常啟動及造成崩潰的畫面
本文將自然語言處理的知識拓展到網(wǎng)絡(luò)協(xié)議領(lǐng)域,采用投票專家算法替代傳統(tǒng)的n-gram算法,使協(xié)議關(guān)鍵字的提取過程更加精確。另外,利用有損計數(shù)算法對投票專家算法進(jìn)行了改進(jìn),節(jié)省了對內(nèi)存資源的占用。本文的方法提升了關(guān)鍵字提取精度,使逆向的協(xié)議信息更接近于真實(shí)值。并且,通過與協(xié)議逆向工程技術(shù)的結(jié)合運(yùn)用,克服了模糊測試中專有協(xié)議缺少協(xié)議規(guī)范的問題,適用于存在大量專有協(xié)議的環(huán)境,如工業(yè)控制系統(tǒng),有助于提升工業(yè)控制系統(tǒng)的安全性和防護(hù)能力。但本文的方法仍存在一些不足,需要在今后的研究中加以完善,如ImproveVE算法處理文本協(xié)議時效果十分理想,但在處理純二進(jìn)制協(xié)議時關(guān)鍵字的提取精度有待進(jìn)一步加強(qiáng)。另外,在內(nèi)存資源占用方面也可以進(jìn)一步優(yōu)化。
[1]熊琦,彭勇,伊勝偉,等.工控網(wǎng)絡(luò)協(xié)議Fuzzing測試技術(shù)研究綜述[J].小型微型計算機(jī)系統(tǒng),2015,36(3):497-502.
[2]Gascon H,Wressnegger C,Yamaguchi F,et al.Pulsar:Stateful black-box fuzzing of proprietary network protocols[M]//Security and Privacy in Communication Networks.[S.l.]:Springer International Publishing,2015.
[3]Bermudez I,Tongaonkar A,Iliofotou M,et al.Towards automatic protocol field inference[J].Computer Communications,2016,84(C):40-51.
[4]Cui W,Kannan J,Wang H J.Discoverer:Automatic protocol reverse engineering from network traces[C]//Usenix Security Symposium,2007.
[5]Comparetti P M,Wondracek G,Kruegel C,et al.Prospex:Protocol specification extraction[C]//IEEE Symposium on Secuity&Privacy,2009:110-125.
[6]Leita C,Mermoud K,Dacier M.ScriptGen:An automated script generation tool for Honeyd[C]//Computer Security Applications Conference,2005:203-214.
[7]Jamdagni A,Tan Z,He X,et al.Review article:RePIDS:A multitier real-time payload-based intrusion detection system[J].International Journal of Computer&Telecommunications Networking,2013,57(3):811-824.
[8]Cohen P,Adams N,Heeringa B.Voting experts:An unsupervised algorithm forsegmenting sequences[J].Intelligent Data Analysis,2007,11(6):607-625.
[9]艾佳.海量數(shù)據(jù)上基于抽樣的模式挖掘研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
[10]Fang H,Tao T,Zhai C X.A formal study of information retrievalheuristics[C]//InternationalACM SIGIR Conference on Research and Development in Information Retrieval,2004:49-56.
[11]Zhang Y,Xu T,Wang Y,et al.A Markov random field approach to automated protocol signature inference[M]//Security and Privacy in Communication Networks.[S.l.]:Springer International Publishing,2015.
[12]張淑清,李盼,師榮艷,等.復(fù)雜系統(tǒng)建模的ε機(jī)理論方法及應(yīng)用研究[J].儀器儀表學(xué)報,2014(8):1758-1765.
[13]孫芳慧.基于Net-Trace的未知協(xié)議格式逆向技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.
[14]Bahr A,Thompson J D,Thierry J C,et al.BAliBASE(Benchmark Alignment dataBASE):Enhancements for repeats,transmembrane sequences and circular permutations[J].Nucleic Acids Research,2001,29(1):323-326.
[15]Lang K J.Faster algorithms for finding minimal consistent DFAs[J].oai:CiteSeerX.psu:10.1.1.29.7130,1999.
[16]薩頓,格林,阿米尼.模糊測試:強(qiáng)制發(fā)掘安全漏洞的利器[M].北京:電子工業(yè)出版社,2013.
[17]梁姝瑞.基于FSM的Zigbee協(xié)議模糊測試算法[D].北京:北京郵電大學(xué),2014.
[18]侯瑩,洪征,潘璠,等.基于模型的Fuzzing測試腳本自動化生成[J].計算機(jī)科學(xué),2013,40(3):206-209.
[19]吳禮發(fā),洪征,潘璠.網(wǎng)絡(luò)協(xié)議逆向分析及應(yīng)用[M].北京:國防工業(yè)出版社,2016.