Elastic 安全实验室发现朝鲜民主主义人民共和国散布 KANDYKORN 恶意软件

Elastic 安全实验室揭露了朝鲜民主主义人民共和国试图使用新型 macOS 恶意软件感染区块链工程师的企图。

阅读时间:30 分钟恶意软件分析攻击模式活动组织
Elastic catches DPRK passing out KANDYKORN

前言

Elastic 安全实验室披露了一起针对加密货币交易平台区块链工程师的新型入侵事件。这次入侵利用了自定义和开源功能的组合来实现初始访问和后续利用。

我们在分析试图将二进制文件反射性地加载到 macOS 端点内存中的尝试时发现了这次入侵。这次入侵可以追溯到一个伪装成加密货币套利机器人的 Python 应用程序,该应用程序通过公共 Discord 服务器上的直接消息进行分发。

根据我们对技术、网络基础设施、代码签名证书和自定义 Lazarus 小组检测规则的分析,我们将此活动归因于朝鲜民主主义人民共和国,并认识到其与 Lazarus 小组的重叠之处;我们将此入侵集追踪为 REF7001。

关键要点

  • 攻击者诱骗区块链工程师使用一个 Python 应用程序来获得对环境的初始访问权限
  • 这次入侵涉及多个复杂阶段,每个阶段都使用了蓄意的防御规避技术
  • 在 macOS 系统上观察到此入侵集,攻击者试图将二进制文件加载到内存中,这与 macOS 入侵的情况不同寻常

执行流程

攻击者在该社区成员经常使用的公共 Discord 上冒充区块链工程社区成员。攻击者对他们的初始受害者进行了社会工程攻击,说服他们下载并解压缩包含恶意代码的 ZIP 存档。受害者认为他们正在安装一个套利机器人,这是一种能够从不同平台之间加密货币汇率差异中获利的软件工具。

此执行启动了 REF7001 入侵的主要恶意软件执行流程,最终导致 KANDYKORN 的执行。

  • 阶段 0(初始入侵) - Watcher.py
  • 阶段 1(释放程序) - testSpeed.pyFinderTools
  • 阶段 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.pytestSpeed.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)。

首先在/Users/shared/.sld观察到SUGARLOADER。第二个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地址是通过TCP端口44323.254.226[.]90

配置文件使用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利用一种称为反射式二进制加载(分配后直接在进程内存中执行有效载荷)的技术来执行最终阶段,利用NSCreateObjectFileImageFromMemoryNSLinkModule等API。反射式加载是一种强大的技术。如果您想了解其工作原理,请查看slyd0ghackd的研究。

此技术可用于从内存缓冲区执行有效载荷。这种无文件执行此前已在Lazarus集团进行的攻击中被观察到。

SUGARLOADER反射式加载二进制文件(KANDYKORN),然后创建一个最初名为appname的新文件,我们将其称为HLOADER,我们直接从进程代码签名的签名标识符中获取。

第三阶段加载程序Discord:HLOADER

HLOADER (2360a69e5fd7217e977123c81d3dbb60bf4763a9dae6949bc1900234f7762df1)是一个试图伪装成合法Discord应用程序的有效载荷。截至撰写本文之时,VirusTotal上检测结果为0

HLOADER是通过使用macOS二进制代码签名技术识别的,该技术此前与朝鲜民主主义人民共和国的Lazarus集团3CX入侵事件有关。除了其他已发表的研究之外,Elastic Security Labs还将此技术的出现用作朝鲜民主主义人民共和国活动指标,正如我们在2023年6月关于JOKERSPY的研究报告中所见。

持久性

我们观察到威胁行为者采用了一种我们以前从未见过他们用于实现macOS持久性的技术,称为执行流劫持。此攻击的目标是广泛使用的应用程序Discord。Discord应用程序通常由用户配置为登录项,并在系统启动时启动,使其成为接管的理想目标。HLOADER是用Swift编写的自签名二进制文件。此加载程序的目的是同时执行合法的Discord包和.log有效载荷,后者用于在不写入磁盘的情况下从内存中执行Mach-O二进制文件。

合法的二进制文件/Applications/Discord.app/Contents/MacOS/Discord被重命名为.lock,并被HLOADER替换。

以下是HLOADER的代码签名信息,其自签名标识符结构与其他Lazarus集团样本一致。

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 就会等待来自服务器的命令。一个有趣的特点是,该恶意软件等待命令,而不是轮询命令。这将减少生成的端点和网络痕迹的数量,并提供一种限制潜在发现的方法。

每个命令都由一个传输的整数表示,后跟特定于每个操作的数据。以下是 KANDYCORN 提供的可用命令列表。

命令 0xD1

操作:退出命令,程序会优雅地退出。

命令 0xD2

名称:resp_basicinfo 操作:收集有关系统的信息,例如主机名、UID、操作系统信息和当前进程的映像路径,并向服务器报告。

命令 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

操作:休眠几秒钟。

总结

KANDYCORN 是一款高级植入程序,具有多种功能,可以监控、与系统交互并避免检测。它使用反射式加载,这是一种直接内存执行形式,可以绕过检测。

网络协议

所有与 C2 通信的可执行文件(第 3 阶段和第 4 阶段)都使用相同的协议。所有数据都使用 RC4 加密,并使用配置文件中先前提到的相同密钥。

这两个样本都实现了 send 和 receive 系统调用的包装器。在下面的伪代码中可以观察到,在发送例程中,缓冲区首先被加密,然后发送到套接字,而当接收到数据时,它首先被解密,然后被处理。

在初始化阶段,恶意软件首次连接到 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[.]xyzFinderTools 用于下载 SUGARLOADER,这可能是试图对合法外汇市场经纪商进行 错字劫持。我们没有任何信息表明合法公司参与了这次入侵。这个错字劫持域名很可能被选择是为了在入侵受害者面前显得更合法。

tp-globa[.]xyz 在撰写本文时解析为一个 IP 地址 (192.119.64[.]43),该地址已被观察到分发归因于朝鲜民主主义人民共和国 Lazarus 小组的恶意软件 (123)。

23.254.226[.]90

23.254.226[.]90 是用于 .sld 文件(SUGARLOADER 恶意软件)的 C2 IP。上文第 2 阶段部分重点介绍了此 IP 如何用作 C2。

2023 年 10 月 14 日,23.254.226[.]90 用于注册子域名 pesnam.publicvm[.]com。虽然我们在入侵中没有观察到这个域名,但它被 记录 为托管其他恶意软件。

活动交叉点

域名 tp-globa[.]xyz 的 TLS 证书主体 CN 为 bitscrunnch.linkpc[.]net。域名 bitscrunnch.linkpc[.]net 已被归咎于其他Lazarus组织的入侵活动。

如上所述,这很可能是一次试图对去中心化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。

截至撰写本文时,所有注册的域名(共48个)均指向 192.119.64[.]43,这些域名都包含在可观察对象包中。

最后,在2023年7月下旬,在Reddit子版块r/hackingr/Malwarer/pihole上出现了与tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfC结构匹配的URL。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) 后面有两个 //
  • 使用 //11-characters/10-characters/10-characters/ 结构的5个子目录
  • 最后两个子目录是 /fP7savDX6c/bfC

虽然我们并未在入侵中观察到GitHub,但报告此事件的Reddit用户确实观察到了GitHub个人资料的使用。所有这些资料都已被停用。

这些帐户是:

  • https://github[.]com/Prtof
  • https://github[.]com/wokurks

总结

朝鲜民主主义人民共和国通过Lazarus集团等单位继续以窃取加密货币为目标攻击加密产业企业,以规避阻碍其经济增长和野心的国际制裁。在此次入侵中,他们以诱饵为目标,针对活跃在公共聊天服务器上的区块链工程师,旨在利用其技能和兴趣,并以潜在的经济利益为诱导。

感染需要受害者的互动,即使诱饵是合法的,这也符合预期。一旦通过Python解释器执行,REF7001执行流程将经过5个阶段

  • 阶段0(准备阶段) - Main.pyWatcher.py 作为导入模块执行。此脚本检查Python版本,准备本地系统目录,然后下载、执行并清理下一阶段。
  • 阶段1(通用释放程序) - testSpeed.pyFinderTools 是下载并执行SUGARLOADER的中间释放程序Python脚本。
  • 阶段2(SUGARLOADER) - .sld.log 是建立C2、写入配置文件并反射性加载KANDYKORN的Mach-O可执行有效负载。
  • 阶段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框架来记录高级持续性威胁针对企业网络使用的常见战术、技术和规程。

战术

战术代表技术或子技术的“为什么”。这是攻击者的战术目标:执行操作的原因。

技术

技术代表攻击者如何通过执行操作来实现战术目标。

恶意软件防护能力

恶意软件检测能力

狩猎查询

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查询可用于识别内存中Mach-O加载的尝试,特别是查找“NSCreateObjectFileImageFromMemory-*”的可预测临时文件创建。

file where event.type != "deletion" and 
file.name : "NSCreateObjectFileImageFromMemory-*"

以下EQL查询可用于识别内存中Mach-O加载的尝试,方法是查找“NSCreateObjectFileImageFromMemory-*”文件的加载或未提供dylib名称的加载。

any where ((event.action == "load" and not dll.path : "?*") or 
  (event.action == "load" and dll.name : "NSCreateObjectFileImageFromMemory*"))

YARA

Elastic Security已创建YARA规则来识别此活动。以下是用于识别有效载荷的YARA规则。

观察结果

所有可观察项也可在此处下载,并提供ECS和STIX格式。

本研究中讨论了以下可观察项。

可观察项类型名称参考
3ea2ead8f3cec030906dcbffe3efd5c5d77d5d375d4a54cca03bfe8a6cb59940SHA-256.log, .sldSUGARLOADER
2360a69e5fd7217e977123c81d3dbb60bf4763a9dae6949bc1900234f7762df1SHA-256Discord (伪造)HLOADER
927b3564c1cf884d2a05e1d7bd24362ce8563a1e9b85be776190ab7f8af192f6SHA-256KANDYKORN
http://tp-globa[.]xyz//OdhLca1mLUp/lZ5rZPxWsh/7yZKYQI43S/fP7savDX6c/bfCurlFinderTools C2 URL
tp-globa[.]xyz域名FinderTools C2 域名
192.119.64[.]43ipv4地址tp-globa IP地址FinderTools C2 IP
23.254.226[.]90ipv4地址SUGARLOADER C2 IP
D9F936CE628C3E5D9B3695694D1CDE79E470E938064D98FBF4EF980A5558D1C90C7E650C2362A21B914ABD173ABA5C0E5837C47B89F74C5B23A7294CC1CFD11B64字节密钥RC4密钥SUGARLOADER, KANDYKORN

参考文献

以上研究中参考了以下内容: