王崇宇 朱宇坤 牛偉納 寧延碩 江雅潔 張巖峰
摘 要: 網(wǎng)絡(luò)協(xié)議逆向工程是許多安全領(lǐng)域面臨的重要挑戰(zhàn). 當(dāng)前主流方法是對(duì)網(wǎng)絡(luò)軌跡間的字符和令牌進(jìn)行比對(duì)切分,但現(xiàn)有工作在推導(dǎo)時(shí)受限于二進(jìn)制協(xié)議字段取值差異高、狀態(tài)復(fù)雜等特性,存在格式過度切分和多狀態(tài)字段標(biāo)注精度低等問題. 基于此,本文提出NetExtractor工具,集成格式提取優(yōu)化方法和狀態(tài)標(biāo)注優(yōu)化方法. 在格式提取階段,提取網(wǎng)絡(luò)軌跡時(shí)空特性進(jìn)行粗聚類,而后進(jìn)行多序列比對(duì),利用統(tǒng)計(jì)特性進(jìn)行優(yōu)化合并,進(jìn)一步提高格式提取的精準(zhǔn)度. 在狀態(tài)標(biāo)注階段,引入編輯距離衡量字段間差異,結(jié)合隨機(jī)森林和統(tǒng)計(jì)特性對(duì)候選狀態(tài)字段進(jìn)行約束,提升多狀態(tài)字段標(biāo)注精度. 為驗(yàn)證該方法的有效性,本文使用NetExtractor工具對(duì)僵尸網(wǎng)絡(luò)zeroaccess 協(xié)議的格式和狀態(tài)機(jī)進(jìn)行自動(dòng)化逆向,并在8 個(gè)常用協(xié)議上開展評(píng)估實(shí)驗(yàn)驗(yàn)證方法效率,實(shí)驗(yàn)表明與領(lǐng)域最領(lǐng)先研究工作相比,NetExtractor 可提升協(xié)議格式和協(xié)議狀態(tài)識(shí)別準(zhǔn)確度,對(duì)網(wǎng)絡(luò)安全分析具有較大意義.
關(guān)鍵詞: 協(xié)議逆向; 網(wǎng)絡(luò)軌跡; 協(xié)議格式; 狀態(tài)標(biāo)注
中圖分類號(hào): TP311 文獻(xiàn)標(biāo)志碼: A DOI: 10. 19907/j. 0490-6756. 2024. 033005
1 引言
出于經(jīng)濟(jì)戰(zhàn)略利益、個(gè)人隱私保護(hù)等多種需求,當(dāng)前多個(gè)行業(yè)領(lǐng)域的部分網(wǎng)絡(luò)協(xié)議設(shè)計(jì)趨于復(fù)雜化、私有化和專用化,并且不公開協(xié)議規(guī)范的實(shí)現(xiàn)細(xì)節(jié). 此類對(duì)于非相關(guān)人員而言的“未知”協(xié)議(私有協(xié)議),本身可能存在安全問題,為網(wǎng)絡(luò)增加了更多脆弱面. 在實(shí)網(wǎng)環(huán)境中,多數(shù)監(jiān)測(cè)手段無法對(duì)未知協(xié)議交互過程進(jìn)行有效監(jiān)控和分析,而協(xié)議漏洞挖掘、資產(chǎn)探測(cè)、行為審計(jì)、軍事數(shù)據(jù)鏈分析和通信協(xié)議安全等網(wǎng)絡(luò)安全活動(dòng)中也存在獲取網(wǎng)絡(luò)協(xié)議規(guī)范的需求. 對(duì)未知網(wǎng)絡(luò)協(xié)議進(jìn)行基于逆向的識(shí)別分析是安全領(lǐng)域需解決的重點(diǎn)問題. 雖然現(xiàn)有wireshark、pyshark 和scapy 等解析工具較為成熟,但此類工具在分析協(xié)議過程中依照協(xié)議設(shè)計(jì)規(guī)范,仍無法處理私有協(xié)議. 而對(duì)私有協(xié)議的逆向可以幫助發(fā)現(xiàn)協(xié)議中的問題和缺陷,改進(jìn)協(xié)議的設(shè)計(jì)和實(shí)現(xiàn),提高網(wǎng)絡(luò)服務(wù)的可用性和靈活性,推動(dòng)網(wǎng)絡(luò)技術(shù)的發(fā)展和創(chuàng)新,從而為網(wǎng)絡(luò)活動(dòng)的發(fā)展和價(jià)值提供支持和保障. 因此在不依賴于協(xié)議規(guī)范信息等先驗(yàn)條件下,對(duì)協(xié)議的網(wǎng)絡(luò)軌跡、系統(tǒng)指令進(jìn)行采集和分析,獲取協(xié)議格式、協(xié)議語義和協(xié)議狀態(tài)機(jī)的“協(xié)議逆向”對(duì)網(wǎng)絡(luò)安全具有重大意義.
當(dāng)前協(xié)議逆向研究已有較多成果,但現(xiàn)有研究在分析格式時(shí),對(duì)協(xié)議中的部分字段會(huì)產(chǎn)生過度切分的問題,即一個(gè)連續(xù)序列被判定為多個(gè)相鄰序列,對(duì)Fuzz 等下游研究產(chǎn)生較大影響,如當(dāng)缺少高精度的協(xié)議格式邊界,F(xiàn)uzz 低價(jià)值變異用例數(shù)量將指數(shù)級(jí)增長(zhǎng). 同時(shí)對(duì)包含多狀態(tài)字段的協(xié)議逆向時(shí),現(xiàn)有研究方法只能識(shí)別最核心的狀態(tài)字段,對(duì)于狀態(tài)描述字段的其他字段難以判定,導(dǎo)致標(biāo)注后的狀態(tài)組合不能和協(xié)議功能一一映射,影響狀態(tài)機(jī)構(gòu)建的正確性和完備性,根據(jù)錯(cuò)誤狀態(tài)生成的狀態(tài)機(jī),F(xiàn)uzz 分析時(shí)將無法覆蓋到可能存在異常的分支.
基于對(duì)現(xiàn)有研究在逆向“ 非密態(tài)二進(jìn)制變長(zhǎng)應(yīng)用層未知協(xié)議”時(shí),格式提取過程存在的“ 協(xié)議字段過度切分”及“包含多狀態(tài)字段的協(xié)議狀態(tài)標(biāo)注精度低”等兩個(gè)問題的分析. 本文發(fā)現(xiàn)非密態(tài)協(xié)議的字段與流量時(shí)空特性存在關(guān)聯(lián)關(guān)系,同時(shí)過度切分字段間在包含信息量上存在近似關(guān)系. 針對(duì)多狀態(tài)字段的協(xié)議,狀態(tài)字段呈現(xiàn)低變異性,狀態(tài)字段對(duì)于報(bào)文具有強(qiáng)約束關(guān)系,且狀態(tài)字段常出現(xiàn)于協(xié)議中靠前的功能段.
因此,本文提出了一種基于網(wǎng)絡(luò)軌跡的二進(jìn)制未知協(xié)議逆向方法,該方法針對(duì)非密態(tài)二進(jìn)制協(xié)議原始數(shù)據(jù)進(jìn)行分析,不需引入指定先驗(yàn),可以逆向協(xié)議格式、進(jìn)行狀態(tài)標(biāo)注,可以同時(shí)用于二進(jìn)制文本協(xié)議. 方法結(jié)合流量時(shí)空特征、序列信息熵、序列信息熵變化率和互信息關(guān)系對(duì)格式提取環(huán)節(jié)進(jìn)行優(yōu)化,同時(shí)利用協(xié)議功能段和數(shù)據(jù)段信息熵差異確定協(xié)議頭部位置,基于狀態(tài)字段特性篩選候選狀態(tài)字段,使用編輯距離和權(quán)重標(biāo)記來表述候選狀態(tài)字段間差異,結(jié)合互信息和協(xié)議設(shè)計(jì)共性進(jìn)一步確定狀態(tài)字段. 方法整體結(jié)合流量時(shí)空特性、統(tǒng)計(jì)特性和設(shè)計(jì)約束共性等信息,構(gòu)建了從格式判定、狀態(tài)字段判定到狀態(tài)機(jī)構(gòu)建的一套基于網(wǎng)絡(luò)軌跡的未知協(xié)議逆向方案,使用工控和互聯(lián)網(wǎng)領(lǐng)域8 個(gè)具有代表性的協(xié)議,進(jìn)行了實(shí)驗(yàn)分析,并與Netzob[1]、VDV(Variance of the Distributionof Variances)[ 2]、Netplier[3]方法進(jìn)行效果比對(duì),驗(yàn)證方案正確性和優(yōu)勢(shì),使用zeroaccess 協(xié)議進(jìn)行驗(yàn)證.
本文中準(zhǔn)確獲取協(xié)議格式和狀態(tài)字段的方法可以輔助下游研究深入解析協(xié)議各種字段含義、規(guī)范和用法,對(duì)協(xié)議的功能和行為進(jìn)一步分析利用具有重要意義,可以廣泛應(yīng)用于協(xié)議漏洞挖掘、協(xié)議一致性測(cè)試、深度包解析、協(xié)議重用、僵尸網(wǎng)絡(luò)檢測(cè)等領(lǐng)域.
本文主要貢獻(xiàn)如下:(1) 為解決協(xié)議格式推斷中部分字段過度切分的問題,本文對(duì)現(xiàn)有的多序列比對(duì)方法進(jìn)行了改進(jìn). 使用層次聚類和信息熵等方法對(duì)相關(guān)序列進(jìn)行預(yù)聚類和過度切分判定,以提取更精確的協(xié)議格式,實(shí)驗(yàn)結(jié)果表明該方法可顯著減少過度和錯(cuò)誤切分位;(2) 為解決狀態(tài)機(jī)構(gòu)建中多字段同時(shí)約束協(xié)議功能導(dǎo)致狀態(tài)標(biāo)注精度低的問題,本文設(shè)計(jì)了狀態(tài)標(biāo)注優(yōu)化方法,該方法結(jié)合編輯距離、權(quán)重選取、信息熵和互信息等因素,提高了狀態(tài)標(biāo)注精度和魯棒性,進(jìn)而優(yōu)化推斷結(jié)果;(3) 本文實(shí)現(xiàn)了內(nèi)置上述兩種方法的未知協(xié)議逆向工具NetExtractor,能夠在復(fù)雜環(huán)境下對(duì)工控、互聯(lián)網(wǎng)等領(lǐng)域內(nèi)的網(wǎng)絡(luò)協(xié)議進(jìn)行逆向分析,進(jìn)行格式邊界提取、協(xié)議狀態(tài)標(biāo)注,實(shí)現(xiàn)從二進(jìn)制流量輸入到協(xié)議格式獲取、協(xié)議深層信息提取的自動(dòng)化處理. 同時(shí)使用該工具自動(dòng)化逆向分析了惡意軟件內(nèi)置的用于構(gòu)建僵尸網(wǎng)絡(luò)的zeroaccess協(xié)議.
2 相關(guān)工作
協(xié)議逆向方法根據(jù)其接收的輸入數(shù)據(jù)類型主要分為兩類:第一類方法是基于指令執(zhí)行軌跡的逆向方法. 該方法主要使用符號(hào)執(zhí)行、污點(diǎn)分析等技術(shù)對(duì)程序進(jìn)行逆向分析,以獲取表述協(xié)議的規(guī)范. 然而,基于指令的方法在非受控環(huán)境中的實(shí)用性較低,同時(shí)對(duì)于需要獲取服務(wù)器端二進(jìn)制文件的情況也存在困難,此外,在出現(xiàn)二進(jìn)制混淆和封裝場(chǎng)景時(shí),該方法也無法進(jìn)行分析;因此,第二類方法基于網(wǎng)絡(luò)軌跡的逆向方法[4-34]應(yīng)運(yùn)而生, 且在近 3 年逐漸成為研究熱點(diǎn),該類方法核心根據(jù)流量數(shù)據(jù)取值的變化和關(guān)聯(lián)性對(duì)報(bào)文格式和狀態(tài)進(jìn)行分析. 在非受控和半受控的場(chǎng)景下,該方法具有較高的實(shí)用性. 但是,在處理加密傳輸和復(fù)雜編碼的流量時(shí),如HTTP2. 0、嵌套 TLS 的應(yīng)用層協(xié)議,該方法的效果略有欠缺.
在基于網(wǎng)絡(luò)軌跡的逆向相關(guān)方法中,Mcafee公司發(fā)表的PI 項(xiàng)目是協(xié)議逆向分析的先驅(qū),他首次引入了生物信息學(xué)領(lǐng)域的漸進(jìn)多序列比對(duì)思路. 通過局部多序列比對(duì)推斷序列間相似度,該研究可以判定常量域或變量域的字段. 然而該方法在二進(jìn)制協(xié)議格式提取精度上略有欠缺, 同時(shí)無法獲取語義信息. 后續(xù) RolePlayer[35]、 Discoverer[36]、Netzob 和Netplier 等方法的分析在一定程度上會(huì)基于 PI 的思想. 其中 Discoverer 首次利用空格和非字母等定界符區(qū)分字段位置,在遞歸聚類后比較子類屬性和語義,對(duì)相似度高的共性字段進(jìn)行合并,但由于二進(jìn)制類協(xié)議無法直接使用文本類協(xié)議的標(biāo)識(shí)符進(jìn)行劃分,因此在分析二進(jìn)制類型協(xié)議效果較差. Netzob 為逆向領(lǐng)域首次出現(xiàn)的工程化開源工具, 其在格式提取、狀態(tài)機(jī)構(gòu)建方面進(jìn)行了進(jìn)一步優(yōu)化,但對(duì)不同協(xié)議類型,泛化能力較差,推斷格式邊界推斷精度仍有待提高. 在狀態(tài)標(biāo)注方面,VDV 方法首次基于字段在流內(nèi)和流間的方差特性,對(duì)方差低的字段判定為狀態(tài)字段,但對(duì)多狀態(tài)字段處理時(shí),僅能識(shí)別一個(gè)狀態(tài)字段,且極受相近分布的非狀態(tài)字段影響. Netplier作為領(lǐng)域最領(lǐng)先研究,對(duì)格式提取和狀態(tài)標(biāo)注同時(shí)進(jìn)行了處理,其底層基于漸進(jìn)多序列比對(duì),設(shè)定協(xié)議約束后,結(jié)合概率推導(dǎo)推斷協(xié)議關(guān)鍵字, 根據(jù)關(guān)鍵字取值的聯(lián)合分布推斷消息類型. 但研究底層代碼邏輯較僵化、處理時(shí)引入了強(qiáng)先驗(yàn),在分析變長(zhǎng)二進(jìn)制協(xié)議時(shí),格式過度切分情況較多、去除先驗(yàn)后多狀態(tài)字段標(biāo)注精度仍有待提升. 此外,近期BLEEM[37]將流量側(cè)協(xié)議分析與Fuzz 進(jìn)行了更充分的結(jié)合,改進(jìn)后Fuzz 效果突出,但此研究更側(cè)重于Fuzz 方式的優(yōu)化,在逆向協(xié)議方面并未進(jìn)行大幅度改進(jìn).
3 基于網(wǎng)絡(luò)軌跡的未知協(xié)議逆向方法
本節(jié)介紹結(jié)合流量時(shí)空特性的協(xié)議逆向方法,包括協(xié)議格式提取和狀態(tài)字段提取過程.
3. 1 方法概述
本文結(jié)合流量時(shí)空特性進(jìn)行協(xié)議逆向,對(duì)IP等承載應(yīng)用層協(xié)議的底層基礎(chǔ)協(xié)議進(jìn)行解析,結(jié)合端口過濾未知協(xié)議報(bào)文,提取應(yīng)用層載荷,并將底層協(xié)議解析過程中獲取的IP、端口、會(huì)話和載荷長(zhǎng)度等信息抽取成底層特征知識(shí),進(jìn)而輔助應(yīng)用層未知協(xié)議判定. 之后基于層次聚類方法進(jìn)行粗粒度預(yù)聚類,根據(jù)長(zhǎng)度差異對(duì)應(yīng)用層載荷進(jìn)行迭代多序列比對(duì)對(duì)齊報(bào)文格式字段,結(jié)合字段的信息熵和互信息取值,對(duì)存在關(guān)聯(lián)的相鄰字段進(jìn)行合并. 根據(jù)狀態(tài)字段特性進(jìn)行初步篩選,對(duì)候選字段根據(jù)編輯距離進(jìn)行粗粒度劃分和隨機(jī)森林權(quán)重標(biāo)記,結(jié)合候選字段間的熵值特性進(jìn)行狀態(tài)字段篩選. 核心思路如圖1 所示.
3. 2 格式提取優(yōu)化方法
為解決過度切分問題,本節(jié)基于報(bào)文長(zhǎng)度和功能間的約束關(guān)系對(duì)報(bào)文長(zhǎng)度相近的報(bào)文進(jìn)行粗粒度聚類. 聚類后對(duì)每一類內(nèi)的報(bào)文進(jìn)行漸進(jìn)多序列比對(duì),以實(shí)現(xiàn)序列對(duì)齊. 隨后按照類內(nèi)報(bào)文平均長(zhǎng)度對(duì)類別進(jìn)行排序,依次對(duì)第n 類和第n+1類進(jìn)行合并,并按照?qǐng)?bào)文在原始文件中的順序?qū)⑵浜喜⒊梢粋€(gè)新的類別. 對(duì)于不同的分類重復(fù)以上操作,直到所有類別合并對(duì)齊成為一類,從而避免了每次選取最短兩類進(jìn)行比對(duì)時(shí)產(chǎn)生的偏差疊加.