# ~~業餘~~ 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`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.