3. 供应链攻击案例:典型镜像供应链攻击的技术原理与教训

镜像供应链攻击并非理论威胁,而是已多次在真实世界中造成巨大破坏。本节深入剖析两个最具代表性的攻击案例——SolarWinds 与 CodeCov,从技术原理、攻击链拆解、镜像供应链映射三个维度还原攻击全貌,并提炼出可直接指导信任边界配置的实战教训。

3.1 SolarWinds 攻击:上游污染引发的下游海啸

2020 年底曝光的 SolarWinds 攻击是迄今为止影响最广的软件供应链攻击。攻击者并未直接攻击 SolarWinds 的客户,而是通过污染其核心产品 Orion 平台的构建与分发流程,将恶意代码植入合法签名的更新包中,最终感染约 18,000 家组织。

3.1.1 攻击链技术原理

阶段 技术动作 镜像供应链映射
1. 初始入侵 攻击者通过密码喷洒、凭证窃取等方式进入 SolarWinds 内部网络,潜伏数月。 相当于攻击者获得了镜像仓库的 push 权限或 CI 系统的访问令牌。
2. 构建环境篡改 在 Orion 软件的构建服务器中植入后门代码 SolarWinds.Orion.Core.BusinessLayer.dll,该代码被编译进合法的数字签名流程。 相当于在 Dockerfile 构建阶段注入了恶意层,但基础镜像和签名均显示为合法。
3. 签名与分发 恶意 DLL 随正常构建产物一起被 SolarWinds 的私钥签名,上传至官方更新服务器。 镜像被 合法签名并推送至官方 Registry,客户端拉取时信任链完整。
4. 下游激活 客户通过自动更新机制拉取恶意更新包,后门 DLL 在内存中执行,建立 C2 通道。 相当于容器运行时拉取了带有恶意层的镜像,运行时扫描无法检测到静态恶意文件。
关键教训:SolarWinds 攻击的核心在于攻击者绕过了 构建阶段的信任验证。即使镜像经过签名、扫描无已知漏洞,只要构建环境被污染,最终产物就不可信。这直接催生了 “不可变构建” 与 “SLSA 框架” 的行业共识。

3.1.2 攻击链 SVG 图示

SolarWinds 攻击链与镜像供应链映射 SolarWinds 攻击链与镜像供应链映射 1. 初始入侵 窃取凭证 / 密码喷洒 2. 构建环境篡改 植入后门 DLL 3. 签名与分发 合法私钥签名 4. 下游激活 C2 通道建立 镜像供应链映射:获取 push 权限 → 注入恶意层 → 合法签名推送 → 运行时拉取执行 下游影响:约 18,000 家组织受感染 包括美国联邦机构、财富 500 强企业、关键基础设施运营商 攻击潜伏期:约 8-14 个月未被发现 核心教训:构建环境信任 > 产物签名信任 必须对 CI/CD 管道、构建工具链、依赖源实施不可变审计

3.2 CodeCov 攻击:上游依赖篡改的镜像层污染

2021 年 4 月,代码覆盖率工具 CodeCov Bash Uploader 被攻击者篡改。攻击者利用 CodeCov 的 Docker 镜像构建流程中的漏洞,修改了上传脚本,窃取用户的环境变量、CI 令牌和私有仓库凭证。该攻击直接展示了 上游依赖镜像被污染后如何向下游扩散。

3.2.1 攻击技术细节

  • 攻击入口:CodeCov 的 Docker 镜像构建过程中使用了 未锁定版本的基础镜像(FROM ubuntu:latest),攻击者通过中间人攻击或镜像仓库劫持替换了基础层。
  • 恶意载荷:篡改后的 uploader.sh 脚本在收集覆盖率数据的同时,将 CI_、AWS_ACCESS_KEY_ID 等敏感环境变量外发至攻击者控制的服务器。
  • 传播范围:任何在 CI 中引用该 Docker 镜像的项目,其构建环境中的凭证均可能被窃取。受影响组织包括 Twilio、Hashicorp 等数百家科技公司。
镜像供应链警示:CodeCov 攻击暴露了 “基础镜像版本锁定” 与 “镜像内容完整性验证” 的双重缺失。如果使用 latest 标签或未验证镜像摘要(digest),攻击者只需替换 Registry 中的镜像层即可完成供应链投毒。

3.2.2 攻击流程与信任边界 SVG 图示

CodeCov 攻击流程与信任边界失效点 CodeCov 攻击流程与信任边界失效点 上游基础镜像 ubuntu:latest 镜像层替换 中间人攻击 CodeCov 构建 恶意 uploader.sh 下游 CI 环境 凭证泄露 信任边界失效点:未锁定基础镜像版本 + 未验证镜像摘要 + 未对构建产物进行签名验证 攻击后果:数百家组织 CI 凭证泄露 泄露数据包括:AWS 密钥、GitHub 、Slack 、私有仓库访问凭证 攻击持续时间:约 2 个月未被发现 核心教训:基础镜像必须使用不可变摘要(digest)并验证签名 禁止使用 latest 标签;每次构建前验证基础镜像的完整性

3.3 从案例中提炼的信任边界配置教训

综合 SolarWinds 与 CodeCov 两个案例,可以归纳出以下直接指导镜像供应链信任边界配置的教训:

教训维度 具体教训 信任边界配置动作
构建环境 构建服务器被入侵后,所有产物均不可信 实施 SLSA Level 3+ 构建隔离;对构建环境进行硬件信任根验证
基础镜像 未锁定版本的基础镜像可被替换 始终使用 @sha256:... 摘要引用;配置 镜像内容信任(Notary / Cosign)
签名验证 合法签名不代表内容未被篡改 签名必须绑定 构建元数据(来源、材料清单);验证签名链的完整性
运行时检测 静态扫描无法检测内存加载的后门 部署 运行时行为监控(Falco / Tracee);对异常网络连接告警
凭证管理 CI 环境中的凭证是攻击者的首要目标 使用 短期令牌;对 CI 环境实施最小权限原则;禁止在镜像中硬编码凭证