Rhadamanthys恶意软件深度分析 - 反检测技术与Shellcode执行剖析

本文深入分析Rhadamanthys信息窃取恶意软件的技术特点,包括其下载器的C++编写结构、虚拟机混淆技术、沙箱检测能力,以及通过回调函数执行shellcode的独特方式,并详细解析其多层解密过程。

Rhadamanthys恶意软件分析

2022年最后一个季度,安全研究人员发现了信息窃取恶意软件Rhadamanthys。该恶意软件能够针对受害者计算机上安装的浏览器扩展和钱包客户端,其功能显示对加密货币钱包有特殊兴趣。

传播方式

已观察到的主要传播方式包括网络钓鱼邮件和通过Google广告推广的虚假软件网站,不受行业或地域限制。

技术特点

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

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

  • 虚拟机混淆器
  • 强大的虚拟机和沙箱检测能力
  • 部分技术源自开源程序al-khaser
  • 使用嵌入式文件系统的自定义文件格式

反分析特性

Rhadamanthys的反分析特性已引起关注。Zscaler研究人员发现其使用了Quake 3 VM作为虚拟机混淆器。此外,分析人员将这些独特的文件格式与加密货币挖矿程序Hidden Bee使用的文件格式联系起来。CheckPoint最近发布了关于虚拟文件系统内部操作的详细分析。

Shellcode分析:检查Rhadamanthys窃取程序

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

伪装手段

该恶意软件似乎还伪装成可信程序,包括AnyDesk安装程序和Google广告,以获取早期立足点。

商业模式

在暗网上,恶意软件创作者提供各种激励措施,包括终身或月度付款。作者还强调该恶意软件能够执行其他进程(包括Powershell),并在收集系统信息的同时窃取数字货币。

逆向工程分析

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

投放器分析

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

PEstudio的最新功能之一是检查ASLR功能是否启用。为了跟踪目的,建议在分析中禁用ASLR,以便XDBG和IDA中的地址相同。

解包过程:到达初始shellcode

当在IDA中检查投放器时,可以在.data部分看到一个大的嵌入式"blob"。这些blob通常包含将在运行时解密的数据。

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

  • sub_406A28:负责返回需要写入数据的地址
  • sub_408528:memcpy包装器

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

基于回调的shellcode执行

获得具有EXECUTE权限的shellcode后,需要一种运行方式。作者在此选择了一个巧妙的解决方法:回调函数。

shellcode将按以下方式执行:

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

安全建议

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

最终执行流程

最终,Rhadamanthys运行为主模块的shellcode加载器,该加载器通过从公钥和配置结构的盐值生成AES密钥来解密模块的最后一层。然后使用LZSS算法解压缩解密后的输出。

注意:预期的解密输出开头应出现"!HADES"字样。

加密漏洞

值得注意的是,尽管网络通信受到安全加密算法保护,但Rhadamanthys生成椭圆曲线密钥的过程存在重大缺陷。

运行时,它首先调用C函数time来查找受损机器的当前epoch时间。然后,它调用srand函数,将epoch时间作为种子传递。最后,它调用C函数rand来生成秘密标量值。

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

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