2 工控資產指紋提取及網絡發現
2.1 工控資產識別
Shodan是目前最流行的網絡空間搜索引擎,它掃描HTTP,FTP,SSH,Telnet,SNMPand SIP等協議,通過分析客戶端與服務端交互過程中的信息,識別全網設備。利用Shodan使用特定的語法即可搜索出海量的物聯網設備、攝像頭、路由器、打印機、SCADA系統、PLC等。還可以用端口掃描工具Nmap。Nmap,即NetworkMapper,是一款開源免費的網絡發現(NetworkDiscovery)和安全審計(Security Auditing)工具。Nmap最初是由Fyodor在1997年開始創建的。隨后在開源社區眾多的志愿者參與下,該工具逐漸成為非常受歡迎的安全必備工具之一。此外,還可以用網絡嗅探工具wireshark抓取并分析工業協議。
2.2 工控資產指紋提取
ICT,即信息與通信技術(informationandcommunicationstechnology)。在該領域,指紋識別是一種使用不同信息來描述網絡上運行的設備或軟件的技術,大多用于遠程識別設備的硬件、操作系統、正在運行的軟件和其他信息。ICT技術已被廣泛用于指紋識別系統。攻擊者掃描網絡獲取設備指紋來關聯漏洞入侵系統,而防御者則使用設備指紋來發現系統漏洞并檢測系統網絡異常。在工業控制系統(ICS)中,指紋識別技術還用于查找ICS系統中的漏洞并檢測攻擊行為。
指紋提取有主動和被動兩種方法。主動指紋提取需要工具主動掃描網絡系統以獲得信息。主動掃描識別是指收集生成指紋所需的所有信息,但是主動識別不是在任何時候都起作用,主動掃描更有可能使網絡繁忙并且容易被檢測出來。
由于被動識別方法對ICS的干擾小且自動化程度高,在工業控制領域更容易被接受。研究人員還加大了對被動識別的投入。雖然有一些成熟的基于TCP /IP協議棧的被動識別工具,但是為了避免干擾正常的工業生產,研究人員更傾向于使用網絡流量特征分析方法。就目前的研究環境而言,基于網絡流量特征的被動識別方法在通用性和準確性方面還有待提高。
3 工控協議分析及模糊測試
3.1 Modbus協議
Modbus常見的類型包括:ASCII、RTU、TCP標準的Modicon控制器使用RS232C實現串行的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊采用Master/Slave方式,Master端發出數據請求消息,Slave端接收到正確消息后就可以發送數據到Master端以響應請求;Master端也可以直接發消息修改Slave端的數據,實現雙向讀寫。Modbus是一種應用層協議,它定義了與基礎網絡無關的數據單元(ADU),可以在以太網(TCP/IP)或串行鏈路上(RS232、RS485等)進行通信(以太網ADU和串行ADU略有不同)。在串行鏈路的主從通信中,Modbus主設備可以連接一個或N(最大為247)個從設備,主從設備之間的通信包括單播模式和廣播模式。
3.2 S7協議
西門子設備使用多種不同現場總線協議,例如:MPI、Profibus、IE、Profinet等。Profinet用于將PLC連接到I/O模塊,而不是設備的管理協議。S7以太網通信協議,主要用于將PLC連接到PC站(PG/PC - PLC 通信)。
S7通信支持兩種方式,一是基于客戶端(Client)/服務器(Server)的單邊通信,二是基于伙伴(Partner)/伙伴(Partner)的雙邊通信。客戶端(Client)/服務器(Server)模式是最常用的通信方式,也稱作S7單邊通信。在該模式中,只需要在客戶端一側進行配置和編程;服務器一側只需要準備好需要被訪問的數據,不需要任何編程(服務器的“服務”功能是硬件提供的,不需要用戶軟件的任何設置)。在S7通信中客戶端是是資源的索取者,而服務器則是資源的提供者。服務器(Server)通常是S7-PLC的CPU,它的資源就是其內部的變量/數據等。客戶端通過S7通信協議,對服務器的數據進行讀取或寫入的操作。
3.3 工業協議模糊測試
模糊測試(Fuzzing)的定義:向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。工控協議模糊測試思想如圖1所示,模糊測試方法如圖2所示。
圖1 工控協議Fuzzing思想
圖2 模糊測試方法分類
工業控制網絡協議的模糊測試通過構造畸形數據包,并將畸形數據包發送給被測工控目標,從而測試工業控制網絡協議的安全性。流程圖如圖3所示。
圖3 工業控制網絡協議安全分析方法流程圖
4 PLC常見漏洞挖掘方法
(1)端口動態測試
首先,使用Nmap進行端口掃描,確定端口服務。其次,開始端口動態測試-FTP:使用自己常用的TOP字典對服務進行弱口令嘗試。部分工控廠商會使用自己的公司名、協議、官網地址等作為ICS設備的密碼。最后,進行端口動態測試-Telnet:在獲取到Telnet密碼信息后,結合剛才獲取的FTP賬號信息,提取RTU設備固件信息,進行RTU固件設備分析。
(2)通信協議重放攻擊
重放攻擊(Replay Attacks)又稱重播攻擊、回放攻擊,是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用于身份認證過程,破壞認證的正確性。重放攻擊可以由發起者,也可以由攔截并重發該數據的敵方進行。攻擊者利用網絡監聽或者其他方式盜取認證憑據,之后再把它重新發給認證服務器。
針對工控軟硬件協議重放關注重點:數據寫入命令(Write Var)、程序塊的刪除與下載(Download/Delet Block)、CPU停止與冷熱啟動(PLC Control)、數據恢復出廠設置(PLCControl)。重放攻擊成功與否在于是否存在時序、是否有校驗、是否有加密。
(3)工控協議模糊測試
工控協議模糊測試的目的是測試工業控制網絡協議實現的健壯性,它是采用構造畸形數據包,將畸形數據包發送給被測工控目標,從而測試被測工業控制網絡協議的安全性,是尋找服務端漏洞和遠程利用漏洞的必要手段,也是挖掘PLC、SCADA漏洞的必要手段。
(4)文件格式模糊測試
文件格式模糊測試是針對文件處理軟件進行模糊安全測試,根據處理文件類型,文件處理軟件被區分為:圖文處理軟件——Microsoft Office、媒體處理軟件——音樂視頻播放軟件、其它文件處理型軟件——專用文件處理軟件如WinRAR。無論哪種類型的文件處理軟件,都將軟件處理的文件類型稱為文檔文件,即待處理的文件。例如:Word程序處理的文檔文件就是doc類型的文件,doc文檔中包含各種各樣的文字或者圖片信息。它是尋找本地利用漏洞的必要手段。
文檔文件在保存數據信息時,往往采用特殊的編碼格式,這些編碼格式一般都采用非文本形式,即文檔保存的數據不是明文格式,以doc文檔文件為例,用記事本打開一個doc文檔,會發現全部是亂碼。
(5)文件劫持——DLL劫持
通常當一個可執行文件運行時,加載器將可執行模塊映射到進程的地址空間中,加載器分析可執行模塊的輸入表,并設法找出任何需要的DLL,將它們映射到進程的地址空間中。由于輸入表中只包含DLL名而沒有它的路徑名,因此加載程序必須在磁盤上搜索DLL文件。首先會嘗試從當前程序所在的目錄加載DLL,如果未找到,則在Windows系統目錄中查找,最后是在環境變量中列出的各個目錄下查找。利用這個特點,先偽造一個系統同名的DLL,提供同樣的輸出表,每個輸出函數轉向真正的系統DLL。程序調用系統DLL時會先調用當前目錄下偽造的DLL,完成相關功能后,再跳到系統DLL同名函數里執行。這個過程形象地描述就是系統DLL被“劫持”了。
5 漏洞利用腳本編寫
編程語言可選用Python,Python是一種解釋型的、面向對象的、帶有動態語義的高級程序設計語言。
在IDE方面可選擇PyCharm。它是一種PythonIDE,帶有一整套可以幫助用戶在使用Python語言開發時提高效率的工具,比如調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供了一些高級功能,以支持Django框架下的專業Web開發。
通訊庫可選擇低級別的網絡服務支持基本的Socket,它提供了標準的BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。圖4為程序實現S7通信,圖5為Pyshark分析流量。
圖4 程序實現S7通訊
圖5 Pyshark分析流量
6 工業網絡風險驗證以及工業控制系統安全攻防技巧
6.1 風險驗證
風險驗證工具分為五個類別:信息收集工具如Shodan、Zmap、Nmap;安全測試工具如系統漏洞評估Nessus/OpenVAS、Web漏洞評估AWVS、開源模糊測試框架Peach Fuzzer;安全分析工具Wireshark;漏洞利用工具如滲透測試框架Metasploit Framework;其他工具如TCP/UDP調試工具、TCP/UDP數據包發送工具、Hping-TCP/IP數據包生成工具等。
那么如何使用這些工具?比如在信息收集中,利用Shodan使用特定的語法即可搜索出海量的物聯網設備、攝像頭、路由器、打印機、SCADA系統、PLC等。Shodan主要收集Web服務器以及FTP、SSH、Telnet、SNMP、IMAP、SIP、實時流協議等常見應用服務超過300個TCP/UDP網絡端口的服務Banner標識,使用者通過匹配端口和服務的特征關鍵字即可搜索到和特征相似的全球聯網設備。
在什么情況下會用ZMap?當在172.16.0.0/16,192.168.0.0/16,甚至是10.0.0.0/8這種較大規模網絡進行安全評估時,使用Nmap的速率將極大降低測試效率,使用ZMap將可以快速在大中規模網絡環境內評估指定工控端口的開放情況。
其他工具的使用也同樣需要因事制宜,靈活運用。
6.2 測試方法思路
在工業控制系統中,滲透測試主要分為以下幾步:滲透應用業務系統、內網整體資產搜集、內網Web服務滲透攻擊、內網工控系統識別、內網工控系統風險分析、內網工控系統權限獲取。如圖6所示。
圖6 工控滲透測試流程
6.3 防護手段
(1)《工業控制系統信息安全防護指南》中涉及的防護技術
指南中涉及的技術大致可分為四個方面:主機安全防護技術、網絡安全防護技術、設備安全防護技術、數據安全防護技術。如表1所示。
表1 《指南》中涉及的防護技術
(2)主機安全防護
8 結語
工業控制系統信息安全事關國計民生,保障系統信息安全是開展工業建設的堅實基礎。針對不同的工業控制系統,采取適當的滲透測試方案,實行恰當的安全防護措施,才能確保各行業網絡的安全可靠。
作者簡介
李林楓(1996-),男,湖南常德人,工程師,現就職于中國電子技術標準化研究院網絡安全研究中心,主要研究方向為工業信息安全。
黃晶晶(1985- ),女,安徽合肥人,高級工程師,博士,現就職于中國電子技術標準化研究院網絡安全研究中心,主要研究方向為工業信息安全。
李 琳(1983- ),男,山東濟南人,高級工程師,博士,現就職于中國電子技術標準化研究院網絡安全研究中心,任工業控制系統安全標準和測評工業和信息化部重點實驗室技術總監,主要研究方向為工業信息安全、物聯網安全、社交網絡數據分析等。
參考文獻:
[1] 周偉平, 等. 面向工業控制系統的滲透測試工具研究[J]. 計算機工程, 2019, (08) : 92 - 101.
[2] 夏冀, 等. 工業控制系統信息安全風險評估方法研究[J]. 自動化博覽, 2019, (S2) : 58 - 60.
[3] 甘俊杰, 等. 石化、冶金、電力、軌交等行業工業控制系統信息安全隱患分析[J]. 自動化博覽, 2018, (S2) : 50 - 53
摘自《工業控制系統信息安全專刊(第七輯)》