9月17日,研究人員發現一個名為Kraken 新攻擊活動,會將payload 注入Windows Error Reporting (WER,Windows 錯誤報告)服務中作為繞過機制。
[[345890]]
WER 服務(WerFault.exe)一般是在有與操作系統、Windows特征、和應用程序相關的錯誤產生時才會被調用。當受害者看到WerFault.exe 運行時,會認為有錯誤產生,實際上在本次攻擊事件中是被攻擊了。
誘餌文件
9月17日,研究人員發現一起利用魚叉式釣魚攻擊來傳播含有惡意文檔的zip文件的攻擊活動。惡意文件“Compensation manual.doc” 偽裝成含有關于員工賠償的文檔:

圖 1: 惡意誘餌文檔
文件中含有一個image 標簽(“INCLDEPICTURE“)會連接到yourrighttocompensation[.]com,并下載一個文檔模板的圖像。

圖 2: 嵌入文檔中的Image tag

圖 3: yourrighttocompensation 網站
yourrighttocompensation 網站域名是2020年6月5日注冊的,文檔的創建時間為2020年6月12日。這表明這是同一攻擊的2個部分。事實上,研究人員還發現了一個惡意宏,惡意宏使用修改的CactusTorch VBA模塊來執行shellcode。CactusTorch 使用DotNetToJscript 技術來加載.NET 編譯的二進制文件到內存中,并從vbscript 執行。
圖4就是攻擊者使用的宏內容,有AutoOpen(自動打開)和 AutoClose(自動關閉)函數。AutoOpen 負責顯示錯誤消息,而AutoClose 負責執行主要活動。

圖 4: 宏內容
如圖4所示,十六進制的序列號對象中含有加載到內存中的.NET payload。然后,宏定義了一個記錄類(entry class),值為Kraken.Kraken。該值有2個部分,用.隔開:分別是.Net 加載器的名字和目標類的名字。
然后回創建一個序列化BinaryFormatter 對象并使用BinaryFormatter 的反序列號函數將對象反序列化。最后,通過調用DynamicInvoke來加載.Net payload 到內存中并執行。
Kraken加載器
加載的payload是一個名為Kraken.dll 的.Net DLL,編譯時間為2020年6月12日。該DLL是一個加載器,會注入嵌入的shellcode到WerFault.exe中。
加載器有2個主類:Kraken 和Loader。

圖 5: Kraken.dll
Kraken 類中含有要注入到目標進程的shellcode,目標進程在WerFault.exe中進行了定義。它只有一個功能就是調用Loader 類的Load 函數和目標進程作為參數。

圖 6: Kraken class
Loader 類負責調用Windows API來注入shellcode到目標進程中。

圖 7: Load函數
執行進程注入的步驟如下:
· StartProcess 函數調用CreateProcess Windows API,其中dwCreateFlags 的值為800000C;
· FindEntry調用ZwQueryInformationProcess 來定位目標進程的基址;
· CreateSection 調用 ZwCreateSection API 來在目標進程中創建一個section;
· 調用ZwMapViewOfSection 來綁定該section 到目標進程中,通過調用CopyShellcode 來復制shellcode;
· MapAndStart 通過調用WriteProcessMemory和ResumeThread 來完成進程注入。
ShellCode 分析
研究人員使用HollowHunter復制出了注入到WerFault.exe 的shellcode。該DLL 會在多個線程中執行惡意活動,因此很難分析。
DLL的執行是通過調用“DllEntryPoint”,而“DllEntryPoint”會調用Main 函數。

圖 8: Main進程
Main進程會調用DllMain,DllMain會創建一個線程來在同一進程環境下的新線程中執行其他功能。

圖9: Dll main
創建的線程首先會執行反分析檢查來確保沒有運行在沙箱或調試器等分析環境中。
在執行完反分析檢查后,會在新線程內創建最后的shellcode。這部分使用的import 調用是經過混淆的,會通過調用“Resolve_Imports” 函數來動態解析。
該函數會使用LoadLibraryEx 獲取kernel32.dll 的地址,然后進入循環來提取12個import。

圖 14: Resolve_Imports
研究人員使用 libpeconv 庫來獲取解析的API 調用列表。下面是import的列表:
· VirtualAlloc
· VirtualProtect
· CreateThread
· VirtualAllocEx
· VirtualProtectEx
· WriteProcessMemory
· GetEnvironmentVariableW
· CreateProcessW
· CreateRemoteThread
· GetThreadContext
· SetThreadContext
· ResumeThread
在解析完必須的API 調用后,會使用VirtualAlloc 創建一個內存區域,然后調用“DecryptContent_And_WriteToAllocatedMemory” 來解密final shellcode的內容并寫入創建的內存中。
然后,調用VirtualProtect 來修改對分配的內存的保護以確保其可以執行。最后,調用CreateThread 來在新線程內調用final shellcode。

圖 15: 解析Imports和創建新線程
Final Shell code
Final shellcode是一個指令集合,用來對硬編碼的域名進行HTTP 請求來下載惡意payload 并注入到進程中。
首先,調用LoadLibraryA 來加載Wininet API:

圖 16: 加載Wininet
然后,構建發起HTTP 請求所必須的函數調用集,包括InternetOpenA、InternetConnectA、InternetOpenRequestA 和 InternetSetOptionsExA:

圖 17: HttpOpenRequestA
然后,創建一個HTTP 請求并通過調用HttpSendrequestExA 來發送。請求的URL 是http://www.asia-kotoba[.]net/favicon32.ico :

圖 18: HttpSendRequestExA
然后檢查HTTP 請求是否成功。如果HTTP 請求不成功,就調用ExitProcess 來停止該進程。

圖 19: 檢查HTTP請求成功
如果HTTPSendRequestExA 的返回值是true,也就是說請求是成功的,代碼會繼續下一步。
然后調用VirtualAllocExA 來分配內存區域,并調用InternetReadFile 來讀取數據并寫入到分配的內存中。

圖 20: InternetReadFile 調用
最后,進入分配的內存區域來執行。
由于URL 已經無法訪問,因此無法提取shellcode進行進一步分析。
APT32?
目前還沒有關于該攻擊所屬攻擊組織的足夠證據。但研究人員發現了一些與APT 32相關聯的證據。APT32 以使用CactusTorch HTA來釋放Denis Rat 變種而知名。但是因為無法獲得final payload因此無法進一步分析。用來保存惡意文件和文檔的域名的注冊地址為胡志明市,而APT 32也是位于胡志明的。因此,研究人員分析初步判斷該攻擊活動與APT 32有關聯。

圖 21: 嘗試連接遠程站點的誘餌文件
本文翻譯自:https://blog.malwarebytes.com/malwarebytes-news/2020/10/kraken-attack-abuses-wer-service/如若轉載,請注明原文地址
【編輯推薦】
【責任編輯:姜華 TEL:(010)68476606】