朱振乾,張周晶,馬慧慧,魏黎明
(中國電子科技網絡信息安全有限公司,四川 成都 610041)
隨著工業控制系統的通用化、網絡化和智能化發展,工業控制系統信息安全形勢日漸嚴峻。一方面傳統的互聯網信息安全威脅正在向工業控制系統蔓延,另一方面針對關鍵基礎設施及其控制系統,以竊取敏感信息和破壞關鍵基礎設施運行為主要目的攻擊愈演愈烈[1]。近年來發生了一系列針對工控網絡的攻擊行為,如2010 年伊朗核設施遭遇了前所未有的嚴重攻擊,國際核能組織發現伊朗的濃縮鈾工廠的離心機不斷被破壞,報廢的數量接近伊朗濃縮鈾工廠離心機總數的1/4。這就是震驚全世界的著名的“Stuxnet(震網)”病毒武器的攻擊,從此針對工業控制系統的網絡信息安全事件引起了全世界的高度關注。震網病毒能過被感染的U 盤或移動介質進入伊朗核設施網絡。當U 盤或移動介質插入計算機時,震網病毒通過Windows 系統自動播放特性被植入伊朗核設施網絡,然后在網絡中不斷復制并感染其他設備。震網病毒在伊朗核設施網絡中尋找西門子公司的STEP7 控制軟件,并經過欺騙和控制該軟件達到破壞的目的。西門子公司的STEP7 軟件用于控制伺服馬達、電路開關和氣體液體閥門,廣泛應用于各行各業。該病毒找到西門子控制軟件后,截獲控制軟件給可編程邏輯控制設備(Programmable Logic Controller,PLC)的指令,找出并識別應用在離心機上的軟件發出虛假指令,使得離心機轉速不正常而造成設備損壞。在一系列工業信息安全事件爆發后,工信部在2011年下發了《關于加強工業控制系統信息安全管理的通知》,要求各級政府和國有大型企業切實加強工業控制系統安全管理。對于工業企業而言,工業控制信息系統安全還是一個全新的領域,在技術工具、設備設施以及人員等方面缺乏儲備,同時缺乏相關的標準和規范,因此迫切需要開展相關的基礎研究和產品開發,以支持用戶開展相關工作。Wireshark 與Nmap是網絡開發和信息安全技術人員最常用的工具之一,能從二進制報文中分析并提取有效信息,并結合報文插件或漏洞數據庫匹配相應的結果,因此廣泛應用于工控信息安全。然而,Wireshark 與Nmap是兩個分立的工具,兩者結合使用中存在一定的不便,同時在解析工業控制系統特殊的工業協議時,Wireshark 存在解析不全或不完整的情況。Nmap 原生自帶的腳本數量有限,但支持開發自定義的探測腳本進行自主漏洞挖掘。
工業控制網絡是工業控制系統中的網絡部分,是一種把工廠中各個生產流程和自動化控制系統通過各種通信設備組織起來的通信網絡。工業控制系統包括工業控制網絡和所有的工業生產設備,而工業控制網絡只側重工業控制系統中組成通信網絡的元素,包括通信節點(如數據采集與監控系統、分布式控制系統、可編程控制器、遠程終端以及人機交互界面設備等)、通信網絡(包括現場總線、以太網以及各類無線通信網絡等)以及的通信協議(包括Modbus、Profibus 等)。企業生產網部署的工業控制系統一般包括4 個層次,分別是現場設備層、現場控制層、過程監控層和生產執行層[2]。
工業控制系統所在的機構或單位同時建立了與外部網絡相連的生產信息網,使用戶可以通過網絡查詢信息。現階段,工業控制系統環境已經擺脫以往信息孤島的模式,與IT 網絡相連接,實現了大范圍的協同控制,以提高生產效率。同時,機構或單位通過網絡與分支機構、合作伙伴、外網用戶的聯系越來越多,這時內部網絡/工控網絡的安全性將受到考驗。網絡上的不法分子不斷尋找網絡上的漏洞,企圖潛入內部網絡與工控網絡。一旦內部網絡或工控網絡被人攻破,一些機密的資料可能會被盜,將破壞網絡和工業生產環境。
當前工業控制系統安全面臨嚴峻威脅,需要對工業控制系統網絡進行安全監測,發現工業控制系統網絡內部的安全威脅和存在的漏洞,從而采取相關的防護措施或修復相關漏洞,確保工業控制系統的設備和數據的安全。
通過研究工業控制系統安全監測技術,形成對工業控制系統的重點區域、重點企業、重點平臺及重點設備的安全監測能力。通過采集工業控制系統網絡流量,對物理地址、工控協議指紋、報文方向以及協議特征等進行研究分析,識別資產的類別、廠商以及固件版本等信息,進一步識別資產可能存在的已知漏洞信息。需聯合與資產關聯的入侵告警、審計告警和白名單基線告警多維信息,對資產風險等級做出綜合評估[3]。
對工業協議做指令級深度解析,是監測系統實現資產識別、入侵檢測、創建基線以及監測與審計的技術基礎,主要分析技術的以下幾個層級。
(1)針對工業控制系統特有的工業協議(如MODBUS、S7、FINS 以及GE 等),通過規格識別、逆向分析等手段,厘清報文特征與業務操作的內在關系。
(2)結合工業控制系統中各作業單元網絡流量數據與業務數據,針對不同的工控網絡安全與業務安全異常場景,選取隨機森林、決策樹、K-means、神經網絡等機器學習或深度學習算法或混合算法,學習生成工控系統安全異常檢測模型。
(3)采集工業控制系統各作業單元網絡流量數據,通過工控協議深度解析技術與會話還原技術,對網絡流量數據中的網絡連接、工控指令、重要業務以及通信方向等關鍵信息生成工業控制系統安全行為基線,實現對偏離安全行為基線的異常行為的實時檢測。
2.2.1 工業協議網絡報文分析
Wireshark(前稱Ethereal)是一個網絡抓包分析軟件。網絡抓包分析軟件的功能是抓取網絡報文,并盡可能顯示最詳細的網絡報文信息。Wireshark 使用WinPCAP 作為接口,直接與網卡進行數據報文交換。網絡管理員使用Wireshark 檢測網絡問題,網絡安全工程師使用Wireshark 檢查資訊安全相關問題,開發者使用Wireshark 為新的通信協定除錯,普通使用者使用Wireshark 學習網絡協定的相關知識[4]。
2.2.2 工業網絡設備發現與漏洞挖掘
Nmap是一個免費開放的網絡掃描和嗅探工具,也叫網絡映射器(Network Mapper)。它由3 個基本功能:一是探測一組主機是否在線:二是掃描主機端口嗅探所提供的網絡服務:三是可以推斷主機所用的操作系統。通常網絡管理員利用Nmap 評估網絡系統安全,而黑客則用其掃描網絡,通過向遠程主機發送探測數據包獲取主機的響應,并根據主機的端口開放情況得到網絡的安全狀況,尋找存在漏洞的目標主機,實施下一步的攻擊[5]。
Nmap 掃描工具支持擴展,因此開發者可以自主開發探測腳本。通過自主開發的腳本,開發者可以對工業控制系統中的工控設備進行掃描識別,從而發現工控設備的相關信息,如廠家、型號以及版本等,再結合相關漏洞庫,可以快速匹配工控設備的相關漏洞。對尚未被挖掘的漏洞,結合Wireshark對工業協議報文的分析,可以通過Nmap 編寫腳本直接進行探測,如拒絕服務、緩沖區溢出以及弱管理員密碼等漏洞。Nmap 是一個自主挖掘工業漏洞十分有用的工具。
Wireshark 與Nmap 在工業協議分析與工業漏洞挖掘中是強有力的互補,而實際中兩個軟件是分立的,導致其使用效率偏低。在工業控制系統的應用中,Wireshark軟件對工業協議支持不完整或不全面,而Nmap 自帶漏洞探測腳本有限,但其支持自主開發針對工業控制系統的腳本。
Wireshark 源碼軟件組成,如圖1 所示。
圖1 中,Core 為核心調度模塊,包括報文的捕獲(Capture)、報文分析(Epan)、報文讀取與存儲(Wiretap)、界面交互與呈現(GTK/Qt),具體模塊的具體功能如表1 所示。
Nmap的執行流程采用流水式的順序執行方法,執行的入口在nmap_main()處。Nmap 的執行流程可以分為準備階段、執行階段和結束階段3 個階段。

表1 Wireshark 各模塊功能
準備階段解析掃描輸入參數,根據輸入參數初始化系統資源、初始掃描IP 地址與端口、初始化腳本執行環境,形為掃描任務列表。
執行階段根據準備階段產生的任務列表,順序執行相關任務,直到所有的任務完成后退出主循環。
結束階段對所有掃描任務進行統計與分析,然后打印出掃描的最終結果,并釋放分配的資源。
WireNmap 集成了自主研發的報文分析插件與掃描探測腳本,為工業控制系統漏洞分析提供更深層次的分析與漏洞挖掘能力。
WireNmap 軟件集成了原生的Wireshark 與Nmap 的所有功能,且在此基礎上WireNmap 實現了IP 資產統計,即對網絡中發現的所有IP 地址以列表的形式進行呈現。該IP 資產列表可直接點擊進行Nmap 掃描與分析,有利于進一步獲取更深層次的信息,同時實現了Wireshark 與Nmap 的無縫銜接。
WireNmap 集成了自主研發的報文解析插件,如S7 協議解析插件、OPC 協議TAG 深度解析插件等。
在工業環境中,S7 Communication 協議(后文簡稱為S7)和OPC 都被廣泛應用于石油、鋼鐵和制造等行業。S7 協議是一種私有協議,在西門子生產制造的設備和系統中主要用于PLC 之間的數據交互以及SCADA 系統對PLC 的管理、診斷與監控。OPC 已經成為工控界的一種標準,目前世界上著名的自動化廠商都有應用該標準。針對S7 和OPC,WireNmap 在Wireshark 基礎上進行了二次開發,增加了對S7 和OPC 的解析深度。
S7 協議通過RFC1006 協議的形式建立TCP/IP的ISO 七層模型下的S7 連接。它的通信過程包括TCP 連接進行3 次握手建立TCP 連接、ISO 層建立連接、S7 協議發出連接請求并建立連接以及S7 協議進行設備的數值讀寫4 個步驟。S7 PDU 封裝于ISO 層內,因此在S7 前會增加TPKT 固定幀頭和COTP 層幀頭,結構如圖2 所示。

圖2 S7 協議報文結構
TPKT 幀頭長度為4 Byte。第1 字節表示TPKT版本號,第2 字節為保留字段,第3 字節和第4 字節表示數據長度。COTP 幀類型有10 種,在S7 協議報文中常見的有0xe0(請求連接)、0xd0(請求確認)和0xf0(PDU 數據傳輸)共3 種,僅在ISO層建立連接完成。進行數據傳輸時,即PDU 類型為0xf0(PDU 數據傳輸)時搭載S7 協議報文,結構如圖2 所示。圖2 中,COTP 幀頭長度為3 Byte,第1 字節表示長度,第2 字節表示PDU 類型,第3字節低7 位表示TPDU 編號,第3 字節第8 位表示是否為最后一個單元。最后一部分是PDU data 搭載S7 協議。S7 協議分由固定頭部、參數區和數據區3個部分組成。從圖2 可知,在幀頭類型為Userdata 時,數據區仍有一串無法解析的數據,需針對這部分數據展開進一步解析。
為得到圖2 中數據段未被解析的結果,將未解析部分分為未知字段和已知字段兩部分。未知字段為暫時不清楚的不可解析部分,已知字段為可通過二次開發進行解析的部分。已知字段中包含數據點個數、地址段和值段3 部分,可采用以下方法獲取每個字段:
(1)獲取未知字段和已知字段長度,第1 字節和第2 字節為未知字段長度,第3 字節和第4 字節為已知字段長度,并確保兩個長度之和與余下長度之和相等;
(2)獲取已知字段的數據點個數,已知字段數據點個數占2 Byte;
(3)拆分地址段,地址段分為空間類型和地址兩個部分,空間類型取剩余第1 個字節的最高位,根據表2 得到空間類型,地址為后續的4 Byte。

表2 空間類型對照表
拆分值段,值段前3 個字節跳過,取值段第4字節為值的長度。
S7 原生Wireshark 未解析報文,如圖3 所示。以圖3 中數據段未解析的十六進制部分拆分為例進行方法說明,如圖4 所示。

圖3 S7 原生Wireshark 未解析報文

圖4 S7 協議未解析段數據結構
(1)第1 字節和第2 字節為第一區字段的長度20(0x0014),第3 字節和第4 字節為第二區字段的長度14(0x000e),點表數據在第二區;
(2)從第5 字節起為第一區字段,第一區字段長度為20 個字節,跳過20 個字節;
(3)從25 字節開始,25、26 字節為數據點個數,十六進制表達為0x0001,轉換為十進制為1,即后續數據點個數只有1 個,則地址段和值段分別只有一個點;
(4)讀取地址段的空間類型,取0x22&0xf0,根據表2 得到空間類型;
(5)地址值按照圖中標識部分為0x00000206,換算成十進制為518;
(6)讀取值段,值段的第3 字節即圖4 中的0x02 為值的長度,換算為十進制,值的長度為2;
(7)讀取值為0x2acd。
根據該方法,圖3 中的未解析字段在經過二次開發后結果如圖5 所示,可以得到點的個數、地址和值。

圖5 S7 協議二次解析后前后對比
可見,經過開發后,S7 插件可以讀取空間類型、地址以及數值等更多信息。在實際工業控制系統中,這些信息可以對應實際的溫度、壓力以及轉速等信息,因此可以更好地對工業控制系統進行指令級分析。
OPC 是基于微軟組件對象COM/DCOM/COM+等技術基礎的一種接口標準,在標準下能夠有效的進行信息集成和數據交換。在工業控制系統中,OPC 協議規范中主要應用的是OPC DA 規范。在OPC DA 規范中,OPC 由OPC 服務器中包含OPC 組,組內有一個或多個對象,其結構如圖6 所示。

圖6 OPC 對象結構組成
在OPC DA 規范中,IOPCItemMgt 類型報文在客戶端執行添加、刪除對象時,協商客戶端和服務器對象的句柄,在協商完成后,后續通信都通過句柄對該對象執行修改。由圖7 可知,Wireshark 并未對句柄進行解析。
本文通過以下方法可以獲取句柄和句柄相關的對象名稱。
(1)確認報文類型為IOPCItemMgt,并獲取對象個數,取未解析內容的第一個十六進制值;
(2)通過報文中的固定位獲取報文中的對象個數;
(3)handle 長度固定,則獲取相對固定位置的handle 值;
(4)獲取每個handle 對應名稱。
以圖8 為例來進行方法說明。
(1)確認報文類型為IOPCItemMgt,將內容移動到示例中stub data 的起始位置,以stub data 顯示的0x05 為第1 字節;
(2)向后移動32 位為OPC 對象個數,如圖6所示該報文中對象個數為1;
(3)句柄隊列是一個32 位數值,起始位置從第52 字節起,如圖6 所示,句柄為0x909fe400;
(4)句柄隊列中,每隔28 字節為一個句柄值讀取點,本文中只有1 個對象,則只有一個句柄值,則直接跳過28 字節;
(5)再跳過空白16 個字節,在第91 字節獲取對象名稱長度為0x0e000000,由于是小端的十六進制值,換算成十進制為14,則對象的名稱長度為14;
(6)跳過12 個無關字節,以ASCII 碼方式獲得名稱,在圖7 中名稱為New Alias 1.1。
(7)得到的OPC 句柄和對象名稱與未進行二次開發的OPC 報文對比圖,如圖8 所示。

圖7 OPC 原生Wireshark 未解析報文示例

圖8 OPC 二次開發前后對比
由圖8 可知,經過開發后的WireNmap 軟件可以獲取OPC 協議的TAG 名字、數據類型以及數值等更多信息。在實際的工業控制系統中,該信息可以與實際物理量進行轉換,從而獲取更多的數量信息。
WireNmap 同時集成了自主研發的漏洞掃描腳本插件,如NSE 腳本。
一個完整的NSE 腳本包括描述性字段、行腳本的rule 以及實際腳本指令的action 等多個模塊,如圖9 所示。它的各個模塊的主要的功能如表3所示。

圖9 NSE 腳本組成

表3 NSE 腳本各個模塊的主要的功能
以國家信息安全漏洞共享平臺的CVE-2017-12617 為例,該漏洞稱之為Apache Tomcat 遠程代碼執行漏洞。當Apache Tomcat 服務器中的http 進行put 請求時,可以遠程將java的jsp格式代碼上傳至服務器端,進而達到在服務器上任意執行代碼的目的。此漏洞屬于高危漏洞,對服務器的影響很大,因此探測發現該漏洞并且采取合適的修補措施十分有意義。
5.2.1 腳本準備工作
腳本準備工作包括一些包的引用(如http、Nmap、stdnse 等等)、description 部分以及nsedoc 部分,還有腳本的作者、種類以及license。這部分主要是明確腳本的一些細節,為下面的腳本主體內容做一些鋪墊。其中,description 從CVE 中摘錄而來,可以非常好地幫助理解腳本的原理以及運行機制,具體如圖10 所示。

圖10 NSE 腳本首部
5.2.2 腳本portrule
這部分主要涉及一些特定的端口以及端口上的服務,在對服務器的訪問中涉及到http,因此端口的選取是幾個有關http 服務的端口,具體如下:
portrule=shortport.port_or_service({80,8080},”http”)
一般來說,在Apache Tomcat 服務器安裝時會有默認的運行端口,端口一般為8080,有時會存在該端口被其他應用占用的情況,這時服務器啟動后不能正常工作,可以在Apache Tomcat 的文件中進行默認端口的修改。
5.2.3 腳本action
這是整個腳本的核心部分,利用put 請求發送一個jsp 格式的文件,之后判斷服務器對http 的put請求返回的響應碼,若為201,說明此時服務器已經接受請求,對文件名以及一些細節輸出即可,如圖11 所示。查看該腳本在Nmap 中的運行結果,如圖12 所示。

圖11 NSE 腳本主體

圖12 NSE 腳本運行結果
明顯可以看到,文件的內容是開始時腳本中寫好的,充分說明該版本的服務器存在巨大的漏洞。當put 請求成功時,可以上傳任意的jsp 格式代碼至服務器端,并且可以在服務器上運行。當打開存放文件的Apache Tomcat 目錄時,可以看到chen.jsp位列其中。
針對發現的漏洞,如何規避或修復此漏洞,可以簡單總結為兩個方面。一方面,對Apache Tomcat服務器進行升級,只要選取合適的版本就可以避免此漏洞。另一方面,訪問Apache Tomcat 文件中的conf 文件夾找到web.xml,修改其中的參數“readonly”值為true,拒絕文件寫入。
工業控制系統中的安全威脅分析中,常有的工具有Wireshark 與Nmap。Wireshark 能抓取二進制報文,Nmap 能探測設備存活并對設備進行深度掃描,并能發現各種類型網絡設備的漏洞。使用中通常先使用Wireshark 進行分析,再通過Nmap 進行深度探測,然后根據兩者結果進行聯合分析,從而全面分析工業控制系統的安全威脅。WireNmap 集成的Wireshark 與Nmap 的功能,擴展了報文分析插件與漏洞掃描插件,同時將兩者的安裝與使用有效連接起來。基于WireNmap 的工業控制安全分析技術的基本步驟如下:
(1)抓包獲取網絡報文、相關資產列表及IP網段;
(2)根據資產列表及其通信報文,初步判斷其資產類型;
(3)通過PING 掃描和端口掃描,確定網絡中所有存活資產列表;
(4)對所有資產進行操作系統掃描,同時獲取廠商與操作系統信息;
(5)資產列表中確定重點關注資產,并對其進行指令級分析;
(6)對重點資產進行報文篩選,并根據報文格式編寫相應的探測腳本;
(7)反復修改相關報文,對相關設備進行非法修改或溢出修改,挖掘相關漏洞。
具體來說,調用WireNmap 工具進行抓包和報文分析時可直接獲取網絡中的IP 資產清單,如圖13 所示。

圖13 WireNmap 資產管理界面
由圖13 可以得出網絡中的IP 段與資產清單,如表4 所示。

表4 WireNmap 報文分析與IP 資產對應關系
圖13 中右側框列出了當前所有的IP 資產清單。點擊對應的IP 后,利用列舉出來的與該IP 地址相關的所有通信報文,可以直接分析該IP 的流量,查看是否存在異常流量,同時結合已經開發的插件(如S7、OPC 等),更好地對工業協議進行深度分析。圖13 中雙擊右側IP 地址,啟動如圖14 所示的界面。對重點關注的資產IP 進行深度探測,可以得出如表5 所示的資產詳細信息。

圖14 WireNmap 資產掃描與深度探測

表5 資產詳細信息
本文提出了一種基于Wireshark 與Nmap 的工業控制系統安全聯合分析方法,擴展了Wireshark的分析插件與Nmap 的掃描插件,同時提出了將Wireshark 與Nmap 合并后的聯合分析軟件WireNmap。實際應用證明,WireNmap 能更深層次解析工業協議,如S7、OPC 協議,同時通過開發腳本能發現更多的漏洞,如CVE-2017-12617 等。面對以竊取敏感信息和破壞關鍵基礎設施運行為主要目的工業控制系統網絡攻擊,所提方法能更快速、全方位地適應工業控制系統安全威脅的需要。