1. 研究背景
西門子PLC廣泛運用在各行業的工業控制系統上,比如鋼鐵、石油、化工、電力、建材、機械製造、汽車、輕紡、交通運輸、環保及文化娛樂等行業,其安全性直接關乎國家民生安全。
2019 BlackHat USA會議上, 安全研究員Sara Bitan指出西門子PLC最新的通訊協議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 金鑰生成演算法
l 主機(TIA)隨機生成20位元組的PreKey,使用類橢圓曲線加密演算法和公鑰加密PreKey,作為Keying materaial 1(對應圖7中M3資料包的EG1、EG2)。
l 主機(TIA)根據PreKey計算KDF,並由此生成CEK(Checksum Encryption Key),CS(Checksum Seed),KEK(Key Encryption Key)。
l 主機(TIA)將Challenge和KDK相結合,使用AES-CTR加密演算法和KEK進行加密,其結果作為Keying material 3(對應M3資料包中的EncryptedChallenge和EncryptedKDK)。
l 主機(TIA)用CS和Keying material 3進行雜湊運算(Tabulation Hash),得到結果TB-HASH。
l 主機(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停止執行
攻擊演示視訊如下所示:
演示視訊
5. 安全建議
西門子官方已釋出安全補丁:
https://cert-portal.siemens.com/productcert/pdf/ssa-232418.pdf
https://cert-portal.siemens.com/productcert/pdf/ssa-273799.pdf
6. 小結
在本次研究中,我們分析了西門子S7系列最新的通訊協議S7Comm-Plus。雖然主機與PLC之間的通訊協議採用了強大的加密演算法,但是PLC並沒有對TIA進行認證,使得攻擊者可以偽裝成一個惡意的TIA,在其通訊過程中插入任意指令,如PLC的啟停指令,即可達到遠端控制PLC的效果。除此之外,相同型號/韌體版本的PLC,其私鑰完全相同,這意味著同樣的攻擊方法適用於所有相同的PLC。
7. 參考文獻
[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