当前位置: 首页 > 科技观察

Kraken:FilelessAPT攻击滥用Windows错误报告服务

时间:2023-03-15 15:40:49 科技观察

9月17日,研究人员发现了一种名为Kraken的新攻击活动,它将payload注入Windows错误报告(WER,WindowsErrorReporting)服务作为旁路机制。当出现与操作系统、Windows功能和应用程序相关的错误时,通常会调用WER服务(WerFault.exe)。当受害者看到WerFault.exe运行时,他会认为有错误,但在这次攻击中,他实际上是被攻击了。诱饵文件9月17日,研究人员发现了一个使用zip文件分发恶意文件的鱼叉式网络钓鱼活动。恶意文件“Compensationmanual.doc”假装包含一份关于员工薪酬的文件:图1:恶意诱饵文档文件包含一个图像标签(“INCLDEPICTURE”),它连接到yourrighttocompensation[.]com并下载该文件的图像模板。图2:文档中嵌入的图像标签图3:yourrighttocompensation网站yourrighttocompensation网站域名于2020年6月5日注册,文档创建于2020年6月12日。这表明这是同一攻击的两个部分。事实上,研究人员还发现了一个恶意宏,它使用经过修改的CactusTorchVBA模块来执行shellcode。CactusTorch使用DotNetToJscript技术将.NET编译的二进制文件加载到内存中并从vbscript执行它们。图4是攻击者使用的宏内容,包括AutoOpen(自动打开)和AutoClose(自动关闭)函数。AutoOpen负责显示错误消息,而AutoClose负责执行主要活动。图4:宏内容如图4所示,十六进制的序列号对象包含加载到内存中的.NET有效负载。然后,该宏定义了一个值为Kraken.Kraken的入口类。该值由.分隔的两部分组成:.Net加载程序的名称和目标类的名称。然后创建一个序列化的BinaryFormatter对象,使用BinaryFormatter的反序列化函数对该对象进行反序列化。最后,.Net有效负载被加载到内存中并通过调用DynamicInvoke执行。Kraken加载器加载的有效负载是一个名为Kraken.dll的.NetDLL,编译于2020年6月12日。这个DLL是一个将嵌入式shellcode注入WerFault.exe的加载器。Loader有2个主要类:Kraken和Loader。图5:Kraken.dllKraken类包含要注入目标进程的shellcode,它在WerFault.exe中定义。它只有一个功能,就是作为参数调用Loader类和目标进程的Load函数。图6:KrakenclassLoader类负责调用WindowsAPI以将shellcode注入目标进程。图7:Load函数执行进程注入的步骤如下:StartProcess函数调用CreateProcessWindowsAPI,其中dwCreateFlags的值为800000C;FindEntry调用ZwQueryInformationProcess定位目标进程的基地址;CreateSection调用ZwCreateSectionAPI在目标进程中创建A段;·调用ZwMapViewOfSection将该section绑定到目标进程,调用CopyShellcode复制shellcode;·MapAndStart通过调用WriteProcessMemory和ResumeThread完成进程注入。ShellCode分析研究人员使用HollowHunter复制注入WerFault.exe的shellcode。此DLL在多个线程中执行恶意活动,使其难以分析。DLL的执行是通过调用“DllEntryPoint”,“DllEntryPoint”会调用Main函数。图8:Main进程Main进程调用DllMain,它创建一个线程以在同一进程的上下文中的新线程中执行其他功能。图9:Dllmain创建的线程首先进行反分析检查,确保其没有运行在沙箱或调试器等分析环境中。在执行反分析检查后,最终的shellcode在一个新的线程中创建。本节中使用的导入调用通过调用“Resolve_Imports”函数进行混淆和动态解析。这个函数会使用LoadLibraryEx获取kernel32.dll的地址,然后进入循环提取12个导入。图14:Resolve_Imports研究人员使用libpeconv库获取已解析的API调用列表。以下是导入列表:·VirtualAlloc·VirtualProtect·CreateThread·VirtualAllocEx·VirtualProtectEx·WriteProcessMemory·GetEnvironmentVariableW·CreateProcessW·CreateRemoteThread·GetThreadContext·SetThreadContext·ResumeThread在解析出必要的API调用后会使用VirtualAlloc创建内存区域,然后调用“DecryptContent_And_WriteToAllocatedMemory”解密最终shellcode的内容并将其写入创建的内存中。然后,调用VirtualProtect修改分配内存的保护,保证可以执行。最后,调用CreateThread以在新线程中调用最终的shellcode。图15:解析导入并创建新线程FinalShellcodeFinalshellcode是一组指令,用于向硬编码域名发出HTTP请求以下载恶意负载并将其注入进程。首先,调用LoadLibraryA加载WininetAPI:图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的返回值为真,则表示请求成功,代码将继续执行下一步。然后调用VirtualAllocExA分配内存区域,调用InternetReadFile读取数据写入分配的内存。图20:InternetReadFile调用最终进入分配的内存区域执行。由于URL变得不可访问,因此无法提取shellcode进行进一步分析。APT32?目前还没有足够的证据表明此次攻击属于哪个攻击组织。但研究人员发现了一些与APT32相关的证据。APT32以使用CactusTorchHTA来删除DenisRat变体而闻名。但是由于无法得到最终的payload,所以无法进一步分析。用于存储恶意文件和文档的域名注册在胡志明市,APT32也位于胡志明市。因此,研究人员分析初步判断该攻击活动与APT32有关。图21:一个试图连接远程站点的诱饵文件【编者推荐】适合Vue用户的React教程,你值得拥有微信视频号的“长短”之辩。苹果对云游戏服务的禁令引发了公愤。它被指控扼杀竞争和发臭的游戏信息。泄露了没人要?5G网络二维码的利与弊:安全隐患【责任编辑:江华电话:(010)68476606】