现代软件已从"代码生产"演化为"依赖组装",系统安全不再取决于单点代码质量,而取决于:
整个供应链中每一个中间产物是否可信
核心问题转化为:
如何构建一个"信任不可传递,但可以逐跳验证"的系统?
信任不是主观判断,而必须具备:
安全不是外挂能力,而必须成为:
构建过程的固有属性(Built-in Property)
交付效率 ↑ vs 可验证性 ↑
约束:
供应链安全 = 信任建立 + 信任传递 + 信任验证
| 抽象层 | 本质问题 | 对应机制 |
|---|---|---|
| 信任建立 | 谁可以被信任 | 身份(Identity)/ 签名 |
| 信任传递 | 信任如何流动 | SBOM / Provenance |
| 信任验证 | 如何判定可信 | Policy / SLSA |
开发者 → 代码 → 构建 → 工件 → 分发 → 部署 → 运行
| 阶段 | 信任对象 | 风险 | 验证机制 |
|---|---|---|---|
| 开发 | 开发者身份 | 账号劫持 | 代码签名 / OIDC |
| 提交 | 源代码 | 恶意注入 | Code Review / Commit Signing |
| 构建 | 构建环境 | 构建污染 | Hermetic Build |
| 产物 | Artifact | 篡改 | Attestation |
| 分发 | Registry | 替换攻击 | 签名验证 |
| 部署 | 集群 | 非法镜像 | Admission Control |
| 运行 | Runtime | 漏洞利用 | Runtime Policy |
每一个阶段都是一个"信任断点(Trust Boundary)"
系统安全的本质:
消除隐式信任,构建显式验证链
投毒 → 混入 → 构建 → 分发 → 执行
| 攻击阶段 | 防御能力 |
|---|---|
| 投毒 | SBOM / SCA |
| 混入 | Code Review / Signing |
| 构建 | Hermetic Build |
| 分发 | Artifact Signing |
| 执行 | Admission / Runtime Policy |
| 能力域 | 本质 | 对应机制 |
|---|---|---|
| 可见性 | 看见依赖 | SBOM |
| 可检测性 | 发现风险 | SCA / SAST |
| 完整性 | 防篡改 | 签名 / Attestation |
| 可执行策略 | 做决策 | Policy / VEX |
| 指标 | 含义 |
|---|---|
| SBOM 覆盖率 | 可见性 |
| 可验证构建比例 | 完整性 |
| 未签名工件比例 | 风险暴露 |
| 高危漏洞 MTTR | 响应能力 |
检测 → 度量 → 策略 → 执行 → 反馈
SLSA 本质:
信任验证能力的成熟度分级
| 等级 | 本质能力 |
|---|---|
| L1 | 可追溯 |
| L2 | 可签名 |
| L3 | 可隔离 |
| L4 | 可复现 |
软件供应链安全的本质不是"保护代码",而是:
构建一个信任可计算、可传递、可验证的系统
其演进路径:
隐式信任 → 显式信任 → 信任流系统
最终目标:
让"信任"成为一种可以被构建、度量和验证的工程能力,而非经验判断。