逆向分析“海蓮花” APT木馬的花指令反混淆工具
本文中,CheckPoint研究人員基於對“海蓮花” 木馬程式的分析,編寫了一段繞過其混淆技術的反混淆工具- APT32GraphDeobfuscator.py ,在逆向分析過程中,利用該工具,最終可以消除混淆指令,清晰地顯示出“海蓮花” 木馬的執行呼叫流程,對木馬分析和相關安全研究人員有借鑑幫助之用。
“海蓮花” APT組織(APT32),具備越南背景的APT攻擊組織,以東亞國家為主要目標,以在越外企和目標國家特定機構為主要滲透物件。就目前的各家分析報告來看,“海蓮花” 利用的網路工具和相關技術非常廣泛多變,其中有高階的漏洞利用手段,也有非常簡單的惡意工具,有自研的攻擊元件,也有商業和開源的程式碼套裝,如Mimikatz 和 Cobalt Strike。利用捆綁木馬的檔案為誘餌,從其中的 droppers或shellcode中釋放或執行主要的惡意程式。
經多個測試分析案例可見,“海蓮花” 組織利用的木馬程式和相關工具都經過了複雜的混淆編碼,為了阻止或迷惑逆向分析人員,在其中添加了各種“障眼”的混淆技術,經驗老道。
該反混淆工具需要基於開源逆向分析工具radare2的介面框架 Cutter,Cutter是跨平臺工具,目的就是以介面方式直觀友好地顯示 radare2的分析原理。上個月,Cutter 官方引入了一個新的Python外掛,CheckPoint也將在下面的反混淆工具編寫中用到該工具。 (想檢視該工具,請直接到以下“反混淆指令碼”部份)
下載安裝 Cutter
大家可以選擇從 這裡下載 最新版本的Cutter,如果你用的是Linux系統,可以使用應用映象方式下載安裝。Cutter最終的執行介面如下:
“海蓮花” APT組織使用的木馬
首先,我們來看看“海蓮花” 組織使用的木馬和相關程式樣本,這裡這個樣本 486be6b1ec73d98fdd3999abe2fa04368933a2ec ,是木馬感染鏈中的一個惡意程式,也是CheckPoint在最近才捕獲發現的,其所有的執行特徵和“海蓮花”組織高度相似,尤其是和早期的惡意誘餌文件 115f3cb5bdfb2ffe5168ecb36b9aed54 非常接近。在早期的惡意誘餌文件中,“海蓮花”組織在捆綁的木馬中包含了一段VBA巨集程式碼,用它來向受害者系統的rundll32.exe程序中注入了惡意shellcode,該shellcode中又包含了用於後續解碼和向記憶體中反射載入dll檔案的解碼程式段,載入進記憶體的dll檔案中就包含了木馬的一個大概執行邏輯流程。
在後續感染階段,木馬會從相關檔案資源中解碼出一個配置檔案,該配置檔案儲存了諸如C2伺服器等木馬執行反彈資訊。接下來,相關程式段會嘗試用定製的PE loader往記憶體中載入一個輔助DLL,該DLL名為HTTPProv.dll,能實現與C2伺服器的通訊。
“海蓮花” 組織在其木馬程式使用了大量的混淆技術,尤其是大堆大堆的花指令(Junk Code),這些花指令經常讓木馬分析人員迷失方向。另外由於逆向工具大多時候都只認棧指標,不能自動識別一些無關函式,所以也就造成了我們在逆向分析中的難度。
“海蓮花” APT木馬的混淆技術
在我們對“海蓮花” 木馬的逆向分析中可見,其中一個主要混淆技術就是,在相關執行函式中大量插入使用花指令(Junk Code)形成控制流混淆,這些插入的花指令基本都是毫無意義的程式碼塊。如下:
在上圖中,幾乎整個程式碼塊都充滿了花指令,當然能完全忽略這些花指令塊就好了,但是實際分析中還是相對較難。仔細分析這些花指令塊,我們也能發現一些有意思的地方,這些混淆塊都是由前一個塊的失效跳轉而來,且都是條件跳轉。而且,每個混淆塊都以一個條件跳轉結束,這種條件跳轉與前一個混淆塊的跳轉相反。比如說,上圖程式碼塊中的末尾跳轉條件為 jo <some_addr>,則其混淆塊就會以 jno <some_addr>結尾;如果上圖程式碼塊以 jne <another_addr> 結尾,則其接下來的混淆塊就會是以 je <another_addr>結尾。示例如下:
基於上述分析判斷,我們可以開始構建這些混淆塊的特徵,混淆的第一個特徵是出現兩個連續的塊,而且,它們以相反的條件跳轉到相同的目標地址而結束。另一個特性要求第二個塊不包含有意義的指令,如字串引用或呼叫。
當滿足這兩個特徵時,我們可以說第二個塊很有可能是混淆塊。在這種情況下,我們希望第一個塊跳過第二個混淆塊,這樣混淆塊就會從我們的逆向分析流程圖中消失。這種情況下,我們可以用無條件跳轉,也就是簡單的JMP指令,來替換其中的條件跳轉實現混淆塊繞過。如下:
反混淆指令碼(Deobfuscator)
我們基於Cutter編寫了反混淆指令碼- APT32 Graph Deobfuscator ,它可以形成一個外掛(Plugin)匯入Cutter外掛庫,同時它可通過r2pipe方式與radare2進行命令列互動。
把該指令碼形成外掛匯入Cutter外掛庫:
以APT32某惡意程式逆向過程中的fcn.00acc7e0函式為例,一開始逆向工具分析執行呼叫流程圖中,混淆指令塊為以下高亮紅色部分:
用CheckPoint編寫的APT32 Graph Deobfuscator進行反混淆之後,我們得到以下去混淆的執行呼叫流程圖:
以下是去混淆前後的對比流程圖,非常直觀: