供应链投毒全链路取证分析与证据拼接
供应链投毒全链路取证分析与证据拼接
勒索软件、Web 应用、钓鱼邮件全链路分析覆盖了三种常见入侵路径。但 2025-2026 年最值得关注的新趋势是供应链攻击——攻击者不再逐个突破终端,而是通过污染软件分发渠道,一次性影响成千上万的受害者。
2026 年 6 月初,@redhat-cloud-services npm 命名空间下 32 个包被投毒,攻击者通过 Miasma 恶意软件绕过代码审查。2026 年 5 月的 Mini Shai-Hulud 攻击在一天内感染了 169 个 npm 包。2025 年 9 月的 Shai-Hulud 蠕虫感染了 500+ npm 包。这些事件标志着供应链攻击已从"个别事件"升级为"常态化威胁"。
本文以供应链投毒为场景,串联多个 0x02 取证项的检查结果,分析如何从分散的证据中拼接出完整的攻击链。
0x01 供应链投毒的典型攻击链
供应链攻击与普通入侵的最大区别在于:攻击者不需要逐个突破每台主机,而是通过污染软件分发渠道,让受害者"主动"安装恶意代码。 这使得取证分析的重点从"单台主机"扩展到"整个生态"。
0x02 阶段一:凭证窃取
取证来源
0x02/系统日志检查:4624登录事件0x02/浏览器相关检查:下载记录、历史记录0x02/命令行历史记录:git clone、npm publish 等命令
典型证据
分析要点
- 凭证窃取通常通过钓鱼邮件开始
- 需要确认攻击者获取了什么类型的凭证(GitHub PAT、npm token、CI/CD 密钥)
- 需要确认凭证获取时间
0x03 阶段二:仓库投毒
取证来源
0x02/系统日志检查:git push 事件0x02/重点文件检查:npm/pip 包文件时间线0x02/命令行历史记录:npm publish 命令
典型证据
场景 A:npm 包投毒(Shai-Hulud 模式)
场景 B:CI/CD 管道投毒(TeamPCP 模式)
分析要点
- npm 包投毒的关键证据在
node_modules目录的文件时间线和内容 - CI/CD 管道投毒的关键证据在 GitHub Actions 工作流文件的修改历史
- 需要确认恶意代码的具体功能(凭据窃取、后门安装、数据外泄)
0x04 阶段三:开发者安装
取证来源
0x02/系统日志检查:npm install / pip install 事件0x02/重点文件检查:node_modules / .venv 目录文件时间线0x02/系统进程检查:npm/node 进程行为
典型证据
分析要点
- 开发者安装恶意包的时间与投毒时间的间隔
- 恶意包安装后是否立即执行了异常命令
- 需要确认受影响的用户范围(个人开发者 vs 企业内网)
0x05 阶段四:恶意执行
取证来源
0x02/系统进程检查:恶意进程行为0x02/异常端口查询:网络连接0x02/系统共享检查:内网访问
典型证据
分析要点
- 恶意执行通常包括凭据扫描、云权限检查、内网扫描
- 需要追踪恶意进程的所有网络连接
- 需要确认数据外泄的目标和大小
0x06 阶段五:横向传播
取证来源
0x02/系统日志检查:npm publish / git push 事件0x02/系统进程检查:npm/node 进程行为0x02/异常端口查询:网络连接
典型证据
分析要点
- 横向传播的关键证据在 npm publish / git push 事件
- 需要确认传播范围(多少个包、多少个开发者受影响)
- 需要确认传播方式(自动传播 vs 手动传播)
0x07 证据拼接:构建完整时间线
| 时间 | 阶段 | 证据来源 | 事件 | 结论 |
|---|---|---|---|---|
| 06-01 10:00 | 钓鱼投递 | 邮件日志 | 钓鱼邮件发送 | 攻击者投递钓鱼邮件 |
| 06-01 10:05 | 用户点击 | 浏览器检查 | 访问钓鱼网站 | 用户中招 |
| 06-01 10:06 | 凭证窃取 | 系统日志 | GitHub 登录 | 凭据被窃取 |
| 06-01 10:10 | 仓库投毒 | npm 日志 | @tanstack/core@4.0.1 发布 | 恶意包上架 |
| 06-01 10:15 | CI/CD 投毒 | git 日志 | 工作流被修改 | CI/CD 管道被污染 |
| 06-02 09:00 | 开发者安装 | npm install 日志 | @tanstack/core@4.0.1 安装 | 恶意包被安装 |
| 06-02 09:01 | 恶意执行 | 进程检查 | TruffleHog 扫描 | 凭据被窃取 |
| 06-02 09:05 | 数据外泄 | 端口检查 | 100MB 出站流量 | 数据被外泄 |
| 06-02 09:15 | 横向传播 | npm 日志 | 32 个包被发布 | 传播扩大 |
0x08 供应链投毒取证的特殊挑战
1. 影响范围难以评估
供应链攻击的影响范围可能跨越多个组织、多个国家。需要:
- 查询 npm/pip 等包管理器的下载统计数据
- 查询 GitHub 仓库的依赖关系
- 联系受影响组织的安全团队
2. 恶意代码可能已清理
攻击者可能在传播完成后清理恶意代码。需要:
- 从 npm/pip 注册中心获取已下架包的历史版本
- 从开发者本地的
node_modules目录中提取恶意代码 - 从 CI/CD 日志中恢复被删除的工作流
3. 多个攻击向量并存
供应链攻击可能同时通过 npm 包、CI/CD 管道、Docker 镜像等多个渠道传播。需要:
- 检查 npm 包的历史版本
- 检查 GitHub Actions 工作流的修改历史
- 检查 Docker Hub 镜像的版本历史
0x09 公开资料与分析借鉴
1. Unit 42: npm Supply Chain Attack Analysis
Unit 42 的详细分析报告说明了 Shai-Hulud 蠕虫的攻击链:
- 攻击者通过钓鱼邮件窃取 npm 维护者凭据
- 使用被盗凭据发布恶意包到 npm 注册中心
- 恶意包在
preinstall/postinstall生命周期钩子中执行 - 窃取 GitHub PAT、npm token、云凭据
- 自动传播到所有可访问的 npm 包
最值得借鉴的一点是:Shai-Hulud 蠕虫引入了 wormable propagation——恶意负载优先考虑窃取 npm token 和 GitHub PAT,以自动感染和重新发布合法包。
公开来源:
- Unit 42: npm Threat Landscape
2. Splunk: Defending Against npm Supply Chain Attacks
Splunk 的实用指南说明了 npm 供应链攻击的检测方法:
- npm 生命周期钩子(preinstall、install、postinstall、prepare)提供多个执行点
- 恶意代码在包安装时执行,早于大多数运行时安全控制
- 推荐使用 npm-threat-emulation 和 Package-Inferno 工具进行安全测试
最值得借鉴的一点是:供应链攻击的检测需要关注包安装时的行为,而非仅关注包的内容。
公开来源:
3. DreamFactory: Five Supply Chain Attacks in Twelve Days
DreamFactory 的文章详细说明了 2026 年 3 月的五起供应链攻击:
- Mini Shai-Hulud 攻击在 12 天内影响 373 个 npm 包
- 攻击者使用 credential-free 初始访问技术
- 攻击者生成了最高单小时包数量的 Shai-Hulud 蠕虫
最值得借鉴的一点是:供应链攻击正在从"个别事件"升级为"常态化威胁",防御者需要建立持续的检测和响应能力。
公开来源:
- DreamFactory: Five Supply Chain Attacks in Twelve Days
4. Upwind: The New Face of Supply Chain Attacks
Upwind 的文章详细说明了 npm 恶意软件的最新攻击模式:
- 恶意软件在包安装时执行环境检查
- 检测沙箱和调试器
- 收集 GitHub、AWS、GCP、Azure、Kubernetes、Vault 等凭据
- 通过加密通道外泄数据
- 通过 Claude / VS Code / 系统服务建立持久化
最值得借鉴的一点是:现代供应链恶意软件更像是一个"入侵框架",而非简单的后门。
公开来源:
0x0A 和其他分析篇怎样联动
本文联动了以下专题:
勒索软件入侵全链路取证分析与证据拼接:提供勒索软件场景对比Web应用入侵全链路取证分析与证据拼接:提供 Web 入侵场景对比钓鱼邮件入侵全链路取证分析与证据拼接:提供钓鱼邮件场景对比linux 软件包管理器文件检查:提供包管理器层面的取证入口
0x0B 总结
供应链投毒取证分析的关键,不是"只看恶意包",而是:
- 从凭证窃取开始,覆盖完整攻击链
- 将邮件日志、浏览器痕迹、npm 日志、进程日志、网络连接等证据按时间排列
- 识别每个阶段的关键证据和证据强度
- 构建完整的攻击时间线,支持最终交付
当你能把 npm 日志、GitHub Actions 工作流、node_modules 目录、进程日志、端口分析等多个 0x02 取证项的结果串联成一条完整的攻击链时,0x03 的"取证分析"才真正从"单项分析"升级为"全链路分析"。