近日,法國安全研究者兼BotConf和FastIR公司創始人Sebastien Larinier,**

針對RTF文檔相關的CVE-2017–11882漏洞利用專門製作了一條YARA規則,來捕獲攻擊線索。

**經過海量數據比對,他發現了一個用來執行APT攻擊的惡意RTF文檔樣本,其中的內容和越南峴港市海洲郡的建設項目相關,文檔標題為《Ch??ng trình ho?t ??ng cnit 2018》。據Sebastien Larinier聲稱,按照該惡意文檔表現出來的各項行為指標和特徵值,他懷疑該APT攻擊文檔的幕後使用者為中國的黑客組織1937CN。

本文中,Sebastien Larinier著重描述了該惡意文檔的感染攻擊機制、網路攻擊架構以及攻擊者採用的相關TTPs技術。

感染攻擊鏈

Joe sandbox 在線沙盒分析網站對該文檔的詳細感染行為給出了很好的描述:

該惡意RTF文檔利用漏洞會向目標操作系統中寫入以下兩個文件:

一個名為 RasTls.dll 的dll文件

一個名為dascgosrky.exe的可執行文件

RTF文檔分析

在Python的RTF分析工具rtfobj幫助下,可以發現惡意RTF文檔中的三個ole對象:一個類名為package的ole對象,以及另兩個不良結構的ole對象。

在名為package的ole對象中,存在一個8.t文件的載入路徑:

這種技術看似是用來執行 .sct 格式文件,以向網路下載一個可執行程序,植入到目標操作系統中。McAfee安全實驗室曾用 .sct文件為樣本對這種技術進行過分析。這種技術由於簡單有效,並且支持Office相關文檔,屢次被很多攻擊者進行了在野利用。這以上路徑中,可以看到,RTF文檔會從系統%TMP% 目錄中載入一個 8.t 文件。經分析,8.t 文件為一個加密文件:

經檢查,另兩個不良結構的ole對象為涉及「Equation Native」流的ole公式對象,其中可以看到CVE-2017–11882漏洞利用的影子:

ole對象末尾,能看到很多API介面的runPE技術調用,這樣惡意程序會掛起一個系統進程,並在其中注入惡意執行代碼。另外,還發現了對象開始處的有意思的字元串: 7e079a2524fa63a55fbcfe:

該字元串曾在「響尾蛇」APT攻擊的ole公式對象中出現過,可能攻擊者都使用了同一套惡意程序組裝工具。現在有了載入文件8.t ,以及runPE技術的確定。接下來,需要來做更深入的shellcode分析。

逆向ShellCode

在分析伊始,Sebastien認為 Winword.exe 會調用 CreateProcess 函數來創建EQNEDT32.exe進程,所以他決定在CreateProcess 函數的調用處設置一個斷點。

但是,後來發現,EQNEDT32.exe 進程是由Winword.exe利用COM Object對象調用的,並不是由 CreateProcess 函數來創建的,而且Winword.exe也不是EQNEDT32.exe的父進程。所以,只好在EQNEDT32.exe啟動時附加上調試器。為此,可以採用映像劫持(Image File Execution Options,IFEO)方法來進行分析。

所謂的映像劫持(IFEO)就是Image File Execution Options,位於註冊表的 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options 由於這個項主要是用來調試程序用的,對一般用戶意義不大。默認是隻有管理員和local system有權讀寫修改。通俗來說,就是比如我想運行a.exe,結果運行的卻是b.exe,也就是說在這種情況下,a程序被b給劫持了,即你想運行的程序被另外一個程序代替了。

先在Image File Execution Options的註冊表薦中創建了一個名為EQNEDT32.exe的鍵值:

然後,為它設置一個EQNEDT32.exe執行是啟動調試器的變數串值,以此把調試器附加到EQNEDT32.exe進程中去。

當打開惡意RTF文檔後,Winword.exe和EQNEDT32.exe兩個進程同時啟動。

在EQNEDT32.exe進程的入口點處,調試器被附加進入:

現在,檢查文件8.t是否在 %TMP% 目錄中創建生成,果然8.t被drop到了 %TMP% 目錄中:

然後,在函數CreateFile處設置斷點,查看漏洞利用的shellcode是否會讀取文件8.t。在call eqnedt32.41E5EE處,函數CreateFile被調用。文件路徑的參數在堆棧執行push dword ptr ss:[ebp-4]操作被壓入堆棧,也即把內存ss:[ebp-4]處存放的雙字壓入堆棧。

Shellcode使用函數CreateFile把文件8.t創建生成到%TMP% 目錄下,現在,可以在調用函數處返回用戶代碼。

深入分析之後,進入shellcode區域,其地址空間已經發生改變。以下即為漏洞利用代碼的shellcode段:

在函數CreateFile調用之後, 函數GetFileSize被調用以獲取文件大小:

之後就是一個VirtualAlloc函數。VirtualAlloc是一個Windows API函數,該函數的功能是在調用進程的虛地址空間,預定或者提交一部分頁,也可理解為申請內存空間。這裡的VirtualAlloc函數在1FD0000 (eax value)處申請創建了一個內存頁面,用它來載入文件8.t:

VirtualAlloc函數之後,創建的內存頁面由EAX操作指向:

分配的內存頁面:

然後,用函數ReadFile去讀取文件8.t:

接著,文件8.t被讀取載入到了分配的內存頁面 1FD0000 處,以下為文件8.t在內存頁面中的樣式:

在0066C82A內存處,shellcode會對文件8.t進行編碼解密,解密循環是圍繞解密密鑰進行的一系列異或(XOR)操作,解密開始,解密密鑰被設置到了7BF48E63中。以下為解密循環:

之後,執行異或(XOR)操作,解密密鑰被設置到了EAX寄存器中:

如果檢查異或(XOR)操作的目的地ds:[edx+ebx],可以發現,在01FD0000處發生了文件8.t載入行為,兩步執行解密之後,終於可以在內存區開頭看到神奇的字元串「MZ」了,MZ為window的PE文件標誌。

解密循環結束之後,我們會在內存01FD0000處得到一個PE程序,到此,文件8.t被解密了:

接下來,shellcode使用VirtualAlloc函數在02070000處創建了一個內存頁面:

之前,在內存01FD0000處解密得到的PE程序被拷貝到了這個地址處:

在EQNEDT32.exe運行過程中,shellcode調用GetModuleFileNameA函數來獲取自身文件的完整路徑。之後,shellcode將正常的EQNEDT32.exe進程進行分支,創建出另一個獨立的EQNEDT32.exe進程,並把它執行掛起狀態:

然後在地址02070000處把該進程進行覆蓋:

以下為NTWriteVirtualMemory寫入內存時涉及的堆棧:

之後,shellcode會把掛起狀態的進程重啟,以此執行新注入的PE程序。所以,可以發現在OLE對象開頭處存在所有的API調用,並且存在runPE方法來啟動新注入的 EQNEDT32.exe 程序。

EQNEDT32.exe獨立進程的分支創建分析

前面提過,被注入覆蓋的新進程EQNEDT32.exe會在目標操作系統中寫入以下兩個文件:

一個名為 RasTls.dll 的dll文件

一個名為dascgosrky.exe的可執行文件

如果把EQNEDT32.exe進程剝離出來,把它放到IDA中分析,可以發現該進程在sub_00401150處釋放文件的方法函數,把它命名為dropFiles。

在該方法開始,存在一個xor循環:

之後,會調用壓縮方法函數zlib:

在sub_4012D0處,文件釋放函數dropFiles會被兩次調用。

檢查整個流程,可以發現,函數dropFiles只會被sub_4012D0進行調用,如下:

由於EQNEDT32.exe每次的執行,都會由函數CreateFile的onstaticcache.dat文件啟動,所以,在函數CreateFile處設置了一個斷點:

然後,回到用戶代碼中,在函數dropFiles初次被調用的0040159A處再設置一個斷點,以便進行靜態分析:

這樣,就能分析第二遍解密循環了,先要來初始化解密函數:

接著,可以發現xor異或和把結果儲存在esi+eax中操作:

解密循環第一步中,結果被寫入EQNEDT32.exe進程地址空間的411BC0:

循環完成之後,可以得到zlib壓縮對象的頭信息:

在內存頁面021E0000中,會被分配存儲dll文件:

同時,在其中一個PE進程dascgosrky.exe會被解壓縮:

之後,RasTls.dll文件由以下路徑被創建,並被儲存在ebx寄存器中:

L」C:UsersIEUserAppDataRoamingMicrosoftWindowsNetwork ShortcutsRasTls.dll」

在此過程中,函數dropFiles被兩次調用進行解密和PE文件的解壓縮操作。EQNEDT32.exe進程的文件存儲偏移位於00434EF8 ,而其PE解壓縮程序dascgosrky.exe存儲在025D0020處。如下圖所示:

之後,dascgosrky.exe釋放到以下系統路徑中,其基地址ebx為005DA228

L」C:UsersIEUserAppDataRoamingMicrosoftWindowsNetwork Shortcutsdascgosrky.exe」

由此,可以在網路行為中監測到以下兩個文件釋放到操作系統中:

dll劫持

表面來看,dascgosrky.exe程序是一個賽門鐵克公司簽發的合法可信文件:

它為了載入RasTls.dll,會調用sub_401940處的 LoadLibrary 和 GetProcaddress 方法,來實現其惡意行為。以下為其載入的惡意行為:

攻擊者利用的網路架構

攻擊者利用的域名為wouderfulu.impresstravel.ga,解析對應IP地址為192.99.181.14:

在該IP地址中,存在多個越南語相關的對應域名,這些域名還和IP地址176.223.165.122有關聯:

其中兩個越語域名有點意思:

halong.dulichculao.com 曾在對越某些機構發起的網路攻擊中用過,Fortinet曾對這類攻擊做過詳細分析,並把其追溯為中國的黑客組織-1937CN。

把這兩次攻擊的各項TTP指標進行對比,發現基本相似,攻擊者都使用了RTF文檔作為前期入侵,而用DLL劫持作為後期payload載入。

此次攻擊中的另外一個域名cat.toonganuh.com,是toonganuh.com的子域名,也曾被發現和中國黑客組織-1937CN註冊過的郵箱[email protected]有關聯。

總結

基於以上發現,Sebastien Larinier推斷,中國黑客組織 1937CN 以同樣的TTPs手法和更新過的工具組件,針對越南政府部門開展著持續的網路攻擊。Sebastien認為,1937CN創建RTF惡意文檔的特性和「響尾蛇」APT組織相似。Sebastien Larinier聲稱將會在後續的分析中給出更多證據。

IOC

域名:

dn.dulichbiendao.org

gateway.vietbaotinmoi.com

web.thoitietvietnam.org

hn.dulichbiendao.org

halong.dulichculao.com

cat.toonganuh.com

new.sggpnews.com

dulichculao.com

coco.sodexoa.com.

thoitiet.malware-sinkhole.net

wouderfulu.impresstravel.ga

toonganuh.com

coco.sodexoa.com

IP地址:

192.99.181.14

176.223.165.122

RTFs:

42162c495e835cdf28670661a53d47d12255d9c791c1c5653673b25fb587ffed

8.t:

2c60d4312e4416745e56048ee35e694a79e1bc77e7e4d0b5811e64c84a72d2d7

PE:

f9ebf6aeb3f0fb0c29bd8f3d652476cd1fe8bd9a0c11cb15c43de33bbce0bf68 (exe)

9f5da7524817736cd85d87dae93fdbe478385baac1c0aa3102b6ad50d7e5e368 (dll)

Update:

The payload is PlugX. Thanks to Gabor Szappanos https://twitter.com/GaborSzappanos/status/1024622354582908928

Update IOCs:

597c0c6f397eefb06155abdf5aa9a7476c977c44ef8bd9575b01359e96273486 59.rtf

11f38b6a69978dad95c9b1479db9a8729ca57329855998bd41befc364657d654 RasTls.dll

f9ebf6aeb3f0fb0c29bd8f3d652476cd1fe8bd9a0c11cb15c43de33bbce0bf68 RasTls.exe

b70069e1c8e829bfd7090ba3dfbf0e256fc7dfcefc6acafb3b53abcf2caa2253 b7.rtf

77361b1ca09d6857d68cea052a0bb857e03d776d3e1943897315a80a19f20fc2 spoolsver.exe

9fba998ab2c1b7fec39da9817b27768ba7892c0613c4be7c525989161981d2e2 vsodscpl.dll

9d239ddd4c925d14e00b5a95827e9191bfda7d59858f141f6f5dcc52329838f0 9d.rtf

087d8bee1db61273a7cd533d52b63265d3a8a8b897526d7849c48bcdba4b22ec RasTls.dll

f9ebf6aeb3f0fb0c29bd8f3d652476cd1fe8bd9a0c11cb15c43de33bbce0bf68 RasTls.exe

332aa26d719a20f3a26b2b00a9ca5d2e090b33f5070b057f4950d4f088201ab9 rtf

93aa353320a8e27923880401a4a0f3760374b4d17dcd709d351e612d589b969d vsodscpl.dll

77361b1ca09d6857d68cea052a0bb857e03d776d3e1943897315a80a19f20fc2 ScnCfg.exe

*參考來源:

medium 

,clouds 編譯,轉載請註明來自 FreeBuf.COM


推薦閱讀:
相關文章