# ~~業餘~~ SolarWinds 供應鏈後門程式分析 - Initialization()
[TOC]
## 前言
最近資安知名大廠FireEye報出自家被SolarWinds Orion軟體的後門攻擊,原因是SolarWinds供應鏈中的dll裝有後門,並且被命名為SUNBURST
原文請參考下面網址
https://www.fireeye.com/blog/threat-research/2020/12/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor.html
<br>
據FireEye推測,應該是由俄羅斯政府支持的 UNC2452 所發起的,其目標涵蓋世界多個組織
FireEye已經釋出了惡意樣本的偵測方法如下,包含了Yara/Snort/Hash
https://github.com/fireeye/sunburst_countermeasures
<br>
## 樣本分析
* Hash: `76640508b1e7759e548771a5359eaed353bf1eec` (.NET dll)
ANY.RUN已經有人丟上免費樣本了
https://app.any.run/tasks/5c5e9fa7-17ad-4ace-9489-118ebfcfea3b/
下圖是大家執行的紀錄,可以看到這麼多次執行中,any.run並沒有偵測出可疑之處
因為這個後門是一個dll檔案,若是沒有真正執行藏在dll內的function,單純執行DllMain不一定能觸發惡意行為的,還是需要做靜態分析,抓出後門function

<br>
所以不是丟上Sandbox一定可以找到惡意行為的啊~
<br>
**回到靜態分析**
在樣本處按 右鍵->Properties->Digital Signature 後可發現,是有Solarwinds數位簽章的

根據FireEye的描述,此樣本是使用.NET所撰寫的,我們可以使用dnSpy來做分析
找出有問題的 `SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.InventoryManager`
來看一下後門程式,可以發現開了一個新的Thread
`OrionImprovementBusinessLayer.Initialize`

<br>
### Initialize Function
本篇會針對Initialize()做分析
---
### [Anti-Analysis] Process Name Check
樣本使用了偵測Process Name的方式來實現Anti-Analysis
點進去可以看到,樣本首先調用`GetCurrentProcess`來確保Process Name小寫的的Hash值是否等於`17291806236368054941`

下圖為`GetHash`Function,其算法可以參照下列網址
真正要求的Process Name為`businesslayerhost.exe`
https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash

<br>
### De-Obfuscation
接下來,樣本調用了`GetLastWriteTime`來確保檔案唯有已寫入超過Random(288,336)小時(12~14天之後) 才能執行
執行後,會產生一個固定的`appId`,可確保不重複執行

<br>
點進去看`appId`,乍看之下是個Base64的文字,但根據`Unzip` function,還要做一次deflate,簡單的Obfuscation

<br>
至於還原方法也不難,可以用下面的script做還原
https://gist.github.com/vortexau/13de5b6f9e46cf419f1540753c573206
執行起來會像下圖,輕鬆還原`appId`

<br>
### Continue the analysis
回到一開始的backdoor,根據下面圖可以判斷 `status != Truncate`才能進入`if`條件執行

<br>
而`status`會根據上一行的`ReadReportStatus`來決定
不難發現`num`不能等於3

<br>
接下來樣本通過前面考驗後,會偵測所在環境的`Domain`,並且產生一個`UserID`

<br>
### More host info digging
根據`GetOrCreateUserID`,這個`UserID`會根據一些主機資訊所決定,來確保獨一無二

`ReadDeviceInfo` 會取得主機的Network Interface,Register值,再度看到其中又有一坨不明文字
一樣,透過前面提到的script還原真正需要的Register
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid`

<br>
將取得的值做MD5之後再做最後的XOR

<br>
最後進到`Update`,也是後門的主程式,下一篇再繼續~

<br>
[-0xbc](https://hackmd.io/@0xbc000)
###### tags: `Malware Analysis` `Reverse Engineering` `tutorials`