主要要点
- RUSTBUCKET 恶意软件家族正处于积极开发阶段,增加了内置持久性,并专注于减少签名。
- REF9135 行动者不断转移其基础设施以逃避检测和响应。
- 朝鲜继续对加密货币服务提供商进行以经济利益为动机的攻击。
- 如果您正在运行 Elastic Defend,您将受到 REF9135 的保护
序言
Elastic 安全实验室团队检测到一种新的 RUSTBUCKET 恶意软件变种,该家族此前在 2023 年 4 月被 Jamf 威胁实验室归因于 BlueNorOff 组织。
此版本的 RUSTBUCKET 是一个针对 macOS 系统的恶意软件家族,它添加了以前未观察到的持久性功能,并且在报告时,未被 VirusTotal 签名引擎检测到。Elastic Defend 行为和预构建的检测规则为用户提供保护和可见性。我们还发布了一个签名以防止此恶意软件的执行。
对 REF9135 的研究使用了主机、二进制和网络分析来识别和归因于此研究团队和其他情报组织观察到的入侵,并高度确信其与 Lazarus 组织有关;Lazarus 组织是由朝鲜民主主义人民共和国 (DPRK) 运营的网络犯罪和间谍组织。
本研究将描述
- REF9135 如何使用 RUSTBUCKET 在加密货币支付服务提供商处进行持续运营
- 逆向分析未检测到的 RUSTBUCKET 变种,该变种添加了内置的持久性机制
- 受害者分析、初始感染、恶意软件以及来自第一方和第三方收集的网络 C2 交集如何与之前 Lazarus 组织的报告相符
RUSTBUCKET 代码分析
概述
我们的研究发现,RUSTBUCKET 恶意软件家族中存在之前未见的持久性能力,这使我们相信该家族正在积极开发中。此外,在发布时,这个新变种在 VirusTotal 上没有被检测到,并且正在利用动态网络基础设施方法进行命令和控制。
阶段 1
在阶段 1 中,该过程从执行一个使用 %2Fusr%2Fbin%2Fosascript 命令的 AppleScript 开始。此 AppleScript 负责使用 cURL 从 C2 初始化阶段 2 二进制文件的下载。此会话在 HTTP 请求的正文中包含字符串 pd,并使用 cur1-agent 作为 User-Agent 字符串,将阶段 2 二进制文件保存到 %2Fusers%2Fshared%2F.pd (7887638bcafd57e2896c7c16698e927ce92fd7d409aae698d33cdca3ce8d25b8)。
阶段 2
阶段 2 二进制文件 ( .pd ) 在 Swift 中编译,并基于命令行参数运行。该二进制文件在执行时需要将 C2 URL 作为第一个参数提供。执行后,它会调用 downAndExec 函数,该函数负责准备 POST HTTP 请求。为了启动此请求,该二进制文件将 User-Agent 字符串设置为 mozilla%2F4.0 (compatible; msie 8.0; windows nt 5.1; trident%2F4.0),并在 HTTP 请求的正文中包含字符串 pw。
在执行期间,恶意软件利用特定的 macOS API 进行各种操作。它首先使用 NSFileManager 的 temporaryDirectory 函数来获取当前的临时文件夹,然后使用 NSUUID 的 UUID.init 方法生成一个随机 UUID。最后,恶意软件将临时目录路径与生成的 UUID 组合在一起,以创建唯一的文件位置并将有效负载写入其中。
一旦表示攻击阶段 3 的有效负载被写入磁盘,恶意软件就会利用 NSTask 来启动其执行。
阶段 3
在阶段 3 中,恶意软件 (9ca914b1cfa8c0ba021b9e00bda71f36cad132f27cf16bda6d937badee66c747) 是一个 FAT macOS 二进制文件,它支持用 Rust 编写的 ARM 和 Intel 架构。它需要将 C2 URL 作为参数提供。
恶意软件通过在运行时动态生成一个 16 字节的随机值来启动其操作。此值用作活动恶意软件特定实例的唯一标识符。随后,恶意软件继续收集全面的系统信息,包括
- 计算机名称
- 活动进程列表
- 当前时间戳
- 安装时间戳
- 系统启动时间
- 系统中所有正在运行的进程的状态
恶意软件通过 POST 请求传输收集到的数据,从而建立与 C2 服务器的初始连接。该请求随附一个 User-Agent 字符串,其格式为 Mozilla%2F4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident%2F4.0)。
收到请求后,C2 服务器会回复一个命令 ID,该 ID 用作恶意软件的指令。该恶意软件设计为仅处理两个命令。
命令 ID 0x31
此命令指示恶意软件自行终止。
命令 ID 0x30
此命令使操作员可以将恶意的 Mach-O 二进制文件或 shell 脚本上传到系统并执行它们。有效负载存储在随机生成的临时路径中,并在当前用户 TMP 目录中创建,遵循 $TMPDIR%2F.\<8 random digits\>
的命名约定
下面是命令结构的摘要,指示常量、参数和有效负载组件,便于理解。
恶意软件继续使用 chmod API 授予上传文件的执行权限。
执行有效负载后,恶意软件会向服务器发送状态更新,通知其已完成执行,然后休眠 60 秒。在此延迟之后,恶意软件循环再次收集系统信息,并保持等待状态,等待服务器发送下一个命令
未检测到的 RUSTBUCKET 版本
使用我们遥测中的样本的代码相似性,我们搜索了 VirusTotal 并确定了未检测到的 RUSTBUCKET 变种。
截至本研究发布时,新发现版本的恶意软件尚未被 VirusTotal 上的任何防病毒引擎标记。对样本的全面分析揭示了新持久性功能和 C2 基础设施的添加。Elastic Defend 的行为规则可防止此类活动,而 Elastic 的预构建检测规则可识别此类活动。我们还发布了一个签名,可以阻止这种新的 RUSTBUCKET 变种。
持久性
恶意软件用于在 macOS 上实现持久性的主要方法是通过利用 LaunchAgent。在 macOS 中,用户在其 Library 目录中具有单独的 LaunchAgents 文件夹,使他们能够定义在每次用户登录时执行的代码。此外,还存在一个系统级的 LaunchAgents 文件夹,该文件夹能够在登录过程中为所有用户执行代码。Elastic Defend 会监视 LaunchAgents 和 LaunchDaemons 的创建,其中包含恶意或可疑值,以此来检测这些持久性技术。
在这种更新的 RUSTBUCKET 样本的情况下,它通过在路径 %2FUsers%2F\<user\>%2FLibrary%2FLaunchAgents%2Fcom.apple.systemupdate.plist
添加 plist 文件来建立自己的持久性,并且它将恶意软件的二进制文件复制到以下路径 %2FUsers%2F\<user\>%2FLibrary%2FMetadata%2FSystem Update
。
plist 文件中有几个元素,使用标准的 true%2Ffalse 或字符串值
- Label:“Label”键指定 LaunchAgent 的名称,在这种情况下为 com.apple.systemupdate。它需要一个字符串值。
- RunAtLoad:这表明 LaunchAgent 应在其加载时立即执行其关联的代码,特别是在系统启动或用户登录期间。它需要一个 true%2Ffalse 值。
- LaunchOnlyOnce: 此项防止恶意软件多次并发执行,并期望一个 true/false 值。
- KeepAlive: 此键指示系统保持 LaunchAgent 运行,并在其意外终止时重新启动它。此项期望一个 true/false 值。
- ProgramArguments: “ProgramArguments” 键指定一个字符串数组,用于定义 LaunchAgent 要执行的程序或脚本。此项期望一个字符串值,在本例中,LaunchAgent 执行位于 "
%2FUsers%2F\<user\>%2FLibrary%2FMetadata%2FSystem Update
" 的文件,并将 C2 URL "https:%2F%2Fwebhostwatto.work[.]gd" 作为恶意软件的参数提供。
RUSTBUCKET 和 REF9135 分析
概述
Jamf 和 Sekoia.io 此前已将 RUSTBUCKET 活动与 BlueNorOff 联系起来。据信,BlueNorOff 受朝鲜民主主义人民共和国 (DPRK) 指使,旨在通过获取经济利益来缓解全球制裁带来的压力。BlueNorOff 是朝鲜民主主义人民共和国 (DPRK) 进攻性网络攻击组织 Lazarus Group 的一个子部门。2016 年孟加拉国银行抢劫案是 BlueNorOff 最臭名昭著的攻击案例,他们的目标是通过利用 SWIFT 网络,从孟加拉国中央银行孟加拉国银行拥有的纽约联邦储备银行账户中非法转移超过 8.5 亿美元。
作为分析师的注释,如果您对这次入侵的详细而冗长的过程感兴趣,Geoff White 和 Jean Lee 通过 BBC World Service 发布了一个由 19 部分组成的播客,对这一事件进行了令人难以置信的描述。
网络基础设施
先前确定的持久性机制会调用 https:%2F%2Fwebhostwatto.work[.]gd。第三方对该 URL 的研究表明,12% / 89 的 VirusTotal 供应商已将其识别为恶意软件,并且它存在于一个记录 DangerousPassword 网络钓鱼活动的社区集合中。
VirusTotal 上次看到该域名指向 104.168.167[.]88。Sekoia.io 在五月份的 博客中明确指出这是 BlueNorOff 的 RUSTBUCKET 活动的一部分。
进一步将 webhostwatto.work[.]gd 与 DangerousPassword、BlueNorOff 和朝鲜民主主义人民共和国活动联系起来,此域名与其他域名 companydeck[.]online 共享 TLS 叶证书指纹哈希 (1031871a8bb920033af87078e4a418ebd30a5d06152cd3c2c257aecdf8203ce6)。
companydesk[.]online 包含在 VirusTotal 图表(需要 VirusTotal 帐户)中,该图表适用于 APT38,APT38 也被称为 DangerousPassword、BlueNorOff 等。
DangerousPassword 和 BlueNorOff 都是先前与朝鲜民主主义人民共和国相关的活动。
使用我们初始 C2 域名 crypto.hondchain[.]com 的 IP 地址 (64.44.141[.]15),我们发现了另外 3 个 C2 域名
- starbucls[.]xyz
- jaicvc[.]com
- docsend.linkpc[.]net(动态 DNS 域名)
虽然只有 5 个主机(总共 4 个域名)注册到 C2 IP 地址(表明这不是一个高容量的托管服务器),但我们寻找了其他关系以提高域名之间的关联可信度。为此,我们复制了先前对 webhostwatto.work[.]gd 使用的相同指纹识别过程。starbucls[.]xyz 的 TLS 指纹哈希 (788261d948177acfcfeb1f839053c8ee9f325bd6fb3f07637a7465acdbbef76a) 与 jaicvc[.]com 的指纹相同。
由于这两个域名具有相同的 TLS 指纹哈希,并且它们都注册到同一个 IP 地址,因此我们能够高度确信地将这些原子实体及其同级实体聚集在一起
- 所有主机都注册到 64.44.141[.]15
- 我们观察到恶意软件样本正在使用 starbucls[.]xyz 和 crypto.hondchain[.]com
- starbucls[.]xyz 和 jaicvc[.]com 共享一个 TLS 指纹
查看“First”列(通过第三方被动 DNS 首次观察到它们的时间),这些主机正在快速创建,这很可能是为了在研究团队的检测工作之前保持领先。我们高度确信地将以下域名和 IP 地址与 REF9135 活动关联起来
- starbucls[.]xyz
- jaicvc[.]com
- crypto.hondchain[.]com
- 64.44.141[.]15
我们尚未观察到 docsend.linkpc[.]net 与我们分析的 RUSTBUCKET 样本一起使用。但是,它共享的 IP 注册和主机同级关系使我们有中等程度的把握认为它与 RUSTBUCKET 和 REF9135 直接相关,作为 C2 基础设施;并且高度确信它是恶意的(与其他活动共享基础设施)。
防御规避
活动所有者使用了多种技术来阻止分析师收集第 2 阶段和第 3 阶段的二进制文件,这些分析师可能忽略了调查中的 User-Agent 字符串,以及专注于收集恶意二进制文件的互联网扫描程序和沙箱。
如第 1 阶段部分所述,下载第 2 阶段二进制文件时需要特定的 User-Agent 字符串 (cur1-agent),如果不使用预期的 User-Agent,您将收到 405 HTTP 响应状态代码(方法不允许)。
活动所有者似乎也在监控他们的有效负载暂存基础设施。使用第 3 阶段二进制文件下载的预期 User-Agent (mozilla%2F4.0 (compatible; msie 8.0; windows nt 5.1; trident%2F4.0)),我们能够收集第 3 阶段的二进制文件。
最后,我们观察到 REF9135 在我们开始收集第 2 阶段和第 3 阶段的二进制文件进行分析后更改了其 C2 域名。在随后向原始服务器 (crypto.hondchain[.]com) 发出请求时,我们收到了 404 HTTP 响应状态代码(未找到),不久之后,又识别了一个新的 C2 服务器 (starbucls[.]xyz)。这可能是因为我们在二进制文件作为正常操作安全实践的一部分被取消之前捕获了它(不要让您的有价值的有效负载附加到互联网上以便被发现),或者是因为他们观察到来自目标网络之外的对其基础设施的连接。
值得注意的是,虽然上面的 User-Agent 字符串最初可能看起来是分析师的默认 cURL 或 Firefox User-Agent 字符串,但事实并非如此。默认的 cURL User-Agent 字符串是 curl%2Fversion.number,而恶意软件使用 cur1-agent(使用 1 代替“curl”中的 l)。此外,“Firefox”字符串全部小写 (mozilla%2F4.0 (compatible; msie 8.0; windows nt 5.1; trident%2F4.0)),这与实际的 Firefox User-Agent 字符串 不同,后者采用驼峰式大小写。
下载有效负载的此项要求允许攻击者将分发限制为仅限知道正确 UA 字符串的请求者。这为扫描服务和研究人员提供了强有力的保护,否则他们将可以提前访问托管的恶意文件以进行分析和检测工程。
受害者分析
REF9135 的受害者是一家风险投资支持的加密货币公司,为企业(如工资单和企业对企业交易)提供服务,总部位于美国。此受害者符合先前关于 BlueNorOff 以窃取为目的攻击拥有大量加密货币的组织的报告。
观察到的对手战术和技术
Elastic 使用 MITRE ATT&CK 框架来记录高级持续威胁针对企业网络使用的常见战术、技术和程序。
战术
战术代表一种技术或子技术的原因。它是对手的战术目标:执行操作的原因。
钻石模型
Elastic Security 利用 钻石模型 来描述入侵的对手、能力、基础设施和受害者之间的高级关系。虽然钻石模型最常用于单次入侵,并利用活动线程(第 8 节)作为创建事件之间关系的一种方式,但以对手为中心的(第 7.1.4 节)方法允许使用一个(尽管杂乱的)单钻石。
检测逻辑
预防
搜寻查询
EQL 的事件通过使用 Elastic Defend 集成的 Elastic Agent 提供。搜寻查询可能会返回高信号或误报。这些查询用于识别潜在的可疑行为,但需要进行调查以验证结果。
EQL 查询
在 Kibana 的 Security Solution 的“时间线”部分中的“关联”选项卡下,您可以使用以下 EQL 查询来搜寻在 REF9135 中观察到的行为。
通过 Osascript 进行的可疑 Curl 文件下载
process where process.parent.name : "osascript" and process.name : "curl" and process.args : "-o"
作为自签名二进制文件的参数的可疑 URL
process where event.type == "start" and event.action == "exec" and
process.code_signature.trusted == false and
process.code_signature.signing_id regex~ """[A-Za-z0-9\_\s]{2,}\-[a-z0-9]{40}""" and
process.args : "http*" and process.args_count <= 3
YARA
Elastic Security 创建了 YARA 规则来识别此活动。以下是用于识别 RUSTBUCKET 恶意软件的 YARA 规则
rule MacOS_Trojan_RustBucket {
meta:
author = "Elastic Security"
creation_date = "2023-06-26"
last_modified = "2023-06-26"
license = "Elastic License v2"
os = "MacOS"
arch = "x86"
category_type = "Trojan"
family = "RustBucket"
threat_name = "MacOS.Trojan.RustBucket"
reference_sample = "9ca914b1cfa8c0ba021b9e00bda71f36cad132f27cf16bda6d937badee66c747"
severity = 100
strings:
$user_agent = "User-AgentMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)"
$install_log = "/var/log/install.log"
$timestamp = "%Y-%m-%d %H:%M:%S"
condition:
all of them
}
参考
以上研究中引用了以下内容
- https:%2F%2Fwww.jamf.com%2Fblog%2FBlueNorOff-apt-targets-macos-rustbucket-malware%2F
- https:%2F%2Fblog.sekoia.io%2FBlueNorOffs-rustbucket-campaign%2F
观察结果
所有可观察对象也可以在组合的 zip 包中以 ECS 和 STIX 格式进行下载。
本研究讨论了以下可观察对象。
可观察对象 | 类型 | 名称 | 参考 |
---|---|---|---|
webhostwatto.work[.]gd | 域名 | 不适用 | REF9135 C2 域名 |
crypto.hondchain[.]com | 域名 | 不适用 | REF9135 C2 域名 |
starbucls[.]xyz | 域名 | 不适用 | REF9135 C2 域名 |
jaicvc[.]com | 域名 | 不适用 | REF9135 C2 域名 |
docsend.linkpc[.]net | 域名 | 不适用 | REF9135 C2 域名 |
companydeck[.]online | 域名 | 不适用 | 与 REF9135 TLS 指纹哈希关联 |
104.168.167[.]88 | ipv4 | 不适用 | REF9135 C2 IP 地址 |
64.44.141[.]15 | ipv4 | 不适用 | REF9135 C2 IP 地址 |
788261d948177acfcfeb1f839053c8ee9f325bd6fb3f07637a7465acdbbef76a | x509 证书 | jaicvc[.]com | REF9135 C2 TLS 指纹哈希 |
1031871a8bb920033af87078e4a418ebd30a5d06152cd3c2c257aecdf8203ce6 | x509 证书 | webhostwatto.work[.]gd | REF9135 C2 TLS 指纹哈希 |
9ca914b1cfa8c0ba021b9e00bda71f36cad132f27cf16bda6d937badee66c747 | SHA-256 | 不适用 | MacOS.Trojan.RustBucket |
7fccc871c889a4f4c13a977fdd5f062d6de23c3ffd27e72661c986fae6370387 | SHA-256 | 不适用 | MacOS.Trojan.RustBucket |
ec8f97d5595d92ec678ffbf5ae1f60ce90e620088927f751c76935c46aa7dc41 | SHA-256 | 不适用 | MacOS.Trojan.RustBucket |
de81e5246978775a45f3dbda43e2716aaa1b1c4399fe7d44f918fccecc4dd500 | SHA-256 | 错误检查 | MacOS.Trojan.RustBucket |
4f49514ab1794177a61c50c63b93b903c46f9b914c32ebe9c96aa3cbc1f99b16 | SHA-256 | 不适用 | MacOS.Trojan.RustBucket |
fe8c0e881593cc3dfa7a66e314b12b322053c67cbc9b606d5a2c0a12f097ef69 | SHA-256 | 不适用 | MacOS.Trojan.RustBucket |
7887638bcafd57e2896c7c16698e927ce92fd7d409aae698d33cdca3ce8d25b8 | SHA-256 | %2FUsers%2FShared%2F.pd | 阶段 2 |