背景
2022年4月12日烏克蘭計算機應急響應中心(CERT-UA)發(fā)布了針對烏克蘭能源設備的針對性攻擊安全事件公告,公告中描述了名為SandwormGroup的組織在2022年4月8使用Industroyer2和CADDYWIPER惡意軟件對烏克蘭最大的能源公司能源設施開展攻擊,造成了變電站斷線,截至到4月12日攻擊的實施已經(jīng)被阻止。其中CADDYWIPER惡意軟件曾多次被報道在俄烏戰(zhàn)爭中用于擦除磁盤文件,Industroyer2則和造成2016年烏克蘭停電的Industroyer一脈相承,病毒使用C++編寫,利用IEC 60870-5-104協(xié)議改變RTU設備狀態(tài),使用高度定制化的方式操作指定IP地址的指定IOA(信息對象地址),以達到破壞電網(wǎng)的目的。
博智安全非攻研究院對Industroyer2樣本展開了分析,并對樣本中的工控網(wǎng)絡行為進行了進一步研究。
樣本分析
樣本的編譯時間為2022年3月23日,距被報道的3月28日不到一星期。
程序為控制臺應用程序,默認會進行控制臺輸出:
這些控制臺調試信息實際記錄了樣本的網(wǎng)絡行為,包括目標的IP端口,發(fā)送數(shù)據(jù)包的數(shù)量等,和目標成功建立連接后甚至會打印收發(fā)包數(shù)據(jù)內(nèi)容。
從程序中可以看到,樣本支持對收發(fā)數(shù)據(jù)包的解析,并且有專門的配置選項控制是否輸出。每一個執(zhí)行的步驟都有專門的編號,可以從日志中追蹤到具體步驟。
上圖中的26784就是這段步驟的編號。樣本支持-o參數(shù)將標準控制臺輸出重定向到文件,便于后面進行調試分析;-t參數(shù)支持樣本執(zhí)行延遲。
從這個角度看,該樣本更像是開發(fā)調試狀態(tài)下的工具:因為正式投入攻擊的版本一般會盡可能減少調試信息以提高被分析溯源的難度,但也不排除時間過于緊迫倉促上馬的可能。
主要行為
配置文件
該樣本有三套硬編碼的配置,程序啟動三個線程執(zhí)行這三個配置:
三個配置都以字符串形式給出,再在線程中解析并使用。這種繞彎的方式很難不讓人聯(lián)想,很有可能是一個payload用另一個殼包裹了一下,同時執(zhí)行三個配置。
結束進程并重命名文件
在執(zhí)行配置線程中,樣本首先結束掉指定進程,即PServiceControl.exe和PService_PPD.exe,并將指定目錄中的對應進程可執(zhí)行文件重命名,對應即是將 D:OIKDevCounterPService_PPD.exe重命名為D:OIKDevCounterPService_PPD.exe.MZ。此操作的目的可能是破壞已存在的控制服務,并阻止服務重啟。
IEC-60870-5-104網(wǎng)絡行為
該樣本的主要行為就是使用IEC-60870-5-104(簡稱IEC-104)協(xié)議和目標設備進行通信,IEC-104協(xié)議基于IEC-101協(xié)議演化而來,主要用于電力系統(tǒng)控制和信息采集。
通信過程
主要通信過程可以概況為:
1. 根據(jù)配置建立socket連接
2. 向目標發(fā)送Test Frame Activation IEC-104數(shù)據(jù)包
3. 向目標發(fā)送Start DataTransfer Activation IEC-104數(shù)據(jù)包
2、3步主要目的是測試目標存活,如果沒有回應則停止繼續(xù)發(fā)送
4.向目標發(fā)送 typeid 為C_IC_NA_1 (Interrogation Command)的activation數(shù)據(jù)包
5.根據(jù)配置中的數(shù)組循環(huán)發(fā)送激活/關閉命令到對應的IOA (Address of the Object)
6.根據(jù)配置循環(huán)發(fā)送,直到達到最大循環(huán)次數(shù)或網(wǎng)絡錯誤則退出
不難看出前4步都是為了確保設備在活動狀態(tài),可以接受IOA設置的命令。IOA對于工控設備來說一般類似于唯一地址,準確來說是ASDU 和IOA 合起來構成唯一地址。一般在配置中ASDU只有C_SC_NA_1 (Single Command) 和C_DC_NA_1(Double Command)兩種,對應某個選項開關,或是某個采樣數(shù)值。下表中列出了三個目標操作的IOA,該表為了方便,對連續(xù)的IOA進行了合并,實際上發(fā)送的IOA命令是帶有順序編號的,和表中并不一致。
實際對應動作
OA代表的實際意義對于不同的設備廠商、設備型號,定制化開發(fā)均不相同。由于工控領域的封閉性,在沒有對應設備的詳細信息之前,是難以進一步確定的。通過搜索相關公開信息,發(fā)現(xiàn)第二個目標的1101-1108 IOA操作,與西門子SIPROTEC IOA 的對應表可以基本對應起來,SIPROTECT1101-1108 對應信息如下表所示:
SIPROTECT 是西門子的繼電保護器系列產(chǎn)品,支持以太網(wǎng)和IEC-104協(xié)議,如下圖所示:
1101–1108 的類別是HMI設備,假如目標192.168.122.XX是一個HMI設備,針對此設備的IOA命令就可以理解為,讓HMI設備顯示繼電保護狀態(tài)的各項為 Active,同時顯示外部電壓異常,而此時繼電保護可能已經(jīng)被關閉了。這樣推理 10.82.XX.XX 比較可能是繼電保護器,192.168.121.XX可能是SCADA上位機。
行為仿真
通過在仿真靶場中構建IEC-104Server,配置Server為指定IP地址,在靶場中執(zhí)行樣本,可成功監(jiān)測到病毒使用IEC-104協(xié)議連接、操作IOAs的行為:
結論
Industroyer也被稱為 CrashOverride,是“自震網(wǎng)病毒以來對工業(yè)控制系統(tǒng)的最大威脅”,它既是模塊化的,又能夠直接控制配電變電站的開關和斷路器。Industroyer2繼承和延續(xù)了Industroyer風格,但僅保留了IEC60870-5-104協(xié)議對電站控制系統(tǒng)攻擊,同時樣本中的攻擊目標IP地址明確,攻擊過程清晰、直達要害,這些種種跡象均表明攻擊者對目標電力系統(tǒng)環(huán)境非常了解,但入侵者是如何將病毒從 IT 網(wǎng)絡轉移到工業(yè)控制系統(tǒng)網(wǎng)絡目前尚不清楚,基本可以肯定的是,Industroyer2是對電力系統(tǒng)成功攻擊的又一個案例。