西門子PLC S7-1500漏洞分析與復現

發布時間 2020-04-23

研究背景


西門子PLC廣泛運用在各行業的工業控制系統上,比如鋼鐵、石油、化工、電力、建材、機械制造、汽車、輕紡、交通運輸、環保及文化娛樂等行業,其安全性直接關乎國家民生安全。


2019 BlackHat USA會議上,安全研究員Sara Bitan指出西門子PLC最新的通信協議S7Comm-Plus存在安全問題。為此,啟明星辰ADLab對相關漏洞進行研究,并在西門子S7-1500設備上復現了攻擊效果。


西門子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功能碼數據包


算法分析


雖然主機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數據包結構


漏洞復現


我們對OMSp_core_managed.dll進行逆向分析,通過調用關鍵接口函數,構造四次握手加密認證數據包。攻擊端首先發送認證數據包,密鑰認證完成后發送stop功能碼,成功使得西門子PLC S7-1500停止運行。


正常運行時,PLC S7-1500運行指示燈為綠色。運行狀態如圖8所示。


圖8 攻擊前PLC正常運行


發送攻擊腳本后,PLC S7-1500運行指示燈變為黃色,PLC停止運行,PLC狀態如圖9所示。


圖9 攻擊后PLC停止運行


安全建議


西門子官方已發布安全補?。?


https://cert-portal.siemens.com/productcert/pdf/ssa-232418.pdf

https://cert-portal.siemens.com/productcert/pdf/ssa-273799.pdf


小 結


在本次研究中,我們分析了西門子S7系列最新的通信協議S7Comm-Plus。雖然主機與PLC之間的通信協議采用了強大的加密算法,但是PLC并沒有對TIA進行認證,使得攻擊者可以偽裝成一個惡意的TIA,在其通信過程中插入任意指令,如PLC的啟停指令,即可達到遠程控制PLC的效果。除此之外,相同型號/固件版本的PLC,其私鑰完全相同,這意味著同樣的攻擊方法適用于所有相同的PLC。


參考鏈接:

[1]https://i.blackhat.com/USA-19/Thursday/us-19-Bitan-Rogue7-Rogue-Engineering-Station-Attacks-On-S7-Simatic-PLCs.pdf

[2]https://i.blackhat.com/USA-19/Thursday/us-19-Bitan-Rogue7-Rogue-Engineering-Station-Attacks-On-S7-Simatic-PLCs-wp.pdf

[3]https://www.secshi.com/30290.html