APT32海蓮花組織最新活動:老技術,新後門
OceanLotus(海蓮花),也稱APT32, APT-C-00,攻擊目標主要是東亞國家。研究表明該組織一直在持續更新後門、基礎設施和感染單元。海蓮花攻擊的主要目標是東亞國家的企業和政府組織。幾個月前,研究人員發現了該組織的最新後門並進行了分析。
傳播
攻擊者使用不同的方法欺騙潛在的受害者允許惡意dropper。監測發現越南、菲律賓、寮國、柬埔寨是東亞被攻擊最多的國家。
雙擴展和假應用圖標(Word, PDF)
Droppers一般是以郵件附件形式出現的,一些文件名包括:
這些文件有一個共同點,那就是都是用了密碼保護的誘餌文件。而密碼提供的方式是不確定的,有時候會出現在郵件中,有時候這些文件本來就不能工作。
假安裝包
一些假的安卓包,聲稱是一些流行軟體的安裝包或者更新包,這在水坑攻擊中是常用的。比如,Freebuf上一篇關於重封裝的Firefox安裝包。另一個樣本是,該樣本通過被入侵的網站進行傳播,但是目前沒有足夠的證據。
所有上述的文件,無論是通過郵件還是訪問被入侵的網站,都會釋放相同的後門組件。隨後會對樣本RobototFontUpdate.exe進行分析,了解在系統中執行惡意payload的過程。
技術分析
安裝和執行的過程依賴於多層的混淆技術,比如payload的解密、PE重構和載入shellcode,以及側載入技術等。
執行流概覽
攻擊一共分為二個部分,dropper和後門載入器。下面是惡意軟體執行的流圖。
Dropper部分的執行流如下:
圖 1 Dropper執行流
後門部分執行流如下:
控制流混淆
幾乎所有的組件都被混淆了,混淆是基於補充的條件跳轉指令對進行的,使用的形式有JZ/JNZ, JP/JNP, JO/JNO等;而且每對都跳轉到同一目標。該序列是和垃圾代碼交錯出現的,其中垃圾代碼使用了棧指針,但是並不改變條件flag的值。也就是說會在同一分支結束執行。因為使用了正的棧指針值,所以在反編譯時會引發一些問題。
一些基本塊會向棧中push一個地址,以JMP/CALL結束;而其他基本塊會push兩個地址以RET指令結束。第二個push是調用函數,第一個push是要挑戰的下一塊地址。這就會創建一些沒有父母的基本塊。
在了解了方案後,很容易就可以標記垃圾代碼,在分析代碼時就可以忽略這些垃圾代碼。
Dropper
Stage1 誘餌文件
在過去幾個月里,使用的誘餌文件有很多,其中包括Roboto Slab字體的假的TrueType更新。選擇該字體有點奇怪,因為該字體支持的東亞語言並不多。執行後,二進位文件會解密源並解壓縮解密的數據(LZMA)。合法的RobotoSlab-Regular.ttf(SHA1:912895e6bb9e05af3a1e58a1da417e992a71a324)文件會寫入%temp%文件夾,並通過win32 API函數ShellExecute運行。
從源中解密的shellcode就執行了,執行後,假的字體更新會釋放另一個應用,該應用的目的是刪掉dropper。這個擦除的應用釋放在%temp%[0-9].tmp.exe下。
Stage 2 shellcode
每個階段使用的shellcode都是相同的。這裡的shellcode是一個傳統的PE載入器,會在內存中創建可執行文件,解密所有的部分並計算必要的重新排列和其他偏移。Shellcode會提取3個Windows API函數:VirtualAlloc, RtlMoveMemory 和RtlZeroMemory。
RtlZeroMemory 函數在PE頭中常用的zero-out域。因為MZ/PE頭被破壞了,所以依賴自動化內存複製是沒用的。Shellcode會調用解密的PE中的入口函數,然後調用DLLEntry出口函數。
Stage 3 Real Dropper, .dll
該可執行文件會通過Windows API用AES演算法的CBC模式解密源。硬編碼的key大小是256位。解密後,數據會被解壓(LZMA演算法)。
如果該進程是以管理員許可權運行,惡意軟體會創建一個服務或者用經典的Windows 「Run」註冊表(HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun;DeviceAssociationService;rastlsc.exe)來實現駐留。
如果dropper是以管理員許可權運行,那麼就會嘗試在C:Program FilesSymantecSymantec Endpoint Protection12.1.671.4971.104aDeviceAssociationService文件夾下寫入一些文件,或者寫入%APPDATA%SymantecSymantec
? rastlsc.exe (SHA1:2616da1697f7c764ee7fb558887a6a3279861fac, 合法的symantec網路訪問控制應用dot1xtra.exe的副本)
? SyLog.bin (SHA1:5689448b4b6260ec9c35f129df8b8f2622c66a45, 加密後門)
不同樣本的路徑是不同的,但是模式是類似的。
基於許可權,惡意軟體會在%ProgramFiles%或%appdata%中釋放文件。
? SymantecCNG Key Isolation
? SymantecConnected User Experiences and Telemetry
? SymantecDevQuery Background Discovery Broker Tasks
這些路徑是不同的Symantec產品使用的。
在完成駐留和釋放可執行文件後,合法的Symantec rastlsc.exe會用CreateProcessW執行,另外一個版本是.dll,在該版本中,rastlsc.exe會以參數krv運行。
後門組件: rastlsc.exe side-loading
海蓮花組織在Symantec產品的可執行文件中使用了一種古老但是公開的技術,通過在系統文件夾中寫入惡意庫來利用合法簽名的可執行文件的庫載入過程。這樣,就會讓惡意行為看起來是合法的,因為這些行為是可信的可執行進程執行的。合法的可執行文件rastlsc.exe就會釋放和執行。
可執行文件會輸入rastls.dll文件,該文件中含有惡意payload。
側載入也可以用其他合法簽名的可執行文件包括McAfee的mcoemcpy.exe,該文件會載入McUtil.dll。這種技術之前被PlugX使用過,也受到了越南CERT的關注。
Stage 1 庫函數側載入rastls.dll
Dll的內部文件名為.dll,但是研究人員還看到
.dll這樣的版本,所有的輸出函數都會指向同一函數的執行。
輸出函數會嘗試讀取位於同一文件夾下的SyLog.bin文件,其中版本會嘗試打開文件OUTLFLTR.DAT。如果該文件存在,就會使用AES在CBC模式下解密,然後解壓縮(LZMA壓縮)。
McUtil.dll變種會使用一種不同的技術。看起來主函數沒有任何惡意行為,但事實上會替換合法mcoemcpy.exe文件的.text部分,該文件是一個側載入的二進位文件。會生成調用讀取mcscentr.adf文件中加密的stage-two shellcode的函數的shellcode。
下圖是創建
結果就是下面的集合列表:
Stage 2~Stage 4 Shellcode, Launcher, Shellcode
Shellcode會解密並載入庫
。提取源並嘗試開啟
服務。解密的數據也含有
變種 .dll會檢查rastlsc.exe有沒有用krv作為第一參數執行。如果krv以第一參數執行,就會創建一個任務,然後rastlsc.exe文件也會在沒有參數的情況下再執行一次。
Stage 5 後門 .dll
惡意軟體首先嘗試從源中提取並用RC4解密。解密的源含有一些用來配置後門的信息。該配置的格式可以直接逆向。用Kaitai struct和structure dumper可以看到:
圖 10 配置結構
NOTES: 除了字元串domain_encoding_str和 httpprov庫外,其他的數據在每個變種中都會變化。註冊表幾乎是一樣的,因為遵循系統的模式:
HKCUSOFTWAREClassesAppX[a-f0-9]
惡意軟體會提取用戶名的前10個位元組,用UTF-16 mutex_encoding_str字元串的3個字母進行XOR運算,然後用16進位編碼。計算的結果作為一個互斥名。比如,用戶名以abc開頭,key是vwx,那麼mutex就是:
Sessions1BaseNamedObjects170015001b
後門中還有一個PE載入器文件可以在內存中載入HTTPProv.dll庫函數,稱之為入口點,然後調用輸出函數CreateInstance。
通信
後門使用了經典的TCP通訊協議,使用埠25123。為了獲取伺服器的IP地址,後門首先會創建一個特殊的DNS請求。惡意軟體會在配置中的3個域名中選擇一個,添加用2個值生成的傳統子域名。第一個值是16個位元組長的計算機名,第二個值是4位元組的版本ID。後面的Python 2代碼實現編碼演算法:
如果計算機名是隨機的,版本ID是0x0a841523,就會創建這樣的域名:
下面的表達可以用來標記C&C伺服器:
[ghijklmnopabcdef].[ghijklmnopabcdef].[a-z]+.[a-z]+
如過從一個特定的域名中去解析IP地址,惡意軟體會在25123埠上建立TCP連接。每個表有3個不同的域名可以用來尋找C&C伺服器。所有的通信都是用RC4加密的,並用LZMA壓縮。因為key是預先加在包中的,所以也可能解密流量。格式是:
[RC4 key (4 bytes)][encrypted data]
Key的每個位元組都是用隨機函數生成的。一旦包被解密和解壓縮,數據格式如下:
[dw:unknown][dw:unknown][dw:command number][dw:size of data][dw:unknown][dw:data]
客戶端第一次連接伺服器,伺服器會返回一個UUID作為session ID。Session ID會以二進位數據的形式保存在註冊表中:
HKCUSOFTWAREClassesAppXc52346ec40fb4061ad96be0e6cb7d16aDefaultIcon
後門中還有一個叫做HTTPprov的庫,庫是一種與伺服器通信的可選方式,也就是備份。DLL會發送post請求與之通信,同時支持HTTPS和SOCKS5,SOCKS4a,SOCKS4的使用。該庫是與libcurl靜態鏈接的。
一旦初始化完成,就會創建之後的註冊表來指引後門使用HTTP和C&C伺服器通信:
HKCUSOFTWAREClassesCLSID.
通用的用戶代理是Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0;Trident/4.0).
庫中最特別的特徵是傳統的URI編碼算的。URI的資源部分是用下面的偽代碼創建的:
從生成的字元串中,我們可以看出,基於傳統的校驗和計算兩個數來獲取URI:
通過增加HTTPprov庫的URI生成器,可以生成下面的URL:
hXXp://niggmhggmeggmkggmfggmdggidggngggmjgg.ijhlokga.aisicoin[.]com/13/139756-Ses-Ufali-L
命令
在獲取sessionID後,後門會做一個系統的指紋。包也是照這樣做的:
下面是一個系統指紋的例子:
這個全特徵的後門能提供給運營者許多的能力,比如操作文件、註冊表和進程,載入額外的組件、執行系統指紋等。
下面是支持的命令列表:
結論
海蓮花組織仍然活躍並在持續更新工具集。這也證明了它挑選目標、限制惡意軟體傳播和使用不同伺服器來避免被關注的意圖。Payload解密和側載入技術仍然不能被檢測到,因為這些惡意活動看起來和合法應用沒有區別。
※Docker容器構建過程的安全性分析
※HackTheBox Writeup(上)
TAG:嘶吼RoarTalk |