2. 软件供应链安全基础:攻击模型、SLSA 框架与 SBOM

现代软件开发高度依赖开源组件、第三方库、容器镜像和 CI/CD 流水线。攻击者不再直接攻击生产环境,而是将恶意代码注入上游依赖、构建工具或分发通道,形成“供应链投毒”。理解攻击模型、信任框架和物料清单是实施镜像安全准入的前提。

2.1 软件供应链攻击模型

根据 CNCF 及行业安全报告,供应链攻击可归纳为以下四个阶段(A 型攻击链):

阶段 攻击目标 典型手法
1. 上游污染 源代码仓库、开源包 依赖混淆、恶意 PR、账户劫持后植入后门
2. 构建劫持 CI/CD 流水线、构建环境 篡改 Dockerfile、注入恶意构建步骤、利用缓存投毒
3. 分发篡改 镜像仓库、包管理器 中间人攻击、仓库凭证泄露、替换合法镜像标签
4. 运行时利用 生产集群、终端设备 利用被篡改镜像中的后门执行横向移动或数据窃取
关键认知: 传统“边界防御”在供应链攻击面前失效。攻击者只需污染一个上游依赖,即可影响下游数千个应用。镜像签名(Cosign)和准入检查(Kyverno/OPA)正是针对阶段 2 和阶段 3 的补偿控制。
软件供应链攻击链(A 型) ① 上游污染 ② 构建劫持 ③ 分发篡改 ④ 运行时利用 攻击者只需成功一次,防御者需阻断全链路。Cosign 签名在②③阶段提供防篡改锚点。 SLSA L3+ 要求构建过程可验证、可复现,从源头切断攻击链。

2.2 SLSA 框架:供应链安全成熟度模型

SLSA(Supply-chain Levels for Software Artifacts)由 Google 发起,现为 OpenSSF 旗下标准。它定义了从 L0(无保障)到 L4(最高保障)的四个等级,每个等级包含对来源、构建完整性和依赖关系的要求。

等级 核心要求 对镜像供应链的意义
L0 无保障,仅存在软件制品 当前大多数项目的现状,无法抵御任何供应链攻击
L1 构建过程可追溯(来源元数据) 要求镜像仓库记录构建来源(如 GitHub Actions 工作流)
L2 构建过程防篡改 + 签名 Cosign 签名 + 可验证的构建证明(Provenance)
L3 构建过程隔离 + 可复现 构建环境无网络、无持久化存储;镜像哈希可复现验证
L4 构建过程完全审计 + 依赖枚举 SBOM 自动生成 + 依赖链签名 + 策略强制准入
实践映射: 本课程后续实现的“Cosign 签名 + Kyverno 准入检查”可帮助团队从 L1 跃升至 L2–L3。结合 SBOM 生成与验证,可进一步向 L4 演进。
SLSA 等级与镜像安全能力 L0 — 无保障 L1 — 可追溯 L2 — 防篡改 L3 — 可复现 无签名、无来源证明、无依赖清单 镜像拉取即运行,无任何安全准入 构建来源记录(CI 工作流 URL、构建时间) 镜像仓库标签包含来源元数据 Cosign 签名 + 构建证明(Provenance) 准入控制器验证签名和证明 构建环境隔离 + 可复现构建 + SBOM 自动生成 镜像哈希与构建参数可复现验证

2.3 SBOM:软件物料清单的概念与重要性

SBOM(Software Bill of Materials)是软件制品中包含的所有组件的嵌套清单,类似食品包装上的配料表。对于容器镜像,SBOM 通常包含:

  • 基础镜像:操作系统层(如 Ubuntu 22.04、Alpine 3.19)
  • 系统包:apt/yum/apk 安装的库(如 openssl、libcurl)
  • 语言依赖:pip/npm/go modules 引入的第三方包
  • 应用层文件:自定义 JAR、WAR、二进制文件
  • 元数据:组件版本、许可证、来源仓库、已知漏洞(CVE)关联
SBOM 格式 特点 工具支持
SPDX Linux 基金会标准,支持许可证和安全性描述 syft、tern、ort
CycloneDX OWASP 标准,专为安全审计设计,支持组件层级 syft、cyclonedx-gomod、jenkins 插件
SWID ISO 标准,主要用于软件资产管理 NIST 工具、商业产品
常见误区: 生成 SBOM 不等于安全。SBOM 必须与签名绑定(Cosign 可对 SBOM 进行签名),并在准入策略中强制验证 SBOM 的完整性和时效性。未签名的 SBOM 可被攻击者篡改,失去审计价值。

2.4 三者的关系:攻击模型 → SLSA → SBOM

在镜像供应链安全实践中,三者形成递进关系:

  1. 攻击模型 揭示威胁所在(上游、构建、分发、运行时)。
  2. SLSA 框架 提供可量化的防御等级和具体控制措施。
  3. SBOM 作为可验证的物料清单,是 SLSA L3+ 的必备产出,也是准入检查的输入条件。