# ~~業餘~~ 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 ![](https://i.imgur.com/2DpwkyV.png) <br> 所以不是丟上Sandbox一定可以找到惡意行為的啊~ <br> **回到靜態分析** 在樣本處按 右鍵->Properties->Digital Signature 後可發現,是有Solarwinds數位簽章的 ![](https://i.imgur.com/Vp2eA1A.png =70%x) 根據FireEye的描述,此樣本是使用.NET所撰寫的,我們可以使用dnSpy來做分析 找出有問題的 `SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.InventoryManager` 來看一下後門程式,可以發現開了一個新的Thread `OrionImprovementBusinessLayer.Initialize` ![](https://i.imgur.com/2fRolK6.png) <br> ### Initialize Function 本篇會針對Initialize()做分析 --- ### [Anti-Analysis] Process Name Check 樣本使用了偵測Process Name的方式來實現Anti-Analysis 點進去可以看到,樣本首先調用`GetCurrentProcess`來確保Process Name小寫的的Hash值是否等於`17291806236368054941` ![](https://i.imgur.com/JAUuwsS.png) 下圖為`GetHash`Function,其算法可以參照下列網址 真正要求的Process Name為`businesslayerhost.exe` https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash ![](https://i.imgur.com/vlICNRr.png =80%x) <br> ### De-Obfuscation 接下來,樣本調用了`GetLastWriteTime`來確保檔案唯有已寫入超過Random(288,336)小時(12~14天之後) 才能執行 執行後,會產生一個固定的`appId`,可確保不重複執行 ![](https://i.imgur.com/9ou9nsS.png) <br> 點進去看`appId`,乍看之下是個Base64的文字,但根據`Unzip` function,還要做一次deflate,簡單的Obfuscation ![](https://i.imgur.com/Y48hB6U.png) <br> 至於還原方法也不難,可以用下面的script做還原 https://gist.github.com/vortexau/13de5b6f9e46cf419f1540753c573206 執行起來會像下圖,輕鬆還原`appId` ![](https://i.imgur.com/SDJV62r.png) <br> ### Continue the analysis 回到一開始的backdoor,根據下面圖可以判斷 `status != Truncate`才能進入`if`條件執行 ![](https://i.imgur.com/I83pkt1.png) <br> 而`status`會根據上一行的`ReadReportStatus`來決定 不難發現`num`不能等於3 ![](https://i.imgur.com/x5s1omK.png) <br> 接下來樣本通過前面考驗後,會偵測所在環境的`Domain`,並且產生一個`UserID` ![](https://i.imgur.com/SrsxcXK.png) <br> ### More host info digging 根據`GetOrCreateUserID`,這個`UserID`會根據一些主機資訊所決定,來確保獨一無二 ![](https://i.imgur.com/pJjebjw.png) `ReadDeviceInfo` 會取得主機的Network Interface,Register值,再度看到其中又有一坨不明文字 一樣,透過前面提到的script還原真正需要的Register `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid` ![](https://i.imgur.com/Cl88yvK.png) <br> 將取得的值做MD5之後再做最後的XOR ![](https://i.imgur.com/BKZ1gwk.png) <br> 最後進到`Update`,也是後門的主程式,下一篇再繼續~ ![](https://i.imgur.com/E5CzzBP.png) <br> [-0xbc](https://hackmd.io/@0xbc000) ###### tags: `Malware Analysis` `Reverse Engineering` `tutorials`