西门子S7comm-plus通信过程及重放攻击分析
一、概述
西門子PLC廣泛應用于工業控制系統。本文主要利用手上S7-1200 V3.0.2 固件版本的PLC和TIA13等環境進行S7comm-plus加密協議初步分析及防重放攻擊分析,本文章只做交流學習使用,禁止應用于非法用途,歡迎各路大神進行交流,共同學習進步。
二、西門子PLC介紹
西門子PLC廣泛應用于工業控制系統。西門子控制器包括S7-200、S7-300、S7-400、S7-1200以及S7-1500版本的西門子PLC,
S7-200、S7-300、S7-400系列的PLC采用早期的西門子私有協議S7comm進行通信。S7-1200/1500系列固件版本為V3.0以下的PLC采用西門子新一代的S7comm-Plus協議進行通信,該協議采用了一些特殊編碼規范。S7-1200/1500系列固件版本為V3.0以上,采用了最新的S7comm-Plus協議,S7comm-plus協議引入了會話ID來防止重放攻擊。
查看S7 plc系列有哪些型號及對應的固件版本,可以參考下圖。
三、協議分析
3.1協議結構
S7Comm-plus以太網協議基于OSI模型如下:
通過抓包分析和wireshark源碼解析,可以知道S7Comm-plus協議的幀結構大致由頭部、數據域、和尾部組成,頭部和尾部是固定的,而數據域對不同的幀結構和內容均有很大的差異。幀結構示意圖如下圖所示:
3.2 頭部和尾部分析
Header和Trailer的組成是一樣的,包含協議號、PDU類型和數據長度信息,其結構如下圖所示:
其中頭部和尾部的結構一致。Protocol id為一個字節、 PDU type 為一個字節Length為雙字節。PDU type定義了該幀的類型。
3.3 數據域分析
Data域是幀結構中最復雜也是變化最多的區域,通過分析可以將Data域分為Integrity part 、D_header和Data三個部分。具體結構如下圖所示:
(1)D_Head
當PDU type為0×01和0×02,數據包中沒有32位 Integrity part,當pdu type為0×03,數據包中有32位Integrity part;在數據頭中有兩處reseved和一處unknown部分,對于不同的幀其值是不一樣的,從wireshark抓包數據分析,其值分布如下所示:
(2)Data
data部分的結構、內容及格式與PDU type和opcode有關,Data部分情況種類多、較為復雜,詳細分析可以閱讀wireshark s7comm-plus協議解析代碼。
四、防重放攻擊分析
4.1 環境安裝
(1) PC1(192.168.10.101):安裝博圖軟件TIA13,用于連接S71200 plc設備,并進行啟停PLC CPU控制,主要用于抓包分析,博圖軟件添加正確的PLC設備、并配置好PLC網絡地址,確保能連接成功,如下所示:
(2)PLC (192.168.10.53):6ES7 214-1AG31-0xB0 V3.0.2,如下所示:
(3) pc2 (192.168.10.100): 該主機主要進行重放攻擊實驗。
4.2 抓包分析
(1)離線模式下,點擊博圖軟件stop 和 start 按鈕,進行抓包分析。
返回session id,以后每次請求均要帶上該session id,達到防止重放攻擊目的。
Stop 和 start cpu 啟停包長的均為121字節,操作成功響應數據包為84字節
信息泄露,不知道為什么這么設計,需要返回設備信息。
(2)session id 計算方式,s7comm_plus[24]+0×80, s7comm_plus數據包第24位+0×80,如下圖所示:
(3)stop cpu 指令分析,主要是AddressList和ValueList, 值為00000034019077000801, 將 值修改為00000034019077000803 則為 start cpu 指令
五、實施重放攻擊
經過上面分析,只要獲取到session id,并在每次請求plc的時候,添加上session id即可繞過S7comm-plus防重放攻擊,編寫如下驗證代碼,并抓包分析,觀察現象:
運行以上代碼,重放攻擊成功,當進行stop時,plc RUN/STOP 燈顯示黃色,當進行start cpu時候,RUN/STOP 指示燈顯示綠色,如下所示:
重放攻擊抓包分析如下所示:
六、總結分析
在實驗過程中還發現兩處問題,當完成COTP 連接后發送的第一個S7comm-plus CreateObject 數據包可以獲取到plc的相關信息,造成信息泄露,可以推出cpu型號及固件版本,攻擊者可以利用這些信息開展進一步攻擊。另外,當TIA13軟件在線連接上PLC,啟停腳本失效,應該是PLC只允許一個工程師站客戶端進行連接的原因。
相關資料文檔如下:
1、工控資產嗅探與分析(S7 PLC)
https://www.freebuf.com/articles/ics-articles/209786.html
2、西門子S7Comm協議分析
https://laucyun.com/3aa43ada8cfbd7eca51304b0c305b523.html#6-2-1
3、西門子S7-1200 CPU控制分析:
https://github.com/dark-lbp/isf
4、西門子S7通信過程及重放攻擊分析:
https://www.freebuf.com/articles/ics-articles/212283.html#
5、刺穿S7CommPlus協議安全保護機制的長矛
https://www.freebuf.com/column/197267.html
6、S7comm_plus wireshark解析代碼
https://github.com/QingChenHT/S7COMMM-Plus
總結
以上是生活随笔為你收集整理的西门子S7comm-plus通信过程及重放攻击分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux chroot命令
- 下一篇: Redis禁用危险命令