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