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