一個基于PLC的新型病毒:背景與病毒結構
PLC是工業領域中很常用的一種控制器。現在常用的PLC都配備有以太網接口,并采用了IP協議。我們基于西門子S7-1200設計了一個蠕蟲病毒,這種蠕蟲病毒不需要借助PC機,僅僅基于PLC設備就能實現擴散,攻擊目標并將自身進行復制。該蠕蟲病毒代碼在目標機復制后不會發生變化,從而可以重復進行目標掃描,進一步擴散。我們分析了該蠕蟲病毒的影響和預防措施。
1.概述
IT是現代工業控制系統的重要組成部分,因為如果沒有IT系統,生產過程將無法進行。不幸的事,由于引入了IT系統,工控系統的使用者也面臨著傳統IT系統的信息安全威脅。IT系統的黑客可以從幾個不同的角度威脅工控系統。他們可以引起生產中斷,造成巨額經濟損失,以及損壞周圍人員的健康安全。震網病毒的案例充分說明了這一點。伊朗鈾濃縮工作受西門子PLC被篡改的影響,被迫暫停。蠕蟲病毒利用windows的漏洞,在鈾濃縮工廠的PC之間傳播。PLC的軟件被篡改,使得離心機被毀。該蠕蟲病毒需要借助PC機進行傳播,并基于PC機攻擊PLC設備。本文演示了一種基于PLC設備進行傳播的蠕蟲病毒,而不需要PC機。這種病毒可能被在役的PLC傳播到工控系統中,并在PLC之間傳播和復制。該蠕蟲病毒進入目標后,復制自身代碼并修改目標PLC中已經下載完畢的用戶代碼,使病毒激活。本文基于西門子S7-1200 v3進行實驗,用結構文本編輯病毒代碼。
2.相關工作
2015年,Klick等人利用PLC的通信機制實現了一個代理,進而展示了一種病毒。本文利用這一通信機制,基于新型號的S7-1200 V3實現了蠕蟲病毒在PLC之間的傳播。
3.PLC結構
圖1 Zyklus eines PLCs
PLC的過程映像區保存有所有輸入和輸出的狀態,用戶程序在過程映像區中運行,不直接操作PLC的物理輸入和輸出接口。用戶程序按照循環周期運行,在每個循環周期的開始和結束時間CPU會刷新過程映像區,循環的 長時間限制被稱作循環周期。如果超出了循環周期,PLC會停止運行并報異常。
程序組織單元(Program Organization Units,POU),西門子S7-1200支持如下POU:
組織塊(Organization block,OB),進入用戶程序的主要入口
數據塊(Data block,DB),全局存儲
函數(Function),函數
函數塊(Function Block,FB),具有持續本地存儲的函數
除了用戶定義POU函數,西門子還提供了幾種函數。包括TCON、TDISCON,利用這些函數PLC可以初始化和終止與任意系統之間的TCP連接。基于TRCV和TSEND函數緩沖區可以發送和接收函數。
4.計算機蠕蟲病毒
蠕蟲病毒攻擊包括以下三個階段:可能目標檢測,向目標擴散,在目標上激活并執行惡意代碼。
5.S7 1200的蠕蟲病毒實現
5.1結構
在S7 1200PLC上實現蠕蟲病毒首先要滿足PLC關于 大執行的循環時間限制,所以蠕蟲病毒必須每隔幾毫秒就暫停一次,然后在下一次循環周期開始時重新啟動。為了滿足這一要求,本文使用狀態機設計蠕蟲病毒,將病毒的當前狀態保存在一個全局變量中,每隔循環周期的開始階段會調用病毒的特定代碼,確保病毒的運行不會超出PLC的循環時間限制。
圖2顯示了病毒的執行流程。蠕蟲病毒首先與潛在目標建立一個連接,建立連接后蠕蟲病毒先檢測目標是否已被感染,如果沒有被感染則停止目標上的用戶程序,并復制自己并向目標傳送自己的代碼,然后重新啟動PLC。然后繼續檢測潛在目標PLC,循環執行上述周期。
圖2 蠕蟲病毒的傳播過程
5.2目標檢測
蠕蟲通過TCP的102端口檢測潛在目標,該端口只能被外部的防火墻關閉,而且沒有其他服務會使用該端口。
S7-1200使用POU的TCON函數管理TCP連接。源代碼如列表3所示,其中第3行顯示了POU的使用,第9行傳遞了一個任意的IP地址和端口。只要POU被調用,PLC就會嘗試建立連接。這一過程是異步執行的。在稍后的循環周期中會驗證連接狀態。返回值DONE表返回連接是否建立。如果返回值為true,則繼續傳播。如果IP地址和端口的連接無法建立,則不會引起錯誤。通過在循環周期內增加一個不斷增加的計數器,以實現定時功能。
圖3 利用SCL檢測目標
如果經過200個周期沒有建立連接,則蠕蟲會執行圖4中的程序。如果沒有建立連接,則必須調用POU的TDISCON釋放資源以便建立下一個連接,如在第13行中所示,IP地址增加。從而實現對所有的子網進行掃描以尋找開放的204端口。