洪 征,田益凡,張洪澤,吳禮發(fā)
解放軍陸軍工程大學(xué) 指揮控制工程學(xué)院,南京 210000
協(xié)議規(guī)范是對網(wǎng)絡(luò)協(xié)議語法、語義以及同步等信息的具體描述,在網(wǎng)絡(luò)安全領(lǐng)域扮演著重要角色。僵尸網(wǎng)絡(luò)中,攻擊者使用C&C(Command and Control)協(xié)議來控制存在漏洞的主機(jī)實(shí)施DDoS(Distributed Denial of Service)攻擊等惡意行為,網(wǎng)絡(luò)管理員需要依據(jù)C&C協(xié)議規(guī)范來發(fā)現(xiàn)和分析僵尸網(wǎng)絡(luò)[1]。入侵檢測系統(tǒng)中,需要基于協(xié)議規(guī)范從繁雜的網(wǎng)絡(luò)流量中辨識出惡意流量。在模糊測試過程中,可以利用協(xié)議規(guī)范指導(dǎo)測試用例生成以實(shí)現(xiàn)更加高效的自動(dòng)化漏洞挖掘[2-3]。然而出于利益、版權(quán)、安全等因素,軟件廠商和個(gè)人往往不愿意公開協(xié)議細(xì)節(jié),如微軟使用的網(wǎng)絡(luò)文件共享SMB(Server Message Block)協(xié)議,Oracle數(shù)據(jù)庫訪問的TNS(Transparence Network Substrate)協(xié)議以及微信、QQ等即時(shí)通信軟件所使用的協(xié)議都沒有公開協(xié)議細(xì)節(jié),這些未知協(xié)議在網(wǎng)絡(luò)中的廣泛使用,給安全防護(hù)帶來了極大的阻礙。
對于未知協(xié)議而言,目前主要通過協(xié)議逆向分析方法[4]獲取其協(xié)議規(guī)范。依據(jù)分析對象的不同,逆向分析方法可分為兩類:基于網(wǎng)絡(luò)流量的分析方法和基于指令執(zhí)行軌跡的分析方法?;诰W(wǎng)絡(luò)流量的分析方法對截獲的網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分析,通過生物信息學(xué)、統(tǒng)計(jì)分析、數(shù)據(jù)挖掘等方法,對報(bào)文樣本進(jìn)行聚類分析,依據(jù)相同格式報(bào)文在取值上的相似性,分析獲取協(xié)議語法、語義信息?;谥噶顖?zhí)行軌跡的分析方法以協(xié)議解析過程中的指令執(zhí)行軌跡為分析對象,將協(xié)議輸入數(shù)據(jù)作為污點(diǎn)數(shù)據(jù)源,利用動(dòng)態(tài)污點(diǎn)分析(Dynamic Taint Analysis)方法[5]跟蹤數(shù)據(jù)解析過程,依據(jù)協(xié)議解析程序如何使用污點(diǎn)數(shù)據(jù)以及相應(yīng)的上下文信息獲取協(xié)議規(guī)范。
基于指令執(zhí)行軌跡的分析方法通常具有較高的準(zhǔn)確率,能夠獲得更全面的語義信息,但這類分析方法的實(shí)施需要分析人員擁有協(xié)議終端的可執(zhí)行程序,并要求依據(jù)協(xié)議解析環(huán)境進(jìn)行分析,依賴于底層平臺,無法移植,通用性不強(qiáng)?;诰W(wǎng)絡(luò)流量的分析方法以網(wǎng)絡(luò)數(shù)據(jù)流為輸入,雖然其準(zhǔn)確率依賴于捕獲樣本的豐富程度,但實(shí)現(xiàn)靈活,適用于各種應(yīng)用場景,能夠?qū)嵤┳詣?dòng)化分析。本文針對基于網(wǎng)絡(luò)流量的分析方法進(jìn)行研究,重點(diǎn)關(guān)注協(xié)議語法以及語義信息的提取。
目前國內(nèi)外已有一些針對協(xié)議格式提取的研究成果,PI(Protocol Information)項(xiàng)目[6]是最早提出的基于網(wǎng)絡(luò)流量的協(xié)議格式推斷方法,引入了生物學(xué)中的多序列比對算法,通過將報(bào)文樣本進(jìn)行比對對齊的方式提取協(xié)議格式信息。Cui等人提出一種基于遞歸聚類的協(xié)議格式提取方案Discoverer[7],按照文本和二進(jìn)制兩種屬性對報(bào)文字節(jié)流進(jìn)行標(biāo)注,得到報(bào)文屬性序列,并對其進(jìn)行序列比對得到初始聚類結(jié)果,隨后利用格式標(biāo)志(Field Distinguish)字段進(jìn)行遞歸聚類獲取協(xié)議格式。Krueger提出一種基于統(tǒng)計(jì)的格式推斷方法PRISMA[8]。該方法首先利用自然語言處理中的N-gram思想以及分隔符對報(bào)文序列進(jìn)行分詞得到候選特征詞,進(jìn)而使用統(tǒng)計(jì)學(xué)方法對候選特征詞進(jìn)行篩選構(gòu)建特征矩陣,并以特征詞為基礎(chǔ)描述報(bào)文序列。Zhang等人則提出一種基于專家投票算法的特征詞提取方法ProWord[9],并將其應(yīng)用于流量分類。Luo等人提出一種基于位置信息的協(xié)議格式推斷方法AutoReEngine[10],采用Apriori算法獲取特征詞,利用位置信息對特征詞進(jìn)行合并和篩選,得到協(xié)議關(guān)鍵詞集合,最終再次利用Apriori算法對協(xié)議關(guān)鍵詞進(jìn)行組合提取協(xié)議格式及協(xié)議狀態(tài)機(jī)。
以上方案都存在一些缺陷:PI項(xiàng)目直接對整個(gè)報(bào)文樣本進(jìn)行序列比對,時(shí)間復(fù)雜度較高。Discoverer雖然利用報(bào)文屬性序列和格式標(biāo)志字段降低了時(shí)間復(fù)雜度,但其采用常見文本類分隔符對報(bào)文樣本進(jìn)行劃分的處理方法并不適用于二進(jìn)制協(xié)議。此外,對于未知協(xié)議而言哪些分隔符會(huì)在協(xié)議中被使用具有很大的不確定性。PRISMA中對文本協(xié)議使用分隔符方法進(jìn)行劃分,也存在類似問題。且PRISMA在處理二進(jìn)制協(xié)議時(shí),采用N-gram方法選取固定長度的特征詞,而實(shí)際報(bào)文中特征詞的長度并不相同,固定長度的特征詞的權(quán)重也會(huì)受到隨機(jī)串的影響。AutoReEngine通過Apriori算法結(jié)合位置信息提取協(xié)議關(guān)鍵詞,對于字段位置可變的協(xié)議,如HTTP、SIP協(xié)議,可能遺失部分關(guān)鍵詞。
為了提高協(xié)議格式推斷方法的通用性以及準(zhǔn)確率,本文提出一種基于擴(kuò)展前綴樹的應(yīng)用層未知協(xié)議格式推斷方法,實(shí)現(xiàn)了原型系統(tǒng)EPT-PFI(Extended Prefix Tree based Protocol Format Inference)。EPT-PFI以截獲的網(wǎng)絡(luò)報(bào)文作為輸入,通過N-gram方法對報(bào)文樣本進(jìn)行分詞,結(jié)合點(diǎn)間互信息PMI(Point Mutual Information)對候選關(guān)鍵詞進(jìn)行合并提取協(xié)議關(guān)鍵詞,在此基礎(chǔ)上對報(bào)文樣本進(jìn)行標(biāo)注獲得協(xié)議關(guān)鍵詞序列。而后構(gòu)建擴(kuò)展前綴樹(Extended Prefix Tree,EPT)描述協(xié)議關(guān)鍵詞序列,并基于擴(kuò)展前綴樹實(shí)現(xiàn)分段的多序列比對。最后,依據(jù)協(xié)議報(bào)文結(jié)構(gòu)對擴(kuò)展前綴樹進(jìn)行合并,獲取協(xié)議格式信息。
協(xié)議規(guī)范由協(xié)議格式和協(xié)議狀態(tài)機(jī)兩部分構(gòu)成。協(xié)議狀態(tài)機(jī)指定了合法報(bào)文的傳送順序,通過特定的報(bào)文發(fā)送序列構(gòu)成特定會(huì)話(Session)以實(shí)現(xiàn)所需的功能。協(xié)議格式指定了會(huì)話中每條報(bào)文的語法以及語義信息,只有符合協(xié)議格式的才是合法報(bào)文,才能被協(xié)議終端正確解析。協(xié)議語法規(guī)定了報(bào)文的字段、結(jié)構(gòu)以及字段語義,定義了組成報(bào)文的每一個(gè)字段(Field)的關(guān)鍵詞、數(shù)據(jù)類型、位置以及長度等具體信息。協(xié)議語義則定義了每一個(gè)字段在協(xié)議解析過程中所代表的實(shí)際意義,如HTTP協(xié)議(Hyper Text Transfer Protocol)請求報(bào)文中的“HOST”字段指定了請求資源所在的主機(jī)和端口號。常見的協(xié)議報(bào)文主要涉及以下幾種形式[11]:
(1)二進(jìn)制形式,即預(yù)先規(guī)定若干個(gè)固定比特位為一個(gè)字段,字段內(nèi)容即代表該字段的取值,如DNS協(xié)議的前16個(gè)比特位標(biāo)識DNS ID號。
(2)ASCII碼形式,即采用易于理解的ASCII字符表示字段含義,使用預(yù)定義的分隔符(空格、回車換行等)作為字段結(jié)束標(biāo)志,如MIME協(xié)議報(bào)文中的協(xié)議版本字段“MIME-Version”。
(3)TLV(Type-Length-Value)形式,即使用固定長度字節(jié)表示字段類型,固定長度字節(jié)的Length表名該字段取值的字節(jié)數(shù),而其后緊跟的指定長度內(nèi)容即字段取值,如eDonkey協(xié)議格式。
(4)指針形式,即采用指針指出某一個(gè)字段的開始和結(jié)束,如DNS協(xié)議響應(yīng)報(bào)文中的回答計(jì)數(shù)指定了回答區(qū)域的條目數(shù)。
通信報(bào)文中一些字段是固定字段,一些是可變字段。但由于協(xié)議規(guī)范以及使用條件的制約,同種協(xié)議中同類格式的報(bào)文樣本往往會(huì)體現(xiàn)出一些統(tǒng)計(jì)相似性或相關(guān)性,具體來說就是在報(bào)文樣本中有一些具有固定模式、頻繁出現(xiàn)的比特串或字符串。文獻(xiàn)[11]將這些具有固定模式的串統(tǒng)稱為協(xié)議關(guān)鍵詞。以圖1所示HTTP協(xié)議報(bào)文為例,請求報(bào)文中的請求方法字段“GET”和協(xié)議版本字段“HTTP/1.1”,響應(yīng)報(bào)文中的響應(yīng)碼“200 OK”,以及“Key-Value”格式的字段中起標(biāo)識作用的字符串“Key”,如“Host”、“Connection”和“Date”等,這些能夠標(biāo)識報(bào)文類型或者協(xié)議字段的字符串都可以被稱為協(xié)議關(guān)鍵詞。
圖1 HTTP協(xié)報(bào)文示例
另外,由于分隔符通常在單個(gè)報(bào)文中多次出現(xiàn)且位置變化較大,對于協(xié)議分析會(huì)造成較大困擾,所以本文在沿用文獻(xiàn)[11]定義的基礎(chǔ)上,將分隔符排除在協(xié)議關(guān)鍵詞之外。而分隔符通常為一到兩個(gè)字節(jié),如逗號、回車換行符等,可以通過設(shè)置N-gram分詞方法中N的取值來過濾掉分隔符。
本文的協(xié)議格式提取方案建立在協(xié)議關(guān)鍵詞分析的基礎(chǔ)之上?,F(xiàn)有研究采用分隔符對文本協(xié)議進(jìn)行分詞以得到協(xié)議關(guān)鍵詞,但未知協(xié)議的分隔符存在較大不確定性。對于二進(jìn)制協(xié)議,目前方法通常采用N-gram提取關(guān)鍵詞,但所得到的關(guān)鍵詞為固定長度N,而實(shí)際協(xié)議關(guān)鍵詞的長度往往不固定,所以這類方法與實(shí)際存在出入。論文提出一種基于點(diǎn)間互信息的協(xié)議關(guān)鍵詞提取方法,適用于二進(jìn)制協(xié)議和文本協(xié)議。首先采用N-gram分詞方法對報(bào)文樣本進(jìn)行處理,在得到固定長度的候選關(guān)鍵詞后,結(jié)合點(diǎn)間互信息對候選關(guān)鍵詞進(jìn)行合并,推斷獲得不同長度的協(xié)議關(guān)鍵詞。
在信息論中,熵是對事物不確定性的度量,而點(diǎn)間互信息(Point Mutual Information)是在熵的基礎(chǔ)上提出來的概念,這一概念經(jīng)常被用于自然語言處理以及數(shù)據(jù)挖掘領(lǐng)域來衡量兩個(gè)單詞間的相關(guān)程度。單詞wi,wj之間的互信息可以定義為:
p(wi,wj)表示單詞wi,wj同時(shí)出現(xiàn)在一個(gè)報(bào)文中的概率,p(wi)表示單詞wi出現(xiàn)在報(bào)文樣本中的概率,p(wj)表示單詞wj出現(xiàn)在報(bào)文樣本中的概率。PMI(wi,wj)衡量的是兩個(gè)單詞之間的相關(guān)性,即確定了一個(gè)單詞后另一個(gè)單詞的不確定性(即熵值)的減少量,PMI(wi,wj)越大,則兩個(gè)單詞之間的相關(guān)性越高。
對于通過分詞獲得的候選關(guān)鍵詞而言,如果兩個(gè)候選詞是一個(gè)協(xié)議關(guān)鍵詞的子串,那么它們之間將具有較大的相關(guān)性。本文引入點(diǎn)間互信息來衡量候選關(guān)鍵詞之間的相關(guān)性。如果兩個(gè)候選詞位置相鄰、存在N-1個(gè)連續(xù)的相同字符(如“HTT”和“TTP”)且相關(guān)性較大,則將兩者合并為一個(gè)長度大于N的候選詞,如此重復(fù)以獲得任意長度的協(xié)議關(guān)鍵詞。
獲取協(xié)議關(guān)鍵詞后,依據(jù)報(bào)文樣本對應(yīng)的協(xié)議關(guān)鍵詞序列構(gòu)建擴(kuò)展前綴樹,實(shí)現(xiàn)報(bào)文樣本的初始聚類以及同類報(bào)文的分段。隨后,采用分段的多序列比對獲取報(bào)文的詳細(xì)格式信息。并通過對擴(kuò)展前綴樹進(jìn)行合并以減少冗余,得到最終協(xié)議格式。
本文提出的協(xié)議格式推斷方法,主要包括4個(gè)處理階段:預(yù)處理階段、協(xié)議關(guān)鍵詞提取階段、報(bào)文結(jié)構(gòu)提取階段以及協(xié)議格式合并階段,主要流程如圖2所示。其中預(yù)處理階段的主要工作是對原始數(shù)據(jù)流進(jìn)行劃分獲取報(bào)文樣本集合。協(xié)議關(guān)鍵詞提取階段將利用N-gram分詞方法對報(bào)文樣本進(jìn)行處理,結(jié)合互信息獲取協(xié)議關(guān)鍵詞序列。報(bào)文結(jié)構(gòu)推斷階段依據(jù)協(xié)議關(guān)鍵詞序列構(gòu)建擴(kuò)展前綴樹,通過基于擴(kuò)展前綴樹描述的分段多序列比對推斷協(xié)議格式。協(xié)議格式合并階段將基于報(bào)文結(jié)構(gòu)對擴(kuò)展前綴樹進(jìn)行合并,得到詳細(xì)的協(xié)議格式信息。
2.2.1 預(yù)處理階段
圖2 原型系統(tǒng)EPT-PFI的主要處理流程
對于未知協(xié)議而言,分析對象是連續(xù)的網(wǎng)絡(luò)數(shù)據(jù)流,由于網(wǎng)絡(luò)分層結(jié)構(gòu)以及分片機(jī)制,往往需要以會(huì)話和報(bào)文為粒度對數(shù)據(jù)流進(jìn)行分割得到便于分析的報(bào)文樣本集合[12],以會(huì)話為粒度的分割被稱為會(huì)話劃分,以報(bào)文為粒度的分割被稱為報(bào)文定界。
會(huì)話劃分是從連續(xù)的網(wǎng)絡(luò)數(shù)據(jù)流中分離出通信實(shí)體間的單次會(huì)話,主要依靠底層協(xié)議提供的信息實(shí)現(xiàn)。對于應(yīng)用層協(xié)議而言,可以使用協(xié)議五元組<源IP地址,源端口號,目的IP地址,目的端口號,傳輸層協(xié)議類型>得到獨(dú)立的通信會(huì)話。
報(bào)文定界是從一次獨(dú)立會(huì)話中分離出單個(gè)協(xié)議報(bào)文。對于應(yīng)用層協(xié)議而言,可以利用傳輸層協(xié)議的報(bào)文首部和首部的長度字段實(shí)現(xiàn)。定界之后得到的報(bào)文樣本作為后續(xù)階段的輸入。
2.2.2 協(xié)議關(guān)鍵詞提取階段
此階段的目的是從經(jīng)過預(yù)處理的報(bào)文樣本中提取協(xié)議關(guān)鍵詞,并使用協(xié)議關(guān)鍵詞對報(bào)文進(jìn)行標(biāo)注得到協(xié)議關(guān)鍵詞序列。原始報(bào)文樣本集合可以表示為S={m1,m2,…,mi,…,ms},其中mi為樣本集合中的某一個(gè)報(bào)文,表示報(bào)文mi中的第 j個(gè)字符。得到初始報(bào)文樣本后,采用N-gram分詞方法對報(bào)文樣本進(jìn)行逐一處理,得到所有在樣本集合中出現(xiàn)過的長度為N的字符串,如對報(bào)文進(jìn)行N-gram分詞,將得到等字符串。計(jì)算每一個(gè)字符串相對于完整報(bào)文樣本的出現(xiàn)頻率。在統(tǒng)計(jì)時(shí),如果一個(gè)字符串在一個(gè)報(bào)文中出現(xiàn)多次,只進(jìn)行一次統(tǒng)計(jì),因?yàn)榇穗A段處理的目的是獲取候選關(guān)鍵詞集合,而協(xié)議關(guān)鍵詞是對協(xié)議格式或者報(bào)文字段的一種標(biāo)識,往往不會(huì)在同一樣本中重復(fù)出現(xiàn)。
在得到的字符串中,大部分字符串出現(xiàn)的頻率較低,它們通常對應(yīng)著報(bào)文中的變值字段或者是變值字段的子串,這些字段取值不確定甚至完全隨機(jī)產(chǎn)生。協(xié)議格式提取希望確定的是相對穩(wěn)定的協(xié)議報(bào)文構(gòu)成結(jié)構(gòu),故設(shè)置閾值Tfreq,對這些出現(xiàn)頻率較低的字符串進(jìn)行過濾。將頻率高于閾值的字符串作為候選關(guān)鍵詞添加到候選關(guān)鍵詞集合G中。
由于候選關(guān)鍵詞集合G中的元素都是通過N-gram分詞得到,其長度皆為N,而實(shí)際協(xié)議報(bào)文中,協(xié)議關(guān)鍵詞長度并不完全相同。對于長度大于N的協(xié)議關(guān)鍵詞,可以由長度為N的子串合并得到,如HTTP協(xié)議中的關(guān)鍵詞“Host”可以由“Hos”和“ost”合并得到。鑒于這種相關(guān)性,本文使用點(diǎn)間互信息對集合G中的候選詞進(jìn)行合并,以得到不同長度的協(xié)議關(guān)鍵詞。
為了對候選關(guān)鍵詞進(jìn)行合并,首先,需要依據(jù)候選關(guān)鍵詞集合G對報(bào)文樣本進(jìn)行標(biāo)注,得到對應(yīng)的候選關(guān)鍵詞序列,其中表示報(bào)文mi中的第 j個(gè)候選關(guān)鍵詞,表示在報(bào)文樣本集合中出現(xiàn)的頻率,表示在報(bào)文mi中相對于報(bào)文起始位置的偏移。進(jìn)而得到整個(gè)報(bào)文樣本對應(yīng)的候選詞序列集合Seq={key_seq1,key_seq2,…,key_seqi,…}。
隨后,基于互信息對集合Seq中的每個(gè)候選關(guān)鍵詞序列key_seqi中的協(xié)議關(guān)鍵詞進(jìn)行合并,具體步驟如下。
步驟1從左至右遍歷候選關(guān)鍵詞序列key_seqi,尋找位置相鄰且存在相同的連續(xù)N-1個(gè)字符(即滿足以下條件)的候選關(guān)鍵詞:
(1)候選詞,并且
(2)候選詞位置相鄰-=1。
(3)候選詞的后N-1個(gè)字符與的前N-1個(gè)字符相同:bg+lj-N+2…bg+lj-1=bh…bh+N-2。
步驟2對于滿足步驟1中條件的候選詞,搜索點(diǎn)間互信息集合PMI(初始為空),若其中存在PMI()則直接獲取其值,若不存在則計(jì)算它們之間的互信息PMI()并存入集合PMI中。得到候選詞之間的互信息后,若PMI()超過所設(shè)定的閾值TPMI,則合并候選詞1的重疊部分得到新的候選詞w:
步驟3從key_seqi中刪除,將值替換為w。隨后從繼續(xù)遍歷更新后的key_seqi,重復(fù)步驟1~3直至遍歷完key_seqi。
步驟4由于協(xié)議關(guān)鍵詞一般不會(huì)在同一報(bào)文中重復(fù)出現(xiàn),故遍歷key_seqi,刪除在同一個(gè)關(guān)鍵詞序列中出現(xiàn)多次的元素,得到最終的協(xié)議關(guān)鍵詞序列以及更新后的關(guān)鍵詞序列集合Seq。
2.2.3 協(xié)議格式推斷階段
通過上述步驟能夠得到每個(gè)報(bào)文樣本對應(yīng)的協(xié)議關(guān)鍵詞,而相同格式的報(bào)文對應(yīng)的關(guān)鍵詞序列往往相同,因此可以依據(jù)協(xié)議關(guān)鍵詞序列對報(bào)文樣本進(jìn)行聚類,將同種格式報(bào)文聚成一類,依據(jù)同類報(bào)文樣本在結(jié)構(gòu)上的相似性提取協(xié)議格式信息。本文提出使用擴(kuò)展前綴樹描述協(xié)議關(guān)鍵詞序列,擴(kuò)展前綴樹中的每條路徑代表一種關(guān)鍵詞序列,節(jié)點(diǎn)對應(yīng)協(xié)議關(guān)鍵詞,節(jié)點(diǎn)之間的邊代表報(bào)文樣本中對應(yīng)關(guān)鍵詞之間的報(bào)文片段。采用擴(kuò)展前綴樹的描述方法,一方面便于實(shí)現(xiàn)對報(bào)文樣本的初始聚類,另一方面便于實(shí)現(xiàn)分段的多序列比對。
2.2.3.1 構(gòu)建擴(kuò)展前綴樹
前綴樹(Prefix Tree)是一種有序多叉樹結(jié)構(gòu),通常以字符串為輸入,利用字符串的公共前綴來實(shí)現(xiàn)快速檢索以及字符串匹配等操作。本文對前綴樹進(jìn)行擴(kuò)展,將協(xié)議關(guān)鍵詞序列作為輸入,協(xié)議關(guān)鍵詞作為節(jié)點(diǎn),按照順序?qū)f(xié)議關(guān)鍵詞插入前綴樹中,以得到的擴(kuò)展前綴樹描述報(bào)文樣本對應(yīng)的協(xié)議關(guān)鍵詞序列。
為了構(gòu)建擴(kuò)展前綴樹,在得到協(xié)議關(guān)鍵詞序列集合Seq后,遍歷集合Seq,將其中的元素依次插入樹結(jié)構(gòu)中。同時(shí),為了排除樣本中的噪聲,在構(gòu)建擴(kuò)展前綴樹的過程中記錄每種關(guān)鍵詞序列對應(yīng)的報(bào)文樣本總數(shù),刪除樣本數(shù)小于閾值Tnum的關(guān)鍵詞序列。舉例說明,對于包含表1所示元素的集合Seq,首先構(gòu)建根節(jié)點(diǎn)“Start”表示起始位置,隨后遍歷集合Seq,依據(jù)其中的協(xié)議關(guān)鍵詞序列將得到圖3所示的擴(kuò)展前綴樹。
圖3 擴(kuò)展前綴樹示例
擴(kuò)展前綴樹中的每條路徑表示一種協(xié)議格式,圖中共有6種協(xié)議格式。樹中的每一個(gè)節(jié)點(diǎn)表示一個(gè)協(xié)議關(guān)鍵詞,節(jié)點(diǎn)之間的邊表示真實(shí)報(bào)文中對應(yīng)協(xié)議關(guān)鍵詞之間的報(bào)文片段。例如,擴(kuò)展前綴樹第1條和第2條路徑中“GET”節(jié)點(diǎn)與“HTTP”節(jié)點(diǎn)之間的邊,表示格式符合表1第1種或第3種關(guān)鍵詞序列的對應(yīng)的報(bào)文樣本示例中協(xié)議關(guān)鍵詞“GET”和“HTTP”之間的報(bào)文片段“admin.php”和“index.php”。
構(gòu)建擴(kuò)展前綴樹的過程實(shí)際是對報(bào)文樣本進(jìn)行聚類以及對聚類子類中的報(bào)文進(jìn)行分段的過程,同種格式的報(bào)文會(huì)匯聚在同一條路徑上,并且依據(jù)節(jié)點(diǎn)對應(yīng)的協(xié)議關(guān)鍵詞分為多個(gè)片段,這種表示方式有利于后續(xù)提取每個(gè)報(bào)文片段的結(jié)構(gòu)以及語義信息。
2.2.3.2 序列比對
對于得到的擴(kuò)展前綴樹,采用先深搜索遍歷每一條路徑,對同一路徑上相鄰兩節(jié)點(diǎn)之間的報(bào)文(即擴(kuò)展前綴樹中的邊)采用Needleman-Wunsch多序列比對算法進(jìn)行比對,以提取詳細(xì)的協(xié)議格式信息。包括協(xié)議字段取值類型(字符串、整數(shù)或二進(jìn)制數(shù)等)、取值范圍(包含常量字段、枚舉字段、隨機(jī)字段)等,并在擴(kuò)展前綴樹上做相應(yīng)標(biāo)注。
舉例來看,若圖3擴(kuò)展前綴樹中第1條路徑所對應(yīng)的報(bào)文如圖4所示,其協(xié)議關(guān)鍵詞序列為<“GET”,“HTTP”,“Host”,“User-Agent”>(圖中“_”表示報(bào)文中本身包含的空格,“--”表示序列比對填充的空格)。通過多序列比對能夠得到詳細(xì)的格式信息,如第2個(gè)片段取值為一個(gè)浮點(diǎn)數(shù)后接回車換行符,且浮點(diǎn)數(shù)取值為“1.1”或“1.0”。
圖4 報(bào)文示例
通過這種分段的多序列比對,能夠抽象出每個(gè)序列片段的報(bào)文結(jié)構(gòu),相對于PI項(xiàng)目等直接對整個(gè)報(bào)文進(jìn)行序列比對,降低了時(shí)間復(fù)雜度。同時(shí)這種分段的格式提取方法,將報(bào)文依據(jù)協(xié)議關(guān)鍵詞進(jìn)行劃段,也解決了多序列比對方法應(yīng)用于結(jié)構(gòu)復(fù)雜、報(bào)文過長的協(xié)議樣本效果不佳的問題。
2.2.4 協(xié)議格式合并階段
由于實(shí)際使用的通信協(xié)議往往具有較強(qiáng)的靈活性,完全依據(jù)協(xié)議關(guān)鍵詞序列進(jìn)行協(xié)議格式提取容易產(chǎn)生較多的冗余格式,即一種協(xié)議格式在推斷時(shí)被劃分為多種不同的協(xié)議格式。過多的格式冗余將導(dǎo)致推斷結(jié)果的適用性降低。
一方面,一些報(bào)文字段的位置順序是可變的。如HTTP 協(xié) 議 中 ,“GET admin.php HTTP/1.1 Host:www.foobar.com User-Agent:Opera/9.20”和“GET index.php HTTP/1.1 User-Agent:Mozillia/5.0 Host:www.baidu.com ”兩條報(bào)文實(shí)際上對應(yīng)于一種協(xié)議格式,其中“Host”關(guān)鍵詞和“User-Agent”關(guān)鍵詞的先后順序是可以變化的。但是在擴(kuò)展前綴樹中,兩條報(bào)文對應(yīng)的協(xié)議關(guān)鍵詞序列不同,將被作為不同的協(xié)議格式。另一方面,一些報(bào)文中的協(xié)議關(guān)鍵詞屬于枚舉類型。例如,HTTP請求方法字段可以在“GET”、“POST”、“HEAD”等協(xié)議關(guān)鍵詞組成的集合中枚舉。例如“GET admin.phpHTTP/1.1 Host:www.foobar.com User-Agent:Opera/9.20”和“POST/eapi/pl/count HTTP/1.1 Host:music.163.com User-Agent:Mozilla/5.0”兩條報(bào)文僅僅請求方法不同,實(shí)際隸屬于同一種協(xié)議格式。
表1 關(guān)鍵詞序列集合的示例
因此需要對得到的擴(kuò)展前綴樹進(jìn)行合并,本文提出以下合并策略:
(1)若擴(kuò)展前綴樹中兩條路徑所包含的節(jié)點(diǎn)種類完全相同,或某一條路徑包含的協(xié)議關(guān)鍵詞是另一條路徑對應(yīng)關(guān)鍵詞的子集,并且兩條路徑上相同節(jié)點(diǎn)對應(yīng)的邊結(jié)構(gòu)相似,則認(rèn)為這兩條路徑對應(yīng)著位置可變的協(xié)議格式,故將兩者合并為一種格式(保留節(jié)點(diǎn)數(shù)較多的路徑)。例如,圖3擴(kuò)展前綴樹中路徑1和路徑2、路徑5和路徑6所包含的節(jié)點(diǎn)種類完全相同,只是部分節(jié)點(diǎn)位置不同,若兩條路徑中相同節(jié)點(diǎn)間的邊對應(yīng)的結(jié)構(gòu)相似,則可刪除其中任一條路徑,得到如圖5所示擴(kuò)展前綴樹。
圖5 第一種格式合并策略的示例
(2)若兩條路徑僅有一個(gè)節(jié)點(diǎn)不同,且與此節(jié)點(diǎn)相關(guān)的邊在兩條路徑上結(jié)構(gòu)相似,則認(rèn)為這兩條路徑中的不同節(jié)點(diǎn)對應(yīng)著同種協(xié)議格式的枚舉字段的兩種取值,故將兩節(jié)點(diǎn)合并為一個(gè)節(jié)點(diǎn),兩條路徑合并為一種協(xié)議格式。譬如,采用方法(1)對圖3擴(kuò)展前綴樹進(jìn)行合并后,最左邊的路徑和最右邊的路徑中僅有一個(gè)節(jié)點(diǎn)“GET”和“POST”不同,中間兩條路徑中僅有一個(gè)節(jié)點(diǎn)“200 OK”和“404 Not found”不同,則可實(shí)施合并,得到如圖6所示的擴(kuò)展前綴樹。
圖6 第二種格式合并策略的示例
通過格式合并得到的最終擴(kuò)展前綴樹即代表了目標(biāo)協(xié)議的詳細(xì)格式,每一條路徑對應(yīng)一種協(xié)議格式。這種協(xié)議格式表示方式能夠有效減少冗余,提高協(xié)議格式結(jié)果的實(shí)用性。
為了對本文提出的方法進(jìn)行驗(yàn)證,在重用Netzob[13]多序列比對代碼的基礎(chǔ)上,實(shí)現(xiàn)了原型系統(tǒng)EPT-PFI。實(shí)驗(yàn)中,選取文本協(xié)議HTTP和FTP與二進(jìn)制協(xié)議DNS和NetBIOS作為實(shí)驗(yàn)對象。同時(shí)選取了現(xiàn)有的協(xié)議逆向工具Netzob、AutoReEngine進(jìn)行對比試驗(yàn)。本文采用文獻(xiàn)[7]中的準(zhǔn)確率(Correctness)和精簡率(Conciseness)作為評價(jià)指標(biāo)對實(shí)驗(yàn)結(jié)果進(jìn)行評估。準(zhǔn)確率表示的是推斷所得格式與實(shí)際格式相符的報(bào)文樣本所占的比例,準(zhǔn)確率越接近1說明推斷結(jié)果越接近實(shí)際格式。精簡率表示的是推斷所得格式的種類數(shù)目與實(shí)際樣本中包含的格式種類數(shù)的比值。由于是比值,精簡率沒有單位。精簡率越接近1說明所得結(jié)果越接近真實(shí)格式。由于協(xié)議格式推斷中??赡軐⑼N格式報(bào)文劃分為多種格式造成冗余,因此精確率越小說明得到的協(xié)議格式種類越少,冗余越少。
本文在配置為2.93 GHz的CPU、4 GB內(nèi)存、操作系統(tǒng)為Windows 7的PC上基于Python語言實(shí)現(xiàn)了論文中提出的方法??紤]到AutoReEngine關(guān)鍵字識別方法實(shí)用性強(qiáng),準(zhǔn)確率高,并且具有代表性[5],基于SPMF平臺[14]提供的Apriori算法實(shí)現(xiàn)了AutoReEngine方法,與本文方法進(jìn)行比較。
原型系統(tǒng)EPT-PFI設(shè)定閾值Tfreq為0.6,設(shè)定閾值TPMI為0.8,依據(jù)文獻(xiàn)[15]N-gram分詞中N 取3。表2、表3是分別針對HTTP協(xié)議所獲得的協(xié)議關(guān)鍵詞(其中“_”表示空格)。分析實(shí)驗(yàn)結(jié)果:(1)從表2可以看出,EPT-PFI得到的協(xié)議關(guān)鍵詞與實(shí)際基本吻合(所得關(guān)鍵詞附帶“ ”或“_”,因?yàn)樗鼈兛偸峭瑫r(shí)出現(xiàn),所以被合并),但受限于樣本的多樣性,可能將某些可變字段被識別成了固定字段,如協(xié)議版本字段“HTTP/1.1”,這是由于所捕獲的樣本中基本都是使用的1.1版本的HTTP協(xié)議。而其中的協(xié)議關(guān)鍵詞“HTTP/1.1”兩邊沒有攜帶空格換行等符號,是由于HTTP協(xié)議請求報(bào)文和應(yīng)答報(bào)文中都包含版本號字段。(2)綜合分析表2和表3可知,相對于AutoReEngine,EPT-PFI提取的協(xié)議關(guān)鍵詞更加豐富,這是由于HTTP協(xié)議首部行中各個(gè)字段的位置是可變的,導(dǎo)致對應(yīng)的關(guān)鍵詞位置偏移較大。依據(jù)這些關(guān)鍵詞結(jié)合擴(kuò)展前綴樹描述,能夠獲取首部行中各個(gè)字段的報(bào)文結(jié)構(gòu),得到更加詳細(xì)的協(xié)議格式信息。
表2 EPT-PFI針對HTTP協(xié)議提取的協(xié)議關(guān)鍵詞
表3 AutoReEngine針對HTTP協(xié)議提取的協(xié)議關(guān)鍵詞
如圖7、圖8分別為采用EPT-PFI、Netzob、AutoReEngine對4種目標(biāo)協(xié)議進(jìn)行實(shí)驗(yàn)所得結(jié)果。從實(shí)驗(yàn)結(jié)果可以看出:(1)EPT-PFI在準(zhǔn)確率上高于Netzob,稍低于AutoReEngine。AutoReEngine準(zhǔn)確率幾乎都達(dá)到了100%,這是因?yàn)锳utoReEngine只保留了位置相對固定的協(xié)議關(guān)鍵詞,對于字段位置可變的協(xié)議關(guān)鍵詞都會(huì)被Apriori算法剪枝,如HTTP協(xié)議中的“Host”、“Connection”等字段由于在報(bào)文樣本中出現(xiàn)的位置變化較大而被忽略。因此,AutoReEngine只能夠提取出位置相對固定的字段關(guān)鍵詞,但無法獲取詳細(xì)的格式信息。(2)在精簡率上Netzob明顯高于EPT-PFI和AutoReEngine,說明所得協(xié)議格式冗余較多,這是由于Netzob是在多序列比對的基礎(chǔ)上進(jìn)行報(bào)文聚類的,可能將同種格式報(bào)文劃分為多種格式。而EPT-PFI由于采用了基于擴(kuò)展前綴樹的格式合并,其精簡率略優(yōu)于AutoReEngine。綜合來看,Netzob對于文本協(xié)議效果明顯優(yōu)于二進(jìn)制協(xié)議,而本文方法對于文本協(xié)議和二進(jìn)制協(xié)議都能取得較好結(jié)果。
圖7 正確率實(shí)驗(yàn)結(jié)果
圖8 精簡率實(shí)驗(yàn)結(jié)果
通過上述實(shí)驗(yàn)分析,可以看出原型系統(tǒng)MI-PFE能夠較好地完成文本協(xié)議以及二進(jìn)制協(xié)議的格式推斷工作。
本文提出了一種基于擴(kuò)展前綴樹的協(xié)議格式推斷方法,通過N-gram分詞結(jié)合互信息獲取協(xié)議關(guān)鍵詞,依據(jù)協(xié)議關(guān)鍵詞序列構(gòu)建擴(kuò)展前綴樹,在擴(kuò)展前綴樹描述的基礎(chǔ)上進(jìn)行分段多序列比對,最終通過對報(bào)文結(jié)構(gòu)的擴(kuò)展前綴樹進(jìn)行合并得到最終協(xié)議格式。實(shí)驗(yàn)表明,本方法能夠適用于文本協(xié)議和二進(jìn)制協(xié)議,并且與現(xiàn)有的協(xié)議格式推斷工具相比具有一定優(yōu)勢。
[1]羅建楨,余順爭,蔡君.基于最大似然概率的協(xié)議關(guān)鍵詞長度確定方法[J].通信學(xué)報(bào),2016,37(6):119-128.
[2]Sija B D,Goo Y H,Shim K S,et al.A survey of automatic protocol reverse engineering approaches,methods,and tools on the inputs and outputs view[J].Security&Communication Networks,2018:1-17.
[3]Gascon H,Wressnegger C,Yamaguchi F,et al.Pulsar:Stateful black-box fuzzing of proprietary network protocols[M]//Security and Privacy in Communication Networks.Germany:Spring International Publishing,2015:330-347.
[4]Duchêne J,Guernic C L,Alata E,et al.State of the art of network protocol reverse engineering tools[J].Journal of Computer Virology&Hacking Techniques,2017:1-16.
[5]Narayan J,Shukla S K,Clancy T C.A survey of automatic protocol reverse engineering tools[J].ACM Computing Surveys,2015,48(3):1-26.
[6]Marshall B.Protocol information project[EB/OL].(2004-10-05)[2017-12-24].http://www.4tphi.net/~awalters/PI/PI.html.
[7]Cui W,Kannan J,Wang H J.Discoverer:Automatic protocolreverse engineering from network traces[C]//16th USENIX Security Symposium.Boston:USENIX Association,2007:199-212.
[8]Krueger T,Kraemer N.PRISMA:Protocol inspection and state machine analysis[J].Journal of the American Chemical Society,2015,98(25):8101-8107.
[9]Zhang Zhuo,Zhang Zhibin,Lee P P C,et al.ProWord:An unsupervised approach to protocol feature word extraction[C]//Proceedings IEEE INFOCOM,2014:1393-1401.
[10]Luo J Z,Yu S Z.Position-based automatic reverse engineering of network protocols[J].Journal of Network&Computer Applications,2013,36(3):1070-1077.
[11]黎敏,余順爭.抗噪的未知應(yīng)用層協(xié)議協(xié)議格式最佳分段方法[J].軟件學(xué)報(bào),2013,24(3):604-617.
[12]李偉明,張愛芳,劉建財(cái),等.網(wǎng)絡(luò)協(xié)議的自動(dòng)化模糊測試漏洞挖掘方法[J].計(jì)算機(jī)學(xué)報(bào),2011,34(2):242-255.
[13]Bossert G,Hiet G.Towards automated protocol reverse engineering using semantic information[C]//ACM Symposium on Information,Computer and Communications Security,2014:51-62.
[14]Fournier-Viger P,Gomariz A,Gueniche T,et al.SPMF:A Java open-source pattern mining library[J].Journal of Machine Learning Research,2014,15(1):3389-3393.
[15]Wang Y,Zhang Z,Yao D D,et al.Inferring protocol state machine from network traces:A probabilistic approach[C]//International Conference on Applied Cryptography and Network Security.Berlin:Springer-Verlag,2011:1-18.