作者:啟明星辰ADLab
原文鏈接:https://mp.weixin.qq.com/s/4bs7j-DZFcZliNhLO9FKPw

研究背景

西門子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 四次握手認證

  • TIA向PLC發送M1開啟一個新的會話;

  • PLC將返回給TIA一個響應包M2,M2包含 PLC固件版本和隨機數ServerSessionChallenge,長度20個字節;

圖3 M2認證數據包

  • TIA收到M2后,將向PLC發送M3,M3中包含SecurityKeyEncryptedKey(圖4中紅色框所示)。其中,Magic字段為0xfee1dead,長度180字節。SecurityKeyEncryptedKey里包含3個關鍵的加密字段(圖4中藍色框所示)。

圖4 M3認證數據包

  • 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停止運行

攻擊演示視頻如下所示:

安全建議

西門子官方已發布安全補丁:

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

  2. 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


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/1189/