SIEMENS安徽省合肥市西門子(授權)中國總代理-西門子華東地區一級總代理商
| 更新時間 2024-11-01 08:50:00 價格 請來電詢價 聯系電話 15344432716 聯系手機 15386422716 聯系人 楊本剛 立即詢價 |
西門子PLC廣泛運用在各行業的工業控制系統上,比如鋼鐵、石油、化工、電力、建材、機械制造、汽車、輕紡、交通運輸、環保及文化娛樂等行業,其安全性直接關乎國家民生安全。
2019 BlackHat USA會議上,安全研究員Sara Bitan指出西門子PLCZui新的通信協議S7Comm-Plus存在安全問題。為此,啟明星辰ADLab對相關漏洞進行研究,并在西門子S7-1500設備上復現了攻擊效果。
2.西門子PLC協議
西門子PLC包括S7-200、S7-300、S7-400、S7-1200以及S7-1500等多個系列。S7-200/300/400系列PLC采用早期的西門子私有協議S7comm進行通信,S7-1200/1500系列PLC采用西門子S7Comm-Plus協議進行通信。
S7Comm-Plus協議在S7comm基礎上引入了密鑰保護機制,以對抗會話劫持、重放攻擊和中間人攻擊等。TIA與PLC交互過程可分為以下4個階段:
(1)TCP Connection
(2)COTP Connection
(3)S7Comm-Plus Connection,即四次握手密鑰認證階段
(4)S7Comm-Plus Function,功能碼執行階段。
圖1 S7Comm-Plus協議交互流程
密鑰認證成功后方可進入功能碼執行階段,圖2為四次握手認證具體流程。
圖2 四次握手認證
(1)TIA向PLC發送M1開啟一個新的會話。
(2)PLC將返回給TIA一個響應包M2,M2包含 PLC固件版本和隨機數ServerSessionChallenge,長度20個字節。
圖3 M2認證數據包
(3)TIA收到M2后,將向PLC發送M3,M3中包含SecurityKeyEncryptedKey(圖4中紅色框所示)。其中,Magic字段為0xfee1dead,長度180字節。SecurityKeyEncryptedKey里包含3個關鍵的加密字段(圖4中藍色框所示)。
圖4 M3認證數據包
(4)PLC收到M3后,進行密鑰認證。若認證成功,向TIA回復M4數據包。
四次握手認證完成后,TIA向PLC發送功能碼數據包,功能碼數據包中包含IntergrityPart字段,如圖5所示。PLC收到功能碼數據包后,首先校驗IntergrityPart字段,若校驗通過,執行相應功能碼。
圖5 stop功能碼數據包
3.算法分析
雖然主機TIA與PLC之間的認證引入了非對稱加密算法,但是PLC與主機之間并沒有進行綁定,因此仍然存在安全問題,攻擊者可以偽造成一個惡意的主機/工作站,利用已知的公鑰及加密算法,對PLC進行非法控制或者中間人攻擊。
下面介紹密鑰生成算法流程:
圖6 密鑰生成算法
主機(TIA)隨機生成20字節的PreKey,使用類橢圓曲線加密算法和公鑰加密PreKey,作為Keying materaial 1(對應圖7中M3數據包的EG1、EG2)。
主機(TIA)根據PreKey計算KDF,并由此生成CEK(Checksum Encryption Key),CS(Checksum Seed),KEK(Key Encryption Key)。
主機(TIA)將Challenge和KDK相結合,使用AES-CTR加密算法和KEK進行加密,其結果作為Keying material 3(對應M3數據包中的EncryptedChallenge和EncryptedKDK)。
主機(TIA)用CS和Keying material 3進行哈希運算(Tabulation Hash),得到結果TB-HASH。
主機(TIA)使用AES-ECB算法和CEK來加密TB-HASH并得到結果Keying material 2(對應M3數據包中的EncryptedChecksum)。
圖7 M3數據包結構
4.漏洞復現
我們對OMSp_core_managed.dll進行逆向分析,通過調用關鍵接口函數,構造四次握手加密認證數據包。攻擊端首先發送認證數據包,密鑰認證完成后發送stop功能碼,成功使得西門子PLC S7-1500停止運行。
正常運行時,PLC S7-1500運行指示燈為綠色。運行狀態如圖8所示。
圖8 攻擊前PLC正常運行
發送攻擊腳本后,PLC S7-1500運行指示燈變為黃色,PLC停止運行,PLC狀態如圖9所示。
圖9 攻擊后PLC停止運行
聯系方式
- 電 話:15344432716
- 銷售顧問:楊本剛
- 手 機:15386422716
- 微 信:AK66F7