2019年9月3日 星期二

Triton/Trisis


紀錄網路上蒐集整理的內容





概述



這病毒最初發現是在 2017 年末,有蠻多種名字

  • TRITON
  • TRISIS
  • HATMAN
攻擊的目標是施耐德電器的 Triconex 安全儀表系統(SIS)控制器

本身是一個 RAT 

最初攻擊的對象是沙烏地阿拉伯的石油與天然氣設施

這病毒使用的通訊協定是該 SIS 用的TriStation 協定
  • 此協定沒公開
    • 代表駭客應該事先逆過了
整個病毒代表意義
  • 首次公開已知攻擊 SIS 設備的病毒
  • 因為是做成模組化,且程式碼都有被人放到 Github ,可讓其他攻擊者仿照學習

當時發生這起事件時,施耐德找的處理廠商是 FireEye
一開始沒人知道攻擊者是誰,有看到 2017 年的分析文章有人猜是伊朗

不過 FireEye 有在 2018 年寫文章說猜測是俄羅斯政府


針對工業控制的攻擊其實都很客製化,就算你知道對方使用的設備型號
不同流程、設計、配置所需要考量的就會不同

所以可以猜測駭客應該事先知道內部環境配置,且應該有花
大概一年或以上的時間做模擬測試

根據被打得施耐德所述:
「被攻擊的工業控制器(Triconex),其型號為全世界 1.8 萬家工廠所使用,包含核處理設施」


攻擊的團隊目前認為是 XENOTIME APT 組織
  • 從組織開始於 2014 年
  • 2018年時又有攻擊其他工控廠商

攻擊目的

這攻擊在做到一半,猜測駭客操作不小心,導致工業生產過程異常而被關閉

所以代表
  • 無法確切得知駭客最終目的為何
  • 可以知道駭客已有能力去控制這些設備並做事情
  • 沒有太大的人或事物的損失

什麼是 SIS

前面有說這起事件在打 SIS ,這邊簡單介紹一下

  • Safety Instrumented System (安全儀表系統) 的縮寫
  • 又名: Industrial Safety Systems ​
  • 裡面使用一種特別的 PLC
  • 主要任務是維持生產過程的安全狀態,當偵測到設備異常時,會直接終止運作或嘗試幫助設備回復正常
  • 基本構造
    • 感應器
    • 傳感器
    • 最終控制元件
感測器收集資料,傳感器根據感測器的資料執行預編程的動作,
最後將要執行的行為,交給最終控制元件去做


打下 SIS 設備可以做的事情簡單可以分
  • 漏報
    • 讓 SIS 設備無法正常運作,這樣他就不能偵測設備有無異常
  • 誤報
    • 讓他在設備正常時,也發出警告說設備有問題

基本上, OT 網路會和一般網路做隔離,但現在一般會讓工程師電腦可以去
存取這些工控設備,而工程師一般會使用 RDP 遠端連進去做管理

在事發當下也有找到異常的 RDP ,故而推測一開始打進去是透過 RDP 協定
(雖然我出去講課時,有被原廠糾正內幕不是 ...)


一般的網路分析文章,針對 TRITON/TRISIS 都是在描述第二階段攻擊
也就是假設當下環境是駭客已經控制摸到目標電腦,就看到怎麼感染和攻擊這樣

第一階段描述真的很少,有些直接以社交工程帶過


第二階段過程大概樣子 (底下為參照網路多數文章描述)
  • Stage 2 Develop:
    • 確認好目標 SIS 型號,並開發 TRISIS 來替換 logic and loader
  • Stage 2 Test:
    • 確保 TRISIS 可以正常運作,比如就算攻擊者斷開和目標的網路連接
  • Stage 2 Deliver: 
    • 傳 TRISIS 到 SIS 中,裡面包含用在新的 logic 上的 ‘loader’ module
  • Stage 2 Install/Modify:
    • 執行時,會偽裝成用於分析SIS日誌的Triconex軟體
    • 替換掉 logic 並上傳初始化程式碼
  • Stage 2 Execute ICS Attack:
    • 驗證上一步有否成功,並上傳新的 ladder logic 到 SIS 設備中

其實上面這邊講的第二階段,應該說

工控類攻擊大多會參照 ics kill chain

然後去看每個發生的資安事故,基本都差不多是這樣的一個流程

這邊不描述 ics kill chain (或以後無聊會補)

簡介病毒結構

主體是 trilog.exe ,他是一個 dropper

執行後會有三個檔案
  • library.zip
    • 包有執行個功能需要的函式庫
  • inject.bin
    • 目的是將 imain.bin 注入到目標
  • imain.bin
    • 病毒真正主體

TRISIS 是用 Python 寫的,然後經 py2exe 編為 PE 檔案,讓電腦
就算沒安裝 Python 也可以正常執行

所以要反編譯也很簡單

可以先用 unpy2exe 將其轉回 pyc

之後透過 uncompyle2 將 pyc 轉回 py


解出來的程式碼可以直接參考這裡
可以從第 28 行開始看

  1. 一開始先初始化一個 TsHi object
  2. 連接目標設備
  3. 讀取 inject.bin 和 imain.bin 並拼接起來
  4. 先下載一段程式碼來判斷是否成功(PresetStatusField) ,沒的話直接終止
  5. 確保下載正常後,對目標的程式開始下載 (SafeAppendProgramMod(data))
  6. 用一個 loop 判斷控制器狀態是否正常
  7. 下載失敗直接刪除程式


未完...
























沒有留言:

張貼留言

Triton/Trisis

紀錄網路上蒐集整理的內容