序言
Elastic 安全实验室正在披露一起针对加密货币交易所平台的区块链工程师的新型入侵事件。该入侵利用自定义和开源功能的组合进行初始访问和后期利用。
我们在分析尝试将二进制文件反射加载到 macOS 端点内存的尝试时发现了此入侵。该入侵可追溯到一个 Python 应用程序,该应用程序冒充加密货币套利机器人,通过公共 Discord 服务器上的直接消息传递。
根据我们对技术、网络基础设施、代码签名证书和自定义 Lazarus Group 检测规则的分析,我们将此活动归因于朝鲜民主主义人民共和国,并识别出与 Lazarus Group 的重叠之处;我们将此入侵集追踪为 REF7001。
主要发现
- 威胁行为者使用 Python 应用程序诱骗区块链工程师,以获取对环境的初始访问权限
- 此入侵涉及多个复杂阶段,每个阶段都采用了故意的防御规避技术
- 在 macOS 系统上观察到了入侵集,攻击者尝试将二进制文件加载到内存中,这在 macOS 入侵中是不典型的
执行流程
攻击者在区块链工程社区成员经常光顾的公共 Discord 上冒充区块链工程社区成员。攻击者对他们的初始受害者进行了社会工程攻击,说服他们下载并解压缩包含恶意代码的 ZIP 存档。受害者认为他们正在安装一个套利机器人,这是一种能够从平台之间的加密货币汇率差异中获利的软件工具。
此执行启动了 REF7001 入侵的主要恶意软件执行流程,最终导致 KANDYKORN
- 第 0 阶段(初始入侵)-
Watcher.py
- 第 1 阶段(投放器)-
testSpeed.py
和FinderTools
- 第 2 阶段(有效负载)-
.sld
和.log
- SUGARLOADER - 第 3 阶段(加载器)- Discord(虚假)- HLOADER
- 第 4 阶段(有效负载)- KANDYKORN
第 0 阶段初始入侵:Watcher.py
初始入侵是通过伪装的 Python 应用程序精心策划的,该应用程序被设计并宣传为针对区块链工程师的套利机器人。此应用程序以名为 Cross-Platform Bridges.zip
的 .zip 文件分发。解压缩后,会显示一个 Main.py
脚本,以及一个名为 order_book_recorder
的文件夹,其中包含 13 个 Python 脚本。
受害者通过他们的 PyCharm IDE Python 解释器手动运行了 Main.py
脚本。
最初,Main.py
脚本看起来是无害的。它导入随附的 Python 脚本作为模块,并且似乎执行了一些普通的函数。
在分析 order_book_recorder
文件夹中包含的模块时,有一个文件 -- Watcher.py
-- 明显突出,我们将看到原因。
Main.py
充当初始触发器,导入 Watcher.py
作为间接执行脚本的模块。Python 解释器按顺序运行 Watcher.py
中的每个顶级语句。
该脚本首先建立本地目录路径,然后尝试在指定位置生成一个 _log
文件夹。如果该文件夹已存在,则该脚本保持被动状态。
该脚本预定义一个 testSpeed.py
文件路径(目标是刚刚创建的 _log
文件夹),并将其分配给 output
变量。然后定义函数 import_networklib
。在其中,初始化一个 Google Drive URL。
利用 Python 的 urllib
库,该脚本从该 URL 获取内容并将其存储在 s_args
变量中。如果检索出错,则默认为返回操作系统的名称。随后,来自 Google Drive 的内容(现在位于 s_args
中)被写入 testSpeed.py
文件。
下一个函数 get_modules_base_version
探测 Python 版本,如果检测到版本 3,则调用 import_networklib
函数。此调用启动整个序列。
Watcher.py
导入 testSpeed.py
作为模块,执行脚本的内容。
在其操作结束时,恶意脚本会进行清理,在一次性执行后立即删除 testSpeed.py
文件。
第 1 阶段投放器 testSpeed.py 和 FinderTools
执行时,testSpeed.py
会建立一个出站网络连接,并从 Google Drive URL 获取另一个名为 FinderTools
的 Python 文件。这个新文件会保存到 /Users/Shared/
目录,其检索方法与 Watcher.py
脚本相似。
下载完成后,testSpeed.py
会启动 FinderTools
,并提供一个 URL (tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfC
) 作为参数,该参数会发起一个出站网络连接。
FinderTools
是另一个下载器,它会下载并执行一个隐藏的第二阶段载荷 .sld
,该载荷也写入到 /Users/Shared/
目录。
第二阶段载荷 .sld 和 .log:SUGARLOADER
第二阶段涉及执行一个我们命名为 SUGARLOADER 的混淆二进制文件,该文件在两个不同的名称下被使用两次(.sld
和 .log
)。
首次观察到 SUGARLOADER 位于 /Users/shared/.sld
。SUGARLOADER 的第二个实例被重命名为 .log
,用于 REF7001 通过 Discord 实现的持久化机制中。
混淆
SUGARLOADER 用于初始访问机器,并为最终阶段初始化环境。这个二进制文件使用二进制打包器进行混淆,限制了静态分析可以看到的内容。
此二进制文件的起始函数包含一个跳转 (JMP
) 到未定义的地址。这在二进制打包器中很常见。
HEADER:00000001000042D6 start:
HEADER:00000001000042D6 jmp 0x10000681E
执行 macOS 文件对象工具 otool -l ./log
会列出运行时将加载的所有部分。
Section
sectname __mod_init_func
segname lko2
addr 0x00000001006983f0
size 0x0000000000000008
offset 4572144
align 2^3 (8)
reloff 0
nreloc 0
flags 0x00000009
reserved1 0
reserved2 0
__mod_init_func
包含初始化函数。C++ 编译器会将静态构造函数放置在此处。这是用于在内存中解包二进制文件的代码。
对这类文件进行逆向工程的成功方法是在执行初始化函数后立即设置一个断点,然后获取进程虚拟内存的快照。当命中断点时,代码已经会在内存中解密,可以使用传统方法进行分析。
攻击者通常使用这种混淆技术来绕过传统的基于静态签名的反恶意软件功能。截至本文发布时,VirusTotal 显示该文件 0 检测,这表明这些防御规避仍然具有成本效益。
执行
SUGARLOADER 的主要目的是连接到命令和控制服务器 (C2),以下载我们称为 KANDYKORN 的最终阶段载荷,并直接在内存中执行它。
SUGARLOADER 检查 /Library/Caches/com.apple.safari.ck
中是否存在配置文件。如果配置文件缺失,它将通过作为命令行参数提供给 .sld
二进制文件的默认 C2 地址下载和创建。在我们的示例中,C2 地址为 23.254.226[.]90
,使用 TCP 端口 443
。我们在下面的“网络基础设施”部分提供了有关 C2 的更多信息。
配置文件使用 RC4 加密,并且加密密钥(在“观察”部分中)硬编码在 SUGARLOADER 本身中。com.apple.safari.ck
文件由 SUGARLOADER 和 KANDYKORN 用于建立安全的网络通信。
struct MalwareConfig
{
char computerId[8];
_BYTE gap0[12];
Url c2_urls[2];
Hostname c2_ip_address[2];
_BYTE proxy[200];
int sleepInterval;
};
computerId
是一个随机生成的字符串,用于识别受害者的计算机。
C2 服务器可以使用完全限定的 URL (c2_urls
) 或 IP 地址和端口 (c2_ip_ddress
) 来识别。它支持两个 C2 服务器,一个作为主服务器,第二个作为后备服务器。恶意行为者通常会使用这种指定或硬编码多个服务器的方法,以确保其与受害者的连接在原始 C2 被关闭或阻止时仍然保持持久。 sleepInterval
是恶意软件在不同操作之间休眠的默认时间间隔。
将配置文件读入内存并解密后,下一步是初始化与远程服务器的连接。受害者计算机与 C2 服务器之间的所有通信都将在“网络协议”部分中详细说明。
SUGARLOADER 执行的最后一步是从 C2 服务器下载最终阶段载荷并执行它。REF7001 利用一种称为反射二进制加载(分配后直接在进程内存中执行载荷)的技术来执行最终阶段,利用诸如 NSCreateObjectFileImageFromMemory
或 NSLinkModule
等 API。反射加载是一种强大的技术。如果您想了解更多关于其工作原理的信息,请查看 slyd0g 和 hackd 的这项研究。
此技术可用于从内存缓冲区执行载荷。这种无文件执行方式之前在 Lazarus Group 发起的攻击中观察到。
SUGARLOADER 反射式加载一个二进制文件 (KANDYKORN),然后创建一个最初名为 appname
的新文件,我们将其称为 HLOADER
,该名称直接取自进程代码签名的签名标识符。
第三阶段加载器 Discord:HLOADER
HLOADER (2360a69e5fd7217e977123c81d3dbb60bf4763a9dae6949bc1900234f7762df1
) 是一个试图伪装成合法 Discord 应用程序的载荷。截至本文撰写时,它在 VirusTotal 上有 0 个检测结果。
HLOADER 的识别是通过使用一种 macOS 二进制代码签名技术实现的,该技术先前与 DPRK 的 Lazarus Group 3CX 入侵有关。除了其他已发布的研究外,Elastic Security Labs 还使用此技术的存在作为 DPRK 活动的指标,正如我们在 2023 年 6 月发布的关于 JOKERSPY 的研究出版物中所看到的。
持久性
我们观察到威胁行为者采用了一种我们以前没有见过他们用于在 macOS 上实现持久性的技术,称为执行流劫持。此次攻击的目标是广泛使用的应用程序 Discord。Discord 应用程序通常由用户配置为登录项并在系统启动时启动,使其成为接管的诱人目标。HLOADER 是一个用 Swift 编写的自签名二进制文件。此加载器的目的是执行合法的 Discord 包和 .log
载荷,后者用于从内存中执行 Mach-O 二进制文件,而无需将它们写入磁盘。
合法的二进制文件 /Applications/Discord.app/Contents/MacOS/Discord
已重命名为 .lock
,并被 HLOADER
替换。
以下是 HLOADER
的代码签名信息,它具有与其他 Lazarus Group 样本一致的自签名标识符结构。
Executable=Applications/Discord.app/Contents/MacOS/Discord
Identifier=HLOADER-5555494485b460f1e2343dffaef9b94d01136320
Format=bundle with Mach-O universal (x86_64 arm64)
CodeDirectory flags=0x2(adhoc) hashes=12+7 location=embedded
执行时,HLOADER
执行以下操作
- 将其自身从
Discord
重命名为MacOS.tmp
- 将合法的 Discord 二进制文件从
.lock
重命名为Discord
- 使用
NSTask.launchAndReturnError
执行 Discord 和.log
- 将两个文件重命名回其初始名称
下面的进程树还直观地描述了如何获得持久性。根节点 Discord
实际上是伪装成合法应用程序的 HLOADER。如上所述,它首先运行 .lock,实际上是 Discord,同时,以 .log 为名的进程生成 SUGARLOADER。
正如在第二阶段中看到的那样,SUGARLOADER 读取配置文件,连接到 C2 服务器,并等待接收载荷。当新的载荷 (KANDYKORN) 加载到内存时,会生成另一个警报。
第四阶段载荷:KANDYKORN
KANDYKORN 是此执行链的最终阶段,它拥有一整套功能,可以访问和泄露受害者计算机中的数据。Elastic Security Labs 能够从尚未停用的一个 C2 服务器中检索到此载荷。
执行
KANDYCORN 进程会作为守护进程在后台分叉和运行,然后在 /Library/Caches/com.apple.safari.ck
中加载其配置文件。该配置文件会被读取到内存中,然后使用相同的 RC4 密钥解密,并解析 C2 设置。通信协议与之前的阶段类似,使用受害者 ID 值进行身份验证。
命令和控制
一旦建立通信,KANDYKORN 会等待服务器的命令。这是一个有趣的特点,即恶意软件等待命令而不是轮询命令。这将减少生成的端点和网络工件的数量,并提供一种限制潜在发现的方法。
每个命令都由一个整数表示,随后是特定于每个操作的数据。以下是 KANDYKORN 提供的可用命令列表。
命令 0xD1
操作:退出命令,程序会正常退出。
命令 0xD2
名称:resp_basicinfo
操作:收集有关系统的信息,例如主机名、uid、osinfo 和当前进程的映像路径,并报告回服务器。
命令 0xD3
名称:resp_file_dir
操作:列出目录的内容,并以类似于 ls -al
的格式输出,包括类型、名称、权限、大小、acl、路径和访问时间。
命令 0xD4
名称:resp_file_prop
操作:递归读取目录并计算文件数量、子目录数量和总大小。
命令 0xD5
名称:resp_file_upload
操作:攻击者使用此命令将其 C2 服务器上的文件上传到受害者的计算机。此命令指定路径,创建路径,然后下载文件内容并将其写入受害者的计算机。
命令 0xD6
名称:resp_file_down
操作:攻击者使用此命令将文件从受害者的计算机传输到其基础设施。
命令 0xD7
名称:resp_file_zipdown
操作:将目录存档并将其泄露到 C2 服务器。新创建的存档的名称具有以下模式:/tmp/tempXXXXXXX
。
命令 0xD8
名称:resp_file_wipe
操作:将文件内容覆盖为零并删除该文件。这是一种常见的技术,用于阻止通过文件系统上的数字取证恢复文件。
命令 0xD9
名称:resp_proc_list
操作:列出系统上所有正在运行的进程及其 PID、UID 和其他信息。
命令 0xDA
名称:resp_proc_kill
操作:按指定的 PID 杀死进程。
命令 0xDB
名称:resp_cmd_send
操作:通过使用伪终端在系统上执行命令。
命令 0xDC
名称:resp_cmd_recv
操作:从上一个命令 resp_cmd_send
读取命令输出。
命令 0xDD
名称:resp_cmd_create
操作:在系统上生成一个 shell,并通过伪终端与之通信。一旦执行 shell 进程,就会通过 /dev/pts
设备读取和写入命令。
命令 0xDE
名称:resp_cfg_get
操作:从 /Library/Caches/com.apple.safari.ck
将当前配置发送到 C2。
命令 0xDF
名称:resp_cfg_set
操作:将新的配置文件下载到受害者的计算机。攻击者使用此命令更新用于检索命令的 C2 主机名。
命令 0xE0
名称:resp_sleep
操作:休眠若干秒。
摘要
KANDYKORN 是一种高级植入程序,具有多种监视、交互和避免检测的功能。它利用反射加载,这是一种直接内存执行形式,可以绕过检测。
网络协议
所有与 C2 通信的可执行文件(第 3 阶段和第 4 阶段)都使用相同的协议。所有数据都使用 RC4 加密,并使用之前在配置文件中引用的相同密钥。
这两个样本都实现了对发送和接收系统调用的包装。可以在以下伪代码中观察到,在发送例程期间,缓冲区首先被加密,然后发送到套接字,而当接收到数据时,首先解密,然后处理。
当恶意软件在初始化阶段首次连接到 C2 时,需要验证握手才能继续。如果握手失败,攻击将停止,并且不会处理其他命令。
在客户端,会生成一个随机数并发送到 C2,C2 会回复一个 nonce 变量。然后,客户端使用随机数和接收到的 nonce 计算一个质询,并将结果发送回服务器。如果质询成功并且服务器接受连接,则会回复一个常量,例如 0x41C3372
,该常量出现在分析的样本中。
建立连接后,客户端会发送其 ID 并等待来自服务器的命令。从这里发送或接收的任何后续数据都将按照用于序列化二进制对象的通用模式进行序列化。首先,发送内容的长度,然后是有效负载,最后是返回代码,指示是否发生任何错误。
网络基础设施
在 REF7001 期间,观察到攻击者与网络基础设施进行通信,以收集入侵不同阶段的各种有效负载和加载器。
如上面的第 1 阶段部分所述,初始恶意软件存档的链接 Cross-Platform Bridges.zip
在流行的区块链 Discord 服务器上的直接消息中提供。此存档托管在 Google Drive 上 (https://drive.google[.]com/file/d1KW5nQ8MZccug6Mp4QtKyWLT3HIZzHNIL2
),但在下载存档后不久就被删除。
在对 REF7001 入侵进行分析的过程中,观察到两个 C2 服务器。
tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfC
23.254.226[.]90
tp-globa[.]xyz
C2 域名 tp-globa[.]xyz
被 FinderTools
用于下载 SUGARLOADER,并且很可能是试图域名抢注一家合法的外汇市场经纪商。我们没有任何信息表明该合法公司参与了此次入侵。选择此域名抢注可能是为了让入侵受害者看起来更合法。
截至本文撰写时,tp-globa[.]xyz
解析为一个 IP 地址 (192.119.64[.]43
),该 IP 地址已被观察到分发归因于朝鲜民主主义人民共和国 Lazarus 集团的恶意软件(1, 2, 3)。
23.254.226[.]90
23.254.226[.]90 是用于 .sld
文件 (SUGARLOADER 恶意软件) 的 C2 IP。此 IP 如何用于 C2 在上面的第 2 阶段部分中突出显示。
2023 年 10 月 14 日,23.254.226[.]90
用于注册子域名 pesnam.publicvm[.]com
。虽然我们没有在入侵中观察到此域名,但它被记录为托管其他恶意软件。
活动交叉点
tp-globa[.]xyz
具有主题 CN 为 bitscrunnch.linkpc[.]net
的 TLS 证书。域名 bitscrunnch.linkpc[.]net
已被归因于其他 Lazarus Group 入侵。
如上所述,这很可能是试图域名抢注一个去中心化 NFT 数据平台的合法域名。我们没有任何信息表明该合法公司参与了此次入侵。
…
Issuer: C = US, O = Let's Encrypt, CN = R3
Validity
Not Before: Sep 20 12:55:37 2023 GMT
Not After : Dec 19 12:55:36 2023 GMT
Subject: CN = bitscrunnch[.]linkpc[.]net
…
bitscrunnch.linkpc[.]net
的 TLS 证书也被用于 其他额外的域名,所有这些域名都注册到上面 tp-globa[.]xyz
部分报告的同一 IP 地址 192.119.64[.]43
。
jobintro.linkpc[.]net
jobdescription.linkpc[.]net
docsenddata.linkpc[.]net
docsendinfo.linkpc[.]net
datasend.linkpc[.]net
exodus.linkpc[.]net
bitscrunnch.run[.]place
coupang-networks[.]pics
虽然 LinkPC 是一个合法的二级域名和动态 DNS 服务提供商,但有充分的证据表明,这个特定服务被威胁行动者用于 C2(命令和控制)。在我们已发布的关于 RUSTBUCKET 的研究中,该研究也被归因于朝鲜,我们观察到 LinkPC 被用于 C2。
截至本文撰写之时,192.119.64[.]43
的所有已注册域名(共 48 个)都包含在可观察项包中。
最后,在 2023 年 7 月下旬,Reddit 子版块 r/hacking、r/Malware 和 r/pihole 上出现了 URL 报告,这些 URL 的结构与 tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfC
的结构相匹配。Reddit 上的用户报告说,一位招聘人员联系他们,要求他们解决一个 Python 编码挑战,作为工作邀请的一部分。编码挑战是分析一段据称用于互联网速度测试的 Python 代码。这与 REF7001 受害者报告的被邀请进行 Python 编码挑战以及本研究前面详细介绍的脚本名称 testSpeed.py
相符。
Reddit 上报告的域名是 group.pro-tokyo[.]top//OcRLY4xsFlN/vMZrXIWONw/6OyCZl89HS/fP7savDX6c/bfC
,它与 REF7001 URL (tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfC
) 的结构相同
- TLD 后的两个
//
- 5 个子目录,使用
//11 个字符/10 个字符/10 个字符/
结构 - 最后 2 个子目录是
/fP7savDX6c/bfC
虽然我们没有在入侵中观察到 GitHub,但报告此事件的 Redditor 观察到使用了 GitHub 个人资料。这些帐户都已被停用。
这些帐户是
https://github[.]com/Prtof
https://github[.]com/wokurks
总结
朝鲜通过像 LAZARUS GROUP 这样的组织,继续以窃取加密货币为目标,攻击加密货币行业的企业,以规避阻碍其经济发展和野心的国际制裁。在这次入侵中,他们利用一个旨在与其技能和兴趣相关的诱饵,并承诺潜在的经济收益,以此来攻击公共聊天服务器上的区块链工程师。
感染需要受害者的互动,如果诱饵是合法的,这也是可以预期的。一旦通过 Python 解释器执行,REF7001 的执行流程会经历 5 个阶段
- 阶段 0(准备):
Main.py
将Watcher.py
作为导入的模块执行。此脚本检查 Python 版本,准备本地系统目录,然后下载、执行和清理下一阶段。 - 阶段 1(通用投放器):
testSpeed.py
和FinderTools
是中间投放器 Python 脚本,用于下载和执行 SUGARLOADER。 - 阶段 2 (SUGARLOADER):
.sld
和.log
是 Mach-O 可执行有效负载,用于建立 C2,写入配置文件并反射性加载 KANDYKORN。 - 阶段 3 (HLOADER):
HLOADER
/Discord
(伪造) 是一个简单的加载器,用作持久化机制,伪装成合法的 Discord 应用程序,用于加载 SUGARLOADER。 - 阶段 4 (KANDYKORN):最终反射性加载的有效负载。KANDYKORN 是一个功能齐全的内存驻留 RAT(远程访问木马),具有以下内置功能:
- 进行加密的命令和控制
- 进行系统枚举
- 上传和执行其他有效负载
- 压缩和外泄数据
- 终止进程
- 通过交互式伪终端运行任意系统命令
Elastic 通过用于加密 SUGARLOADER 和 KANDYKORN C2 的 RC4 密钥,将这次攻击追溯到 2023 年 4 月。这种威胁仍然活跃,并且其工具和技术正在不断开发。
钻石模型
Elastic Security 利用钻石模型来描述入侵的攻击者、能力、基础设施和受害者之间的高级关系。虽然钻石模型最常用于单个入侵,并利用活动线程(第 8 节)作为创建事件之间关系的方式,但以攻击者为中心的方法(第 7.1.4 节)允许使用一个虽然杂乱的单一钻石。
[恶意软件] 和 MITRE ATT&CK
Elastic 使用 MITRE ATT&CK 框架来记录高级持续性威胁针对企业网络使用的常见战术、技术和程序。
战术
战术代表技术或子技术背后的原因。这是攻击者的战术目标:执行操作的原因。
技术
技术代表攻击者如何通过执行操作来实现战术目标。
- 用户执行:恶意文件
- 命令和脚本解释器:Python
- 命令和脚本解释器:Unix Shell
- 劫持执行流程
- 解混淆/解码文件或信息
- 隐藏工件:隐藏文件和目录
- 指示符删除:文件删除
- 伪装:匹配合法名称或位置
- 混淆的文件或信息:软件打包
- 反射式代码加载
- 文件和目录发现
- 进程发现
- 系统信息发现
- 归档收集的数据:通过自定义方法归档
- 本地数据暂存
- 应用层协议:Web 协议
- 备用通道
- 入口工具传输
- 通过 C2 通道外泄
恶意软件预防能力
恶意软件检测能力
威胁搜寻查询
EQL 的事件通过使用 Elastic Defend 集成的 Elastic Agent 提供。威胁搜寻查询可能会返回高信号或误报。这些查询用于识别潜在的可疑行为,但需要进行调查来验证发现结果。
EQL 查询
在 Kibana 的安全解决方案的时间线部分下的“关联”选项卡中,您可以使用以下 EQL 查询来搜索类似的行为。
以下 EQL 查询可用于识别隐藏的可执行文件何时在临时目录中创建然后立即删除文件
sequence by process.entity_id, file.path with maxspan=30s
[file where event.action == "modification" and process.name : ".*" and
file.path : ("/private/tmp/*", "/tmp/*", "/var/tmp/*")]
[file where event.action == "deletion" and process.name : ".*" and
file.path : ("/private/tmp/*", "/tmp/*", "/var/tmp/*")]
以下 EQL 查询可用于识别隐藏文件何时进行出站网络连接,然后立即下载可执行文件
sequence by process.entity_id with maxspan=30s
[network where event.type == "start" and process.name : ".*"]
[file where event.action != "deletion" and file.Ext.header_bytes : ("cffaedfe*", "cafebabe*")]
以下 EQL 查询可用于识别 macOS 应用程序二进制文件何时在同一目录中重命名为隐藏的文件名
file where event.action == "rename" and file.name : ".*" and
file.path : "/Applications/*/Contents/MacOS/*" and
file.Ext.original.path : "/Applications/*/Contents/MacOS/*" and
not startswith~(file.Ext.original.path,Effective_process.executable)
以下 EQL 查询可用于识别何时将 IP 地址作为参数提供给隐藏的可执行文件
sequence by process.entity_id with maxspan=30s
[process where event.type == "start" and event.action == "exec" and process.name : ".*" and process.args regex~ "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"]
[network where event.type == "start"]
以下 EQL 查询可用于识别 /Users/Shared 目录中隐藏可执行文件的重命名或修改,或者 /Users/Shared 目录中隐藏的未签名或不受信任进程的执行
any where
(
(event.category : "file" and event.action != "deletion" and file.Ext.header_bytes : ("cffaedfe*", "cafebabe*") and
file.path : "/Users/Shared/*" and file.name : ".*" ) or
(event.category : "process" and event.action == "exec" and process.executable : "/Users/Shared/*" and
(process.code_signature.trusted == false or process.code_signature.exists == false) and process.name : ".*")
)
以下 EQL 查询可用于识别何时通过命令行将 URL 作为参数提供给 python 脚本
sequence by process.entity_id with maxspan=30s
[process where event.type == "start" and event.action == "exec" and
process.args : "python*" and process.args : ("/Users/*", "/tmp/*", "/var/tmp/*", "/private/tmp/*") and process.args : "http*" and
process.args_count <= 3 and
not process.name : ("curl", "wget")]
[network where event.type == "start"]
以下 EQL 查询可用于通过查找“NSCreateObjectFileImageFromMemory-*”的可预测临时文件创建来识别内存中 Mach-O 加载的尝试
file where event.type != "deletion" and
file.name : "NSCreateObjectFileImageFromMemory-*"
以下 EQL 查询可用于通过查找“NSCreateObjectFileImageFromMemory-*”文件的加载或加载时未提供 dylib 名称来识别内存中 Mach-O 加载的尝试
any where ((event.action == "load" and not dll.path : "?*") or
(event.action == "load" and dll.name : "NSCreateObjectFileImageFromMemory*"))
YARA
Elastic Security 创建了 YARA 规则来识别此活动。以下是用于识别有效负载的 YARA 规则
可观察项
所有可观察项也可在 此处下载,格式为 ECS 和 STIX。
本研究讨论了以下可观察项。
可观察项 | 类型 | 名称 | 参考 |
---|---|---|---|
3ea2ead8f3cec030906dcbffe3efd5c5d77d5d375d4a54cca03bfe8a6cb59940 | SHA-256 | .log, .sld | SUGARLOADER |
2360a69e5fd7217e977123c81d3dbb60bf4763a9dae6949bc1900234f7762df1 | SHA-256 | Discord(伪造) | HLOADER |
927b3564c1cf884d2a05e1d7bd24362ce8563a1e9b85be776190ab7f8af192f6 | SHA-256 | KANDYKORN | |
http://tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfC | url | FinderTools C2 URL | |
tp-globa[.]xyz | 域名 | FinderTools C2 域名 | |
192.119.64[.]43 | ipv4-addr | tp-globa IP 地址 | FinderTools C2 IP |
23.254.226[.]90 | ipv4-addr | SUGARLOADER C2 IP | |
D9F936CE628C3E5D9B3695694D1CDE79E470E938064D98FBF4EF980A5558D1C90C7E650C2362A21B914ABD173ABA5C0E5837C47B89F74C5B23A7294CC1CFD11B | 64 字节密钥 | RC4 密钥 | SUGARLOADER,KANDYKORN |
参考
以下是上述研究中引用的内容
- 朝鲜使用 RUSTBUCKET 新变体发动攻击 — Elastic Security Labs
- https://x.com/tiresearch1/status/1708141542261809360
- https://www.reddit.com/r/hacking/comments/15b4uti/comment/jtprebt/
- 看起来像是试图窃取一些数据:r/Malware
- https://www.reddit.com/r/pihole/comments/15d11do/malware_project_mimics_pihole/jtzmpqh/
- Lazarus Group “无文件”攻击
- 了解和防御 macOS 上的反射式代码加载 | 作者:Justin Bui
- macOS 反射式代码加载分析 · hackd