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环境运行时被触发其核心行为如下信息收集与指纹构建读取本地的操作系统、主机名、用户名等环境信息。请求加密Payload通过自定义的HTTP请求头向远程服务器apifox.it.com发送带有主机标识的请求以获取加密的下一阶段指令。本地解密与动态加载使用内嵌的RSA私钥解密服务器返回的数据得到一个调度器脚本。该脚本会生成一个随机文件名如2da86746.js并动态加载最终的恶意Payload。数据窃取与回传最终的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_URLhttps://apifox.it.com/public/apifox-event.js远程C2服务器地址用于获取加密的调度器脚本。CACHE_KEY_rl_headers,_rl_mc用于在localStorage中缓存从C2获取的数据增加持久性和隐蔽性。RSA_PRIVATE_KEY(内嵌PEM格式私钥)用于解密服务器返回的RSA加密内容。攻击者持有对应的公钥。RSA_BLOCK_SIZE256解密时使用的块大小表明服务器返回的密文是按256字节分块的。REQUEST_HEADERSaf_uuid,af_os,af_name,af_apifox_user自定义请求头用于向C2服务器上报主机标识实现被控主机的追踪和区分。加载器行为逻辑从本机环境如os.platform(),os.hostname(),process.env.USER获取操作系统、主机名和用户名生成或读取一个唯一的af_uuid。将这些信息填入REQUEST_HEADERS并向REMOTE_JS_URL发起HTTP请求。接收服务器返回的响应数据RSA加密的密文。使用内嵌的RSA_PRIVATE_KEY和RSA_BLOCK_SIZE对密文进行解密得到一段JavaScript代码即调度器。通过eval()或new Function()执行解密后的调度器脚本。2.2 第二阶段调度器与Payload加载第一阶段解密的调度器脚本本身并不执行直接的恶意行为其核心功能是作为“重定向器”生成随机文件名调度器会生成一个随机的、看似无意义的文件名例如2da86746.js。动态注入脚本通过创建script标签并将src属性设置为https://apifox.it.com/[随机文件名].js来动态加载最终的恶意Payload。清理痕迹加载完成后可能会移除该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实现了完整的数据处理流水线打包将收集到的文件内容、命令输出、目录结构组织成一个JSON对象。压缩对JSON字符串进行gzip压缩大幅减小数据体积降低网络传输的异常风险。加密使用AES-256-GCM对称加密算法对压缩后的数据进行加密。密钥派生密钥并非硬编码而是通过scryptSync算法派生而来。其中password apifoxsalt 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恶意分发与外传主域名应封禁。URLhttps://apifox.it.com/public/apifox-event.jsRSA密文分发接口。URLhttps://apifox.it.com/[随机数].js动态Payload分发接口。示例/2da86746.js。URLhttps://apifox.it.com/event/0/log第二阶段数据外传接口。HTTP Headeraf_uuid、af_os、af_user、af_name、af_apifox_user、af_apifox_name请求分发时使用的自定义头可作为代理检测的特征。4.2 主机IOC建议在终端侧重点检索以下痕迹文件与目录~/.ssh/目录下文件的异常读取时间特别是私钥文件。~/.git-credentials文件的异常访问。~/.zsh_history或~/.bash_history的异常读取。Apifox应用的缓存目录如apifox/cache/cache_data的打包和读取行为。localStorage中是否存在键名为_rl_headers或_rl_mc的缓存项。进程与行为检查Apifox主进程是否创建了子进程如执行了tasklist、ps aux等命令。检查Apifox进程是否有异常的出站网络连接特别是到apifox.it.com的连接。检查文件系统中是否存在随机命名的临时JS文件如2da86746.js的创建和加载记录。4.3 样本HASH样本名称MD5SHA-256说明mani.js(被投毒样本)1a68b09956e47c5617f87dc71c895131(待补充)一阶段Loader官方正常样本a709773362581f4db2f2328e05214e2(待补充)用于比对5. 应急处置与修复建议5.1 应急响应 (应急止血)立即封禁IOC在网络边界防火墙、代理和终端hosts文件、防火墙上立即封禁所有与apifox.it.com相关的域名及URL路径的访问。全网排查对所有运行过Apifox的终端进行IOC排查重点检查是否存在对上述域名和文件的访问记录。隔离感染主机一旦发现终端命中IOC立即将其断网隔离并保全内存镜像、磁盘镜像以及相关应用的缓存和日志以便进行深度取证。凭据轮换 (最高优先级)假设所有SSH私钥、Git凭据、以及其他可能存在于~/.ssh、.git-credentials和apifox/cache/cache_data中的任何形式的凭据如云访问密钥、数据库密码、API Token均已泄露。必须立即、彻底地对所有可能受影响的凭据进行轮换。SSH密钥在所有服务器上删除被泄露的公钥并生成新的密钥对。Git凭据立即更换所有代码托管平台GitHub, GitLab, Gitee等的访问令牌或密码。云服务凭证检查并吊销可能泄露的云服务AWS, Azure, GCP的API密钥。内部系统凭证排查所有可能通过历史命令泄露的、用于访问内部系统堡垒机、数据库、CI/CD的密码或Token。5.2 后续修复与加固升级/重装Apifox从Apifox官方网站下载最新版本客户端并在安装前校验安装包的完整性。对于已经感染的主机建议彻底卸载旧版本后再安装新版。加强供应链安全管理软件来源审查确保所有开发工具和软件均从官方或可信的渠道下载。运行时监控对关键开发工具的异常行为如进程执行、文件访问、网络连接进行监控和告警。沙箱运行考虑在沙箱环境或虚拟机中运行敏感的开发工具。深度排查横向移动排查检查被感染主机在感染时间前后是否有异常登录到其他服务器、堡垒机、代码仓库的行为。持久化机制排查检查被感染主机上是否存在攻击者留下的其他后门或持久化机制如计划任务、启动项、Launch Daemon等。日志审计回溯网络代理、防火墙、VPN等日志寻找与apifox.it.com相关的访问统计受影响的主机范围并评估数据泄露的规模。