http://www.sharifulalam.com 2016-09-21 15:27 來源:
隨著“互聯網+制造”的工業4.0概念的提出,獨立、隔離的傳統工控領域迎來了新的大數據互聯時代。與此同時,工控安全的問題,也隨著互聯,被更廣泛的暴露在了Internet中。在Shodan、ZoomEye等搜索網站中,可以很容易的搜索到真實工控現場工控設備的IP地址,并且可以利用組態軟件訪問到對應的設備。近幾年來,越來越多的工控設備被暴露在了互聯網上。
在Black Hat2011,Dillon Beresford等人在他們的報告《Exploiting Siemens Simatic S7 PLCs》中演示了如何通過西門子S7Comm協議的權限缺失漏洞來遠程操作PLC。在Black Hat2015,Johannes Klick 等在他們的報告《Internet-facing PLCs – A New Back Orifice》中演示攻擊者如何通過代理,來發現內網中更多的PLC設備。本文將展示的是一種新型的PLC蠕蟲病毒,該病毒可以不借助上位PC機,僅通過PLC之間進行互相傳播。該病毒的實現思路,適用于多個廠家的PLC設備,并且可以在一定規則范圍內相互進行傳播。本文采用西門子PLC舉例進行說明。
西門子PLC簡介
PLC全稱為Programmable Logic Controller,即可編程邏輯控制器,是一種采用一類可編程的存儲器,用于其內部存儲程序,執行邏輯運算、順序控制、定時、計數與算術操作等面向用戶的指令,并通過數字或模擬式輸入/輸出控制各種類型的機械或生產過程。西門子作為全球PLC市場占有率最高的PLC設備廠家,其產品系列主要包括S7-200、S7-300、S7-400、S7-1200、S7-1500等。其中S7-200、S7-300、S7-400系列的PLC采用早期的西門子私有協議S7Comm進行通信。S7Comm協議已被研究者完全掌握,并且在github上可以下載到該協議的插件。S7-1200系列固件版本為V3.0以下的PLC采用西門子新一代的S7Comm-Plus協議進行通信。該協議采用了一些特殊編碼規范,并且做了抗重放攻擊的防護。但是其安全防護仍然較弱,已被基本破解。S7-1200系列固件版本為V3.0以上,以及S7-1500系列的PLC,采用了最新的S7Comm-Plus協議,該協議對比之前S7Comm-Plus協議,采用了加密算法,目前仍未被研究透徹。
西門子PLC通過Step7以及WinCC軟件進行組態,目前最新版本為TIA Portal V13。其中使用Step7進行下位機組態,WinCC進行上位機組態。
在Step7組態軟件中,用戶通過編寫POU程序塊來完成工業現場的控制以及工藝流程的實現。西門子POU程序塊包括:
OB(Organization Block ):組織塊,為用戶程序的入口程序塊
FB(Function Block):功能函數塊,實現一些封裝好的函數功能
FC(Function):函數塊,為用戶編寫的程序
DB(Data Block):數據塊,用來存放全局變量
SFB(System Function Block):系統功能函數庫,系統內部封裝的函數塊
SFC(System Function):系統函數庫,系統內部封裝的函數
Step7程序塊的組態語言包括LD(梯形圖),FBD(功能塊圖)、SCL(結構化控制語言)、STL(語句列表)。
西門子PLC在進行程序下裝的過程中,首先會在下裝前停止PLC的運算,下裝程序完成后再重新啟動PLC。
病毒的實現
對于病毒的實現流程,首先選擇IP嘗試建立連接,如果連接建立成功,則檢查目標PLC是否已被感染。如連接未建立成功,或目標PLC已被感染,則選擇新IP重新嘗試建立連接。如目標PLC未被感染,則停止目標PLC,下裝病毒程序,最后重新啟動目標PLC。流程如圖1所示。
病毒實現流程
尋找目標
所有的西門子PLC通過102端口進行TCP通信,因此可以通過嘗試建立102端口的TCP通信來進行目標的尋找。Step7組態軟件中提供了兩個FB塊,TCON以及TDISCON,如圖2所示。TCON用來建立TCP連接,其中REQ輸入管腳通過上升沿信號觸發,CONNECT輸入管腳配置TCON建立連接的如對端IP、對端端口號,本機端口號,通信方式等相關參數。TDISCON用來斷掉TCP連接,REQ上升沿觸發。
圖3為嘗試建立連接的FC塊,首先使用TCON塊建立連接,如果建立成功,即輸出管腳DONE為TRUE時,則置狀態字con_state為20,繼續下一步病毒的傳播感染操作。如連續200次建立連接不成功,則置狀態字con_state為0。
使用TCON塊嘗試建立連接
如連接未成功建立或病毒傳播完成,即狀態字con_state為0時,則使用TDISCON做斷開連接操作,如果輸出管腳ERROR或輸出管腳DONE為TRUE時,將TCON輸入管腳CONNECT中的對端IP末位加一,并使用該新IP再次嘗試建立連接。實現過程如圖4所示。
使用TDISCON進行連接的斷開并更改IP
成功建立連接后,首先判斷目標PLC是否已經感染該病毒,通過TSEND功能塊發送相關數據報文,并對返回的報文進行判斷,如未被感染,則繼續執行病毒的傳播過程,如已感染,則置狀態字con_state為0,重新更換IP嘗試建立連接。
檢測目標PLC是否已感染病毒
傳播感染
正常情況下,博途軟件會對PLC進行程序的下裝操作,而下裝過程正式利用了西門子私有的S7協議。在西門子PLC簡介章節中提到西門子S7Comm協議以及早期的S7Comm-Plus協議已可以被研究者熟悉利用。因此在傳播感染階段,可以根據S7協議的內容,通過偽造博途軟件下裝程序的報文,可以實現PLC到PLC的程序傳輸操作。也就是說已感染病毒的PLC向目標PLC發送下裝程序塊的報文,而目標PLC識別到報文后,誤以為是博途軟件對其進行下裝,最后會將報文中的相關功能塊存儲在PLC中。
Step7組態軟件中使用TSEND功能塊進行數據的發送,使用TRCV功能塊進行數據的接收,如圖6所示。在TSEND塊中,REQ輸入管腳上升沿觸發,DATA為需要發送的數據區。在TRCV中,EN_R上升沿觸發,DATA為接收數據的存儲區,RCVD_LEN為實際接收到數據的長度。
發送及接收數據功能塊
在程序的發送過程中,需要滿足S7協議的相關通信時序以及報文格式。圖7所示為S7建立連接的過程。首先是TCP的三次握手,接下來建立COTP連接,建立完成后進行S7協議的連接建立。建立成功后可以使用S7協議進行啟停PLC、下裝程序、PLC中數據讀寫等正常操作。
S7協議通信時序
S7通信協議應用層數據封裝模型如圖8所示,其中:
TCP:即傳輸控制協議,是一種面向連接(連接導向)的、可靠的、基于IP的傳輸層協議,在IETF的RFC 793標準中進行定義。
ISO-ON-TCP:即基于TCP的ISO傳輸服務,在在IETF的RFC1006標準中進行說明。
ISO Transport protocol:即ISO傳輸協議,在ISO8073中進行說明。
S7協議應用層數據分布
圖9為下裝程序塊的S7Comm數據報文,其中0x32為S7Comm協議標識符,Protocol Data Unit Reference為協議數據單元標識符,在S7Comm協議中用作通信過程的時序標記。Function標識了該數據報文的功能。Data報文區為所對應功能塊的內容。
功能塊下裝數據報文
在博途軟件中,使用FC功能塊實現連接的建立,尋找新的目標IP,判斷目標PLC是否已被感染病毒,并進行病毒程序的傳播等功能。使用一個DB數據塊存放FC功能塊中所用到的所有全局變量,使用另外一個DB數據塊存放病毒感染全部過程所需要的報文內容。
激活
建立調用病毒程序的OB塊OB9999,并將其存植入到目標PLC中,用以激活病毒,并進行新的病毒傳播感染。西門子PLC在運行時,會按照從OB1到OB9999的順序進行調用。如圖10所示。
西門子PLC程序調用步驟
惡意功能的實現 C&C服務器 一旦PLC被感染病毒,會基于TCP主動去連接C&C服務器。通過C&C服務器,可以遠程控制PLC,包括PLC的啟停,輸出值的改變等。 Socks4代理 一旦PLC被病毒感染,在局域網中的其他PLC,可以通過Socks4代理連接到C&C服務器。 拒絕服務攻擊 可以向PLC中下裝例如死循環、除零或者負數開方的程序,讓PLC停止工作。 改變輸出值 可以通過編寫正常的PLC程序,來改變輸出值,進而影響現場設備的正常運行。
檢測與防護病毒的檢測 利用博途軟件 博途軟件提供了PLC程序在線與離線差異的檢測功能,如圖11所示。程序塊后面的綠色圓圈表示在線程序與離線程序一致,藍色與橘黃色組成的圓形表示在線程序與離線程序不一致。
博途軟件對程序在線離線一致性的檢測
觀察PLC的狀態燈 下裝程序的過程中會導致PLC的停止與啟動,在此期間,所有模擬量數值與開關量狀態會保持不變。然后該時間僅有幾秒鐘,操作員可能會忽視該細節。 使用工控漏掃設備 使用工控漏掃設備對PLC進行掃描,由于病毒程序必須利用較大編號的OB塊。因此掃描較大編號的OB塊可以對病毒進行檢測。 檢測網絡 在病毒進行傳播的過程中,網絡中會出現PLC與PLC通信的數據報文,根據該異常報文可以檢測出病毒測存在。 病毒的存活性 重啟PLC 病毒為正常的程序塊,因此重啟PLC后,該病毒仍存在于PLC中,并且正常運行。 恢復到出廠設置 恢復到出廠設置會清空PLC中的所有程序,因此病毒程序連同正常程序一起會被清空。 下裝程序
如果有正常的OB9999組織塊,或者與病毒同編號的FC塊、DB塊的下裝,則病毒會被新下裝的程序覆蓋,并且不會再次被感染
病毒的防護 設置權限密碼 工控廠商對于自己產品,在協議層設置權限密碼,沒有密碼的清空下,不可以利用協議來與PLC建立通信連接。 在工控系統中布置IDS/審計系統 布置IDS/審計系統,通過工控協議特征值的采集、分析與識別,如發現異常數據包,則記錄日志或報警 布置工控防火墻 通過工控防火墻,對異常數據包進行檢測以及隔離防護