3. 镜像供应链全景:镜像来源分类、生命周期与风险暴露面
在构建镜像准入策略之前,必须对镜像供应链的全景进行系统化梳理。镜像并非孤立存在的制品,它从构建、分发到运行,跨越多个信任域,每个环节都可能引入风险。本节从来源分类、生命周期和风险暴露面三个维度,建立镜像供应链的完整视图。
3.1 镜像来源分类
根据镜像的构建主体和可信度,镜像来源可分为三大类:官方镜像、第三方镜像和自建镜像。不同来源的信任基线和风险特征差异显著。
| 来源类型 | 定义 | 典型示例 | 信任基线 | 主要风险 |
|---|---|---|---|---|
| 官方镜像 | 由软件原厂或开源项目官方维护的镜像 | nginx:alpine, python:3.12-slim, node:20-bookworm | 高(经过签名、安全扫描、版本验证) | 基础镜像漏洞(CVE)、版本过时、镜像篡改(中间人攻击) |
| 第三方镜像 | 由社区、企业或个人在公共仓库发布的非官方镜像 | bitnami/nginx, jupyter/scipy-notebook, 各类“-dev”镜像 | 中低(需额外验证签名、来源、构建历史) | 恶意植入、后门、依赖混淆、版本漂移、许可证合规 |
| 自建镜像 | 企业基于内部代码、基础镜像或Dockerfile自行构建的镜像 | registry.company.com/app/service-a:v1.2.3 | 可控(依赖内部CI/CD、基础镜像策略、安全扫描) | 基础镜像漏洞继承、构建环境污染、密钥泄露、配置漂移 |
准入策略要点: 官方镜像应作为基础镜像的首选来源;第三方镜像必须经过签名验证、来源白名单和深度扫描后方可准入;自建镜像需强制关联构建流水线元数据(如Dockerfile哈希、构建Job ID、扫描报告)。
3.2 镜像生命周期
镜像从构建到退役,经历多个阶段。每个阶段都是信任边界的节点,也是准入策略的检查点。
镜像生命周期各阶段的关键活动与风险点:
- 构建(Build):基于Dockerfile或BuildKit,从基础镜像开始叠加层。风险包括基础镜像选择不当、构建参数泄露、缓存投毒。
- 安全扫描(Scan):对镜像层进行漏洞扫描、密钥检测、恶意文件分析。风险在于扫描策略不完整(如只扫操作系统层,忽略应用依赖)。
- 签名/加签(Sign):使用cosign、notation等工具对镜像摘要进行数字签名。风险在于签名密钥管理不当或签名流程缺失。
- 推送仓库(Push):将镜像推送至内部或外部容器仓库。风险包括仓库访问控制薄弱、镜像覆盖、标签篡改。
- 部署运行(Deploy):从仓库拉取镜像并启动容器。风险在于运行时镜像与扫描时镜像不一致(时间差攻击)、镜像拉取策略不当。
- 退役(Retire):对过期或存在严重漏洞的镜像版本进行标记、下架或删除。风险在于未及时清理导致旧版本被意外使用。
3.3 风险暴露面分析
镜像供应链的风险暴露面贯穿整个生命周期,可归纳为以下四个维度:
3.4 风险暴露面详细清单
| 风险维度 | 具体风险项 | 影响阶段 | 准入策略应对 |
|---|---|---|---|
| 构建环境 | 基础镜像来源不可信 | 构建 | 强制基础镜像白名单 + 摘要锁定 |
| Dockerfile 中硬编码密钥 | 构建 | 构建前密钥扫描(如 truffleHog) | |
| 构建缓存被污染 | 构建 | 隔离构建环境 + 缓存哈希校验 | |
| 镜像内容 | 已知漏洞(CVE) | 扫描/部署 | 漏洞阈值策略(如拒绝 Critical 漏洞) |
| 恶意软件或后门 | 扫描 | 恶意文件签名库匹配 + 行为分析 | |
| 许可证合规问题 | 扫描 | 许可证白名单/黑名单策略 | |
| 分发传输 | 镜像被中间人篡改 | 推送/拉取 | 强制 TLS + 镜像签名验证 |
| 仓库访问控制薄弱 | 推送/拉取 | RBAC + 仓库策略即代码 | |
| 标签覆盖或删除 | 推送 | 不可变标签 + 版本保留策略 | |
| 运行时 | 拉取策略导致旧版本运行 | 部署 | 强制使用镜像摘要(digest)而非标签 |
| 运行时镜像与扫描镜像不一致 | 部署 | 运行时签名验证 + 准入 Webhook | |
| 容器逃逸或权限提升 | 运行 | 安全上下文约束 + seccomp/AppArmor |
关键认知: 镜像供应链的风险不是线性的,而是网状叠加的。一个在构建阶段未被发现的密钥泄露,可能在运行时被利用;一个在扫描阶段被忽略的低危漏洞,可能通过组合攻击升级为严重威胁。因此,准入策略必须覆盖全生命周期,而非仅关注单一阶段。
3.5 全景总结
镜像供应链全景为准入策略提供了清晰的上下文:
- 来源分类决定了信任基线和准入策略的严格程度——官方镜像可适度放宽,第三方镜像必须严查,自建镜像需绑定流水线元数据。
- 生命周期定义了准入检查点的位置——构建、扫描、签名、推送、部署、退役,每个阶段都需要对应的策略规则。
- 风险暴露面揭示了需要防御的具体威胁——从构建环境到运行时,每个维度都有对应的准入控制手段。