文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.171041
中文引用格式: 程必成,劉仁輝,趙云飛,等. 非標工業控制協議格式逆向方法研究[J].電子技術應用,2018,44(4):126-129.
英文引用格式: Cheng Bicheng,Liu Renhui,Zhao Yunfei,et al. Research on non-standard industrial control protocol formats reverse[J]. Application of Electronic Technique,2018,44(4):126-129.
0 引言
隨著2010年“震網病毒”的出現,工業控制系統(Industrial Control Systems,ICS)的安全性越來越受到全球范圍的關注[1]。接口環節是ICS中的關鍵環節,而通信協議又是接口的核心,工控協議的安全性分析已成為等級保護等安全測評中一項重要的內容。各工控廠商或個人出于提供個性化功能、優化通信性能、簡化協議實現的復雜度等因素的考慮,導致工控行業中有大量的非標準協議存在。非標工控協議安全性分析采用的模糊測試等方法的前提是已知協議的格式信息,所以非標工控協議格式逆向識別成為了工控信息安全中的一項重要內容。
以往,非標工控協議的格式結構信息主要通過人工逆向的方式來獲得,但這種方法往往耗時費力且結果不準確。工控協議與信息系統應用協議的區別導致信息系統應用協議逆向識別方法對非標工控協議的識別度不高。因此,需要研究適用于非標工控協議的格式逆向識別方法。
1 協議逆向技術和工控協議特點
1.1 協議逆向技術介紹
協議逆向工程(Protocol Reverse Engineering,PRE)指在不依賴于協議描述的情況下,通過對協議實體的網絡輸入輸出、系統行為和指令執行流程進行監控和分析,提取協議語法、語義和同步信息的過程[2]。根據分析對象的不同,協議格式逆向分析技術分為基于網絡流量和基于執行軌跡的協議格式逆向分析技術。
基于網絡流量的協議格式逆向分析技術以網絡數據流為分析對象,根據協議字段的取值變化頻率和特征推斷得到協議格式。其依據是數據流中的單個報文樣本是協議格式的一個實例,相同格式的報文樣本具有相似性,不同格式的報文樣本具有一定的差異性,可以將具有相似性的報文匯集在一起,推斷它們所遵循的報文格式。這種分析技術僅依賴于所捕獲的網絡數據包,具有比較好的通用性,因此應用較廣泛。
基于執行軌跡的協議格式逆向分析技術主要對實現協議的二進制可執行程序進行逆向分析,獲得程序具體處理網絡通信數據包的指令執行序列。其主要依據是程序對數據包的處理按照定義好的數據包格式進行,通過對程序執行的跟蹤,可以獲得協議的部分或全部語義、語法信息。該技術方法除需獲取通信數據包外,還需獲得協議的實體可執行程序,這導致該技術在應用范圍方面有一定的局限性。表1為基于網絡流量和基于執行軌跡兩種技術的比較及代表性的項目。
1.2 工業控制協議特點
工控協議是指工業控制網絡中現場設備、控制器、操作員站、通信和應用等服務器、工程師站之間數據通信的規定,與系統功能和網絡架構密切相關,對成套設施級可編程邏輯控制器(Programmable Logic Controller,PLC)、廠站級分布式控制系統(Distributed Control System,DCS)、廣域的數據采集和監控系統(Supervisory Control and Data Acquisition,SCADA),分別發揮提供核心基礎能力的作用。隨著工控行業的發展,工控協議更多地采用基于以太網的通信協議方式,按照TCP/IP協議體系結構的劃分,工控以太網協議主要是應用層協議。
相比較于傳統的基于以太網的信息系統應用協議,工業控制協議通常具有以下特點:(1)傳輸信息中,以二進制形式表示的模擬量、數字量類型信息比較多,文本類型信息少,視頻類信息獨立傳輸;(2)多數信息有實時性要求,通信過程要在規定的時限內完成,否則就會造成數據質量失效;(3)有相對明確的數據生成者與使用者,許多傳輸過程也在確定的物理環境中進行,通常認為通信環境比較清潔,許多通信數據不加密;(4)協議中采用多種交互控制方式,如請求應答交互、周期主動傳輸,也提供多種流量優化機制,如變化傳輸、事件訂閱等;(5)在自動控制層,使用包含工業以太網等多種形式的現場總線,而在本地和遠程監控層,基礎層多采用基于以太網的TCP、UDP等可路由協議;(6)出于工業應用的可靠性、安全性要求,通信數據包具有一定的檢錯、容錯,甚至是糾錯能力,可保證數據的完整性;(7)多數情況下,數據包具有相對一致的協議控制結構和數據內容結構,如開始和截止標記、報文發送者和接收者標識、報文功能碼、報文長度、校驗碼等。圖1為一些工控協議格式結構示例。
2 非標工控協議格式逆向識別方法
工業控制網絡中協議處理程序主要集成在ICS廠商提供的專用軟件或硬件設備中,所以不易獲取協議處理的可執行程序,而獲取工控網絡中的數據流量相對簡單。所以對工控協議的逆向分析多采用基于網絡流量的方式。根據工控協議的特點,提出通過主要預處理、單報文處理、多報文處理、語義推斷4個階段逆向分析工控協議的方法,如圖2所示。
2.1 數據預處理
通過接入工控系統網絡中捕獲網絡中通信數據,作為原始數據源。根據IP地址、端口號等分包過濾出需要分析的特定通信實體間的通信數據,作為逆向分析的報文序列樣本集。對報文序列中出現的丟包、重傳、亂序等情況進行處理;濾除不含負載的報文;丟棄校驗和出錯的報文;將IP分片的報文進行重組;對于TCP會話,一個完整會話以SYN報文開始,以FIN/RST報文結束。由于工控數據往往要求實時性,因此本文不考慮單個TCP報文中包含多個應用層協議的情況。
對于應用層協議的逆向,需要將數據包按照TCP/IP協議格式進行自底向上的解除封裝,依次去除數據鏈路層、網絡層和傳輸層的格式封裝,得到完整應用層報文。
2.2 單報文處理
單報文處理的作用是對協議數據進行分詞,并依據分詞結果將協議數據包進行聚類劃分。分詞是指識別區分出報文中的一些特殊字段。單報文分詞指識別出僅單個報文就可識別出的字段,如文本字段、時間戳字段、校驗碼字段等。根據報文中識別出的字段屬性對報文進行聚類劃分,可得到不同類型的報文組類。下面主要說明文本字段和時間戳字段的識別。
(1)文本字段識別。將報文字節流中屬于ASCII碼中可打印字符取值范圍內的連續字節,將其識別為文本字段;否則為二進制字段[7]。為了避免將屬于二進制字段的字節錯誤地識別為文本字段,限定文本字段的長度必須超過設定的文本長度最小閾值。由于工控協議中傳輸文本的數據包相對較少且格式相對單一,因此可將含有文本字段的報文聚為一類進行處理。圖3中框中部分為報文中的文本字段。
(2)時間戳字段識別。將報文中連續的4 B或8 B數據按照時間戳(Unix timestamp)的方式進行計算得到時間值,如果該值在報文捕獲時間的固定誤差范圍內,可將該4 B或8 B標識為時間戳字段。圖4中框中部分即為小端字序表示的時間戳字段,時間值為2016年11月30日09:51:21.507340209。
2.3 多報文處理
多報文處理的作用是在劃分出同一報文組中的報文內容固定段與非固定段、定長段和不定長段。序列比對是樣本再劃段和語義推斷的前提。由于工控協議往往具有格式相同或相近、傳輸信息重復性高、同類型報文長度等長等特性,可以優先進行同長報文比對,按比對結果再分類得到不同格式類型;再將得到的格式類型相或相近的不同長報文進行不同長報文比對。最終得到多個不同格式樣本的子集。
同長度報文比對主要是劃分出相同長度報文組中報文內容的不變段與變化段。為了避免將同一初始分類組中長度相同但格式不同的報文進行強行比對,影響比對的準確度,需要設定距離閾值,在距離過大時停止比對,并將之再分類。依據比對結果劃分標記變化段和不變段。
不同長報文比對主要是識別出長度不同、但格式相同或相近的報文中內容數據定長段和不定長段。采用時間和空間復雜度都相對比較適合的漸進多序列比對算法。參考PI項目中的漸進比對算法,主要包括3個步驟:(1)采用Smith-Waterman算法找出任意兩個樣本之間的局部最佳比對,據此計算樣本間的相似度,并構造樣本集的距離矩陣;(2)采用非加權成對群算術平均法(Unweighted Pair Group Method with Arithmetic means,UPGMA)計算子類間的距離,逐步將距離最小的子類進行合并;(3)執行漸進多序列比對,采用Needleman-Wunsch算法進行雙序列動態規劃比對[8],對未對齊的字節進行補充。為減少算法復雜度,對同長報文比對后分類的各類中選取少數樣本組合成作為樣本集進行不同長報文比對。
2.4 字段語義推斷
字段的語義表示協議將如何使用該字段,包括會話標識符、序號、地址、長度字段、格式標識字段、校驗和、時間戳等。以不同字段在協議語法層次中表現出的不同特征作為語義推斷的依據,對不同字段按照相應的識別方法進行識別。由于單報文處理中已將文本字段、時間戳字段、校驗和字段等進行了識別,因此該階段主要在二進制數據段內對標識符、序號、長度、地址、功能碼、數據等字段進行識別。最后對提取的格式進行整理融合,最終得到協議的格式結構。
序號字段是用于標識報文在一個會話的先后順序。特征是一般靠近段首,取值一直變化,且與報文的截獲先后順序相對應??梢詫ξ粗臄抵底兓芜M行判斷,如其取值變化與報文的截獲序號成正相關的關系,則判定為序號字段。
長度字段是報文中用于定界的字段,字段長度通常為2 B或4 B,取值與樣本中的某一字段或連續的某幾個字段的長度相等,作用域通常在該字段之后或包含所有字段。識別策略為判斷該字段值與其后的某一字段或連續的某幾個字段的長度、或與所有字段總長度是否相等,若相等則判定為長度字段。
格式標識字段是指用于區別報文中部分子格式序列的關鍵字段,多為協議格式字段或功能碼字段,格式標識字段的取值一般類型較少、變化率小,且與后續字段序列的格式相關聯,作用域多位于其后區域。如果該字段變化導致后部所有字段格式發生變化,將其識別為協議格式字段。
數據字段是指對報文結構和其他關鍵字段影響不大或沒有直接影響的可變字段,一般指報文的負載。特征是隨機性強,且變化無規律可循,長度可能不固定,通常位于協議后部或尾部,對于序列比對中需要插入空位的可變字段,判定為數據字段,文本字段也判定為數據字段。
3 方法驗證
以兩種典型ICS系統中的通信數據作為數據源進行驗證。以某PLC與工程師站組態軟件之間的通信協議數據包為數據源,采用本文所述方法對協議進行逆向識別,識別的格式結果如表2所示。
以某DCS中的通信數據為數據源,對其進行協議的逆向識別,得到3種主要的協議格式類型,如圖5所示,格式I、II中請求報文格式和應答報文的格式不同,格式III請求和應答采用同種格式。
4 結論
工控協議逆向格式識別是協議安全性分析的重要前提。本文根據工控協議的特點,提出基于網絡流量技術,采用單報文處理、多報文處理、字段語義推斷3個階段進行協議格式逆向識別的方法。通過對兩種協議數據源的驗證可以看出,本文方法能較好地逆向協議格式,提取出協議格式標識、序號、長度、數據等關鍵字段。
受基于網絡流量逆向分析技術的局限性,本文方法對協議功能碼具體語義的識別率較低。未來研究方向為將人工先驗知識和機器學習方法引入協議逆向識別中,同時結合協議上下文,實現更高的樣本覆蓋率,以提高協議逆向識別的準確度,同時得到協議轉換的狀態機[9]。
參考文獻
[1] 屈婉瑩,魏為民,朱蘇榕.工業控制系統通信協議安全研究[C].2015年全國智能電網用戶端能源管理學術年會論文集,上海,2015:220-224.
[2] 吳禮發,洪征,潘璠.網絡協議逆向分析及應用[M].北京:國防工業出版社,2016.
[3] MARSHALL B.The protocol information project[EB/OL].(2011-03-20)[2017-03-14].http://www.4tphi.net/~awal-ters/PI/PI.html.
[4] SHEVERTALOV M,MANCORIDIS S.A reverse engineering tool for extracting protocols of networked applications[C].Proceedings of the 14th Working Conference on Reverse Engineering,IEEE Computer Society,Washington DC,USA,2007:229-238.
[5] CUI W,KANNAN J,WANG H J.Discover:automatic protocol reverse engineering from network traces[C].16th USENIX Security Symposium,2007:199-212.
[6] BOSSERT G,GUIHERY F.Security evaluation of communication protocols in common criteria[EB/OL].(2014-03-20)[2017-03-14].http://www.netzob.org.
[7] 孫芳慧.基于Net-Trace的未知協議格式逆向技術研究[D].哈爾濱:哈爾濱工業大學,2015.
[8] 張黎.基于Net-Trace的網絡協議逆向工程方法研究[D].武漢:華中科技大學,2011.
[9] 蘇彬彬.無線網絡環境下未知協議語義分析與提取技術[D].成都:電子科技大學,2014.
作者信息:
程必成,劉仁輝,趙云飛,許鳳凱
(華北計算機系統工程研究所 工業控制系統信息安全技術國家工程實驗室,北京100083)