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相关的访问,统计受影响的主机范围,并评估数据泄露的规模。

相关推荐
_君莫笑2 小时前
大厂Git使用规范
git
无心水9 小时前
【Hermes:安全、权限与生产环境】39、智能体也会犯错?Hermes 纠错、回滚与遗忘机制全指南 —— 让 AI 的错误像 Git 一样可逆可控
人工智能·git·安全·mcp协议·openclaw·hermes·honcho
南境十里·墨染春水13 小时前
linux学习进展 git详解
linux·git·学习
zhangfeng113314 小时前
CodeBuddy ai对话框上面的git docs terminal Rulds 干嘛用的,以thinkphp fastadmin 为例,插件市场
人工智能·git·编程
OYangxf15 小时前
Git Conflict Resolution
大数据·git·elasticsearch
高斯林.神犇15 小时前
Git全套流程
git
努力的小帅17 小时前
Ubuntu 使用 avahi/mDNS 实现固定连接(VSCode Remote SSH + NoMachine)
linux·vscode·ubuntu·ssh·linux入门
次元工程师!17 小时前
LangFlow开发(一)—安装和部署
git·python·大模型·langflow
怣疯knight17 小时前
【无标题】
git
Jim-zf18 小时前
git 锁文件
git