1. 供应链安全概述
1.1 软件供应链攻击案例
软件供应链攻击是指攻击者通过污染软件开发、构建、分发或部署环节中的任意一个节点,将恶意代码植入合法软件中,从而向下游用户传播。近年来,此类攻击呈爆发式增长,以下为三个标志性案例:
| 案例 | 攻击方式 | 影响范围 | 关键教训 |
|---|---|---|---|
| SolarWinds Orion (2020) | 入侵构建系统,向合法更新包注入后门 | 18,000+ 客户,包括美国政府机构 | 构建环境必须隔离,签名密钥必须硬件保护 |
| Codecov Bash Uploader (2021) | 篡改 Docker 镜像中的脚本,窃取 CI 环境变量 | 29,000+ 客户,泄露大量 CI/CD 凭据 | 镜像完整性校验不可缺失,依赖链需持续审计 |
| Log4j (2021) | 利用开源库远程代码执行漏洞 | 全球数百万应用,CVSS 10.0 | 开源依赖的版本锁定与 SBOM 管理是刚需 |
核心警示: 上述案例表明,攻击者不再直接攻击应用层,而是转向攻击开发工具、基础镜像、开源依赖和 CI/CD 管道。传统“边界防护”模型已无法应对此类供应链级威胁。
1.2 镜像供应链安全的重要性
容器镜像已成为现代应用交付的标准载体。一个镜像从构建到运行,会经历多个环节,每个环节都可能成为攻击面:
- 基础镜像层: 使用来自公共仓库的未知来源镜像,可能包含恶意软件或已知漏洞。
- 依赖引入层: 通过
apt、pip、npm等包管理器引入的第三方库,可能被投毒。 - 构建过程层: CI/CD 环境中的构建工具或缓存被篡改,导致输出镜像不可信。
- 分发与部署层: 镜像在传输或存储过程中被替换,或注册表被攻破。
镜像供应链安全的核心目标是确保:“你运行的镜像,确实是你构建的镜像,且未被任何人篡改。” 这需要从构建到运行建立完整的可验证信任链。
关键指标: 根据 CNCF 调查报告,超过 60% 的受访组织在生产环境中遇到过与镜像相关的事故。实施镜像签名和验证的组织,平均事故响应时间缩短 70%。
1.3 SLSA 框架简介
SLSA(Supply-chain Levels for Software Artifacts,发音为“salsa”)是由 Google 主导、OpenSSF 推动的软件供应链安全框架。它定义了一套从低到高的安全等级,帮助组织评估和提升其软件制品的安全性。
SLSA 框架包含四个等级,每个等级对应一组必须满足的安全要求:
| 等级 | 名称 | 核心要求 | 典型实践 |
|---|---|---|---|
| SLSA 1 | 可构建 | 构建过程可追溯,生成出处元数据 | 记录构建命令、来源仓库、构建时间 |
| SLSA 2 | 防篡改 | 构建过程在隔离环境中运行,出处元数据签名 | 使用 CI/CD 托管构建器,对出处进行数字签名 |
| SLSA 3 | 可审计 | 构建过程可重复,无外部网络依赖,防篡改 | 构建环境标准化,依赖锁定,禁止非预期网络访问 |
| SLSA 4 | 最高级 | 构建过程完全可审计,双人审查,硬件密钥保护 | 双人代码审查 + 双人构建审批,HSM 签名 |
SLSA 框架与镜像供应链安全的关系非常紧密:Cosign 签名验证是实现 SLSA 2 及以上等级中“出处元数据签名”和“制品完整性验证”的关键技术工具。本课程后续章节将围绕 Cosign 展开,帮助你将镜像供应链安全从 SLSA 1 逐步提升至 SLSA 4。
SLSA 与 Cosign 的映射: 在 SLSA 2 中,要求对构建出处(Provenance)进行签名。Cosign 可以签名镜像本身,也可以签名
attestation(证明文件),从而满足 SLSA 2 的签名要求。在 SLSA 3 和 4 中,Cosign 结合硬件密钥和策略引擎,可提供更强的防篡改保证。
1.4 镜像供应链安全的关键实践
结合 SLSA 框架和实际攻击案例,镜像供应链安全需要从以下四个维度建立纵深防御:
- 来源验证: 只使用经过签名的、来源可追溯的基础镜像。通过 Cosign 验证镜像签名,确保镜像来自可信的发布者。
- 完整性校验: 在构建、分发和部署的每个环节,对镜像进行完整性校验(如 SHA256 摘要比对),防止镜像被篡改。
- 出处记录: 生成并签名镜像的构建出处(Provenance),记录构建时间、构建工具、依赖列表等信息,满足 SLSA 2+ 的审计要求。
- 策略执行: 在部署阶段,通过策略引擎(如 Kyverno、OPA)强制要求镜像必须经过签名验证,拒绝未签名或签名无效的镜像。
快速入门建议: 从 SLSA 1 开始,先为你的镜像生成出处元数据(如使用 Docker BuildKit 的
--attest 参数),然后使用 Cosign 对镜像进行签名,即可达到 SLSA 2 的基本要求。后续再逐步引入硬件密钥和策略引擎,向 SLSA 3/4 迈进。