工控安全入门之 Ethernet/IP
工控安全入門之 Ethernet/IP
Ethernet/IP
與 Modbus 相比,EtherNet/IP 是一個更現代化的標準協議。由工作組 ControlNet International 與 ODVA 在 20 世紀 90 年代合作設計。EtherNet/IP 是基于通用工業協議(Common Industrial Protocol,CIP)的。CIP 是一種由 ODVA 支持的開放工業協議,它被使用在諸如 DeviceNet 和 ControlNet 以及 EtherNet/IP 等串行通信協議中。美國的工控設備制造商 Rockwell/Allen-Bradley 已經圍繞 EtherNet/IP 進行了標準化,其他廠商如 Omron 也在其設備上支持了 EtherNet/IP。EtherNet/IP 已經變得越來越受歡迎,特別是在美國。盡管 EtherNet/IP 比 Modbus 更現代化,但仍然存在協議層面的安全問題。EtherNet/IP 通常通過 TCP/UDP 端口 44818 運行。此外,EtherNet/IP 還有另一個端口 TCP/UDP 端口 2222。使用這個端口的原因是 EtherNet/IP 實現了隱式和顯示兩種消息傳遞方式。顯式消息被稱為客戶端/服務器消息,而隱式消息通常被稱為 I/O 消息。
圖 5-12 Ethernet/IP分組結構
EtherNet/IP 是為了在以太網中使用 CIP 協議而進行的封裝。EtherNet/IP 的 CIP 幀封裝了命令、數據點和消息等信息。CIP 幀包括 CIP 設備配置文件層、應用層、表示層和會話層四層。數據包的其余部分是 EtherNet/IP 幀,CIP 幀通過它們在以太網上傳輸。EtherNet/IP 分組結構如圖 5-12 所示。
CIP 規范對數據包結構有很多的規定,這意味著每個使用 EtherNet/IP 的設備必須實現符合規范的命令。下面是 EtherNet/IP 首部中封裝的 CIP 幀字段:
圖 5-13 CIP字段
Command
兩字節整數,對應一個 CIP 命令。CPI 標準要求,設備必須能接收無法識別的命令字段,并處理這種異常。
Length
兩字節整數,代表數據包中數據部分的長度。對于沒有數據部分的請求報文,該字段為0。
Session Handle
會話句柄(session handle)由目標設備生成,并返回給會話的發起者。該句柄將用于后續與目標設備的通信。
Status
Status 字段存儲了目標設備執行命令返回的狀態碼。狀態碼 “0” 代表命令執行成功。所有的請求報文中,狀態碼被置為 “0”。其它的狀態碼還包括:
0x0001 無效或不受支持的命令
0x0002 目標設備資源不足,無法處理命令
0x0003 數據格式不正確或數據不正確
0x0065 接收到無效的數據長度
Sender Context
命令的發送者生成這六字節值,接收方將原封不動的返回該值。
Options
該值必須始終為 0,如果不為零,數據包將被丟棄。
Command-specific data 該字段根據接收/發送的命令進行修改。
如果請求發送方是工程師站,大多數會話中執行的第一條命令是“List Identity”命令。如下所示的數據包,命令字段是0x63,代表“List Identity”命令,上下文是“0x00006a0ebe64”。這個命令與 Modbus 功能碼 43 非常相似,可以查詢設備信息,如供應商、產品、序列號、產品代碼、設備類型和版本號等。使用在 Github 項目 pyenip 中找到的 Python 腳本ethernetip.py,你可以查詢 Ethernrt/IP 設備的信息。默認情況下,這個腳本不會解析一些響應,你需要取消腳本底部的testENIP()函數的注釋后,它才會發送和接收“List Identity”命令。在執行腳本的同時,你可以使用 Wireshark 查看請求和響應的數據包。
圖 5-14 Ethernet/IP查詢設備信息
我們在這個例子中沒有提供腳本代碼,因為它大約有 1000 行代碼。你可以通過訪問這里來獲取腳本。
設備信息泄露
流行程度:10
利用難度:8
影響面:3
威脅評分:7
Digital Bond 在項目 Redpoint 中實現了一個和 pyenip 很像的腳本,可以用來從遠程設備中獲取信息。Redpoint 腳本使用了上一節提到的“List Identity”命令字,并使用 NES 腳本來解析請求。這個腳本有一個有意思的地方,它的“Conmmand Specific Data”部分包含了一個套接字地址(ip 地址和端口號)。這是暴露的遠程設備的真實 ip 地址和端口號,即使它位于 NAT 設備之后。
圖 5-15 CompactLogix系統掃描結果
通過 Shodan 搜索( https://www.shodan.io/search?query=port%3A44818 ),我們發現大量的設備暴露的 IP 字段和實際掃描的 IP 地址不同。所以我們得出結論,大多數的 Ethernet/IP 設備部署在內部網絡中,而不是直接暴露在互聯網上。如下圖 5-15所示的是使用 nmap 掃描 CompactLogix 控制系統的掃描結果,可以看到暴露的設備 ip 和掃描 ip 不匹配,說明目標系統位于路由器或防火墻之后。
上圖顯示了一些信息,包括設備的制造商 “Rockwell”。設備的制造商在響應中是一個兩字節的制造商 ID,它映射了一組支持 Ethernet/IP 的廠商名單。但是,這個廠商名單不是公開的。我們在深入研究 Wireshark 捕獲的數據包后,發現數據包被 Wireshark 解析后,制造商 ID 被替換成了制造商名稱。這說明 Wireshark 擁有如何映射制造商ID和名稱的信息。通過對 Github 上 Wireshark 源代碼的一些搜索,我們發現了如下代碼片段,它告訴我們該如何解析制造商 ID。在解析工控協議的時候,Wireshark 常常是一個強大而好用的資源。
圖 5-17 制造商ID和制造商名稱的對應關系
使用像 “List Identity” 這樣的命令,你可以簡單的重放數據包,幾乎不用修改數據包。會話句柄將被設置為 0,意味著沒有會話生成,因為該命令只是簡單的發送命令和接收系統響應。為了進一步與設備進行通信,需要發送注冊會話命令(0x65)。這個命令會設置會話句柄 ID,這個 ID 將用于后續會話的通信。如下圖 516所示,注冊會話的請求使用標準ID“0x00000000”,目標設備返回了它生成的會話句柄“0x03A566BB”。
圖 5-16 會話句柄生成過程
Ethernet/IP 中間人攻擊
流行程度:5
利用難度:8
影響面:8
威脅評分:7
Ethernet/IP 具有和大多數工控協議相似的問題。資訊和培訓公司 Kenexis 發布了針對 Ethernet/IP 的中間人攻擊示例演示。這些示例可以在它們的 Github 項目主頁上找到( https://github.com/kenexis/PortableICS-MITM )。與 Modbus 不同,簡單的數據包重放對 Ethernet/IP 的某些指令無效。這使得攻擊變得稍微復雜了一些。然而,對于大多數攻擊者而言,只要對 Ethernet/IP 的協議稍有了解,這點困難將是微不足道的。一旦會話句柄通過協商被確定,只要通過手動改變序列號,就可以實現像之前 Modbus-vcr 工具那樣的中間人攻擊。
Ethernet/IP 高危命令字
流行程度:5
利用難度:8
影響面:8
威脅評分:7
就像 Modicon 利用功能碼 90 來終止 CPU,一些 Ethernet/IP 設備也支持類似的命令字。Digital Bind 的 Basecamp 項目中,發布了一個Metasploit模塊,可以被用來終止一個 Allen-Bradley ControlLogix 控制系統中的大量 PLC,以及其它的一些壞壞的事情,比如使以太網卡崩潰。
Digital Bond 的 Ruben Santamarta 在撰寫 Basecamp 項目的Writeup“Attacking ControlLogix”時寫道“我們發送的每個數據包必須包含會話句柄。這就是全部,然后我們 Hack 了控制器。在協議層面沒有更多的安全機制了。” [譯者注:reversemode.com 上的文檔我下載不下來,有能夠下載的朋友求分享]。Ruben 指出,只要了解 Session Handle 即可輕松攻擊 Ethernet/IP。是這個攻擊奏效的另一個關鍵是 Allen-Bradley 實現的一個命令字。Allen-Bradley 在 NOP(0x00)命令中實現了終止 CPU 的功能。
這個命令在 CPI 或 Ethernet/IP 的規范中沒有記錄,是 Allen-Bradley/Rockwell 控制器的私有實現。通過對大量設備的測試,我們發現,在一些舊的固件中,不僅 ControlLogix CPU 被終止,而且設備崩潰,需要重新啟動硬盤。對于當前的型號,PLC 必須拔下并重新插入才能再次運行。極少數情況下,PLC 需要重新編程。
我們還是堅持一貫的建議,如果你想測試你的 Ethernet/ip 設備,請只對非生產設備執行這些測試,并確保你已經被授予對設備執行 exploit 的許可,因為在設備上執行這些測試的后果是不可測的。
總結
以上是生活随笔為你收集整理的工控安全入门之 Ethernet/IP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle数据库中闪回恢复的详细分析
- 下一篇: 产品经理网站数据分析之测量问题现状(二)