Analysis of Rhadamanthys Malware
Virtualattacks Staff
December 19, 2023
在2022年最后一个季度,信息窃取恶意软件Rhadamanthys被发现。鉴于其能够针对受害者计算机上安装的浏览器扩展和钱包客户端,其功能表现出对加密货币钱包的特别兴趣。 已注意到的此威胁的主要传播方式是网络钓鱼邮件以及通过谷歌广告进行宣传的虚假软件网站,无论其所属行业或地区。
尽管其传播和信息窃取方法先前已被观察到,但其下载器组件使其脱颖而出。它通过结合复杂的反分析技术与重度混淆,使得通过传统安全方法进行分析变得极其困难。
Rhadamanthys下载器主要采用C++编写,采用分阶段执行方式并运用多种反分析技术。
- 虚拟机混淆器。
- 强大的虚拟机(VM)和沙箱检测能力。其中部分能力源自开源程序al-khaser并导入。
- 使用嵌入式文件系统的定制文件格式。
Rhadamanthys的反分析特性并非无人注意。Zscaler的研究人员发现,所使用的虚拟机混淆器是Quake 3 VM。此外,分析人员将这些独特的文件格式与加密货币矿工Hidden Bee所使用的格式联系起来。CheckPoint最近发布了关于该虚拟文件系统内部工作原理的详尽分析。
Shellcode之舞:剖析Rhadamanthys窃密者
Rhadamanthys是一种新近开发的C++信息窃取程序。据多份报告称,该恶意软件自2022年底以来一直处于活跃状态。
为了获得早期立足点,该恶意软件似乎还伪装成可信程序,包括AnyDesk安装程序和Google Ads。
在使用方面,恶意软件的创建者在暗网上提供各种激励措施,包括终身或月度付费。
作者还强调了该恶意软件除了收集系统信息外,还能执行其他进程(包括Powershell)以及窃取数字货币的能力。
在本文中,我将剖析Rhadamanthys窃密者,并逆向工程其从初始投放器到恶意软件本身的每一步过程。
与往常一样,我将以幻灯片和分步教程相结合的形式进行介绍,重点放在我最感兴趣的方面(即恶意软件试图逃避检测的方式)。
投放器
与许多投放器一样,Rhadamanthys的投放器是一个32位文件,具有相对较大的熵值,表明其可能包含打包内容。
检查ASLR功能是否启用是PEstudio较新的功能之一。出于跟踪目的,我倾向于在分析中禁用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将按以下方式执行:
- 函数
sub_405728调用ImmEnumInputContext API。 - 函数
sub_405728接收函数sub_407228作为参数,该函数只是另一个跳转到shellcode地址的函数的包装器。 - 最终,ImmEnumInputContext将从其第二个参数“lpfn”中获取shellcode地址并执行它。
修正建议 在每个控制点阻止所有威胁指标。 利用适用于您环境的安全控制来查找危害指标。 始终对来自不熟悉发件人的电子邮件保持谨慎。 切勿信任或打开来自未知来源/发件人的“链接和附件”。 确保定期备份所有服务器和计算机网络。
最后,Rhadamanthys运行为主模块准备的shellcode加载器,该加载器通过从公钥和配置结构中的盐值生成AES密钥来解密模块的最后一层。然后使用LZSS算法解压缩解密后的输出。
注意:预期的解密输出开头应出现单词“!HADES”。
请注意,尽管网络通信受到安全加密算法的保护,但Rhadamanthys生成椭圆曲线密钥的过程存在一个重大缺陷。
当其运行时,它首先调用C函数time来获取受感染机器的当前epoch时间。然后,它调用srand函数,将epoch时间作为种子传递。最后,它调用C函数rand来生成秘密标量值。
因此,如果我们拥有包含公钥和epoch时间的、发送到服务器的初始请求的网络捕获数据,我们就可以暴力破解生成的密钥。