Lazarus组织利用新旧恶意软件进化感染链

过去几年,Lazarus 组织一直在利用虚假工作机会传播恶意软件,攻击各行各业的员工,包括国防、航空航天、加密货币和其他全球行业。这次攻击活动被称为DeathNote 活动,也被称为“Operation DreamJob”。我们之前曾发布过这次活动的历史记录。
最近,我们观察到了一次类似的攻击,Lazarus 组织在一个月内向至少两名与同一核相关组织有关联的员工发送了包含恶意文件的存档文件。在调查了这次攻击后,我们发现了一个复杂的感染链,其中包括多种类型的恶意软件,例如下载器、加载器和后门,这表明该组织的传播方式和持久性方法已经进化。
在这篇博客中,我们概述了其感染链中的重大变化,并展示了他们如何结合使用新旧恶意软件样本来定制攻击。
永不放弃目标
我们过去的研究表明,Lazarus 有意在 DeathNote 活动中实施供应链攻击,但这主要限于两种方法:第一种是向目标发送恶意文档或木马化的 PDF 查看器,以显示定制的职位描述。第二种是通过分发木马化的远程访问工具(如 VNC 或 PuTTY)来诱使目标连接到特定服务器进行技能评估。这两种方法都已被其他安全供应商充分记录在案,但该组织每次都会继续调整其方法。
最近发现的案例属于后一种方式。但是,除了初始媒介之外,感染链已完全改变。在我们发现的案例中,每个目标都收到了至少三个存档文件,据称这些文件与著名航空航天和国防公司的 IT 职位技能评估有关。我们能够确定其中两个实例涉及木马化的 VNC 实用程序。Lazarus 将第一个存档文件发送给了同一组织内的至少两个人(我们称他们为主机 A 和主机 B)。一个月后,他们试图对第一个目标进行更密集的攻击。
带着最先进武器出现
在第一种情况下,为了不被发现,Lazarus 向目标发送了恶意的压缩 ISO 文件,因为许多服务很容易检测到 ZIP 存档。虽然我们在其他情况下只看到了 ZIP 存档,但我们认为初始文件也是 ISO。目前尚不清楚受害者是如何下载这些文件的。但是,我们可以有信心地评估 ISO 文件是使用基于 Chromium 的浏览器下载的。第一个与 VNC 相关的存档包含恶意 VNC,第二个存档包含合法的 UltraVNC Viewer 和恶意 DLL。
恶意 AmazonVNC.exe(左)/合法 vncviewer.exe(右)
第一个 ISO 映像包含一个 ZIP 文件,其中包含两个文件:AmazonVNC.exe 和 readme.txt。AmazonVNC.exe 文件是 TightVNC 的木马版本 - 这是一种免费的开源 VNC 软件,允许任何人编辑原始源代码。当目标执行 AmazonVNC.exe 时,会弹出一个类似上图的窗口。在“远程主机”字段中输入的 IP 地址与密码一起存储在 readme.txt 文件中。受害者很可能被指示通过 Messenger 使用此 IP,因为 Lazarus 倾向于冒充招聘人员并在 LinkedIn、Telegram、WhatsApp 等上联系目标。输入 IP 后,将根据它生成 XOR 密钥。此密钥用于解密 VNC 可执行文件的内部资源并解压缩解密后的数据。解压缩的数据实际上是一个下载器,我们称之为 Ranid Downloader,它由 AmazonVNC.exe 加载到内存中以执行进一步的恶意操作。
[公司名称]_Skill_Assessment_new.zip 文件嵌入了 UltraVNC 的合法 vncviewer.exe,它是类似 TightVNC 的开源 VNC 软件。ZIP 文件还包含使用侧载加载的恶意文件 vnclang.dll。虽然我们无法获取恶意 vnclang.dll,但根据它与 C2 的通信(即有效载荷),我们将其归类为Mandiant 在最近的一份报告中描述的MISTPEN 恶意软件的加载器,这些有效载荷使用的格式与我们能够获得的 MISTPEN 服务器上的有效载荷相同。根据我们的遥测,在我们的特定案例中,MISTPEN 最终两次从 C2 服务器获取了名为 [随机 ID]_media.dat 的额外有效载荷。第一个有效载荷原来是 RollMid,它在2024 年 4 月发布的Avast 报告中有详细描述。第二个被确定为新的LPEClient变体。 MISTPEN 和 RollMid 都是 Lazarus 组织今年发现的相对较新的恶意程序,但在实际攻击时仍未记录在案。CookieTime 仍在使用
在受感染的主机上发现的另一个恶意软件是CookieTime。我们无法弄清楚 CookieTime 恶意软件是如何被传送到主机 A 的,但根据我们的遥测,它是 在安装 LPEClient 后作为SQLExplorer服务执行的。在早期阶段,CookieTime 通过直接从 C2 服务器接收和执行命令来发挥作用,但最近它被用来下载有效载荷。
攻击者从主机 A 横向移动到主机 C,其中 CookieTime 被用于下载多个恶意软件,包括 LPEClient、Charamel Loader、ServiceChanger 和 CookiePlus 的更新版本,我们将在本文后面讨论。Charamel Loader 是一个加载器,它以密钥作为参数,并使用 ChaCha20 算法解密和加载内部资源。到目前为止,我们已经确定了此加载器传递和执行的三个恶意软件系列:CookieTime、CookiePlus 和ForestTiger,后者出现在与本文讨论的攻击无关的攻击中。
ServiceChanger 恶意软件会停止目标合法服务,然后将恶意文件从其资源部分存储到磁盘,以便在重新启动合法服务时,它会通过 DLL 侧加载加载创建的恶意 DLL。在本例中,目标服务是 ssh-agent,DLL 文件是 libcrypto.dll。Lazarus 的 ServiceChanger 的行为与Kimsuky使用的类似名称的恶意软件不同。当 Kimsuky 注册新的恶意服务时,Lazarus 会利用现有的合法服务进行 DLL 侧加载。
有几种情况是 CookieTime 通过 DLL 侧载加载并作为服务执行的。有趣的是,CookieTime 支持多种不同的加载方式,这也导致了不同的入口点,如下所示:
Path | Legitimate file | Malicious DLL | Main function | Execution type | Host installed | |
1 | C:ProgramData Adobe |
CameraSettingsUIH ost.exe |
DUI70.dll | InitThread | DLL Side- Loading |
A, C |
2 | C:Windows System32 |
– | f_xnsqlexp. dll |
ServiceMain | As a Service | A, C |
3 | %startup% | CameraSettingsUIH ost.exe |
DUI70.dll | InitThread | DLL Side- Loading |
C |
4 | C:ProgramData Intel |
Dxpserver.exe | dwmapi.dll | DllMain | DLL Side- Loading |
C |
CookiePlus 能够下载 DLL 和 shellcode
CookiePlus 是我们在主机 C 上进行调查时发现的一款新型插件式恶意程序。它最初由 ServiceChanger 和 Charamel Loader 加载。Charamel Loader 和 ServiceChanger 加载的 CookiePlus 之间的区别在于执行方式。前者单独作为 DLL 运行,并在其资源部分中包含 C2 信息,而后者则获取存储在单独的外部文件(如 msado.inc)中的内容,这意味着 CookiePlus 能够从内部资源和外部文件中获取 C2 列表。除此之外,行为是相同的。
当我们首次发现 CookiePlus 时,它被伪装成ComparePlus(一个开源 Notepad++ 插件)。在过去几年中,该组织一直在冒充类似类型的插件。然而,在与本文讨论的插件无关的感染案例中发现的最新 CookiePlus 样本基于另一个开源项目DirectX-Wrappers,该项目旨在包装 DirectX 和 Direct3D DLL。这表明该组织已将重点转移到其他主题上,以便通过伪装成公共设施来逃避防御。
由于 CookiePlus 充当下载程序,因此其功能有限,并且只会将极少的信息从受感染的主机传输到 C2 服务器。在与 C2 的初始通信期间,CookiePlus 会生成一个 32 字节的数据数组,其中包括来自其配置文件的 ID、特定偏移量和计算出的步骤标志数据(见下表)。一个值得注意的方面是包含指向配置文件路径最后四个字节的特定偏移量。虽然由于 ASLR,此偏移量看起来是随机的,但它可能允许该组织确定偏移量是否保持固定。这有助于区分有效载荷是由分析师还是安全产品进行分析。
Offset | Description | Value (example) |
0x00~0x04 | ID from config file | 0x0D625D16 |
0x04~0x0C | Specific offset | 0x0000000180080100 |
0x0C~0x0F | Random value | (Random) |
0x0F~0x10 | Calculation of step flag | 0x28 (0x10 * flag(0x2) | 0x8) |
0x10~0x20 | Random value | (Random) |
然后使用硬编码的 RSA 公钥对数组进行加密。接下来,CookiePlus 使用 Base64 对 RSA 加密数据进行编码。它被设置为 HTTP 标头中的 cookie 值并传递给 C2。此 cookie 数据用于后续通信,可能用于身份验证。然后,CookiePlus 检索从 C2 收到的附加加密有效负载以及 cookie 数据。不幸的是,在我们调查此活动期间,无法建立与 C2 的连接,因此返回的确切数据未知。
然后,CookiePlus 使用 Base64 解码有效载荷。结果是一个包含 ChaCha20 加密有效载荷的数据结构,如下所示。可能不会一次收到整个有效载荷。为了知道何时停止请求更多数据,CookiePlus 查看位于 0x07 的偏移量的值,并继续请求更多数据,直到该值设置为 1。
Offset | Description |
0x00~0x04 | Specific flag |
0x04~0x06 | Type value of the payload (PE: 0xBEF0, Shellcode: 0xBEEF) |
0x06~0x07 | Unknown |
0x07~0x08 | Flag indicating whether there is additional data to receive (0: There’s more data, 1: No more data) |
0x08~0x0C | Unknown |
0x0C~0x10 | Size of ChaCha20-encrypted payload |
0x10~0x1C | ChaCha20 nonce |
0x1C~ | ChaCha20-encrypted payload |
接下来,使用之前生成的 32 字节数据数组作为密钥和传递的随机数对有效载荷进行解密。有效载荷的类型由偏移量 0x04 处的标志决定,可以是 DLL 或 shellcode。
如果标志的值为0xBEF0,则加密的有效载荷是加载到内存中的 DLL 文件。有效载荷还可以包含在加载时传递给 DLL 的参数。
如果值为0xBEEF,CookiePlus 会检查 payload 的前四个字节是否小于 0x80000000,如果是,则在授予执行权限后加载 payload 中的 shellcode ,执行 shellcode 后,会将经过 ChaCha20 加密的结果发送给 C2 ,加密时,还是使用同样的 32 字节数据数组作为 key ,随机生成一个 12 字节的 nonce ,最终将以下结构发送给 C2 。
Offset | Description |
0x00~0x04 | Unknown |
0x04~0x06 | Unknown |
0x06~0x07 | Unknown |
0x07~0x08 | Flag indicating whether there is additional data to receive (0: There’s more data, 1: No more data) |
0x08~0x0C | Unknown |
0x0C~0x10 | Size of ChaCha20-encrypted results |
0x10~0x1C | ChaCha20 nonce |
0x1C~ | ChaCha20-encrypted results |
这个不断下载额外有效载荷的过程会持续到 C2 停止响应。
我们成功获取了CookiePlus加载的三个不同的shellcode,这些shellcode其实是DLL,通过sRDI开源shellcode生成工具转换成shellcode,然后这些DLL作为插件,三个插件的功能如下,插件的执行结果经过加密后发送给C2。
描述 | 原始文件名 | 参数 | |
1 | 收集计算机名称、PID、当前文件路径、当前工作路径 | TBaseInfo.dll | None |
2 | 使主 CookiePlus 模块休眠指定的分钟数,但如果一个会话状态或本地驱动器数量发生变化,它将恢复 | sleep.dll | Number |
3 | 将给定的数字写入第二个参数指定的配置文件(例如 msado.inc),以设置执行时间。内部资源中配置的 CookiePlus 版本会休眠给定的分钟数。 | hiber.dll | Number, Config file path |
基于以上所有因素,我们中等程度地判断 CookiePlus 是 MISTPEN 的继承者。尽管两者的代码没有明显的重叠,但仍有几个相似之处。例如,两者都伪装成 Notepad++ 插件。
此外,CookiePlus 样本是在 2024 年 6 月编译和使用的,而我们能够找到的最新 MISTPEN 样本是在 2024 年 1 月和 2 月编译的,尽管我们怀疑 MISTPEN 也被用于讨论的活动。MISTPEN 还使用了与 CookiePlus 类似的插件,例如 TBaseInfo.dll和hiber.dll。CookiePlus比MISTPEN 更完整并且支持更多执行选项的事实也支持了我们的说法。
基础设施
在此次攻击活动中,Lazarus 组织大部分时间都使用受感染的运行 WordPress 的 Web 服务器作为 C2。MISTPEN、LPEClient、CookiePlus 和 RollMid 等样本都使用此类服务器作为 C2。然而,对于 CookieTime,我们发现的 C2 服务器中只有一个运行基于 WordPress 的网站。此外,此次攻击活动中发现的所有 C2 服务器都运行不受特定国家/地区限制的基于 PHP 的 Web 服务。
结论
纵观 Lazarus 组织的发展历程,该组织仅使用过少数模块化恶意软件框架,例如Mata和Gopuram Loader。引入此类恶意软件对他们而言是一种不同寻常的策略。他们确实引入了 CookiePlus 等新型模块化恶意软件,这表明该组织正在不断改进其武器库和感染链,以逃避安全产品的检测。
对于防御者来说,问题在于 CookiePlus 的行为就像一个下载器。这使得调查 CookiePlus 是只下载了一个小插件还是下一个有意义的有效载荷变得困难。根据我们的分析,它似乎仍在积极开发中,这意味着 Lazarus 将来可能会添加更多插件。
IOCS
被木马感染的 VNC 实用程序
c6323a40d1aa5b7fe95951609fb2b524 | IBM_VN_IT_SA.iso |
cf8c0999c148d764667b1a269c28bdcb | AmazonVNC.exe |
Ranid 下载器
Cookie 时间
778942b891c4e2f3866c6a3c09bf74f4 | DUI70.dll |
1315027e1c536d488fe63ea0a528b52d | f_xnsqlexp.dll |
Charamel 装载机
b0e795853b655682483105e353b9cd54 | dwmapi.dll |
e0dd4afb965771f8347549fd93423985 | dwmapi.dll |
服务变更者
739875852198ecf4d734d41ef1576774 | (in-memory) |
CookiePlus 加载器
bf5a3505273391c5380b3ab545e400eb | libcrypto.dll |
0ee8246de53c20a424fb08096922db08 | libcrypto.dll |
80ab98c10c23b7281a2bf1489fc98c0d | ComparePlus.dll |
4c4abe85a1c68ba8385d2cb928ac5646 | ComparePlus.dll |
CookiePlus
e6a1977ecce2ced5a471baa52492d9f3 | ComparePlus.dll |
fdc5505d7277e0bf7b299957eadfd931 | ComparePlus.dll |
CookiePlus 插件
2b2cbc8de3bdefcd7054f56b70ef58b4 | sleep.dll |
57453d6d918235adb66b896e5ab252b6 | sleep.dll |
MISTPEN
00a2952a279f9c84ae71367d5b8990c1 | HexEditor.dll |
5eac943e23429a77d9766078e760fc0b | binhex.dll |