作者:360威脅情報中心
背景
進入2017年以來,360威脅情報中心監測到的海蓮花APT團伙活動一直處于高度活躍狀態,近期團伙又被發現在大半年內入侵了大量網站執行水坑式攻擊。海蓮花團伙入侵目標相關的網站植入惡意JavaScript獲取系統基本信息,篩選出感興趣的目標,誘導其執行所提供的惡意程序從而植入遠控后門。
基于所收集到的IOC數據,360威脅情報中心與360安全監測與響應中心為用戶發現了大量被入侵的跡象,協助用戶做了確認、清除及溯源工作,在此過程中分析了團伙所使用的各類惡意代碼樣本。為了順利實現實現植入控制,海蓮花團伙所使用的惡意代碼普遍加入了繞過普通病毒查殺體系的機制,利用帶白簽名程序加載惡意DLL是最常見的方式。除此之外,部分較新的惡意代碼利用了系統白程序MSBuild.exe來執行惡意代碼以繞過查殺,以下為對此類樣本的一些技術分析,與安全社區分享。
MSBuild介紹
MSBuild是微軟提供的一個用于構建應用程序的平臺,它以XML架構的項目文件來控制平臺如何處理與生成軟件。Visual Studio會使用MSBuild,但MSBuild并不依賴Visual Studio,可以在沒有安裝VS的系統中獨立工作。
按照微軟的定義,XML架構的項目文件中可能包含屬性、項、任務、目標幾個元素,其中的任務元素中可以包含一些常見的操作,比如復制文件或創建目錄,甚至編譯執行寫入其中的C#源代碼。如下是一個XML項目文件的例子:

其中的Message標簽指定了一個Message任務,它用于在生成期間記錄消息。
用MSBuild加載處理這個helloworld.xml項目文件,我們看到Message任務被執行,輸出了“hello world”。

除了如上的系統預定義的內置任務,MSBuild還允許通過Task元素實現用戶自定義的任務,功能可以用寫入其中的C#代碼實現,我們看到的海蓮花樣本正是利用了自定義Task來加載執行指定的惡意代碼。
樣本分析
我們所分析的樣本主要的執行流程為:使用MSBuild解密執行一個Powershell腳本,該Powershell腳本直接在內存中加載一個EXE文件,執行以后建立C&C通道,實現對目標的控制。
利用MSBuild的加載執行
樣本的初始執行從MSBuild.exe開始,攻擊者把惡意代碼的Payload放到XML項目文件中,調用MSBuild來Build和執行,下圖為調用MSBuild程序的命令行屬性:

其中SystemEventsBrokers.xml文件內容如下:

文件中指定的Task對象的Execute方法被重載了,功能代碼用C#實現,變量aaa是一塊經過Base64編碼的數據,C#的處理邏輯其實只是簡單地對aaa做Base64解碼并在編碼轉換以后交給Powershell執行。下圖為aaa變量對應的數據做編碼轉換以后的Powershell腳本:

可以看到這塊代碼還是經過混淆的,通過層層解碼執行,最終得到的代碼如下:

該腳本的功能主要是把var_code的數據經過Base64解密后在內存中執行,var_code解密后其實為一段shellcode。首先它會通過call/pop指令序列獲取到后面所附加數據的地址,數據起始在0xf63+0x0a處,頭部的前兩個字節為0x4567,地址存在ebp-0x68中,如下圖:

通過PEB獲取kernel32基址,然后獲得GetProcAddress的地址:

之后通過GetProcAddress獲取一些API的地址。
獲取的API包括:
- VirtualAlloc
- VirtualFree
- LoadLibraryA
- Sleep

獲取系統調用地址完成后,Shellcode先判斷所附加數據的前2個字節是否為0x4567來確認是否為自己構造的文件,如果是則繼續執行:

接下來會調用VirtualAlloc申請一片可執行的內存,并把后面附帶的PE文件分別復制到該內存中:

PE在內存中初始化完畢,這里就開始執行PE入口代碼:

下圖為內存中加載的PE的OEP處:

將此PE文件提取出來,我們發現文件的PE頭和NT頭的標志被故意修改了,PE頭被改為0x4567,NT頭被改為0x12345678,如圖:

把此2處修改后,恢復正常PE的結構,可以查看PE的基本信息如下,版本信息偽裝來自蘋果公司:

遠控程序分析
該文件是一個EXE程序,功能為支持DNSTunnel通信的遠控Server。程序中的字符串都做了簡單的加密處理,下圖為入口處初始化用到的API的地址:

解密算法有2種,一種是單字節+0x80獲取ASCII的明文字符串,另一種為雙字節+0x80獲取UNICODE的明文字符串:
- 解密DLL模塊名的函數如下:

- 解密API函數的的函數:
每一個字節+0x80,遇到0結束,得到明文的字符串:

然后通過枚舉模塊導出表的形式獲取函數的地址并存到參數里:

解密出域名,解密的算法一樣:

解密出的域名如下:

- facebook-cdn.net
- z.gl-appspot.org
- z.tonholding.com
- z.nsquery.net
使用UDP協議連接8.8.8.8(Google DNS服務器)的53端口或208.67.222.222 (OpenDNS)的53端口;

調用sendto把符合DNS請求格式的數據包發送出去:

數據包信息如下,使用Base64編碼:

該樣本也支持TCP協議:

然后進入遠控消息分發模塊:

如下為消息分發執行函數,第4-8字節為命令的Token:

后門Token對應的惡意功能映射列表如下:

總結
本文中所分析的樣本所包含的后門Payload為2017年上半年海蓮花團伙的樣本,但加載方式上換用了通過MSBuild加載,這種加載惡意代碼的方式本質上與利用帶正常簽名的PE程序加載位于數據文件中的惡意代碼的方法相同。原因在于:一、MSBuild是微軟的進程,不會被殺軟查殺,實現防病毒工具的Bypass;二、很多Win7電腦自帶MSBuild,有足夠大的運行環境基礎,惡意代碼被設置在XML文件中,以數據文件的形式存在不易被發現明顯的異常。
IOC

參考鏈接
MSBuild
https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild
MSBuild入門 - Blackheart - 博客園:
https://www.cnblogs.com/l_nh/archive/2012/08/30/2662648.html
Cybereason Labs Discovery: Operation Cobalt Kitty: A large-scale APT in Asia carried out by the OceanLotus Group:
https://www.cybereason.com/blog/blog-cybereason-labs-discovery-operation-cobalt-kitty-a-large-scale-apt-in-asia-carried-out-by-the-oceanlotus-group
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/462/
暫無評論