深度解析:Earth Kasha新型LODEINFO行动与APT10关联分析

本文详细分析了Earth Kasha组织在2023年至2024年初发起的LODEINFO新行动,包括其更新的战术技术、恶意软件变种如NOOPDOOR和NOOPLDR,以及与APT10关联活动的对比研究,揭示了中资背景威胁行为体的复杂协作关系。

深度解析:Earth Kasha新型LODEINFO行动与APT10关联分析

引言

LODEINFO是一种自2019年以来主要针对日本的恶意软件。趋势科技将该组织追踪为Earth Kasha。尽管有厂商怀疑使用LODEINFO的行为者可能是APT10,但我们没有足够证据完全支持这一推测。目前,我们将APT10和Earth Kasha视为不同实体,尽管它们可能存在关联。为避免名称混淆,我们使用新术语“APT10保护伞”,代表与APT10相关的一组入侵集(包括APT10本身)。

Earth Kasha自出现以来,已知通过鱼叉式网络钓鱼邮件针对公共机构和学术界。然而,从2023年初到2024年初,我们识别了一次新行动,其策略、战术和武器库有重大更新。

2023年以来的LODEINFO

在新行动中,Earth Kasha将其目标扩展到日本、台湾和印度。基于事件数量的偏向,我们认为日本仍是Earth Kasha的主要目标,但我们观察到台湾和印度的一些高调组织也成为目标。观察到的受攻击行业包括与先进技术相关的组织和政府机构。

Earth Kasha在初始访问阶段采用了不同的战术、技术和程序(TTP),现在利用面向公众的应用程序,如SSL-VPN和文件存储服务。我们观察到企业产品的漏洞被滥用,例如Array AG(CVE-2023-28461)、Proself(CVE-2023-45727)和FortiOS/FortiProxy(CVE-2023-27997)。Earth Kasha不时更换这些被滥用的漏洞。获得访问权限后,他们在受害者网络中部署多个后门以实现持久性。这些包括Cobalt Strike、LODEINFO和新发现的NOOPDOOR,我们将在后面描述。

利用后阶段观察到的TTP

我们对利用后阶段活动的全面分析显示,攻击的主要动机是窃取受害者的信息和数据。Earth Kasha首先发现Active Directory配置和域用户信息,使用合法的Microsoft工具(如csvde.exe、nltest.exe和quser.exe)实现这一目标。以下是对手使用的实际命令。

1
2
3
csvde.exe -f all.csv –u
nltest.exe /domain_trusts
quser.exe

然后,他们访问文件服务器,并尝试通过递归使用“dir”命令查找与客户网络系统信息相关的文档。有趣的是,在检查活动时,操作员可能会手动检查文档内容。被盗信息可能帮助对手找到下一个有价值的目标。

Earth Kasha然后执行几种技术来获取凭据。一种方法是使用其自定义恶意软件MirrorStealer来转储应用程序中存储的凭据。MirrorStealer(最初由ESET报告)是一种凭据转储器,针对多个应用程序,如浏览器(Chrome、Firefox、Edge和Internet Explorer)、电子邮件客户端(Outlook、Thunderbird、Becky和Live Mail)、组策略首选项和SQL Server Management Studio。

由于MirrorStealer可能设计用于在客户端机器上转储凭据,Earth Kasha使用另一种方式转储操作系统凭据。我们观察到对手滥用vssadmin从卷影副本复制注册表配置单元和Active Directory服务器中的ntds.dit。SAM注册表配置单元包含本地机器用户的NTLM哈希,而ntds.dit包含所有域用户的NTLM哈希。以下是对手在创建卷影副本后使用的命令。

1
2
3
copy \\<AD_SERVER_IP>\c$\windows\temp\ntds.dit .
copy \\<AD_SERVER_IP>\c$\windows\temp\system .
copy \\<AD_SERVER_IP>\c$\windows\temp\sam .

虽然我们无法弄清楚他们滥用的实际方法,但我们观察到Earth Kasha在大多数情况下成功入侵了域管理员。入侵域管理员后,他们通过SMB复制组件并滥用schetasks.exe或sc.exe来实现横向移动,将后门(LODEINFO或NOOPDOOR)部署到多台机器。以下是对手通过管理共享部署恶意组件的实际命令。

1
2
3
4
copy SfsDllSample.exe \\<IP>\c$\windows\temp\SfsDllSample.exe 
copy SfsDll32.dll     \\<IP>\c$\windows\temp\SfsDll32.dll
copy mssitlb.xml  \\<IP>\C$\Windows\system32\UIAnimation.xml
copy ShiftJIS.dat \\<IP>\C$\Windows\system32\ComputerToastIcon.contrast-white.dat

一旦入侵进展,Earth Kasha开始外泄被盗信息。对手收集数据,包括ntds.dit、SYSTEM、SAM注册表配置单元和其他有趣文件,在单个受害机器上使用makecab命令将这些文件压缩成单个存档。虽然我们无法确认这些数据如何外泄,但可能通过后门通道。Earth Kasha还通过RDP会话外泄受害者网络中的有趣文件。他们将有趣文件复制到RDP源主机通过SMB(“tsclient”是RDP源主机)。

1
2
3
\\tsclient\C\aaa\All PC List.xlsx
\\tsclient\C\aaa\All IP List.xlsx
\\tsclient\C\aaa\Network Diagram.xlsx

恶意软件分析

在Earth Kasha之前的行动中,LODEINFO一直是他们的主要后门选择。然而,在新行动中,我们观察到几个后门,如Cobalt Strike、LODEINFO和先前未记录的NOOPDOOR。这些后门针对每个事件选择性使用。

可能的Cobalt Strike破解版本

在上述早期事件中,Earth Kasha也使用了Cobalt Strike。与其他对手一样,Cobalt Strike设计为仅在内存中执行。在这种情况下,Earth Kasha使用了一个用Go编写的shellcode加载器,我们称之为GOSICLOADER。GOSICLOADER旨在通过DLL侧加载加载,并简单地使用Based64+AES解密数据部分中嵌入的有效载荷。

检查Cobalt Strike信标的配置时,我们注意到它可能是Cobalt Strike的破解版本,称为CSAgent,在中文黑客社区中共享。根据Cobalt Strike开发者的说法,Cobalt Strike信标嵌入水印和水印哈希,使其难以篡改授权。CSAgent默认将水印修改为包含“666666”,并使用与本次行动中观察到的Cobalt Strike信标中嵌入的水印哈希匹配的水印哈希。由于如果对手知道算法,水印及其哈希可以轻松篡改,这种修改可能是假旗,但仍然值得注意。

LODEINFO

LODEINFO是Earth Kasha自2019年以来独家使用的后门,作为他们的主要后门。然而,在这次新行动中,它只是几个选项之一,显示了其适应性。自推出以来,LODEINFO经历了持续更新,如其版本号所示。在这次行动中,我们观察到版本v0.6.9、v0.7.1、v0.7.2和v0.7.3。

随着版本号的增加,Earth Kasha也在更新执行LODEINFO的过程。在新行动中,他们在受害机器中部署了三个组件。他们将合法应用程序(图7中的SfsDllSample.exe)注册为计划任务,这将触发恶意DLL(图7中的SfsDll32.dll)的DLL侧加载。

这种恶意DLL,我们称之为LODEINFOLDR(ESET称为FaceLoader),提取嵌入在加载进程数字签名中的加密有效载荷,并通过RC4或XOR解密。加密有效载荷通过滥用MS13-098/CVE-2013-3900嵌入合法数字签名中。

我们将新行动中的LODEINFOLDR与之前行动中看到的区分开来,并称这种新加载器为LODEINFOLDR类型2。乍一看,我们认为LODEINFOLDR类型2是他们为新行动开发的新加载器。但在进一步调查后,我们确定LODEINFOLDR类型2看起来与ESET披露的2022年LiberalFace行动中使用的LODEINFO加载器相同。这可能推断同一实体自上次行动以来一直使用相同的恶意软件。

关于LODEINFO,新支持了几个后门命令。“pkill”、“ps”、“keylog”和“autorun”在v0.6.9中添加,“runas”在v0.7.1中新添加。v0.6.9中支持的后门命令与旧版本不同,因为这些命令最初在先前版本中添加,在v0.6.3中移除,并在v0.6.9中再次添加。另一方面,v0.7.1中支持的“runas”是新命令,允许以特定用户身份运行进程。自v0.7.2以来,“config”命令已完全实现,该命令仅用于显示“不可用”。

我们在新行动中观察到的所有LODEINFO在后门命令处理方面与之前行动中的LODEINFO略有不同。这种LODEINFO类型支持在内存中运行DLL或shellcode,而无需后门命令处理。进一步调查后,我们得出结论,新行动中观察到的这种LODEINFO类型应与ESET在LiberalFace行动中称为“第二阶段LODEINFO”的类型相同。如图9和图10所示,新行动中的LODEINFO直接支持在内存中运行DLL或shellcode,而无需处理后门命令。这一证据也可能推断同一组织自上次行动以来一直使用相同的恶意软件。

NOOPLDR

在调查过程中,我们遇到了两种不同的shellcode加载器;一种是包含C#的XML,另一种是DLL。这两种类型的shellcode加载器在实现角度上完全不同。然而,两者的有效载荷都是先前未记录的后门,我们称之为NOOPDOOR,我们将在后面描述。两种加载器采用类似策略,使用机器的设备ID解密和存储加密有效载荷。基于这些相似性,我们将两者归类为同一变体,称之为NOOPLDR。我们将前者XML/C#类型称为“NOOPLDR类型1”,DLL类型称为“NOOPLDR类型2”。NOOPLDR类型1设计为由Windows受信任实用工具MSBuild执行,如图11所示。

在大多数情况下,MSBuild和目标XML文件注册为计划任务以实现持久性。MSBuild在运行时编译XML项目中的内联C#代码,这是NOOPLDR类型1的关键组件。内联C#代码通常隐藏如下。

NOOPLDR类型1根据是否是第一次执行改变其行为。如果是第一次执行,NOOPLDR类型1尝试从硬编码文件路径查找加密数据,该路径每个NOOPLDR样本不同。如果存在,NOOPLDR类型1在读取内容后删除文件。加密数据由用于校验和的头部、AES密钥材料和加密主体组成。NOOPLDR类型1读取前32字节,计算后续加密主体的SHA256哈希,然后将哈希与头部比较以验证数据是否为预期结构。验证完成后,NOOPLDR类型1计算校验和头部后面的AES密钥材料的SHA384哈希。前32字节用作AES密钥,后16字节用作IV。最后,NOOPLDR类型1通过AES256-CBC解密加密有效载荷。

解密数据有一个头部,包含64位标志、有效载荷大小、有效载荷偏移和后续结构中的有效载荷数据。

一旦解密成功,NOOPLDR类型1尝试将有效载荷存储在注册表中以实现隐蔽持久性。加密算法仍然是AES256-CBC,但AES密钥和IV基于机器的设备ID和主机名生成。设备ID从注册表键“HKLM\Software\Microsoft\SQMClient\MachineId”检索,该键包含机器的唯一GUID。NOOPLDR类型1计算连接的设备ID和主机名的SHA384哈希,并遵循解密例程中的相同过程,将哈希值分成32字节和16字节的块,分别用于AES密钥和IV。

NOOPLDR类型1然后预先添加加密有效载荷的SHA256哈希,并将其存储在注册表“(HKLM|HKCU)\Software\License{HEX}”中,其中“HEX”是主机名SHA256哈希最后16字节的十六进制字符串。由于此加密过程为每个受感染机器使用唯一值,我们需要保留额外信息和数据,如注册表配置单元和主机名,以顺利解密有效载荷。如果NOOPLDR类型1成功将有效载荷存储在注册表中,它会删除磁盘上的加密文件。因此,在第二次及后续执行时,NOOPLDR类型1读取注册表键并通过与加密例程相同的程序解密有效载荷。

在最后一步,NOOPLDR类型1将解密的有效载荷注入并运行到合法应用程序中,如rdrleakdiag.exe和tabcal.exe。如果NOOPLDR类型1未能将有效载荷存储在注册表中,它会再次将加密有效载荷写入磁盘,并用与内置kernel32.dll相同的时间戳覆盖。

另一种类型的NOOPLDR形式为DLL,我们称之为NOOPLDR类型2,采用类似类型1的策略但实现更隐蔽的技术。如图16所示,在第一次执行期间,NOOPLDR类型2也从文件解密加密有效载荷,并将加密有效载荷存储在注册表中。它将解密的有效载荷注入合法应用程序。

NOOPLDR类型2的显著特征之一是使用多种反分析技术。例如,它通过控制流混淆和垃圾代码 heavily obfuscated,如图17所示。Earth Kasha在之前的行动中已经应用了这种类型的混淆技术,但在此之前,它在中国关联对手中已经很流行,如APT10和Twisted Panda。

对于额外的反分析技术,大多数字符串通过XOR简单编码,在运行时解码。

NOOPLDR类型2设计为通过DLL侧加载执行。NOOPLDR类型2支持通过使用“-install”参数运行自我安装为Windows服务。在第一次执行期间,它加载名为“<LOADER_PROCESS_NAME>_config”的加密有效载荷在当前工作目录中,该文件将在安装后删除。例如,如果加载器进程名是“symstore.exe”,加密文件将是“symstore.exe_config”。加密blob结构类似于类型1但略有不同。它没有校验和部分;它简单地有32字节AES密钥材料,后跟加密有效载荷,如图19所示。加密有效载荷通过AES256-CBC加密。AES密钥基于前32字节的SHA1生成,IV是前16字节。

与NOOPLDR类型1类似,解密数据有一个0x14字节头部,包含几个用于验证是否为预期结构的值,如图20所示。

验证后,NOOPLDR类型2再次使用AES256-CBC加密解密数据,但使用不同的密钥,该密钥由设备ID字符串、代码部分中的硬编码密钥材料和随机生成的8字节十六进制字符串组成,并将其存储在“HKCU\SOFTWARE\Microsoft\COM3<RANDOM_HEX_STRTING>”中,如图21所示。

在第二次及后续执行时,NOOPLDR类型2将在没有“-install”参数的情况下执行。因此,它跳过自我安装并继续从注册表解密有效载荷的例程。它在注册表(HKCU\SOFTWARE\Microsoft\COM3)中搜索注册表数据,如果找到,它使用与图21相同的方法解密加密数据,但使用注册表键中的十六进制字符串作为AES密钥材料的一部分。

最后,NOOPLDR类型2将解密的有效载荷注入合法应用程序,如wuauclt.exe。此过程注入技术是经典的,但利用直接系统调用使用NtProtectVirtualMemory、NtWriteVirtualMemory和NtCreateThreadEx。由于系统调用ID在运行的操作系统版本上可能不同,系统调用ID在运行时计算。

NOOPDOOR

现在,让我们进入最终有效载荷NOOPDOOR。NOOPDOOR(ESET称为HiddenFace)是一种复杂且复杂的后门,具有以下特征:

  • 完全位置无关代码
  • 支持主动和被动模式通信
  • C&C域通过DGA每日更改(默认)
  • 在工作时间通过代理感知TCP通信
  • RSA + 多个对称密码加密整个C&C通信
  • 支持内置功能 + 额外模块的后门能力
  • 通过在运行时加密/解密特定功能逃避内存检测
  • 反分析

由于其复杂性,NOOPDOOR应设计为另一种后门选择,特别是针对高调目标。根据我们的记录,NOOPDOOR在2021年首次作为LODEINFO的第二阶段有效载荷观察到,但仅在有限情况下。直到2023年,我们才再次遇到NOOPDOOR。NOOPDOOR的一个有趣特性是它支持两种与C&C服务器通信的通道,我们称之为主动和被动模式。

图23显示,NOOPDOOR在主动模式下通过轮询C&C服务器通过TCP/443通信。NOOPDOOR在被动模式下监听TCP/47000以接收来自远程对手的命令。有趣的是,主动和被动模式使用不同的加密算法和后门命令,这意味着两种通道是不兼容且独立的通信方法。主动模式在NOOPDOOR的主线程中执行。在与C&C服务器开始通信之前,NOOPDOOR检查附录A中列出的特定分析工具是否在当前机器中运行。如果发现任何工具,NOOPDOOR将终止自身。NOOPDOOR然后使用自定义域名生成算法(DGA)生成C&C服务器的域。NOOPDOOR嵌入模板URL,如“http://$j[].srmbr.com/#180”(已防御),用于生成域,NOOPDOOR基于运行日期将随机生成的字符串嵌入模板URL。因此,域可以每日更改(默认,但域的寿命可以根据选项更改)。详细的DGA逻辑如下。

我们还观察到一些NOOPDOOR样本嵌入稍不同类型的URL。占位符“$”,在大多数情况下是单个字母(如“j”),可以是一个“单词”。在我们观察到的案例中,模板URL如“hxxp://$earth[.]hopto[.]org:443/”,其中“$earth”部分是占位符。在这种情况下,生成的域将如下:

使用生成的域,NOOPDOOR启动C&C通信。NOOPDOOR支持在受害者环境中的HTTP代理在工作时间(周一至周五8:30~19:30)。主动模式中的C&C通信通过RSA-2048和对称密码的组合完全加密。在初始化会话时,NOOPDOOR发送挑战和随机选择的对称密码ID到C&C服务器,通过RSA-2048加密,以协商密钥用于在后续模块/命令处理期间加密数据包。支持的密码是DES、3DES、2-key 3DES、AES-128-CBC、AES-192-CBC、AES-256-CBC、RC2和RC4。密钥协商后,它开始接收命令并通过所选密码加密发送结果。

NOOPDOOR操作员可以通过主动模式中的后门命令执行加载模块或内置功能。当前支持的内置功能如下:

| ID (主动模式) | 动作 | |—————

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计