?

基于主動交互式學習的工控協議逆向分析

2023-09-07 08:47付安民張曉明王占豐
西安電子科技大學學報 2023年4期
關鍵詞:狀態機工控字段

付安民,毛 安,黃 濤,胡 超,劉 瑩,張曉明,王占豐

(1.南京理工大學 計算機科學與工程學院,江蘇 南京 210094;2.中國人民解放軍陸軍工程大學 指揮控制工程學院,江蘇 南京 210007;3.國家計算機網絡與信息安全管理中心,北京 100029;4.南京萊克貝爾信息技術有限公司,江蘇 南京 210014)

1 引 言

隨著工業互聯網的發展,越來越多的工業控制(簡稱工控)系統開始連接到網絡,以實現對工控設備的遠程操控[1]。然而,基于商業性和安全性的考慮,部分工控設備廠商選擇不公開工控協議文檔,導致目前網絡中存在大量私有、非標準的工控協議,為工控系統的網絡安全行為管理、模糊測試、入侵檢測等帶來了巨大的挑戰[2]。未知工控協議逆向分析技術能夠對未知工控協議的格式、語義和狀態機等進行推斷,進而提升工控系統的安全[3-4]。

目前工控協議逆向方法主要包括基于程序執行的工控協議逆向方法[5]和基于流量樣本的工控協議逆向方法[6]。前者雖然具有較高的準確性,但是非常依賴系統固件,通常難以實現,尤其針對一些大型的工控系統,幾乎無法實現。而后者雖然準確性不及前者,但其僅通過工業協議流量樣本就可以挖掘協議語法、語義和狀態機等信息,非常易于實現,因而成為目前工業界主流的協議逆向方法。然而,基于流量樣本的工控協議逆向方法[4]通常存在該類方法固有的局限性,即嚴重依賴于協議樣本的多樣性。特別是針對穩定性和可靠性相對較高的工控系統,捕獲的工控協議流量樣本往往會缺乏一些關鍵的字段取值、協議狀態和狀態變遷等信息,比如異常狀態等,進而導致工控協議逆向分析結果與真實協議規范存在較大偏差,甚至只能得到協議規范的子集,無法提取完整的協議格式和狀態機等信息。因此,如何針對原始流量樣本中存在的信息量不足等問題,對工控協議逆向分析初始結果進行完善與優化,已經成為目前工業界與學術界關注的熱點[7]。

為此,筆者提出了一種基于主動交互式學習的未知工控協議逆向分析方法(Reverse Analysis method of unknown Industrial control Protocol based on Active Interactive Learning,RAIPAIL).在流量樣本的逆向基礎上,依據初始逆向結果構建字段探測和狀態機探測數據包,與工控設備進行主動交互式通信,探測未知協議的字段與狀態機,進而對工控協議格式、字段屬性和狀態機等分析結果進行深入挖掘與補充。論文的主要工作如下:

(1) 提出一種基于主動學習的工控協議逆向分析方法,為基于流量逆向方法的字段語義結果驗證、字段取值范圍進行擴充,并重點解決了傳統基于流量的協議逆向方法無法解決的偽靜態長字段問題。

(2) 在流量樣本字段分析靜態分析結果的基礎上,遵循協議逆向分析初始結果與工控設備進行主動交互式通信,以驗證所推斷的工控協議字段語義與取值范圍的正確性。

(3) 根據協議逆向提取的狀態機信息,組合多種順序通信序列,通過與工控設備通信,實現對協議狀態機的擴展分析,進而對工控協議格式、字段屬性和狀態機等分析結果進行深入挖掘與補充。

(4) 選取Modbus、IEC 104、MQTT等主流工控協議對RAIPAIL的性能進行測試。實驗結果表明,針對基于流量的工控協議逆向分析結果,RAIPAIL不僅可以有效驗證字段語義的正確性,還能夠進一步準確探測字段的取值范圍,并解決Modbus中存在的偽靜態長字段問題。特別是,RAIPAIL還可以有效探測協議狀態機中未被發現的新狀態和狀態轉化序列等。

2 相關工作

協議逆向分析[8]能夠基于捕獲的未知協議通信數據包或指令執行軌跡[9],對未知協議的格式、語義和狀態機等進行推斷。因此,它已經逐漸成為入侵檢測、漏洞挖掘等安全分析技術的基礎。

協議逆向分析包括輸入預處理、協議格式提取和協議狀態機推斷3個階段[10],其中,輸入預處理分別以會話和報文為粒度對輸入樣本進行分割,并剔除樣本中可能出現的重傳、亂序、分片等冗余和干擾信息;協議格式[11]提取主要包括字段識別、結構提取、語義與取值約束判斷3個步驟,通過識別每個報文對應的格式,并對報文所有格式進行合并,進而提取協議報文格式、字段屬性等信息;基于提取的協議格式,協議狀態機[12]推斷主要對通信雙方的報文交互次序進行分析,以推斷通信過程中協議實體的狀態以及相應的狀態變遷。

根據分析對象的不同,目前工控協議逆向分析技術可以分為兩類:基于執行軌跡的協議逆向分析[13]和基于流量樣本的協議逆向分析[14]。

基于執行軌跡的協議逆向分析技術[15],通過跟蹤并分析目標工控協議程序執行期間函數堆棧、指令序列、數據、寄存器等信息的變化情況[16],完成工控協議的字段劃分和語義推斷。目前針對工控協議的逆向分析技術主要借助污點分析思想實現[17],分為靜態污點分析和動態污點分析,兩者的區別為是否需要運行程序,基于靜態污點分析的方法需要對程序源代碼進行分析,如文獻[18]將靜態污點分析思想運用于靜態二進制分析,提出一種基于靜態二進制分析的工控協議分析方法。而基于動態污點分析的技術需要運行程序,通過調試、代碼注入等方式對目標程序進行分析,如Polyglot[3]通過監視協議體對消息的處理過程以及各消息片段的使用方法,獲得協議結構與字段語義。文獻[19]根據“相同協議字段的字節在內存中通常具有相同傳播軌跡”的原理,提出一種自動識別工控協議字段邊界的方法。然而,由于工控程序源代碼通常較難獲取,并且具有高穩定性和實時性要求的工控系統不利于反復調試。因此,基于執行軌跡的協議逆向分析技術通常都難以實現。

基于流量樣本的協議逆向分析技術[20-21],僅通過分析工控協議的流量數據包,就可以實現消息類型識別、協議格式提取與協議狀態機推斷等,進而提取工控協議的語法、語義和狀態機信息。這類技術最早由Beddoe在PI項目中[22]提出,該項目使用Needleman Wunsch 序列比對算法進行同一簇內的流量數據比對,區分字段中的可變字段和不變字段值,提取公共部分,構建協議結果特征,但該方法只適用于結構簡單的未知協議。之后的Discoverer[23]在PI基礎上為完整協議格式提取提供算法和工具,主要包含標記和初始化、遞歸聚類、字段合并的3個模塊,進而實現自動挖掘協議格式。文獻[14]提出一種基于語義的協議格式推斷工具(Netzob)[14],分為會話切分、噪音過濾、消息聚類、格式推斷、合并、狀態機重構等步驟,在聚類和字段劃分階段增加了語義的信息,使用基于語義的序列比對算法提取未知協議特征,它是目前較為完善的協議逆向工具,然而該方法比較依賴字段語義和聚類的準確度。文獻[7]提出的基于概率性的協議逆向方法,將關鍵字識別問題表述為一個概率推理問題,深度挖掘關鍵字背后的各種約束關系,以概率量化約束關系的強弱,進而判斷該字段是否為關鍵字字段。然而該方法非常依賴真實的標記數據。在協議狀態機推斷階段,文獻[24]提出一種基于報文聚類的協議狀態機推斷工具,以報文格式相似性作為相似性度量標準,將會話序列進行聚類并標識結果,以獲得數據流新的表示,最終實現協議狀態機重構。然而該工具忽略部分場景存在協議格式相似但狀態類型不同等情況。ReverX[25]和 AutoReEngine[26]都是基于協議關鍵字分析以重構有限狀態機。ReverX通過泛化啟發式構造圖,通過傳統的有限狀態機(Finite State Machine, FSM) 最小化對其進行縮減; AutoReEngine利用Apriori算法提取最頻繁的字節串作為關鍵字段,并進一步構造FSM。但是AutoReEngine模型通常包含大量狀態,往往需要進一步化簡。

總之,當前基于流量的工控協議逆向技術主要集中于流量樣本本身的特征分析和挖掘,但這類方法通常非常依賴協議樣本的多樣性。因此,如何在樣本多樣性不足的情況下,進一步完善協議逆向分析結果是未知工控協議逆向分析研究的難點。

3 RAIPAIL概述

RAIPAIL能夠在流量樣本靜態分析結果的基礎上,按照協議逆向分析初始結果與工控設備進行主動交互式通信,以驗證所推斷的工控協議字段語義與取值范圍的正確性,并根據協議逆向提取的狀態機信息,組合多種順序通信序列,通過與工控設備通信,實現對協議狀態機的擴展分析,進而對工控協議格式、字段屬性和狀態機等分析結果進行深入挖掘與補充。RAIPAIL的總體框架如圖1所示,該框架主要包括預處理、交互和驗證3個模塊。

圖1 面向未知工控協議逆向分析的新型探測框架圖

3.1 預處理模塊

針對初始協議逆向結果,提取工控協議的字段語義、字段取值和狀態機序列等信息,這些信息將既作為交互模塊中字段探測和狀態機探測的輸入數據,又作為驗證模塊的驗證參照數據。

3.2 交互模塊

交互模塊作為RAIPAIL方法的核心模塊,包括字段探測和狀態機探測兩個功能。字段探測主要包括字段語義驗證、字段取值范圍探測和偽靜態長字段劃分。

(1) 字段語義驗證。針對前期工控協議逆向分析結果中的字段語義,設計相應字段變異器,重組原有流量并發送給目標系統,結合相應反饋信息,對字段語義的正確性進行驗證。

(2) 字段取值范圍探測。針對前期工控協議逆向分析結果中的字段取值集合,通過對字段賦予不同取值,重組原有流量并與目標系統主動交互,以驗證字段取值范圍的正確性。

(3) 偽靜態長字段劃分。針對前期工控協議逆向分析結果中字段長度大于一定閾值的靜態字段進行探測,通過偽靜態長字段變異器,重組原有流量并與目標系統主動交互,探測該字段是否可劃分。

狀態機探測主要包含新狀態與狀態轉化探測和狀態依賴挖掘。

(1) 新狀態與狀態轉化探測。針對前期工控協議逆向分析結果,獲得報文格式集合,提取對應的流量樣本,使用全排列算法構建交互流量序列集合,并與目標系統主動交互,獲得交互流量集。

(2) 新狀態依賴挖掘。 針對包含不同狀態功能碼的報文流量進行組合排列,形成基于狀態碼的狀態機探測序列,并與目標系統主動交互,獲得通信合集。

總之,該模塊主要根據工控協議字段和狀態機的探測結果,生成變異樣本,與工控設備或工控模擬工具進行主動式交互,并收集交互報文集,該報文集也將作為驗證模塊的驗證參照數據。需要提及的是,大部分的工控協議針對錯誤的驗證報文都會有其對應的反饋信息,少數健壯性不強的協議只對正確的報文才應答。針對少數只對正確報文才反饋的協議,需要對變異樣本進行人工修正后,再進行探測。

3.3 驗證模塊

對比初始逆向分析結果和交互報文集,對字段探測和狀態機探測結果進行驗證。需要說明的是,這些驗證操作目前大都需要依賴人工分析完成。

(1) 字段驗證。通過對比字段語義驗證、字段取值范圍探測、偽長靜態長字段劃分的交互流量集與初始流量樣本的區別,獲取字段語義驗證、取值范圍探測和偽靜態長字段的分析結果。

(2) 狀態機驗證。通過分析與目標系統交互的流量集合與初始逆向分析的狀態機,進行狀態機補充和狀態依賴判斷,從而進一步實現對協議狀態機的擴展分析。

總之,該模塊根據初始流量集的會話信息,對比字段探測、狀態機探測結果與初始報文結果,驗證是否有新報文格式或狀態轉化結果,完成字段驗證和狀態機驗證。

4 主動交互式學習的協議逆向過程

這里重點針對RAIPAIL的交互模塊所涉及的關鍵技術和算法進行詳細介紹,主要包括字段探測和狀態機探測。

4.1 字段探測

字段探測主要包括字段語義驗證、字段取值范圍探測和偽靜態長字段劃分。

(1) 字段語義驗證。RAIPAIL依次針對每個協議字段進行變異和驗證,主要根據所推斷的各字段語義信息,設計相應的字段變異器,如數據字段變異器(TextMutator)、長度字段變異器(LenMutator)、序列號字段變異器(SeqMutator)等,基于這些字段變異器能夠生成各種類型的測試樣本,通過與目標工控設備或系統進行主動式交互,以驗證相應字段語義信息的正確性。若字段語義信息正確,則保持原有分析結果;反之,則判定該字段語義分析錯誤,并修正初始逆向中該字段的分析結果。其中,以TextMutator為例,RAIPAIL采取字段內容填充等變異方法,如重復字段插入、特殊符號插入、隨機刪除部分數據、文本內容打亂重組等,并且考慮到文本字段的內容長度通常與長度字段相關,RAIPAIL將同步更新長度字段數值,使兩者達到一致,以驗證當前字段是否為文本字段。詳細的協議字段語義驗證過程如算法1所示。

算法1字段語義驗證與擴展算法。

輸入:逆向分析的樣本結果M={m1,m2,…,mn}(初始逆向過的流量樣本)。

輸出:與真實設備交互的數據流量集合R。

① 對于每一個樣本結果mi,按順序遍歷所有字段mi·field和其對應的變異器mi·mutator。

② 根據mi·mutator生成種子序列集合smi·field,若沒有標注的mutator,則不生成。

③ 加入到交互流量集合S里面。

④ 重復上述②~③步,直到遍歷完M。

⑤ 使用目標系統采取的通信方式c,進行數據交互。

⑥ 每個種子序列smi·field會話流量 ->R。

⑦ ReturnR。

(2) 字段取值范圍探測。字段取值范圍探測主要對長度固定且取值變化的字段的取值范圍進行探測,如功能碼等。以功能碼字段變異器(FuncMutator)為例,由于捕獲到的流量通常無法包含所有的功能報文,通常只能提取出對應協議功能碼的子集。然而,針對各類協議功能碼字段的深入分析,發現功能碼的有效取值范圍通常都比較接近,特別是工控協議,如MODBUS等。因此,RAIPAIL針對目標協議的功能碼數值進行遞增或遞減,并向目標工控設備或系統發送重新組合后的測試報文,最終根據目標設備或系統的反饋報文,實現對功能碼取值范圍的探測。

(3) 偽靜態長字段變異。偽靜態字段是目前大多數協議逆向分析方法難以解決的問題。由于收集的部分字段樣本存在多樣性不足等問題,導致多序列比對算法提取的部分相鄰字段同時出現固定值的現象,進而導致這兩個不相關的相鄰字段被錯誤地識別為一個偽靜態長字段。因此,針對這一現象,RAIPAIL采取對于偽靜態長字段按單字節進行變異,通過對每個單字節取值進行遞增或遞減,以生成新樣例與目標系統進行主動式交互,最終實現對當前字段是否為靜態字段的驗證。

而針對字段長度超過三字節的長字段驗證劃分,RAIPAIL采取逐字節變異策略:通過計算當前字節與0xff之間的差值,填充當前字節取值,并發送給目標工控設備或系統,對比不同變異字節的反饋信息,以判斷當前長字段是否包含多個短字段。

4.2 狀態機探測

協議狀態機是對協議實體間信息交互過程的描述,定義了不同格式類型報文的傳送順序。通常使用FSM模型描述協議狀態機,以體現通信過程中協議實體所處的狀態以及狀態之間的轉換關系,一個 FSM 可以用五元組M=(Q,ΣI,ΣO,δ,λ)表示,其中,Q表示有限狀態集合,ΣI表示有限輸入符號集合,ΣO表示有限輸出符號集合,δ:Q×ΣI→Q表示狀態轉換函數,λ:Q×ΣI→ΣO表示輸出函數。

針對捕獲的協議流量集進行逆向分析,并結合狀態字段和會話順序構建和化簡協議狀態機。然而,由于流量樣本多樣性不足,導致推測的協議狀態機通常不完整,比如缺少部分協議狀態和狀態轉化關系等。因此,針對這一不足,RAIPAIL分別從以下兩個角度進行擴充。詳細的協議狀態機探測過程如算法2所示。

(1) 新狀態與狀態轉化探測。先根據協議逆向初始結果,對每種報文流量進行全排列組合,以獲得新報文序列集合,再根據集合中每條流量序列與目標工控設備進行主動式交互,分析報文反饋信息,填充新狀態與轉化序列。

(2) 新狀態依賴探測。針對包含不同狀態功能碼的報文類型進行全排列組合,形成基于狀態碼的狀態機探測序列,依次發送給目標工控設備,分析報文反饋信息,探測是否存在新狀態依賴。

算法2狀態機探測算法。

輸入:逆向分析的樣本結果M={m1,m2,…,mn}(初始逆向過的流量樣本),具有類似功能碼能決定消息格式的樣本結果S={s1,s2,…,sn}。

輸出:與真實設備交互的數據流量集合R。

① 對于M,狀態轉化變異器stateMutator->新狀態序列集合SMi。

② 使用通信方式c,進行序列交互。

③ 新會話ti加入R。

④ 對于S,功能碼依賴變異器FuncMachineMutator->新狀態依賴序列集合FSi。

⑤ 使用通信方式c,進行序列交互。

⑥ 新會話ti加入R。

⑦ ReturnR。

5 實驗分析

為了驗證RAIPAIL的性能,選取了目前最常用的Modbus、IEC-104和MQTT這3種工控協議進行測試。由于Modbus是無狀態的協議,因此協議狀態機實驗只針對IEC-104和MQTT兩種工控協議。

5.1 系統測試環境

系統運行的硬件環境為兩臺運行Windows操作系統的64bit PC,一臺作為構建包和傳輸包的機器,另一臺用于搭建協議模擬器以模擬真實工控設備。測試的協議模擬器在字段驗證推測采用Modbus、IEC104的協議模擬器和MQTT服務器,狀態機推測采用IEC104協議模擬器和MQTT服務器,具體配置如表1所示。

表1 系統測試環境

5.2 協議字段驗證與擴充分析

5.2.1 Modbus協議字段驗證

針對Modbus協議逆向分析結果,RAIPAIL進行多次主動式交互測試。實驗結果如表2所示。

表2 Modbus字段實驗結果

結合表2中的實驗結果,分別從功能碼取值范圍探測、請求數目字段語義驗證、請求地址字段語義驗證和長靜態字段劃分等4個角度進行分析:

(1) 功能碼取值范圍探測。根據初始協議逆向分析結果,收集的Modbus樣本只有01、02、03協議功能碼,而RAIPAIL通過對功能碼字段進行變異,并與服務器主動交互,驗證返回的報文信息來探測有效功能碼。驗證表明有效功能碼區間為1~24,而超過24以后則返回未知功能碼錯誤。RAIPAIL探測出的功能碼區間為1~24,明顯超出初始協議逆向分析結果中的功能碼取值范圍,并且獲得兩種非法數據地址和非法功能流量樣本種類。

(2) 請求數目字段語義驗證。針對初始協議逆向分析結果中的請求線圈數目字段語義進行驗證,交互反饋報文中寄存器狀態數完全符合請求線圈的寄存器數目總和,表明該字段語義分析正確。

(3) 請求地址字段語義驗證。針對初始協議逆向分析結果中的原有地址和變異地址進行驗證,交互反饋報文中數據值變化均能夠對應地址變化情況,表明該字段是請求地址字段。

(4) 長靜態字段劃分。對比Modbus協議規范和初始協議逆向分析結果,可發現Modbus協議經逆向分析后,協議標識符、長度和設備地址等字段被劃分為一個長靜態字段。因此,RAIPAIL分別對“協議標識符”、“長度”和“設備地址”等字段采用“單字節變異”。驗證結果:針對“協議標識符”字段變異,模擬器都未響應,進而確定該字段不可修改,屬于靜態固定值字段;針對“長度”字段變異,模擬器反饋“畸形數據包錯誤”,進而確定該字段可修改,屬于動態字段;針對“設備地址”字段變異,模擬器反饋“非法數據地址異?!?進而確定該字段可修改,屬于動態字段。最終,確定該偽靜態長字段可以進一步被細劃分為“靜態字段+動態字段+動態字段”。

5.2.2 IEC-104協議字段驗證

針對IEC-104協議逆向分析結果,RAIPAIL進行多次主動式交互測試,實驗結果如表3所示。

表3 IEC104字段實驗結果

結合表3中的實驗結果,可分別從控制字段取值范圍探測、數據長度字段語義驗證、傳送原因字段取值探測和請求地址字段驗證等4個角度進行分析:

(1) 控制字段取值范圍探測。根據初始協議逆向分析結果,收集的IEC-104樣本中的控制字段主要包括啟動命令、啟動命令確認、測試命令、測試命令確認等功能,而RAIPAIL可以額外探測到停止命令和停止命令確認等新控制功能。

(2) 數據長度字段語義驗證。針對初始協議逆向分析結果中的數據長度字段進行驗證,RAIPAIL通過修改字段值并進行主動交互,僅當修改值與數據長度完全一致時,才能收到目標設備的正確報文;否則,IEC服務器將不返回錯誤報文信息,進而表明該字段確為數據長度字段。

(3) 傳送原因字段取值探測。根據初始協議逆向分析結果,收集的IEC-104樣本中的傳送原因字段取值為64和67,而RAIPAIL可以額外探測出新取值01。然而,因傳輸多數為命令,且IEC104模擬器對錯誤報文不返回狀態,因此,推測傳輸原因字段取值范圍暫定為01~67。

(4) 請求地址字段驗證。針對初始協議逆向分析結果中的原有地址和變異地址進行驗證,交互反饋報文中數據值變化均能夠對應地址變化情況,表明該字段是請求地址字段。

5.2.3 MQTT協議字段驗證

針對MQTT協議逆向分析結果,RAIPAIL進行多次主動式交互測試。實驗結果如表4所示。

表4 MQTT字段實驗結果

結合表4中的實驗結果,分別從控制字段取值范圍探測、數據長度字段語義驗證、未知字段語義探測和長度字段語義驗證等4個角度進行分析:

(1) 控制字段取值范圍探測。根據初始協議逆向分析結果,收集的MQTT樣本中的控制字段僅有01、02、03、04、09等5種取值,而RAIPAIL通過對控制字段進行變異,并與服務器主動交互,觀察訂閱者,服務器對錯誤報文均無響應結果,因此保持原有結果集。

(2) 數據長度字段語義驗證。針對初始協議逆向分析結果中的數據長度字段進行驗證,RAIPAIL通過修改字段值并進行主動交互,經轉義和對比訂閱者的數據流量中的數據長度字段相同,驗證該字段確為數據長度字段。

(3) 未知字段語義探測。根據初始協議逆向分析結果,RAIPAIL對初始字段轉義獲得mqtt/test,并生成大量測試用例,通過與工控設備進行主動交互以獲得反饋結果,對應字段轉義為mqtt/work,進而探測該未知字段是主題名字段。

(4) 長度字段語義驗證。針對初始協議逆向分析結果中的數據長度字段進行驗證,RAIPAIL通過修改字段值并進行主動交互,僅當修改值與數據長度完全一致時,才能收到目標設備的正確報文;否則,MQTT服務器將不返回錯誤報文信息,進而表明該字段確為數據長度字段。

5.2.4 小 結

通過對Modbus、IEC104和MQTT 3種主流工控協議的報文字段進行分析,可發現工控協議通常采用小包傳輸,使用一個或者幾個字節來標示相應的功能,并且數據包具有相對一致的結構和字段內容結構,具有相對固定的周期,以確定設備處于連接狀態的時間和行為?;诠た貐f議這些特征,RAIPAIL不僅可以有效驗證初始逆向分析結果中字段語義的正確性,還能夠準確探測MQTT協議中初始協議逆向無法提取的未知字段語義。此外,RAIPAIL還進一步對字段取值范圍進行探測與擴充,并徹底解決偽靜態長字段問題。

5.3 協議狀態機分析

由于Modbus協議沒有狀態,RAIPAIL僅針對IEC104和MQTT協議狀態機進行分析,分別從新狀態探測、新狀態轉化序列和新狀態依賴等3個角度進行驗證與探測。

5.3.1 IEC104協議狀態機探測

針對IEC104協議,通過分析初始協議逆向分析結果,IEC104協議狀態機主要包括4種協議狀態,如表5所示。

表5 IEC104初始逆向結果狀態定義

基于分析初始協議逆向推斷的IEC104協議狀態機,RAIPAIL對各個協議狀態的轉化序列進行驗證與測試,并構建協議狀態轉化圖,如圖2所示。

圖2 IEC 104協議狀態機分析結果圖

結合圖2可以明顯看出,RAIPAIL能夠準確驗證IEC104協議狀態機中各種協議狀態和狀態轉換序列,同時,還能夠進一步探測出IEC104協議中的新協議狀態和新狀態轉換序列。具體結果如表6所示。

表6 IEC104協議新狀態和狀態轉化序列

5.3.2 MQTT協議狀態機探測

針對MQTT協議,通過分析初始協議逆向分析結果,MQTT協議狀態機主要包括3種協議狀態,如表7所示。

表7 MQTT初始逆向結果狀態定義

基于分析初始協議逆向推斷的MQTT協議狀態機,RAIPAIL對各個協議狀態的轉化序列進行驗證與測試,并構建協議狀態轉化圖,如圖3所示。

圖3 MQTT協議狀態機分析結果圖

結合圖3可以明顯看出,RAIPAIL能夠準確驗證MQTT協議狀態機中各種協議狀態和狀態轉換序列,同時,還能夠進一步探測出MQTT協議中的新協議狀態和新狀態轉換序列。具體結果如表8所示。

表8 MQTT協議狀態機實驗詳解

5.3.3 小 結

通過對IEC104和MQTT的協議狀態機進行分析,可發現工控協議狀態機通常較為簡單,甚至沒有狀態信息,但是由于工控系統的穩定性和可靠性要求,工控協議的報文覆蓋率相對較低,特別是一些異常狀態,導致根據流量樣本逆向的狀態機的構建往往只是完整狀態機的子集。針對這些問題,RAIPAIL不僅可以有效地驗證原有狀態機的正確性,還能夠基于初始逆向結果探測出新協議狀態和狀態轉化序列。此外,RAIPAIL還實現對工控協議的控制字段依賴的主動挖掘,增強工控協議狀態機的完備性。

6 結束語

筆者提出了一種基于主動交互式學習的未知工控協議逆向分析方法(RAIPAIL)。該方法根據不同協議字段,設計相應變異器以驗證字段語義、擴充字段取值和異常樣本類型,不僅能夠有效驗證未知工控協議逆向分析結果的準確性,還能夠有效解決因樣本多樣性不足而導致的偽靜態長字段問題;同時,根據初始逆向提取的協議狀態機,組合多種順序通信序列,與工控設備進行主動式交互通信,以探測新協議狀態、狀態轉化序列、狀態依賴的關系,能夠進一步提高逆向分析結果的完整性。因此,RAIPAIL對需要依賴協議逆向分析的入侵檢測、漏洞挖掘等網絡安全技術具有極高的應用價值。然而,RAIPAIL目前僅適用于能夠為第三方工具提供交互功能或模擬器的工控系統,并且RAIPAIL的驗證環節目前仍需人工操作。未來將針對無法為第三方工具提供交互功能或者模擬器的工控系統的協議逆向方法進行研究,并重點針對方法的驗證模塊進行改進,以減少對人工專家經驗的依賴。比如將探測響應報文與前期逆向結果自動化地進行比對,采用自動化顯示返回報文對應的樣本類型,以提高RAIPAIL的自動化程度,進而降低人工分析的難度。

猜你喜歡
狀態機工控字段
圖書館中文圖書編目外包數據質量控制分析
基于有限狀態機的交會對接飛行任務規劃方法
工控速派 一個工控技術服務的江湖
工控速浱 一個工控技術服務的江湖
熱點追蹤 工控安全低調而不失重要
基于攻擊圖的工控系統脆弱性量化方法
CNMARC304字段和314字段責任附注方式解析
無正題名文獻著錄方法評述
關于CNMARC的3--字段改革的必要性與可行性研究
FPGA設計中狀態機安全性研究
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合