Earth Kurma APT活动针对东南亚政府电信部门
趋势科技研究团队发现了一个复杂的APT活动,针对东南亚的政府和电信部门。该活动被命名为Earth Kurma,攻击者使用高级定制恶意软件、Rootkit和云存储服务进行数据外泄。Earth Kurma展示了自适应的恶意软件工具集、战略性的基础设施滥用和复杂的规避技术。
摘要
此活动由于针对性的间谍活动、凭证盗窃、通过内核级Rootkit建立的持久性立足点以及通过受信任云平台进行的数据外泄,构成了较高的商业风险。受影响的组织主要位于东南亚的政府和电信部门(特别是菲律宾、越南、泰国、马来西亚)。组织面临敏感政府和电信数据泄露的风险,攻击者长期未被发现地访问其网络。
趋势Vision One™检测并阻止了此APT活动中使用的恶意组件。趋势Vision One客户还可以访问狩猎查询、威胁洞察和威胁情报报告,以获取有关Earth Kurma的丰富上下文和最新更新。
介绍
自2024年6月以来,我们发现了一个针对东南亚多个国家(包括菲律宾、越南和马来西亚)的复杂APT活动。我们将此活动背后的威胁行为者命名为“Earth Kurma”。我们的分析显示,他们主要针对政府部门,表现出对数据外泄的特别兴趣。值得注意的是,这波攻击涉及使用Rootkit来维持持久性并隐藏其活动。
在本研究中,我们提供了关于Earth Kurma及其持续活动的智能。我们将披露技术细节,包括他们的战术、技术和程序(TTP),以及他们的工具集的具体信息,如TESDAT、SIMPOBOXSPY、KRNRAT和MORIYA等。
Earth Kurma是谁?
Earth Kurma是一个专注于东南亚国家的新APT组织。所有已识别的受害者都属于政府和政府相关的电信部门。从我们的长期监控来看,他们的活动可以追溯到2020年11月,主要目标是数据外泄。我们的分析表明,他们倾向于通过公共云服务(如Dropbox和OneDrive)外泄数据。为了实现这一目标,他们使用了各种定制工具集,包括TESDAT和SIMPOBOXSPY。Earth Kurma还开发了Rootkit,如KRNRAT和MORIYA,以隐藏其活动。
至于归因,我们发现Earth Kurma的工具与其他已知APT组织的工具有重叠。此活动中的MORIYA Rootkit与Operation TunnelSnake中使用的Rootkit共享相同的代码库,而SIMPOBOXSPY和外泄脚本与另一个名为ToddyCat的APT组织密切相关。然而,攻击模式的差异使我们无法将这些活动和操作 conclusively 归因于相同的威胁行为者。因此,我们将这个新的APT组织命名为“Earth Kurma”。
影响
我们的遥测数据显示,Earth Kurma主要针对东南亚的受害者,包括菲律宾、越南、泰国和马来西亚。Earth Kurma的目标可能表明其动机是网络间谍活动。
感染链
感染链和使用的恶意软件可以总结如下:
横向移动
我们无法确认攻击中使用的到达向量,因为我们的分析在受害者首次被入侵多年后才开始。
在横向移动阶段使用了多种工具。各种实用程序被用于扫描受害者的基础设施并部署恶意软件,包括NBTSCAN、LADON、FRPC、WMIHACKER和ICMPinger。他们还部署了一个键盘记录器KMLOG,以窃取受害者的凭证。
为了调查受害者的基础设施,威胁行为者使用了一个名为ICMPinger的工具来扫描主机。这是一个基于ICMP协议的简单网络扫描工具,用于测试指定主机是否仍然存活。他们在操作完成后删除此工具。
他们还使用了另一个开源工具Ladon来检查基础设施。为了绕过检测,Ladon被包装在一个由PyInstaller编译的反射加载器中。用于解码有效载荷的XOR密钥在我们收集的所有样本中各不相同。
为了横向移动,他们还使用了另一个开源工具WMIHACKER,它可以通过端口135执行命令,而无需SMB。
在我们观察到的一些案例中,他们还通过SMB协议(如使用“net use”)执行命令来检查基础设施并部署恶意软件。
|
|
威胁行为者还尝试通过使用自定义工具KMLOG窃取受害者的凭证。这是一个简单的键盘记录器,将每次击键记录到名为“%Appdata%\Roaming\Microsoft\Windows\Libraries\infokey.zip”的文件中。
为了隐藏击键日志文件,它被预先添加了一个假的ZIP文件头(PK头)。头之后是日志内容的真实主体。
标题 | 加密 | 数据 |
---|---|---|
Header | 无 | 预定义的PK文件头 |
[Title] | XOR 0xDB | GetForegroundWindow标题文本 |
[Time] | 无 | GetLocalTime |
[Content] | 无 | 击键 |
表1. 击键日志文件的结构
持久性
在持久性阶段,行为者部署了不同的加载器来维持其立足点,包括DUNLOADER、TESDAT和DMLOADER。这些加载器用于将有效载荷文件加载到内存并执行它们。这些加载器然后被用于部署更多恶意软件并通过公共云服务(如Dropbox和OneDrive)外泄数据。在一些案例中,Rootkit(包括KRNRAT和MORIYA)被加载器植入以绕过扫描。
加载器
在2022年至2024年之间,我们观察到多个加载器被植入受害者环境,包括DUNLOADER、TESDAT和DMLOADER。大多数最终有效载荷是Cobalt Strike信标。
我们遇到的第一个加载器是DUNLOADER。它能够从以下位置之一加载有效载荷并通过单字节XOR操作解码:
- 来自名为“pdata.txt”的文件
- 来自其自己的名为“BIN”的资源块
此加载器是一个DLL文件,并始终通过检查父进程的名称是否包含特定的字符串字面量“und”来确保它由“rundll32.exe”执行。在大多数情况下,此DLL应包含一个名为“Start”的导出函数。
我们后来发现的较新加载器称为TESDAT。它总是加载带有“.dat”扩展名的有效载荷文件(如“mns.dat”)。它不使用常见的API(如CreateThread)来执行解码的shellcode,而是总是调用一个名为“SwitchToFiber”的API,我们认为这是为了避免检测。我们的分析显示了TESDAT加载器的两个变体。它可以是EXE文件,也可以是带有名为“Init”的导出函数的DLL文件。
我们还注意到,行为者会使用一些随机字符串命名加载器,并将它们放在受害者经常访问的文件夹中,而不是攻击者常用的文件夹(即%ProgramData%或%Public%)。这 presumably 是为了将加载器与合法的用户文件混合。以下是一些文件名示例:
- C:\Users{user}\downloads\wcrpc.dll
- C:\Users{user}\downloads\mflpro\acrg.dll
- C:\Users{user}\documents\ViberDownloads\mfsvc.dll
- C:\Users{user}\downloads\fwdjustification\dilx.exe
- C:\Users{user}\downloads\ffap3560pcl6220510w636iml\drasc.dll
- C:\Users{user}\downloads\1\2\3\prikc.exe
- C:\Users{user}\Downloads\Rufus\gpupdat.exe
最近,我们观察到一个新的加载器DMLOADER被植入。它不是加载额外的有效载荷文件,而是加载嵌入的有效载荷并将其解码为内存中的PE缓冲区。此加载器通常有一个名为“DoMain”或“StartProtect”的导出函数。在解码的PE有效载荷中,它应有一个名为“MThread”的导出函数。
Rootkit
在加载器被植入受害者机器后,我们发现一些受感染的机器上安装了Rootkit。为了安装Rootkit,威胁行为者滥用了一个名为“syssetup.dll”的Living-off-the-Land二进制文件,并丢弃了一个INF文件来安装它们。使用的命令行示例如下:
|
|
我们观察到的第一个Rootkit称为MORIYA,它可以隐藏TCP流量中的恶意有效载荷。
MORIYA作为TCP流量拦截器工作。它尝试通过检查前六个魔术字节来监控传入的TCP数据包是否来自命令和控制(C&C)服务器。魔术字节可以通过从其用户模式代理发出特定的IOCTL代码0x222004来注册。如果任何数据包匹配,它尝试将恶意有效载荷注入响应数据包的主体中。我们发现的变体与此MORIYA报告中的变体完全相同。
我们发现的MORIYA变体具有额外的shellcode注入能力。在其执行结束时,它尝试从位置“\SystemRoot\system32\drivers\{driver_name}.dat”加载有效载荷文件。有效载荷将在AES中解密并注入svchost.exe的进程中。此有效载荷应该是其用户模式代理。
shellcode最终将通过使用API NtCreateThreadEx调用。为了绕过检测,它尝试直接使用系统调用号调用调用。为了在目标系统上获取有效的系统调用号,它枚举NTDLL的导出函数,找到名称以“Zw”或“Nt”开头的函数,并保存每个的系统调用号。此代码片段从此帖子中重用。
我们发现的另一个Rootkit称为KRNRAT。它是一个功能齐全的后门,具有各种能力,包括进程操作、文件隐藏、shellcode执行、流量隐藏和C&C通信。我们将此Rootkit命名为KRNRAT,因为其内部名称,正如其PDB字符串中所写:N:\project\li\ThreeTools\KrnRat\code\x64\Debug\SmartFilter.pdb
我们的分析显示,KRNRAT基于多个开源项目:
- https://github.com/w1nds/ishellcode
- https://github.com/DarthTon/Blackbone
- https://github.com/XaFF-XaFF/Cronos-Rootkit
- https://github.com/JKornev/hidden
- https://github.com/amitschendel/venom-rootkit
KRNRAT支持众多的IOCTL代码和能力。其调试字符串也是自解释的。以下是支持的IOCTL代码的完整表格。
IoControlCode | 描述(调试字符串) |
---|---|
0x222000 | IOCTL_TERMINATE_PROCESS |
0x22200C | IOCTL_SUSPEND_PROCESS |
0x222010 | IOCTL_TERMINATE_PROCESS(拼写错误,应为IOCTL_RESUME_PROCESS) |
0x222014 | IOCTL_ADD_BLACK_PROCESS |
0x222018 | IOCTL_REMOVE_BLACK_PROCESS |
0x22201C | IOCTL_ADD_HIDDEN_FILE |
0x222020 | IOCTL_ADD_HIDDEN_DIR |
0x222024 | IOCTL_REMOVE_HIDDEN_FILE |
0x222040 | IOCTL_REMOVE_HIDDEN_DIR |
0x222048 | IOCTL_REMOVE_HIDDEN_PROCESS |
0x22204C | IOCTL_ADD_LOCAL_HIDDEN_PORT |
0x222050 | IOCTL_REMOVE_LOCAL_HIDDEN_PORT |
0x222054 | IOCTL_ADD_REMOTE_HIDDEN_PORT |
0x222058 | IOCTL_REMOVE_REMOTE_HIDDEN_PORT |
0x22205C | IOCTL_REMOVE_LOCAL_HIDDEN_PORT |
0x222060 | IOCTL_REMOVE_LOCAL_HIDDEN_IP |
0x222064 | IOCTL_ADD_REMOTE_HIDDEN_IP |
0x222080 | IOCTL_REMOVE_REMOTE_HIDDEN_IP |
0x222084 | IOCTL_REMOVE_ALL_HIDDEN_NET |
0x222088 | IOCTL_PROTECT_PROCESS |
0x22208C | IOCTL_ELEVATE_PROCESS |
0x222090 | IOCTL_INJECT_SHELLCODE |
表2. KRNRAT中支持的命令代码
在其执行结束时,它还加载额外的有效载荷文件并将其注入svchost.exe进程。此shellcode注入能力与我们发现的MORIYA变体完全相同。这次,我们能够收集有效载荷,结果发现是KRNRAT的用户模式代理,并且是后门。这意味着其用户模式代理始终是内存驻留的。
后门是一个stager。它连接到C&C服务器并下载下一阶段的有效载荷。它尝试通过向KRNRAT Rootkit发出特定的IOCTL代码来隐藏进程和连接。
偏移 | 大小 | 名称 | 描述 |
---|---|---|---|
0x0 | 0x8 | minutes | 睡眠分钟数 |
0x8 | 0x4 | hourStart | 当前时间之后的小时数 |
0xC | 0x4 | hourEnd | 当前时间之前的小时数 |
0x10 | 0x4 | reserved | 保留 |
0x14 | 0x4 | dayOfWeekStart | 当前时间之后的星期几 |
0x18 | 0x4 | dayOfWeekEnd | 当前时间之前的星期几 |
表3. 后门在注册表中的配置结构
来自C&C服务器的最终有效载荷将是所谓的SManager。
收集和外泄
在收集和外泄阶段,我们观察到两个定制工具用于将特定文档外泄到攻击者的云服务,如Dropbox和OneDrive。在外泄文件之前,由加载器TESDAT执行的几个命令收集了具有以下扩展名的特定文档文件:.pdf、.doc、.docx、.xls、.xlsx、.ppt和.pptx。文档首先被放置到一个新创建的名为“tmp”的文件夹中,然后使用WinRAR和特定密码进行归档。
|
|
第一个工具SIMPOBOXSPY是一个外泄工具,可以将归档文件上传到具有指定访问令牌的Dropbox。此工具正是此ToddyCat报告中提到的“通用DropBox上传器”。SIMPOBOXSPY的命令参数如下所示。
|
|
如果未指定参数“-f”,它将上传当前文件夹中具有预定义扩展名(如“.z”、“.001”、“.002”、…、“.128”)的文件。还有另一个变体,它将上传扩展名为“.7z”的归档文件