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

ADLab發表於2020-04-23

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,功能碼執行階段

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

圖1 S7Comm-Plus協議互動流程

金鑰認證成功後方可進入功能碼執行階段,圖2為四次握手認證具體流程。

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

圖2 四次握手認證

1)  TIA向PLC傳送M1開啟一個新的會話。

2)  PLC將返回給TIA一個響應包M2,M2包含 PLC韌體版本和隨機數ServerSessionChallenge,長度20個位元組。

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

圖3 M2認證資料包

3)  TIA收到M2後,將向PLC傳送M3,M3中包含SecurityKeyEncryptedKey(圖4中紅色框所示)。其中,Magic欄位為0xfee1dead,長度180位元組。SecurityKeyEncryptedKey裡包含3個關鍵的加密欄位(圖4中藍色框所示)。

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

圖4 M3認證資料包

4)  PLC收到M3後,進行金鑰認證。若認證成功,向TIA回覆M4資料包。

四次握手認證完成後,TIA向PLC傳送功能碼資料包,功能碼資料包中包含IntergrityPart欄位,如圖5所示。PLC收到功能碼資料包後,首先校驗IntergrityPart欄位,若校驗透過,執行相應功能碼。

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

圖5 stop功能碼資料包

3. 演算法分析

雖然主機TIA與PLC之間的認證引入了非對稱加密演算法,但是PLC與主機之間並沒有進行繫結,因此仍然存在安全問題,攻擊者可以偽造成一個惡意的主機/工作站,利用已知的公鑰及加密演算法,對PLC進行非法控制或者中間人攻擊。

下面介紹金鑰生成演算法流程。

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

圖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)。

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

圖7 M3資料包結構

4.  漏洞復現

我們對OMSp_core_managed.dll進行逆向分析,透過呼叫關鍵介面函式,構造四次握手加密認證資料包。攻擊端首先傳送認證資料包,金鑰認證完成後傳送stop功能碼,成功使得西門子PLC S7-1500停止執行。

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

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

圖8:攻擊前PLC正常執行

傳送攻擊指令碼後,PLC S7-1500執行指示燈變為黃色,PLC停止執行,PLC狀態如圖9所示。

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

圖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



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

相關文章