Apifox投毒事件深度分析报告:供应链攻击窃取SSH密钥与Git凭据


Apifox投毒事件深度分析报告:供应链攻击窃取SSH密钥与Git凭据

核心域名: apifox.it.com

事件摘要:

本次事件是一起精心策划的供应链投毒攻击。攻击者通过篡改Apifox客户端中用于用户行为追踪的官方脚本apifox-app-event-tracking.min.js,植入了一个多阶段、高度隐蔽的恶意加载器。该加载器会从攻击者控制的域名apifox.it.com动态获取并执行后续恶意代码。最终阶段的Payload具备强大的数据窃取能力,能够遍历并打包上传用户本地的SSH私钥、Shell命令历史、Git明文凭据以及Apifox的本地缓存数据。整个攻击链条利用RSA非对称加密、AES-GCM对称加密、动态随机文件名等多种技术手段,有效规避了传统的静态检测和安全防护措施,对开发者及企业构成了严重威胁,属于高危级供应链投毒事件。


1. 事件概览

2026年,安全社区监测到Apifox官方版本存在被投毒的迹象。外部情报与样本比对显示,官方正常的用户追踪脚本文件位于 https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js,其MD5值为 a709773362581f4db2f2328e05214e2。而被投毒的异常样本MD5值为 1a68b09956e47c5617f87dc71c895131,对应本次分析的目标文件mani.js

攻击者在正常埋点脚本的末尾追加了一段混淆的加载器代码。该加载器在Apifox应用(基于Node/Electron环境)运行时被触发,其核心行为如下:

  1. 信息收集与指纹构建: 读取本地的操作系统、主机名、用户名等环境信息。
  2. 请求加密Payload: 通过自定义的HTTP请求头,向远程服务器 apifox.it.com 发送带有主机标识的请求,以获取加密的下一阶段指令。
  3. 本地解密与动态加载: 使用内嵌的RSA私钥解密服务器返回的数据,得到一个调度器脚本。该脚本会生成一个随机文件名(如 2da86746.js),并动态加载最终的恶意Payload。
  4. 数据窃取与回传: 最终的Payload(如 2da86746.js)执行后,会系统地收集主机敏感信息,打包、压缩、加密后回传至攻击者的服务器。

2. 攻击链与样本分析

下图清晰地展示了本次攻击的完整流程:
用户启动被投毒的Apifox
加载mani.js
执行被篡改的事件追踪脚本
触发恶意加载器
收集主机/用户指纹
向apifox.it.com/public/apifox-event.js

发送带标识请求
服务器返回RSA加密内容
加载器使用内嵌私钥解密
得到调度器脚本
创建
第二阶段Payload执行
收集敏感信息:

~/.ssh, .git-credentials, 进程列表,

Shell历史, Apifox缓存
压缩并AES-256-GCM加密数据
向apifox.it.com/event/0/log

回传加密数据

2.1 第一阶段:被投毒样本 (mani.js) 分析

mani.js 文件的主体部分保留了Apifox正常的埋点功能,以迷惑用户和安全分析人员。后追加的混淆代码是本次攻击的起点。为了增加分析难度,攻击者采用了以下混淆技术:

  • 大数组字符串池: 将所有关键字符串(如URL、常量名)存储在一个大数组中。
  • 数组轮转函数: 通过一个立即执行函数(IIFE)对数组元素顺序进行随机化重排,使得静态分析无法直接定位字符串内容。
  • 动态解密函数: 提供一个字符串解密函数,在运行时通过索引从混淆后的数组中还原出原始字符串。

通过动态调试还原后,可以提取出以下关键常量和行为:

字段 用途
REMOTE_JS_URL https://apifox.it.com/public/apifox-event.js 远程C2服务器地址,用于获取加密的调度器脚本。
CACHE_KEY _rl_headers, _rl_mc 用于在localStorage中缓存从C2获取的数据,增加持久性和隐蔽性。
RSA_PRIVATE_KEY (内嵌PEM格式私钥) 用于解密服务器返回的RSA加密内容。攻击者持有对应的公钥。
RSA_BLOCK_SIZE 256 解密时使用的块大小,表明服务器返回的密文是按256字节分块的。
REQUEST_HEADERS af_uuid, af_os, af_name, af_apifox_user 自定义请求头,用于向C2服务器上报主机标识,实现被控主机的追踪和区分。

加载器行为逻辑:

  1. 从本机环境(如os.platform(), os.hostname(), process.env.USER)获取操作系统、主机名和用户名,生成或读取一个唯一的af_uuid
  2. 将这些信息填入REQUEST_HEADERS,并向 REMOTE_JS_URL 发起HTTP请求。
  3. 接收服务器返回的响应数据(RSA加密的密文)。
  4. 使用内嵌的RSA_PRIVATE_KEYRSA_BLOCK_SIZE对密文进行解密,得到一段JavaScript代码(即调度器)。
  5. 通过eval()new Function()执行解密后的调度器脚本。

2.2 第二阶段:调度器与Payload加载

第一阶段解密的调度器脚本本身并不执行直接的恶意行为,其核心功能是作为"重定向器":

  1. 生成随机文件名: 调度器会生成一个随机的、看似无意义的文件名,例如 2da86746.js
  2. 动态注入脚本: 通过创建<script>标签,并将src属性设置为 https://apifox.it.com/[随机文件名].js,来动态加载最终的恶意Payload。
  3. 清理痕迹: 加载完成后,可能会移除该<script>标签。

这种动态加载方式使得基于固定URL或文件哈希的检测手段失效。攻击者可以随时更换服务器上的Payload文件,且每个受害主机加载的文件名都可能不同。

2.3 第三阶段:最终Payload (以 2da86746.js 为例) 深度分析

最终Payload是本次攻击的核心,具备完整的数据窃取功能。它被设计为在Node.js/Electron环境中运行,因此可以充分利用本地文件系统、进程管理等系统级API。

2.3.1 数据收集范围

该Payload能够遍历并收集以下敏感信息:

操作系统 收集路径/命令 目的
Windows 递归读取 C:\Users\[用户名]\.ssh\;执行 tasklist 窃取SSH私钥、known_hosts;获取当前运行的进程列表,识别安全软件、开发工具等。
Linux / macOS 递归读取 ~/.ssh/;读取 ~/.zsh_history~/.bash_history~/.git-credentials;执行 ps aux 窃取SSH私钥、known_hosts;获取终端历史记录,可能包含密码、API密钥、内部系统访问方式;窃取Git明文凭据;获取系统进程快照。
通用/应用层 打包 apifox/cache/cache_data 目录(cache_data是情报中提到的关键目录) 这是非常关键的一步。 表明攻击者不仅关注系统级凭据,还意图窃取Apifox应用本身的缓存数据。这些数据可能包含API接口定义、测试用例、环境变量、请求历史等,这些内容可能包含了未公开的API端点、硬编码的密钥或访问令牌,其危害性不亚于SSH私钥泄露。
2.3.2 数据打包、压缩与加密

为了高效、隐蔽地回传数据,Payload实现了完整的数据处理流水线:

  1. 打包: 将收集到的文件内容、命令输出、目录结构组织成一个JSON对象。
  2. 压缩: 对JSON字符串进行gzip压缩,大幅减小数据体积,降低网络传输的异常风险。
  3. 加密: 使用AES-256-GCM对称加密算法对压缩后的数据进行加密。
    • 密钥派生: 密钥并非硬编码,而是通过scryptSync算法派生而来。其中password = "apifox"salt = "foxapi",通过scryptSync(password, salt, 32)生成32字节的对称密钥。
    • 加密格式: 加密后的数据格式为 [IV (12字节)] + [AuthTag (16字节)] + [Ciphertext]。最终,整个加密数据块再进行Base64编码,作为HTTP请求的Body发送。

使用强加密算法且密钥派生自看似"合法"的字符串,使得网络流量监控变得异常困难。仅凭流量特征,无法区分这是Apifox的正常业务交互还是窃密数据外传。

2.3.3 数据外传接口

所有收集、处理后的数据最终被发送到:
https://apifox.it.com/event/0/log

请求头中会携带第一阶段的af_uuid,用于在C2服务器端将不同阶段的数据关联到同一主机。


3. 威胁定级与影响评估

本次事件应被定性为高危供应链投毒与凭据窃取事件

  • 高危害性: 攻击者获取了开发者本机的最高权限级别的凭据(SSH私钥、Git凭据),可以以此为基础进行横向移动、代码仓库入侵、服务器基础设施渗透。同时,窃取的Apifox缓存数据可能导致大量API接口、内部系统架构、敏感配置信息泄露。
  • 高隐蔽性:
    • 多阶段加载: 降低了恶意代码在主机和网络上的"驻留"特征。
    • 强加密: 从C2通信(RSA)到数据回传(AES),全程加密,绕过传统内容检测。
    • 动态文件名: 使基于静态IOC的防御失效。
    • 冒充合法流量: 域名apifox.it.com使用与官方域名apifox.com相似的子域名结构,容易迷惑用户。
  • 广泛影响面: Apifox是当前非常流行的API开发和测试工具,拥有庞大的开发者用户群体。此次攻击影响范围广,波及众多个人开发者和企业。

4. 入侵指标 (IOCs)

4.1 网络IOC

类型 IOC 说明
域名 apifox.it.com 恶意分发与外传主域名,应封禁。
URL https://apifox.it.com/public/apifox-event.js RSA密文分发接口。
URL https://apifox.it.com/[随机数].js 动态Payload分发接口。示例:/2da86746.js
URL https://apifox.it.com/event/0/log 第二阶段数据外传接口。
HTTP Header af_uuidaf_osaf_useraf_nameaf_apifox_useraf_apifox_name 请求分发时使用的自定义头,可作为代理检测的特征。

4.2 主机IOC

建议在终端侧重点检索以下痕迹:

  • 文件与目录:
    • ~/.ssh/ 目录下文件的异常读取时间(特别是私钥文件)。
    • ~/.git-credentials 文件的异常访问。
    • ~/.zsh_history~/.bash_history 的异常读取。
    • Apifox应用的缓存目录,如 apifox/cache/cache_data 的打包和读取行为。
    • localStorage 中是否存在键名为 _rl_headers_rl_mc 的缓存项。
  • 进程与行为:
    • 检查Apifox主进程是否创建了子进程,如执行了tasklistps aux等命令。
    • 检查Apifox进程是否有异常的出站网络连接(特别是到apifox.it.com的连接)。
    • 检查文件系统中是否存在随机命名的临时JS文件(如 2da86746.js)的创建和加载记录。

4.3 样本HASH

样本名称 MD5 SHA-256 说明
mani.js (被投毒样本) 1a68b09956e47c5617f87dc71c895131 (待补充) 一阶段Loader
官方正常样本 a709773362581f4db2f2328e05214e2 (待补充) 用于比对

5. 应急处置与修复建议

5.1 应急响应 (应急止血)

  1. 立即封禁IOC: 在网络边界(防火墙、代理)和终端(hosts文件、防火墙)上,立即封禁所有与apifox.it.com相关的域名及URL路径的访问。
  2. 全网排查: 对所有运行过Apifox的终端进行IOC排查,重点检查是否存在对上述域名和文件的访问记录。
  3. 隔离感染主机: 一旦发现终端命中IOC,立即将其断网隔离,并保全内存镜像、磁盘镜像以及相关应用的缓存和日志,以便进行深度取证。
  4. 凭据轮换 (最高优先级): 假设所有SSH私钥、Git凭据、以及其他可能存在于~/.ssh.git-credentialsapifox/cache/cache_data中的任何形式的凭据(如云访问密钥、数据库密码、API Token)均已泄露。必须立即、彻底地对所有可能受影响的凭据进行轮换。
    • SSH密钥: 在所有服务器上删除被泄露的公钥,并生成新的密钥对。
    • Git凭据: 立即更换所有代码托管平台(GitHub, GitLab, Gitee等)的访问令牌或密码。
    • 云服务凭证: 检查并吊销可能泄露的云服务(AWS, Azure, GCP)的API密钥。
    • 内部系统凭证: 排查所有可能通过历史命令泄露的、用于访问内部系统(堡垒机、数据库、CI/CD)的密码或Token。

5.2 后续修复与加固

  1. 升级/重装Apifox: 从Apifox官方网站下载最新版本客户端,并在安装前校验安装包的完整性。对于已经感染的主机,建议彻底卸载旧版本后,再安装新版。
  2. 加强供应链安全管理:
    • 软件来源审查: 确保所有开发工具和软件均从官方或可信的渠道下载。
    • 运行时监控: 对关键开发工具的异常行为(如进程执行、文件访问、网络连接)进行监控和告警。
    • 沙箱运行: 考虑在沙箱环境或虚拟机中运行敏感的开发工具。
  3. 深度排查:
    • 横向移动排查: 检查被感染主机在感染时间前后,是否有异常登录到其他服务器、堡垒机、代码仓库的行为。
    • 持久化机制排查: 检查被感染主机上是否存在攻击者留下的其他后门或持久化机制(如计划任务、启动项、Launch Daemon等)。
    • 日志审计: 回溯网络代理、防火墙、VPN等日志,寻找与apifox.it.com相关的访问,统计受影响的主机范围,并评估数据泄露的规模。

相关推荐
云梦谭3 小时前
Git 环境定制常用命令
git
SuperEugene3 小时前
前端 Git 协作规范实战:commit message + 分支管理 + 合并流程,告别冲突与混乱|工程化与协作规范篇
前端·javascript·vue.js·git·前端框架
bu_shuo4 小时前
git中文显示不正确解决方法
git
Carsene4 小时前
艺术化你的 Git 提交:类型与图标(全网最全)的实践准则
git·github
身如柳絮随风扬5 小时前
Git 超详细学习笔记
笔记·git
原来是猿6 小时前
Git入门指南(一):从零开始,掌握Git基础操作
git
逆风飞翔i6 小时前
使用Cherry-pick合并指定分支指定提交记录
git
tobebetter95276 小时前
如何在windows系统通过ssh远程连接部署在云服务器的openclaw
服务器·windows·ssh
秦时明月之君临天下7 小时前
Git统计各分支大小
git