[译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测
這是作者新開的一個(gè)專欄,主要翻譯國外知名的安全廠商APT報(bào)告文章,了解它們的安全技術(shù),學(xué)習(xí)它們溯源APT組織的方法,希望對(duì)您有所幫助。前文分享了APT組織Fin7 / Carbanak的Tirion惡意軟件,包括OpBlueRaven行動(dòng)。這篇文章將介紹一種新型無文件APT攻擊Kraken,它會(huì)利用Windows錯(cuò)誤報(bào)告服務(wù)逃避檢測。其中,DllMain函數(shù)反分析檢查,以確保它不在分析/沙箱環(huán)境或調(diào)試器中運(yùn)行非常值得我們學(xué)習(xí)。
Malwarebytes研究人員發(fā)現(xiàn)了一種名為Kraken的新攻擊,該攻擊利用Windows錯(cuò)誤報(bào)告(WER)服務(wù)以逃避檢測。攻擊始于一個(gè)包含“Compensation manual.doc”的ZIP文件。該文檔包含一個(gè)惡意宏,該宏使用CactusTorch VBA模塊的修改版,通過使用VBScript將.Net編譯的二進(jìn)制文件加載到內(nèi)存中來執(zhí)行,以進(jìn)行無文件攻擊。該二進(jìn)制文件通過將嵌入式Shellcode注入Windows錯(cuò)誤報(bào)告服務(wù)(WerFault.exe)來推進(jìn)了感染鏈,此策略用于嘗試逃避檢測。
- 原文標(biāo)題:Release the Kraken: Fileless APT attack abuses Windows Error Reporting service
- 原文鏈接:https://blog.malwarebytes.com/malwarebytes-news/2020/10/kraken-attack-abuses-wer-service/
- 文章作者: Hossein Jazi and Jér?me Segura
- 發(fā)布時(shí)間:2020年10月6日
- 文章來源:Malwarebytes Threat Intelligence Team
文章目錄
- 惡意誘餌:“您的賠償”
- Kraken Loader
- ShellCode分析
- 最終的Shellcode
- 究竟是哪個(gè)APT組織的攻擊呢?
2020年9月17日,我們發(fā)現(xiàn)了一種名為Kraken的新攻擊,該攻擊將其有效載荷注入到Windows錯(cuò)誤報(bào)告(Windows Error Reporting,WER)服務(wù)中,作為一種防御規(guī)避機(jī)制。
這個(gè)報(bào)告服務(wù)是WerFault.exe,通常發(fā)生在與操作系統(tǒng)、Windows函數(shù)或應(yīng)用程序相關(guān)的錯(cuò)誤時(shí)調(diào)用。當(dāng)受害者看到他們的計(jì)算機(jī)上運(yùn)行WerFault.exe時(shí),他們可能認(rèn)為發(fā)生了一些錯(cuò)誤,而在這種情況下,他們實(shí)際上已成為攻擊的目標(biāo)。
盡管這項(xiàng)技術(shù)不是什么新技術(shù),但這次行動(dòng)很可能是一個(gè)APT組織發(fā)動(dòng)的,該組織先前曾使用網(wǎng)絡(luò)釣魚攻擊,誘使受害者提出工人賠償要求。威脅攻擊者入侵了一個(gè)網(wǎng)站以托管其有效載荷,然后使用CactusTorch框架執(zhí)行無文件攻擊(fileless attack),隨后采用多種反分析技術(shù)(anti-analysis )。
在撰寫本文時(shí),盡管有一些因素讓我們認(rèn)為其是越南APT32組織,但目前仍然不能明確指出這次攻擊的幕后發(fā)動(dòng)者。
WerFault.exe是一個(gè)Windows系統(tǒng)自帶的程序,用于錯(cuò)誤報(bào)告顯示。在應(yīng)用程序崩潰時(shí),它仍然會(huì)執(zhí)行未處理的異常處理程序,但是該處理程序會(huì)向WER服務(wù)發(fā)送消息,并且服務(wù)會(huì)啟動(dòng)WER錯(cuò)誤報(bào)告進(jìn)程以顯示錯(cuò)誤報(bào)告對(duì)話框。
- %Systemroot%\System32\Werfault.exe
惡意誘餌:“您的賠償”
9月17日,我們發(fā)現(xiàn)了一種新型攻擊,該攻擊從一個(gè)包含惡意文檔的zip文件開始,該文檔很可能是通過魚叉式網(wǎng)絡(luò)釣魚攻擊傳播的。文檔名叫“薪酬手冊”(Compensation manual.doc),偽裝成包含有關(guān)工人補(bǔ)償權(quán)利的信息,惡意文檔如下圖所示。
該文件包含一個(gè)圖像標(biāo)簽(“ INCLDEPICTURE ”),該圖像標(biāo)簽連接到如下網(wǎng)址,然后下載一張圖片作為文檔模板。
- yourrighttocompensation[.]com
下圖為嵌入在文檔中的圖片標(biāo)簽(Image tag)及對(duì)應(yīng)的“您的補(bǔ)償”網(wǎng)站。
該域名于2020年6月5日注冊,而文檔創(chuàng)建時(shí)間為2020年6月12日,這很可能表明它們屬于同一攻擊。在其內(nèi)部,我們看到一個(gè)惡意宏,該宏使用CactusTorch VBA模塊的修改版來執(zhí)行其Shellcode。CactusTorch正在利用DotNetToJscript技術(shù)將.Net編譯的二進(jìn)制文件加載到內(nèi)存中,并從vbscript中執(zhí)行。
下圖顯示了該威脅攻擊者所使用的宏內(nèi)容。它具有自動(dòng)打開和自動(dòng)關(guān)閉功能。AutoOpen只是顯示一條錯(cuò)誤消息,而AutoClose是執(zhí)行函數(shù)的主體。
如上圖所示,已經(jīng)定義了一個(gè)十六進(jìn)制格式的序列化對(duì)象,它包含一個(gè)正在加載到內(nèi)存中的.Net有效負(fù)載(Payload)。然后,宏使用“ Kraken.Kraken”作為值定義了一個(gè)入口類。這個(gè)值有兩個(gè)部分,用一個(gè)點(diǎn)分隔.net加載器的名稱和它目標(biāo)類的名稱。
在下一步中,它將創(chuàng)建一個(gè)序列化的BinaryFormatter對(duì)象,并使用BinaryFormatter的deseralize函數(shù)反序列化該對(duì)象。最后,通過調(diào)用DynamicInvoke函數(shù),從內(nèi)存中加載并執(zhí)行.Net有效負(fù)載(Payload)。
與CactusTorch VBA不同,它指定了目標(biāo)進(jìn)程在宏中注入Payload,該元素更改了宏并在.Net有效負(fù)載中指定目標(biāo)進(jìn)程。
Kraken Loader
加載的Payload是一個(gè)名叫“ Kraken.dll”的.Net DLL,該文件編譯于2020年06月12日。
這個(gè)DLL是一個(gè)加載器,它將嵌入的shellcode注入到WerFault.exe中。需要說明的是,這并不是此類技術(shù)的第一個(gè)例子。以前在使用NetWire RAT和Cerber勒索軟件時(shí)就觀察到了這種情況。下圖展示了Kraken.dll,加載器包括兩個(gè)主要的類:
- Kraken
- Loader
(1) Kraken類
Kraken類包含了shellcode,這些代碼將被注入到這個(gè)類中定義為“WerFault.exe”的目標(biāo)進(jìn)程中。它只有一個(gè)函數(shù)調(diào)用Loader類的Load函數(shù),其shellcode和目標(biāo)進(jìn)程作為參數(shù)。
- loader.load(targetProcess, shellcode)
(2) Loader類
Loader類負(fù)責(zé)通過調(diào)用Windows API將shell代碼注入到目標(biāo)進(jìn)程中。下圖展示了load函數(shù)。
下面是它執(zhí)行注入過程的步驟:
- StartProcess函數(shù)調(diào)用CreateProcess Windows API,使用800000C作為dwCreateFlags
- FindEntry調(diào)用ZwQueryInformationProcess來定位目標(biāo)進(jìn)程的基址
- CreateSection調(diào)用ZwCreateSection API來在目標(biāo)進(jìn)程中創(chuàng)建一個(gè)節(jié)(section)
- 調(diào)用ZwMapViewOfSection將該節(jié)綁定到目標(biāo)進(jìn)程,以便通過調(diào)用CopyShellcode來復(fù)制shellcode
- MapAndStart通過調(diào)用WriteProcessMemory和ResumeThread完成過程注入
ShellCode分析
使用HollowHunter,我們將注入的shellcode轉(zhuǎn)儲(chǔ)到WerFault.exe中,以便進(jìn)行進(jìn)一步分析。這個(gè)DLL在多個(gè)線程中執(zhí)行其惡意活動(dòng),使其分析更加困難。這個(gè)DLL通過調(diào)用“Main”函數(shù)來執(zhí)行“DllEntryPoint”。
主函數(shù)調(diào)用DllMain來創(chuàng)建一個(gè)線程,在同一進(jìn)程上下文中的新線程中執(zhí)行它的函數(shù)。
DllMain函數(shù)如上圖所示,創(chuàng)建的線程首先執(zhí)行一些反分析檢查,以確保它不在分析/沙箱環(huán)境或調(diào)試器中運(yùn)行,它通過以下操作來實(shí)現(xiàn)的。
(1) 通過調(diào)用GetTickCount來檢查調(diào)試器的存在
GetTickCount是一種計(jì)時(shí)函數(shù),用于度量執(zhí)行某些指令集所需要的時(shí)間。在此線程中,它在睡眠(Sleep)指令之前和之后被調(diào)用兩次,然后計(jì)算差值。如果不等于2,則程序退出,因?yàn)闃?biāo)識(shí)著它正在被調(diào)試。創(chuàng)建線程代碼如下圖所示。
(2) VM檢測
在此函數(shù)中,它將通過提取顯示驅(qū)動(dòng)程序注冊表項(xiàng)的提供程序名稱來檢查其是否在VMWare或VirtualBox中運(yùn)行。
- SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000
然后檢查它是否包含字符串VMware或Oracle。
(3) IsProcessorFeaturePresent
此API調(diào)用用于確定是否支持指定的處理器特性。從下圖可以看出,“ 0x17”已作為參數(shù)傳遞給此API,這意味著它在立即終止之前檢查剩余的__fastfail支持。
(4) NtGlobalFlag
shellcode代碼檢查PEB結(jié)構(gòu)中的NtGlobalFlag來確定它是否正在被調(diào)試。為了識(shí)別調(diào)試器,它將NtGlobalFlag值與0x70進(jìn)行比較。
(5) IsDebuggerPresent
通過調(diào)用“IsDebuggerPresent”來檢查調(diào)試器是否存在。下圖展示了 NtGlobalFlag 和 IsDebuggerPresent 檢查。
在執(zhí)行所有這些反分析檢查之后,它進(jìn)入一個(gè)函數(shù),在一個(gè)新線程中創(chuàng)建最終的shellcode。通過調(diào)用“ Resolve_Imports”函數(shù),可以動(dòng)態(tài)混淆并解析在此部分中使用的導(dǎo)入調(diào)用。此函數(shù)使用LoadLibraryEx獲取“kernel32.dll”的地址,然后在循環(huán)中檢索12個(gè)導(dǎo)入。
使用libpeconv庫,我們能夠獲得已解析的API調(diào)用表。下面是導(dǎo)入表,我們可以預(yù)期它將執(zhí)行一些進(jìn)程注入。
- VirtualAlloc
- VirtualProtect
- CreateThread
- VirtualAllocEx
- VirtualProtectEx
- WriteProcessMemory
- GetEnvironmentVariableW
- CreateProcessW
- CreateRemoteThread
- GetThreadContext
- SetThreadContext
- ResumeThread
在解析了所需的API調(diào)用之后,它使用VirtualAlloc創(chuàng)建一個(gè)內(nèi)存區(qū)域,然后調(diào)用下面的函數(shù)來解密最終shellcode的內(nèi)容,并將它們寫入創(chuàng)建的內(nèi)存中。
- DecryptContent_And_WriteToAllocatedMemory
在下一個(gè)步驟中,將調(diào)用VirtualProtect來更改對(duì)已分配內(nèi)存的保護(hù)以使其可執(zhí)行。最后,CreateThread被調(diào)用來在一個(gè)新線程中執(zhí)行最后的shellcode。
最終的Shellcode
最終的shellcode是一組指令,這些指令向硬編碼域發(fā)出HTTP請(qǐng)求,以下載惡意有效負(fù)載并將其注入到進(jìn)程中。
第一步,它通過調(diào)用LoadLibraryA加載Wininet API。
第二步,構(gòu)建函數(shù)調(diào)用列表所需的HTTP請(qǐng)求,包括InternetOpenA、InternetConnectA、InternetOpenRequestA和InternetSetOptionsExA。其中,HttpOpenRequestA如下圖所示。
第三步,在準(zhǔn)備好構(gòu)建HTTP請(qǐng)求的需求之后,它將創(chuàng)建一個(gè)HTTP請(qǐng)求,并通過調(diào)用HttpSendrequestExA發(fā)送該請(qǐng)求。請(qǐng)求的網(wǎng)址是:
- http://www.asikotoba [.]net/favicon32.ico
在下一步中,它將檢查HTTP請(qǐng)求是否成功。如果HTTP請(qǐng)求不成功,它將調(diào)用ExitProcess停止其進(jìn)程。
如果HTTPSendRequestExA的返回值為true,則表示請(qǐng)求成功,并且代碼繼續(xù)執(zhí)行下一步。在此步驟中,它調(diào)用VirtualAllocExA分配內(nèi)存區(qū)域,然后調(diào)用InternetReadFile讀取數(shù)據(jù)并將其寫入分配的內(nèi)存。InternetReadFile調(diào)用如下圖所示。
最后,它跳轉(zhuǎn)到已分配內(nèi)存的開頭以執(zhí)行它。這很有可能是另一個(gè)受感染的“asia-kotoba.net”網(wǎng)站上托管的shellcode,并在其中植入了偽造的圖標(biāo)。由于在報(bào)告時(shí)目標(biāo)URL已關(guān)閉,因此我們無法檢索此Shellcode進(jìn)行進(jìn)一步分析。
究竟是哪個(gè)APT組織的攻擊呢?
我們沒有足夠的證據(jù)來確定這次攻擊的原因。但是,我們發(fā)現(xiàn)其與APT32的松散聯(lián)系,并且仍在調(diào)查中。
- APT32是已知使用CactusTorch HTA來刪除Denis Rat變中的攻擊組織之一。然而,由于我們無法獲得最終的有效負(fù)載(Payload),因此我們不能肯定地將這種攻擊歸因于APT32。
- 用于托管惡意檔案和文檔的域在越南胡志明市注冊。APT32使用了戰(zhàn)略性網(wǎng)絡(luò)妥協(xié)方案來鎖定受害者,感覺像是越南的。
Malwarebytes阻止訪問托管有效負(fù)載的受感染站點(diǎn):
最后給出IOCs:
誘餌文件: 31368f805417eb7c7c905d0ed729eb1bb0fea33f6e358f7a11988a0d2366e942包含誘餌文件的文檔: d68f21564567926288b49812f1a89b8cd9ed0a3dbf9f670dbe65713d890ad1f4文檔模板圖片: yourrighttocompensation[.]com/ping存檔文件下載URL: yourrighttocompensation[.]com/?rid=UNfxeHM yourrighttocompensation[.]com/download/?key= 15a50bfe99cfe29da475bac45fd16c50c60c85bff6b06e530cc91db5c710ac30&id=0 yourrighttocompensation[.]com/?rid=n6XThxD yourrighttocompensation[.]com/?rid=AuCllLU下載URL的最終Payload: asia-kotoba[.]net/favicon32.ico最后希望這篇文章對(duì)您有所幫助,感覺反分析和沙箱逃逸部分知識(shí)挺有意思的,后續(xù)不忙可以嘗試復(fù)現(xiàn)相關(guān)的功能。中秋節(jié)和國慶節(jié)結(jié)束,雖然一直在忙,大家接著加油。某人照顧好自己喔!
前文分享:
- [譯] APT分析報(bào)告:01.Linux系統(tǒng)下針對(duì)性的APT攻擊概述
- [譯] APT分析報(bào)告:02.釣魚郵件網(wǎng)址混淆URL逃避檢測
- [譯] APT分析報(bào)告:03.OpBlueRaven揭露APT組織Fin7/Carbanak(上)Tirion惡意軟件
- [譯] APT分析報(bào)告:04.Kraken - 新型無文件APT攻擊利用Windows錯(cuò)誤報(bào)告服務(wù)逃避檢測
2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數(shù)據(jù)分析、網(wǎng)絡(luò)空間安全、逆向分析、APT分析報(bào)告、人工智能、Web滲透及攻防技術(shù)進(jìn)行講解,同時(shí)分享CCF、SCI、南核北核論文的算法實(shí)現(xiàn)。娜璋之家會(huì)更加系統(tǒng),并重構(gòu)作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學(xué)所感所做分享出來,還請(qǐng)各位多多指教,真誠邀請(qǐng)您的關(guān)注!謝謝。
(By:Eastmount 2020-10-08 星期四 晚上11點(diǎn)寫于武漢 http://blog.csdn.net/eastmount/ )
總結(jié)
以上是生活随笔為你收集整理的[译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [译] APT分析报告:03.OpBlu
- 下一篇: [论文阅读] (04) 人工智能真的安全