针对macOS的RustBucket恶意软件如何逃避检测?
2023-7-12 12:0:0 Author: www.4hou.com(查看原文) 阅读量:17 收藏

导语:我们将在本文回顾该活动中使用的多种恶意软件有效负载,并强调了RustBucket为逃避分析和检测而部署的新技术。

今年4月,JAMF的研究人员就详细介绍了一场针对macOS用户的复杂APT活动,该活动利用多阶段恶意软件,最终形成了能够在受感染的设备上下载和执行下一步恶意软件的Rust后门,他们称之为“RustBucket”,根据已有的证据,研究人员认为其幕后组织是朝鲜黑客组织“BlueNoroff”,“BlueNoroff”通常被认为是Lazarus的分支。

RustBucket能够被植入到受害者的设备中,随时自动调整各项配置,以逃避杀毒软件的检测,因此非常难以被察觉。 RustBucket 利用 AppleScript,当用户打开某些特定网站时,会加载相关恶意组件,然后将这款木马储存在本地。之后,黑客则可以通过 NSTask 启动这款木马并收集受害者的隐私信息。 为了能够持续收集用户信息,攻击者会将这款木马加入名为 LaunchAgents 的开机自启文件夹中,并且会不断调整木马的各项配置,以尽可能地回避杀毒软件的检测。 目前,该恶意软件还无法被检测到,因此用户在实际的使用过程中,往往非常难以察觉这款恶意木马的存在。

今年5月,ESET发布了针对macOS用户的第二个RustBucket变体的详细信息,随后在6月,Elastic发现了第三个变体,其中包括以前未见过的持久化功能。

值得注意的是,RustBucket在恶意软件的各个阶段所采取的反逃避和反分析措施的范围和类型。我们将在本文回顾该活动中使用的多种恶意软件有效负载,并强调了RustBucket为逃避分析和检测而部署的新技术。

阶段1:AppleScript Dropper

攻击始于一个伪装成PDF Viewer应用程序的Applet。Applet只是以.app格式保存的经过编译的AppleScript。与常规的macOS应用程序不同,Applet通常缺乏用户界面,其功能仅作为开发人员向用户传播AppleScript的一种方式。

恶意攻击者选择不将脚本保存为仅运行,这允许我们使用内置的osadecompile工具轻松地反编译脚本,实际上,这就是苹果GUI脚本编辑器在查看编译脚本时在后台运行的内容。

1.png

阶段1执行三个“执行shell脚本”命令来设置阶段2

该脚本包含三个do shell脚本命令,用于下载和执行下一阶段。在JAMF描述的变体中,这是一个名为内部PDF查看器的基本PDF查看器。

阶段1将阶段2写入/Users/Shared/文件夹,该文件夹不需要权限,恶意软件无需绕过TCC即可访问。与Elastic描述的阶段1变体的不同之处在于,它将阶段2作为隐藏文件写入/Users/Shared/.pd。

阶段1很容易成为攻击链中最简单和最容易被检测到的部分。do shell脚本命令的参数应该出现在Mac的统一日志中,并作为命令行工具(如ps实用程序)的输出。

阶段1的成功在很大程度上取决于攻击者使用社会工程策略的程度。在JAMF描述的示例中,攻击者使用了一个精心设计的技巧,要求“内部”PDF阅读器读取所谓的机密或“受保护”文件。受害者被要求执行阶段1,相信它能够阅读他们收到的PDF文件。事实上,阶段1只是一个dropper,旨在保护阶段2顺利运行,以防没有恶意PDF的人偶然发现它。

阶段2:用Swift和Objective-C编写的有效负载

研究人员发现了许多不同的Stage 2有效负载,有些是用Swift编写的,有些是用Objective-C编写的,并且都是为英特尔和苹果的硅架构编译的。阶段2示例的大小和代码工件各不相同。通用的“fat”二进制文件在160Kb到210Kb之间。

2.png

大小不一

在这些示例中,可以找到各种用户名字符串。到目前为止,我们在阶段2的二进制文件中观察到内容如下所示:

3.png

尽管在大小和代码构件方面存在差异,但是阶段1、2的有效负载都具有从命令和控制服务器检索阶段3的共同任务。阶段2有效负载需要一个特制的PDF来解锁代码,这将导致下载阶段3,并提供一个异或密钥来解码附加在PDF末尾的混淆C2。

在一些变体中,这些数据是在之前的研究人员所描述的downAndExecute函数中执行的,在其他情况下,研究人员注意到下一阶段的下载是在名为down_update_run函数中执行的。此函数会因示例而异。例如,在b02922869e86ad06ff6380e8ec0be8db38f5002b中,它通过system()运行硬编码命令。

4.png

阶段2通过system()调用执行shell命令来检索并运行阶段3

但是,相同的函数在其他示例中(例如,d5971e8a3e8577dbb6f5a9aad248c842a33e7a26)使用NSURL API和完全不同的逻辑。

5.png

不同示例的代码差异很大,这可能表明开发人员不同

Elastic的研究人员进一步指出,在用Swift编写的阶段2的一个新变体中,User Agent字符串都是小写的,而在早期的Objective-C示例中则不是。

6.png

User Agent字符串从阶段2的Objective-C版本微妙地更改为Swift版本

虽然User-Agent字符串本身不区分大小写,但如果这是一个有意的更改,则攻击者可能正在服务器端解析User-Agent字符串,以排除对C2的不必要调用。也就是说,在RustBucket示例的其他地方(例如,阶段1中的“/users/shared”)可以看到大小写方面的粗心,并且大小写差异可能是不同开发人员使用不同标准的结果。

在最近的示例中,在受害者的设备上执行之前,阶段2检索的有效负载在_CS_DARWIN_USER_TEMP(又名$TMPDIR,通常位于/var/folders/……/……/ t /)中以“ErrorCheck.zip”的形式写入磁盘。

阶段3:新版本释放持久性LaunchAgent

到目前为止,阶段3的有效负载有两种不同的变体:

A: 182760cbe11fa0316abfb8b7b00b63f83159f5aa Stage3

B: b74702c9b82f23ebf76805f1853bc72236bee57c ErrorCheck, System Update

这两个变体都是从Rust源代码编译的Mach-O通用二进制文件。变体A比变体B大得多,前者的通用二进制文件重11.84MB,而变体B的通用二进制文件重8.12MB。精简后的新变体导入的crate要少得多,并且较少使用两者中的sysinfo crate。值得注意的是,变体B取消了变体A中用于收集环境信息和通过查询system_profiler的SPHardwareDataType值来检查虚拟机中的执行情况的webT类。

7.png

webT类出现在阶段3有效负载的变体A中

然而,变体B并没有清除代码中的所有webT构件,对缺失模块的引用仍然可以在字符串中找到。

8.1.png

8.2.png

在阶段3变体B中仍然可以找到引用缺失的webT模块的字符串

子字符串“Trojan”在早期变体中没有出现,它也出现在同一字符串引用的文件路径中。

重要的是,变体B包含了一个在早期版本的RustBucket中不存在的持久机制。它采用了硬编码的LaunchAgent的形式,它被写入磁盘~/Library/LaunchAgents/com.apple.systemupdate.plist。ErrorCheck文件也将自己的副本写入~/Library/Metadata/System Update,并作为LaunchAgent的目标可执行文件。

因为阶段3需要URL作为启动参数,因此在属性列表中提供URL作为程序参数。奇怪的是,在启动时传递给ErrorCheck的URL被附加到LaunchAgent plist中的这个硬编码URL。

9.png

RustBucket LaunchAgent将硬编码的URL与启动时提供的URL联系起来

在变体A的webT方法中发现的许多恶意软件功能,在变体B中,现在隐藏在巨大的symm .updator::main函数中。它负责监视环境并解析启动时接收到的参数、处理命令、收集磁盘信息等。这个庞大的函数超过22Kb,包含501个基本块。不过经过分析,除了Elastic之前描述的功能之外,该功能还收集磁盘信息,包括主机设备的磁盘是SSD还是旧的rotational platter 类型。

10.png

updator::main的任务之一是收集磁盘信息

在收集环境信息后,恶意软件调用symm .updator::send_request,使用以下User-Agent字符串(这次不是小写)将数据发布到C2:

11.png

恶意软件将比较两个硬编码值0x31和0x30的响应结果

12.png

检查来自C2的响应值

在Elastic分析的样本中,0x31会导致恶意软件自我终止,而0x30允许操作者在_CS_DARWIN_USER_TEMP目录中再释放一个有效负载。

Rust的选择和阶段3二进制文件的复杂性表明,攻击者愿意投入大量精力来阻止对有效负载的分析。由于已知的C2在进行分析时没有响应,所以研究人员无法获得恶意软件下一阶段的样本,但在操作时,恶意软件已经收集了大量的主机信息,实现了持久性,并为进一步的恶意活动打开了后门。

缓解措施

SentinelOne Singularity可以保护客户免受已知RustBucket恶意软件组件的攻击。在macOS设备上安装持久性机制的尝试也会被代理动态检测和阻止。

13.png

SentinelOne Agent用户界面

14.png

总结

RustBucket活动说明,该攻击者(之前的研究人员将其归因于朝鲜的BlueNoroff APT)已经投入了大量资源,专门针对macOS用户开发了多阶段攻击,并不断尝试改进,以阻止分析。

本文翻译自:https://www.sentinelone.com/blog/bluenoroff-how-dprks-macos-rustbucket-seeks-to-evade-analysis-and-detection/如若转载,请注明原文地址

  • 分享至

取消 嘶吼

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟


文章来源: https://www.4hou.com/posts/DZP6
如有侵权请联系:admin#unsafe.sh