作者:安天
來源:《安天發布針對工控惡意代碼TRISIS的技術分析》
1、概述
2017年8月,安天安全研究與應急處理中心(安天CERT)基于綜合情報研判,將針對工業控制系統的惡意代碼TRISIS(又名TRITON、HATMAN)列為需要重點分析關注的威脅,并將其命名為“海淵”。該惡意代碼在中東某石油天然氣廠的工業控制系統中被國外安全研究人員發現,根據各方信息判斷,由于攻擊者準備不充分,尚未對人員及財產造成重大損失。“海淵”(TRISIS)的目標為施耐德電氣公司的安全儀表系統,通過植入固件更改最終控制元件的邏輯以達到攻擊目的。其通過Tricon安全儀表系統所使用的TriStation通信協議進行攻擊,因此運行此協議的所有安全控制器都可能受到影響。
“海淵”(TRISIS)所攻擊的目標是工業控制系統(ICS)中的安全儀表系統(SIS)控制器,其主要瞄準施耐德電氣的Tricon安全儀表系統,從而達到在最終控制元件中替換邏輯的目的。安全儀表系統(Safety Instrumented System),簡稱SIS,又稱為安全聯鎖系統(Safety Interlocking System),主要為工廠控制系統中報警和聯鎖部分,對控制系統中檢測的結果實施報警動作或調節或停機控制,是工廠企業自動控制中的重要組成部分。其包括傳感器、邏輯運算器和最終執行元件,即檢測單元、控制單元和執行單元。SIS系統可以監測生產過程中出現的或者潛伏的危險,發出告警信息或直接執行預定程序,立即進入操作,以防止事故的發生,同時降低事故帶來的危害及影響。
安天CERT針對該惡意代碼的攻擊原理及樣本展開了技術分析。發現該惡意代碼的攻擊流程為利用社工技巧偽裝成安全儀表系統的日志軟件進入目標網絡,之后通過特殊ping包發現安全儀表系統,在確定安全儀表系統可被入侵后,會上傳組合后的二進制代碼,以改變安全儀表系統的梯形圖(即安全儀表系統邏輯),一旦攻擊成功,將有可能對工業生產設備、工廠人身安全造成巨大危害,對關鍵信息基礎設施安全、社會安全造成巨大影響。
2、“海淵”(TRISIS)攻擊原理
2.1 攻擊原理簡述
“海淵”(TRISIS)和“震網”(Stuxnet)、“Industroyer/CrashOverride”等惡意代碼一樣具備從工業控制系統中發現特定目標裝置的能力。但同時,其更進一步具有直接交互、遠程控制和危害安全系統的能力。
“海淵”(TRISIS)采用Python腳本進行編寫,并使用Py2EXE偽編譯為PE可執行程序,以便于在未安裝Python的系統環境下執行。攻擊者充分了解安全儀表系統處理過程及環境的具體細節,才能構造有效載荷利用“海淵”(TRISIS)進行攻擊,其主要通過修改和部署新的PLC(可編程邏輯控制器)梯形圖,以對目標產生預期的影響。
“海淵”(TRISIS)可以改變目標安全儀表的基本邏輯,通過可執行文件將其目標作為在執行時傳遞給它的命令行參數,其核心功能是通過將四個二進制文件組合到目標上進行工作,其中植入Python腳本中的兩個二進制載荷,主要用于準備和加載包含替換邏輯的外部模塊(參見圖2-1、圖2-2);附加的兩個外部的二進制文件,由腳本中的名稱專門引用,但位于單獨的文件中,其中imain.bin為主要功能載荷(參見圖2-3)。
2.2 攻擊流程分析
trilog.exe是“海淵”(TRISIS)的主程序,其原本是Tricon安全儀表系統中的一個模塊程序,攻擊者利用其進行實施攻擊的主要流程參見圖2-4:
攻擊流程說明:
- trilog.exe通過TSAA協議鏈接TCM(Tricon通信模塊),識別并獲得一個能夠與安全儀表系統通信的系統,并判斷是否滿足入侵的條件;
- 確認可入侵后,識別目標安全儀表系統類型,并用替換邏輯和加載器開發“海淵”(TRISIS)功能代碼,構建漏洞利用程序PresentStatus。
- 上載PresentStatus到Tricon安全儀表系統中,并執行確保“海淵”(TRISIS)在預期環境下工作;
- 構建加載器和核心載荷inject.bin、imain.bin,將“海淵”(TRISIS)傳輸到包含裝載器模塊的目標上;
- “海淵”(TRISIS)可執行文件運行時,偽裝成用于分析日志的軟件,利用嵌入的二進制文件來識別控制器上存儲器中的適當位置以進行邏輯替換,并上傳“初始化代碼”(4字節序列);
- 驗證前一步是否成功,然后上傳新的PLC梯形圖到安全儀表系統;
- 上傳傀儡程序覆蓋核心載荷。
3、“海淵”(TRISIS)樣本分析
3.1 “海淵”(TRISIS)與Triconex的通信過程分析
“海淵”(TRISIS)與Triconex的通信主要依賴于TsHi、TsBase、TsLow、TS_cnames等模塊,這些模塊提供了極為強大的遠程連接控制Triconex的代碼。
3.1.1 請求連接
“海淵”(TRISIS)通過在Script_test.py中調用TsLow中的connect函數進行連接,我們以此作為入口點,對其協議進行簡單分析。
在connect函數中detect_ip和tcm_connect為關鍵函數。
在detect_ip函數中使用1502端口,用變量TS_PORT定義;另外,對ping數據包和close數據包定義,分別采用0x06和0x04為兩者標識碼,如下圖3-4。
在tcm_connect函數中connect_result同樣為數據包類型標識碼,具體定義見上圖3-4,其中關鍵函數為tcm_exec(type參數的值為1)。
Struct.pack函數作用為按照給定的格式(fmt),把數據轉換成字符串(字節流),并將該字符串返回,即packet是把type和data長度按照16進制解釋,再加上data和crc16校驗的數據包。Struct.pack數據包結構如下:
3.1.2 上傳PresetStatus
“海淵”(TRISIS)通過使用SafeAppendProgramMod函數上傳PresetStatus。
script_code為需要上傳的執行代碼。該函數為對AppendProgramMin函數的封裝,AppendProgramMin函數調用WriteProgram函數(對WriteFunctionOrProgram的封裝)。
AppendProgramMin函數在代碼尾部加上CRC校驗:
在WriteFunctionOrProgram函數中調用AllocateProgram函數向儀表寫入程序:
此時對數據包進行一次封裝,現在數據包為:
Ts_exec函數負責一層數據包封裝,此時數據包為:
在Ts_exec函數中調用tcm_exec函數(參見圖3-5),此時數據包為:
Tcm_exec調用udp_exec函數,最終調用sock.send函數通信。
3.1.3 上傳有效載荷
上傳有效載荷與上傳PresetStatus流程相同,在此不再贅述,有效載荷的數據包結構為:
3.2 模塊分析
“海淵”(TRISIS)構建了精簡的TriStation通信框架,框架包含模塊TsHi.py、TsBase.py、TsLow.py、TS_cnames.py。除框架外,“海淵”(TRISIS)還包含一個Script_test.py腳本,此腳本使用TriStation通信框架連接到Tricon,并注入載荷。
3.2.1 Script_test.py分析
Script_test.py是使“海淵”(TRISIS)真正實現功能的模塊,Script_test.py文件小巧,其通信功能的實現主要依賴TriStation協議支持庫。由于TriStation協議目前為止仍是閉源協議,這些支持庫極有可能為“海淵”(TRISIS)背后攻擊者花費精力逆向得來,如果要對TriStation協議進行深入了解,對涉及的庫文件進行分析是很好的選擇。
Script_test.py與通信有關代碼主要實現了代碼上傳、尋找儀表系統和利用庫函數進行通信的功能(參見圖3-12、3-13、3-14)。
攻擊步驟說明:
Script_test.py腳本首先嘗試連接Tricon儀表系統,當不帶參數啟動時,直接廣播搜索可識別TriStation協議的設備——Tricon儀表系統:
一旦尋找到目標,將上傳PresetStatus程序確定此目標是否可被利用;確定可被利用后,上傳inject.bin和imain.bin兩個主要載荷,篡改圖表,以達到破壞或監控目的;最后,上傳無用代碼覆蓋載荷消除痕跡。
3.2.2 TsHi.py分析
TsHi.py是框架的高級接口,允許讀寫函數和程序,以及檢索項目信息和與植入有效負載的交互(如下所述),其包括SafeAppendProgramMod函數,該函數可獲取程序表,讀取程序和函數,并將提供的shellcode附加到現有的控制程序,它還在必要時處理CRC32校驗和。
從函數名我們可以輕易猜出每個函數的作用,“海淵”(TRISIS)只使用了其中的SafeAppendProgramMod函數來上傳其載荷。
之后,此函數獲取目標系統中已上傳的程序列表及函數數量。最后用AppendProgramMin函數上傳載荷,并執行。
3.2.3 TsBase.py分析
TsBase.py主要充當高級接口和低級TriStation功能代碼之間的轉換層,以及用于上載和下載程序或獲取控制程序狀態和模塊版本等功能的數據格式:
3.2.4 TsLow.py分析
TsLow.py可實現將上層制作的TriStation數據包通過UDP發送到Tricon通信模塊(TCM)的功能的最底層,還包括通過向1502端口發送UDP“ping”廣播消息來自動發現Tricon控制器。
3.2.5 TS_cnames.py分析
TS_cnames.py包含TriStation協議功能和響應代碼以及關鍵開關和控制程序狀態的命名查找常量。
4、分析小結
“海淵”(TRISIS)惡意代碼呈現出了一些值得關注的特點,其開發者深入了解相關工控產品的控制協議,除了上載到PLC中的二進制模塊外,其他框架和功能代碼全部采用腳本編寫,非常容易被改造和加工。而其打擊點則在作為工業控制系統的生產安全監測單元的SIS上。
作為針對工業系統攻擊的惡意代碼,“海淵”(TRISIS)很自然的會被與“震網”(Stuxnet)和“烏克蘭停電”等攻擊關鍵基礎工業設施的事件相比較。
與“震網”龐大的惡意代碼工程相比,“海淵”(TRISIS)看起來相對簡單。震網攻擊對于離心機整體控制機制的介入是極為深入的,這本身也源自鈾離心工藝處理的復雜性,基于攻擊者所要達成的復雜的攻擊目的(鈾無法達到武器級要求、大量損毀離心機)、攻擊的隱蔽性攻擊和攻擊需要達成的階段持續性。震網是一個支撐完整戰役過程的惡意代碼。相比之下,盡管“海淵”(TRISIS)小巧的令人可怕,但其更像一個靈巧的“戰斗部”,其在攻擊行動中,可能是與其他的攻擊植入手段和惡意代碼配合使用的。對“海淵”(TRISIS)的編寫者來說,其核心資源和成本消耗,主要是對SIS系統達成深入分析了解。
“海淵”(TRISIS)的攻擊方式與烏克蘭電網遭遇攻擊停電事件的明顯差異是“海淵”(TRISIS)攻擊的位置更加縱深。烏克蘭停電的攻擊效果是通過直接在SCADA控制界面上拉閘達成的,粗暴而有效,其并不依賴于深度解析和篡改控制指令。盡管烏克蘭停電事件中,攻擊者也篡改了遠程變電站串口以太網關中的固件,但這一操作目的是為了導致已經被“拉閘”的遠程變電站不能被遠程合閘恢復。而“海淵”(TRISIS)的打擊點,則是為PLC重置新的邏輯,而且其攻擊的是安全儀表系統。
從防御工作來看,由于“海淵”(TRISIS)以通過偽裝為SIS的日志軟件獲得被執行的機會,因此重要的防御點即在對軟件供應鏈的管控上。應在采購階段,嚴格落實供應鏈的安全管控,從源頭遏制危害。在工業系統的運維中,針對工控系統環境的新設備安裝上線、軟件的發布升級、運維手段的接入等,都應進行全面的前置檢查和移動介質接入管控。
與“震網”、“烏克蘭停電”事件類似的是,“海淵”(TRISIS)攻擊依然是以獲得關鍵PC節點為攻擊入口的,這一特點是具有普遍性的。而一旦關鍵PC節點淪陷,攻擊已經針對生產系統實施了縱深影響,則極難防御。對于工業基礎設施來說,做好生產網絡和辦公網絡中的PC端點防御是一個必須做好的基礎性工作,對于重要PC節點必須形成嚴格的依托白名單的主動防御機制。
從現狀來看,大部分工業控制系統對效率性能的考慮遠多于安全考慮,而安全考量中,更多依然是以傳統的應對事故視角,而非應對攻擊視角。做好工業系統的安全防御工作,必須按照三同步的原則進行,在系統規劃、建設、運維的全周期考慮網絡安全問題。這是一個復雜和系統的工作,在可管理網絡的基礎上,建設可防御的網絡,推動從基礎結構安全、縱深防御、態勢感知與積極防御到威脅情報的整體疊加演進。這個過程需要大量基礎扎實的工作和預算投入。對已有系統的安全改造,因為涉及到生產業務的連續性、穩定性,可能牽扯到更多的問題。
關于對工業系統的安全問題和防御,安天在“震網”、“烏克蘭停電”等事件的分析中,已經有過很多的探討,我們會為用戶提供更系統的建議和解決方案。
附錄一:參考資料
[1]Dragos :TRISIS Malware——Analysis of Safety System Targeted Malware
https://dragos.com/blog/trisis/TRISIS-01.pdf
[2]Ics-cert :MAR-17-352-01 HatMan—Safety System Targeted Malware (Update A)
https://ics-cert.us-cert.gov/sites/default/files/documents/MAR-17-352-01 HatMan - Safety System Targeted Malware (Update A)_S508C.PDF
[3]《烏克蘭電力系統遭受攻擊事件綜合分析報告》
http://www.antiy.com/response/A_Comprehensive_Analysis_Report_on_Ukraine_Power_Grid_Outage/A_Comprehensive_Analysis_Report_on_Ukraine_Power_Grid_Outage.html
[4]《對Stuxnet蠕蟲攻擊工業控制系統事件的綜合分析報告》
http://www.antiy.com/response/stuxnet/Report_on_the_Worm_Stuxnet_Attack.html
附錄二:HASH

本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/701/
暫無評論