時間:2022年02月13日 分類:科學技術論文 次數:
摘要近年來,工業互聯網的安全事件日益頻發,尤其是工業控制系統(industrialcontrolsystems,ICS),揭示了目前ICS中已經存在較多的安全隱患,并且那些針對ICS安全隱患的大多數攻擊和防御方法都需要對工控協議進行分析.然而,目前ICS中大多數私有工控協議都具有與普通互聯網協議完全不同的典型特征,如結構、字段精度、周期性等方面,導致針對互聯網協議的逆向分析技術通常都無法直接適用于工控協議.因此,針對工控協議的逆向分析技術已經成為近幾年學術界和產業界的研究熱點.首先結合2種典型工控協議,深入分析和總結了工控協議的結構特征.其次,給出了工控協議逆向分析框架,深入剖析了基于程序執行和基于報文序列的工控協議逆向分析框架的特點,并依次從人機參與程度和協議格式提取方式這2個角度,重點針對基于報文序列的工控協議分析方法進行詳細闡述和對比分析.最后探討了現有逆向分析方法的特點及不足,并對工控協議逆向分析技術的未來研究方向進行展望與分析.
關鍵詞工業控制系統;協議逆向工程;工業控制協議;報文序列;啟發式規則
隨著工業數字化、網絡化、智能化的快速發展,工業互聯網已經成為國家先進制造的重要基礎設施,其安全問題也逐漸受到重視,尤其是工業控制系統(industrialcontrolsystems,ICS)安全已成為實施制造強國和網絡強國戰略的重要保障[1G2].然而,日益頻發的ICS安全事件表明ICS已經存在大量安全漏洞和隱患[3G4],如2017年烏克蘭、俄羅斯等多國的銀行、電力、通信系統均遭受Petya勒索病毒襲擊,2019年委內瑞拉遭受電網攻擊,2021年伊朗國家鐵路系統遭受網絡入侵等[5].ICS通過專有的工業控制協議(簡稱“工控協議”)實現各組件間的通信,進而控制工控網絡內的各種工控設備.然而,基于商業性和安全性等原因[6]。
大多數工控設備廠商都不提供公開協議文檔,造成ICS中存在大量私有、非標準的工控協議[7],為ICS的網絡行為管理、模糊測試[8]、入侵檢測[9G11]帶來了巨大挑戰.協議逆向工程(protocolreverseengineering,PRE)是指在不依賴協議描述的情況下,通過對協議實體的網絡輸入∕輸出、系統行為和指令執行流程進行監控和分析,提取協議語法、語義和同步信息,從而推斷出未知協議的消息格式和狀態機模型的過程[12].最初的PRE技術完全基于人工分析的方式進行,需要耗費大量時間和精力.
而后由于PRE在網絡入侵檢測、深度數據包分析、模糊測試等領域應用效果顯著,逐漸引發眾多學者研究,PRE技術也因此得到迅速發展,由最初的“人工分析”過渡到目前的“自動化分析”,并逐漸發展成2個分支[12G13]:第一個分支是基于程序執行的協議逆向分析技術,通過監視協議實體對消息的處理過程以及各消息片段的使用方式,以獲取協議的結構及字段語義,比如2007年Caballero等人提出Polyglot[14],基于動態污點技術完成對協議消息的字段劃分。
另一個分支是基于報文序列的協議逆向分析技術,通過對網絡內的目標報文流量進行分析,以獲取協議的結構及字段語義,并隨著自然語言處理、機器學習等人工智能技術的不斷成熟,這類協議逆向分析技術也得到了迅速發展[15],不僅研究對象從文本協議擴展到二進制協議,而且方法類型也不斷豐富,比如基于序列比對的Discoverer[16],NetZob[17],MSAGHMM[18]等方法,基于概率模型的Biprominer[19],ProGraph[20],HsMM[21]等方法,基于頻繁集的AutoReEngine[22],SPREA[23],HIERARCHICALCSP[24]方法,基于語義分析的FieldHunter[25],WASp[26]等方法.此外,協議逆向分析方法也從最初的字段劃分和結構識別逐漸向語義推斷、狀態機重構拓展,如PETX[27],ReverX[28],BFS[29]等方法.然而,相比于互聯網系統,ICS對工控設備的操作精度和響應速度通常要求更高,但那些底層工控設備的計算性能卻相對有限,難以處理較為復雜的工控指令和數據[1,3].
因此,為了保證ICS的實時性和穩定性,工控協議通常采用二進制編碼,并且功能相對固定,結構也比較簡潔,甚至只通過一個或幾個比特來表示相應功能,導致目前大多數針對互聯網協議的逆向分析方法無法直接適用于工控協議[12,30],但同時工控協議的這些特征也為其逆向分析提供了一定依據.結合工控協議的共性特征,近幾年不斷有學者基于互聯網協議逆向分析技術,提出針對工控協議的逆向分析方法.
一方面,部分學者基于程序執行對工控協議進行逆向分析,比如2018年魏驍等人[30]和Chen等人[31]分別都借助污點分析技術,實現對工控協議的字段劃分和結構識別,并具有較高的識別準確度,但由于這類方法對ICS的穩定性影響和可控性要求都比較高,且實施和分析難度也較大,導致目前該方向的研究仍相對較少.另一方面,部分學者基于報文序列對工控協議進行逆向分析,并主要分為2類方法:
1)主要針對互聯網協議逆向分析技術進行改進或重新設計,以實現工控協議的自動化逆向分析,比如Wu等人[32]通過pairGHMM方法對序列比對算法進行改進,以完善相鄰字段的對比,提高工控協議格式提取的效率和準確度,Wang等人[33]針對基于NGgram模型的協議逆向分析方法進行改進,提出VGgram模型將協議字段識別精度提高到“半字節”.然而,這類方法雖然都能夠實現工控協議格式的自動化提取,但只有較少方法能夠進一步完成工控協議字段的語義推斷.
2)借助專家的先驗知識,對現有公開工控協議的關鍵字段特征進行分析,歸納出相應字段的“啟發式規則”,以提前實現對部分關鍵字段的識別,比如MSERA[34],IPART[35],IPRFW[36]等方法,這類人機協同型方法不僅能夠進一步提高工控協議格式提取的效率和準確度,而且還有利于工控協議字段的語義推斷.綜上所述,本文將系統性研究和分析目前工控協議的逆向分析技術,主要將其分為兩大類:基于程序執行的分析技術和基于報文序列的分析技術.再重點根據“人機參與程度”將基于報文序列的方法分為全自動型方法和人機協同型方法.具體包括4點內容:
1)重點針對2種典型工控協議Modbus和DNP3的結構特征進行詳細分析,進而歸納工控協議的共性特征;2)闡述“基于程序執行”和“基于報文序列”這2種工控協議逆向分析框架的基本流程與特點,并從多個角度全面討論各自框架中“互聯網協議逆向分析方法”和“工控協議逆向分析方法”的區別;3)分別針對“基于程序執行”和“基于報文序列”的工控協議逆向分析方法展開深入剖析,并重點從“人機協同程度”和“協議格式提取方式”這2個角度,對基于報文序列的工控協議逆向分析方法進行分類討論與對比分析;4)討論和分析目前各種工控協議逆向分析方法的特點和不足,并進一步分析和展望工控協議逆向分析技術的未來可能發展方向.
1工控協議分析及其特征
相比于互聯網協議,雖然工控協議目前仍沒有統一的設計規范,但基于ICS的高精度、高實時性和高可靠性的要求,以及底層工控設備相對有限的計算性能,通常工控協議的結構更加簡明,功能更加固定[35G36].因此,針對工控協議的典型特征進行分析和歸納,將非常有助于工控協議的逆向研究[37].
1.1典型工控協議分析
目前比較常見的公開工控協議主要包括:工控標準協議Modbus、工業以太網協議Ethemet∕IP、輸配電通信協議IEC104∕IEC61850系列協議簇、分布式網絡協議DNP3和開放式實時以太網協議EtherCAT[38]等,本節將重點針對Modbus和DNP3這2種經典工控協議的結構特征進行分析[39G40].1)ModbusModbus是1979年Modicon公司為可編程邏輯控制器(PLC)通信而提出的一種開放串行通信協議,由于其在工業網絡中易于部署和擴展,目前被廣泛采用,并成為工業領域通信協議的業界標準[39].
Modbus協議是一種基于“主∕從架構”的協議,用于Modbus節點之間帶有發送請求和讀取響應類型的消息通信,在一個數據鏈路上通常只能處理247個地址,限制了可以連接到主控站點的從機數量(Modbus∕TCP除外).Modbus信息都以“幀”的方式傳輸,每個信息幀有確定的起始點和結束點,便于接收設備識別,但目前幾乎所有的Modbus實現都是官方標準的變體,它們在開始∕結束標志、校驗模式和格式等方面都存在一定差異,也進而導致不同供應商的設備之間可能無法正確通信[41].
目前常見的Modbus協議變體主要包括3種:ModbusRTU,ModbusASCII和Modbus∕TCP.其中,Modbus∕TCP基于TCP∕IP開發,工業設備通過以太網進行數據交互,其數據幀格式與RTU非常類似,并去掉其中的校驗碼,因此此處僅重點介紹Modbus的RTU和ASCII協議.
①ModbusRTUModbusRTU是一種采用二進制編碼的Modbus實現方式,結構相對緊湊.在RTU模式下,整個信息幀必須作為一個連續的流傳輸,并且不同的消息幀之間至少需要相隔傳輸3.5B所需要的空閑時間,如果小于該時間,接收設備會將此消息作為前一信息幀的延續.ModbusRTU采用CRC校驗碼,以保證消息傳輸的可靠性.
在格式方面,ModbusRTU信息幀主要包括4個字段:設備地址、功能碼、數據和CRC校驗字段.其中,起始位和結束位分別表示3.5B以上的消息間隔時間;“設備地址”表示從機地址,即需要對該消息進行回應的從機,其他非該地址的從機可以不回應;“功能碼”表示具體操作,比如“06”代表“寫操作”;“數據”代表需要操作的具體數據;“CRC檢驗”用于檢驗該消息在傳輸過程中是否出錯,主要根據前3個字段計算相應的CRC檢驗碼.
②ModbusASCIIModbusASCII是一種人類可讀的、冗長的表示方式,由于國內工業控制中很少采用ASCII碼作為標準,所以ModusASCII在國內的工控領域運用很少.在ModbusASCII模式下,每個字節都被拆分成2個ASCII字符進行發送,即2B,因此其發送量是RTU模式的2倍.ModbusASCII消息幀通過特定字符判定起始位置,以英文冒號“:”(3A)表示開始,以“回車”(0D)和“換行”(0A)表示結束,各占1B和2B.
其中,“數據數量”表示后續“數據”字段中的字節個數,其他字段含義和RTU模式類似.2)DNP3DNP3協議是一種分布式網絡協議,解決了SCADA行業中協議混雜、沒有公認標準的問題.SCADA可以通過該協議與主站、RTU及IED進行通信,針對電磁干擾、元件老化等惡劣環境具有一定可靠性,并通過CRC校驗保證數據的準確性.目前DNP3協議已廣泛應用于各類ICS中,如電力、水處理等行業[40].DNP3協議完全基于TCP∕IP,并具有類似OSI的協議棧結構[42],主要包括數據鏈路層、傳輸控制層和應用層,且各層數據單元的結構特征基本類似.因此,此處僅以數據鏈路層的數據單元為例,分析DNP3協議報文的結構特征。
1.2工控協議特征
通過對ModbusRTU,ModbusASCII和DNP3等典型工控協議的結構特征進行分析,目前這些工控協議雖然還沒有統一的設計規范,但在編碼、結構、周期性等方面都存在一些共性特征[43],主要包括7點:
1)二進制編碼.為保證ICS的高實時性和可用性,工控協議通常不加密,大多數都采用二進制編碼,少量采用ASCII進行編碼.
2)結構簡明.即使部分工控協議存在“協議棧”的多層結構,如DNP3,S7Comm協議等,但每一層協議的數據報文結構都較為簡明,功能相對固定,長度比較短,總體呈現一種“扁平化”的結構,只包含頭部和數據,并且各字段之間沒有額外的關鍵字或分隔符.
3)字段精度較細.工控協議字段的劃分顆粒度通常較細,雖然字段長度通常為一個字節的整數倍,但字段內的功能劃分可能會精確到Bit級,比如DNP3的控制字段.Fig.5Frameworkofindustrialcontrolprotocolreversebasedontaintanalysis圖5基于污點分析的工控協議逆向框架4)周期性強.工控協議報文傳輸通常都具有較強的周期性,特別是交互信息和控制信息,并且同類型協議報文在長度和格式方面存在相似性.
5)起始標志明顯.工控協議數據幀具有明顯的起始標志,通常采用“時間間隔”或者“標志位”等方式.6)差錯校驗.為了保證數據幀傳輸的正確率,大多數工控協議都存在“差錯校驗”字段,通常采用CRC或者LRC校驗.但部分基于TCP∕IP以太網的工控協議通常會采用TCP∕IP和鏈路層校驗機制來校驗分組交換的準確性,如Modbus∕TCP.
7)狀態機簡單.ICS中通常是主機發送命令,從機響應并執行命令,通信模式較為簡單,因此,工控協議一般只有簡單的狀態機.針對工控協議的這些共性特征,一方面,可以基于互聯網協議的逆向分析方法,進一步改進或重新設計針對工控協議的自動化逆向分析方法;另一方面,也可以通過專家分析,歸納工控協議各種特征字段的“啟發式規則”,以進一步提高工控協議的逆向分析效果和準確性.
2工控協議逆向分析框架
工控協議逆向分析技術作為近幾年協議逆向技術在工控領域的具體應用[44],幾乎沒有經歷最初的“基于人工分析”的階段,目前主要分為2種方式:“基于程序執行”和“基于報文序列”的工控協議逆向分析技術[15,45].
2.1基于程序執行的分析框架
工控程序執行期間,協議報文中不同字段通常會被各自的函數調用,并且相同函數通常也只調用相同字段的數據.因此,基于程序執行的工控協議逆向分析技術可以通過跟蹤并分析目標工控協議程序執行期間函數堆棧、指令序列、數據、寄存器等信息的變化情況,以完成工控協議的字段劃分和語義推斷[46],而工控協議的結構簡明、周期性強等特征也更加有利于這類方法的實施.
目前針對工控協議程序分析主要是借助“污點分析”思想實現,并分為“靜態污點分析”和“動態污點分析”,它們的區別主要在于是否需要運行程序.前者可以不運行程序,僅需要對程序源代碼進行分析[47];而后者需要運行程序,通過調試、代碼注入等方式[48]對目標程序進行分析[49].但是由于工控程序源代碼通常較難獲取等原因,目前大多數都是借助“動態污點分析”實現對工控程序函數、指令和數據的跟蹤與分析[50],主要分為目標監控、目標跟蹤與分析和協議推斷3個階段[51].
首先,確定可監控的目標協議程序,將其二進制程序或協議報文作為監控目標;然后,通過動態污點分析方法與插樁技術跟蹤并記錄目標程序運行期間的函數、指令和字段數據的執行軌跡;最后,結合它們之間的“共現”情況,比如,某些協議數據字節在哪些函數中出現或者某些函數的二進制指令調用過哪些協議字節,進而推斷出工控協議字段的邊界,并結合工控協議字段的特征,進一步完成工控協議報文的格式提取、語義推斷及狀態機重構.
2.2基于報文序列的分析框架
基于報文序列的工控協議逆向分析技術主要針對工控協議通信實體間的網絡報文流量進行分析,重點結合工控協議的特征,通過序列比對、聚類等算法完成協議的格式提取等操作.由于這類方法僅需要收集和分析實體間的通信流量,不僅易于實施,而且對目標系統的穩定性等影響都比較小,因此成為目前研究較多的方法.
該類技術的框架流程基本類似于互聯網協議逆向分析技術[52],但為了更好地適用于工控協議,部分學者將工控協議的共性特征引入到原有的互聯網協議逆向分析框架,改進或重新設計了工控協議逆向分析的部分環節(如格式提取),形成一種“全自動型”的工控協議逆向分析技術,具有較高的自動性和通用性.
而另一部分學者基于公開工控協議中各種關鍵字段的特征,歸納出相應的“啟發式規則”,并通過“人工干預”的方式提前識別私有工控協議中的部分關鍵字段,以進一步提高后續逆向分析環節的效率和準確率,進而形成一種“人機協同型”的工控協議逆向分析技術.但值得注意的是,這2類技術都是將研究重心集中在工控協議的“格式提取”階段,特別是關鍵字段的劃分,因為該階段的準確性直接關系到后續“語義推斷”和“狀態機重構”的準確性[53].
基于報文序列的工控協議逆向分析技術主要包括輸入預處理、格式提取、語義推斷和狀態機重構4個階段[15],其中,格式提取可以進一步分為字段劃分和結構識別.第1階段是輸入預處理.首先根據目標協議實體特征對網絡流量數據進行過濾,劃分為不同的會話;然后再結合工控協議的基本特征(如報文長度、報文相似度等),對目標報文序列進行初步聚類,得到多組報文序列集合.
第2階段是格式提取,主要包括字段劃分和結構識別2個步驟.首先針每組同類型的報文序列集合,結合工控協議關鍵字段的特征,使用序列比對、統計分析、概率模型、深度學習等算法,完成工控特征字段的劃分;再重點通過各種聚類算法,完成工控協議的結構識別.
第3階段是語義推斷.針對每個聚類中同一種協議結構,結合工控協議各種關鍵字段的特征(如位置、長度、數值、熵等)和上下文信息,推斷相應字段的語義.因此該階段通常要求對工控協議的應用背景和設計規范等先驗知識具有一定了解,但由于目前工控協議領域仍缺少統一的設計規范,并且各工控廠家很少公開各自的協議文檔,導致沒有足夠的先驗知識,使得語義推斷仍然是工控協議逆向分析的難點.
第4階段是狀態機重構.消息數據幀中通常存在一些能夠反映消息狀態的狀態字段,根據不同消息的狀態字段取值和各類消息之間的順序,初步完成狀態機構建,隨后再進一步完成狀態機化簡.但是一方面由于該階段比較依賴格式提取和語義推斷的結果,另一方面,由于大多數工控協議只有簡單的狀態機,所以目前針對工控協議狀態機重構的研究也比較少.
基于報文序列的協議逆向分析技術通常對報文樣本的覆蓋率和協議規范等先驗知識具有一定要求,因此,對于穩定性較高且缺少協議設計先驗知識的ICS來說,針對工控協議進行逆向分析仍具有一定難度.表2分別從5個角度將其與同類型互聯網的協議逆向分析技術進行對比.
2.3小結
本節重點闡述了“基于程序執行”和“基于報文序列”這2類工控協議逆向分析框架的基本流程與特點,并從多個角度將工控協議逆向分析技術與同類型的互聯網協議逆向分析技術進行對比分析,總結各自的優勢和逆勢.其次,針對工控協議逆向分析技術,進一步剖析“基于程序執行”和“基于報文序列”這2類分析技術的優勢和逆勢,可以明顯看出基于報文序列的逆向分析技術更加易于實施,且對ICS影響較小,因此目前針對該類技術的研究比較多,并旨在進一步提高對工控協議的識別精度和準確度.
3基于程序執行的工控協議逆向
根據第2節的分析,基于程序執行的工控協議逆向分析技術通過跟蹤并分析目標工控程序執行期間指令序列、數據、寄存器等信息的變化情況,實現工控協議的格式提取和語義推斷,并且此類大多數方法都是借助“污點分析”的思想,如Polyglot[14],AutoFormat[54],Prospex[55]等.
2018年魏驍等人[30]提出了一種基于靜態二進制分析的工控協議解析方法,將“污點分析”思想應用于靜態二進制分析過程[47,56],主要包括數據預處理、交叉引用分析、協議幀重構和語義提取4個階段:1)讀取IDAPro反匯編后的匯編代碼,并通過“代碼交叉引用”和“源于動態污點的數據交叉引用”剔除與通信過程無關的函數;2)調用IDC函數,獲取交叉引用信息和函數間的依賴關系,并推斷函數類型;3)基于前一階段推斷結果,判斷函數代碼特征,完成對目標協議幀的重構與分類,形成記錄初步字段結構和常量字段值的幀結構;4)針對各協議幀字段的特征,如校驗域字段通常伴隨大量移位運算,完成協議幀的語義信息提取.
4基于報文序列的全自動型工控協議逆向
相比于基于程序執行的逆向分析技術,基于報文序列的逆向分析技術更易于實施,且對ICS的影響較小.因此部分學者將工控協議的共性特征引入現有的互聯網協議逆向分析框架,并重點對“格式提取”環節進行改進或重新設計,使其更加適用于工控協議,形成一種“全自動型”的分析技術,完全通過機器或者僅通過少量的人工協助,完成對工控協議的逆向分析[57].本章節主要根據“格式提取”方式的不同將其分為4類[15]:基于序列比對的方法、基于頻繁集的方法、基于概率模型的方法和基于深度學習的方法
5基于報文序列的人機協同型工控協議逆向
基于報文序列的全自動型工控協議逆向分析技術主要結合工控協議的共性特征,完全通過“機器”或者少量的“人工協助”實現對工控協議的自動化逆向分析,而另一部分學者結合已知工控協議中各種關鍵字段的特征,歸納出相應的“啟發式規則”,并在“格式提取”階段通過“人工干預”的方式提前識別私有工控協議中的部分關鍵字段,以進一步提高后續逆向分析環節的效率和準確率,進而形成一種“人機協同型”的工控協議逆向分析技術[72].本章節依然根據“格式提取”方式將其分為4類:基于序列比對的方法、基于頻繁集的方法、基于語義的方法和基于數理特征的方法.
5.1基于序列比對的方法
2021年Wang等人[34]認為“流水線式”的傳統協議逆向方法無法將后面階段識別的有效信息反饋到前面階段,限制了工控協議逆向的準確性.,因此,文獻[34]提出一種多階段集成逆向分析法———MSERA,以完成OMRON_FINS,BACnet和Heidenhain等多種工控協議的逆向分析.該方法首先通過工控協議中各種特征字段的“啟發式規則”,提前對各種特征字段的范圍和語義進行預挖掘,如協議標識符、序列號、位置標識符等,并且提出“語義優先級”解決部分字段的“語義重疊”問題;然后將所推斷的結果代入后續的逆向環節,通過序列比對算法和DBSCAN聚類算法[73]將高相似度分組劃分為同一類別,并根據字段的動態變化特征,將同一類別中的數據包劃分為字段;最后,再對無法通過預挖掘得到的字段語義進行重新分析.
此外,還通過“字段校正”方法對一些異常字段進行了修正.MSERA方法通過“啟發式識別+機器識別+修正”的方式,確實能夠提高工控協議逆向的準確度,但是當連續多個字段的內容沒有改變時,MSERA也很難區分出這些字段,這也是基于報文序列的協議逆向分析技術無法克服的固有困難.
5.2基于頻繁集的方法
2014年Zhang等人[74]認為如果部分子序列連續出現的頻率比較高,并且其后續字節具有很高的可變性,則該子序列很可能是一個關鍵字段,因此提出了Prowork方法,使用投票專家(votingexpert,VE)算法[75]推斷關鍵字邊界,并根據其屬性(如長度、偏移量和頻率)對候選關鍵字段進行識別.其中,VE算法在連續序列上使用窗口滑動,并通過決策規則C(x)在每個步驟中選出最可能的單詞邊界,用于分割沒有分隔符的文本,因此非常適用于二進制協議的字段劃分.
6討論
6.1方法對比分析
相比于互聯網協議,工控協議雖然沒有統一的設計規范和大量的先驗知識,導致大多數互聯網協議逆向分析方法無法完全適用,但它們具有結構簡明、周期性強等共性特征,為工控協議的逆向分析提供了更多依據.結合工控協議的共性特征,目前基于程序執行的工控協議逆向分析技術主要借助“污點分析”的思想,針對工控程序執行期間的函數、指令和數據的軌跡進行跟蹤與分析,能夠達到較高的識別精度和準確度,但是該方法不僅對ICS的穩定性影響較大,而且在工控領域難以實施,導致目前針對該類方法的研究仍比較少.
而基于報文序列的工控協議逆向分析方法僅需要對捕獲的網絡流量進行分析,雖然識別精度和準確度不如基于程序執行的工控協議逆向分析方法,但是它易于實施且對ICS的影響比較小,自動化程度也相對較高,因此成為目前研究較多的方向.本文重點按照人機參與程度的不同將其分為全自動型和人機協同型,再按照格式提取方式不同,繼續分為基于序列比對的方法、基于頻繁集的方法和基于概率模型的方法等.其中,表5重點針對“基于報文序列”的工控協議逆向分析方法,從多個維度進行對比分析與總結,主要包括時間、分析粒度、字段劃分、結構識別、語義推斷、狀態機重構等.
作者:黃濤1,2付安民1,2季宇凱1毛安1王占豐3胡超4