Rhadamanthys 恶意软件深度分析:反混淆技术与多层投放机制揭秘

本文深入剖析了Rhadamanthys信息窃取恶意软件,从其通过钓鱼邮件和虚假广告传播,到其复杂的多阶段下载器、采用虚拟机混淆、沙箱检测及自定义文件系统的反分析技术,并详细解读了其shellcode执行与密钥生成漏洞。

Analysis of Rhadamanthys Malware - Virtualattacks

2023年12月19日

在2022年最后一个季度,信息窃取恶意软件 Rhadamanthys 被发现。鉴于其能够针对受害者计算机上安装的浏览器扩展和钱包客户端,其功能显示出对加密货币钱包的特别兴趣。

已观察到此威胁的主要传播方式是通过网络钓鱼电子邮件和通过 Google Ads 推广的假冒软件网站,无论其行业或地区如何。

尽管其传播和信息窃取方法先前已被观察到,但其下载器组件使其脱颖而出。它通过结合复杂的反分析技术与重度混淆,使得传统安全分析方法极为困难。

Rhadamanthys 下载器主要使用 C++ 编写,采用分阶段执行并运用多种反分析技术。

  • 虚拟机混淆器。
  • 强大的虚拟机和沙箱检测能力。这些能力部分来源于开源程序 al-khaser 并从中导入。
  • 使用嵌入式文件系统的自定义文件格式。

Rhadamanthys 的反分析特性并未被忽视。Zscaler 的研究人员发现,所使用的虚拟机混淆器是 Quake 3 VM。此外,分析人员将这些独特的文件格式与加密货币矿工 Hidden Bee 所使用的格式联系起来。CheckPoint 最近发布了关于该虚拟文件系统内部工作原理的详尽分析。

Shellcode Dancing:剖析 Rhadamanthys Stealer

Rhadamanthys 是一种新近开发的 C++ 信息窃取器。根据多份报告,该恶意软件自 2022 年底开始活跃。

为了获得早期立足点,该恶意软件似乎还伪装成可信赖的程序,包括 AnyDesk 安装程序和 Google Ads。

在使用方面,恶意软件的创建者在暗网上提供各种激励措施,包括一次性终身付款或月度付款。

作者还强调,该恶意软件除了收集系统信息外,还能执行其他进程(如 Powershell)并窃取数字货币。

本文将剖析 Rhadamanthys 窃取器,并逆向工程其从初始投放器到恶意软件本身的每一个步骤。

和往常一样,我将以幻灯片和分步教程相结合的方式介绍,重点放在我最感兴趣的方面(恶意软件试图逃避检测的方式)。

The Dropper

与许多投放器一样,Rhadamanthys 的投放器是一个 32 位文件,具有相对较大的熵,表明它可能包含打包内容。

PEstudio 较新的功能之一是能够检查 ASLR 功能是否启用。出于跟踪目的,我总是倾向于在分析中禁用 ASLR,以便 XDBG 和 IDA 中的地址保持一致。

在 PEstudio 中,选择“optional-header”,然后查看 ASLR 栏下的“detail”列,可以看到是 true(启用)还是 false(禁用)。

解包过程:抵达初始 shellcode

当我们在 IDA 中检查投放器时,可以在 .data 节中看到一个巨大的嵌入式“blob”。这些 blob 通常可能包含将在运行时解密的数据。

负责加密 blob 的主要函数是函数 sub_408028。sub_408028 中有两个有趣的函数:

  • sub_406A28:该函数负责返回一个地址,其中包含需要写入的数据。
  • sub_408528,一个 memcpy 包装器。

在第一次迭代期间,嵌入的 blob 将被写入新创建的堆中。 然后,在调用 VirtualAlloc 创建新分配的内存块后,将使用 memcpy 将 shellcode 从堆复制到新内存中。最后,将使用 VirtualProtect API 调用将内存段的权限更改为 RWX。

接下来,我们将导航到 WinMain 函数中的地址 004065A1(请记住,ASLR 已关闭,以便在 IDA 和调试器中轻松导航)。 我们可以观察到,偏移变量 42F6F0 的值正在接收动态位于 EAX 寄存器中的 shellcode 值。

基于回调的 shellcode 执行

一旦我们拥有了具有 EXECUTE 权限的 shellcode,就需要一种方法来运行它。作者在这里选择了一种巧妙的变通方法,即使用回调函数。

shellcode 将按如下方式执行:

  1. 是函数 sub_405728 调用了 ImmEnumInputContext API 调用。
  2. 函数 sub_407228(它只是另一个跳转到 shellcode 地址的函数的包装器)作为参数被 sub_405728 接收。
  3. 最终,ImmEnumInputContext 将从其第二个参数“lpfn”获取 shellcode 地址后执行它。

修正措施

在每个控制点阻止所有威胁指标。 利用适用于您环境的安全控制来查找入侵指标。 始终对来自不熟悉发件人的电子邮件保持谨慎。 切勿信任或打开“来自未知来源/发件人的链接和附件”。 确保对所有服务器和计算机网络进行定期备份。

最后,Rhadamanthys 运行主模块的 shellcode 加载器,该加载器通过从公钥和配置结构的盐值生成 AES 密钥来解密模块的最后一层。然后使用 LZSS 算法对解密后的输出进行解压缩。 注意:预期的解密输出开头应出现单词“!HADES”。

需要注意的是,尽管网络通信受到安全加密算法的保护,但 Rhadamanthys 生成椭圆曲线密钥的过程存在一个重大缺陷。 当它运行时,首先调用 C 函数 time 来获取被入侵机器的当前纪元时间。然后,它调用 srand 函数,将纪元时间作为种子传递。最后,它调用 C 函数 rand 来生成秘密标量值。

因此,如果我们拥有包含公钥和纪元时间的、发送到服务器的初始请求的网络捕获,我们就可以暴力破解生成的密钥。

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