2、镜像供应链安全基础:镜像生命周期、供应链攻击面分析、常见威胁模型

2.1 镜像生命周期全景

容器镜像并非静态的二进制文件,而是一个从构建到运行再到归档的动态制品。理解其完整生命周期,是定位安全风险的前提。

阶段 关键活动 安全关注点
1. 构建 Dockerfile 编写、基础镜像拉取、层叠加、依赖安装 基础镜像来源、构建缓存污染、恶意依赖注入
2. 分发 镜像推送至仓库、镜像签名、镜像同步 仓库访问控制、镜像篡改、中间人劫持
3. 部署 镜像拉取、运行时配置、容器启动 镜像验证缺失、密钥泄露、运行时逃逸
4. 运行 容器进程、网络通信、存储挂载 漏洞利用、横向移动、数据泄露
5. 归档/退役 镜像清理、版本冻结、审计追溯 残留敏感数据、未清理的旧版本漏洞
关键认知: 镜像供应链安全不是“构建时一次性扫描”就能解决的。每个阶段都可能引入新的攻击面,且攻击效果会沿生命周期向下游传递。

2.2 供应链攻击面分析

攻击者可以在镜像生命周期的任意环节植入恶意载荷。以下按攻击面类型进行结构化梳理:

  • 上游依赖攻击面
    • 基础镜像投毒:攻击者篡改官方或第三方基础镜像,植入后门。
    • 软件包仓库劫持:PyPI、npm、Maven 等仓库中的恶意包。
    • Git 子模块/源码依赖:被篡改的源码仓库或 commit。
  • 构建过程攻击面
    • CI/CD 管道注入:恶意修改构建脚本或 Dockerfile。
    • 构建缓存污染:利用缓存层持久化恶意内容。
    • 多阶段构建泄露:中间产物未清理,残留密钥或证书。
  • 分发与存储攻击面
    • 镜像仓库未授权访问:公开仓库或弱认证仓库。
    • 镜像签名缺失:无法验证镜像完整性和来源。
    • 镜像标签篡改:利用 latest 标签覆盖合法镜像。
  • 运行时攻击面
    • 特权容器滥用:容器逃逸至宿主机。
    • 挂载敏感目录:宿主机文件系统被容器内进程访问。
    • 网络策略缺失:容器间横向移动。
实战警示: 2023 年某知名云厂商的镜像仓库因未启用签名验证,导致攻击者通过中间人替换镜像层,在数千个生产容器中植入挖矿程序。该事件从构建到发现历时 47 天。

2.3 常见威胁模型

为了系统化评估风险,业界通常采用以下三种威胁模型对镜像供应链进行抽象:

2.3.1 STRIDE 模型映射

威胁类型 镜像供应链场景 风险等级
S 身份欺骗 攻击者伪造镜像签名或仓库身份 高
T 篡改 镜像层内容被中间人替换 高
R 抵赖 无签名审计日志,无法追溯镜像来源 中
I 信息泄露 镜像层残留密钥、密码或 高
D 拒绝服务 恶意镜像耗尽仓库存储或节点资源 中
E 权限提升 容器内漏洞导致宿主机 root 权限 极高

2.3.2 攻击树模型(Attack Tree)

攻击树以“最终目标”为根节点,逐层分解攻击路径。以下为镜像供应链攻击树的典型结构:

根目标:在目标集群中运行恶意容器
├── 1.0 植入恶意镜像
│   ├── 1.1 篡改基础镜像(上游投毒)
│   ├── 1.2 在 CI 管道注入恶意层
│   └── 1.3 利用仓库漏洞上传恶意镜像
├── 2.0 绕过镜像验证
│   ├── 2.1 禁用镜像签名校验
│   ├── 2.2 利用标签覆盖合法镜像
│   └── 2.3 伪造镜像签名证书
└── 3.0 触发恶意负载
    ├── 3.1 容器启动时执行恶意 entrypoint
    ├── 3.2 利用运行时漏洞逃逸
    └── 3.3 通过挂载卷泄露宿主机数据

2.4 镜像供应链攻击面全景图

下图将生命周期、攻击面和威胁模型整合为一张全景视图,便于在复测复核中快速定位风险节点:

镜像供应链攻击面全景图 镜像供应链攻击面全景图 构建阶段 分发阶段 部署阶段 运行阶段 攻击面映射 上游依赖投毒 基础镜像篡改 恶意依赖包 构建缓存污染 分发与存储 仓库未授权访问 镜像签名缺失 标签篡改 部署与配置 镜像验证绕过 密钥泄露 特权配置 运行时逃逸 容器逃逸 横向移动 数据泄露 威胁模型映射(STRIDE) S 身份欺骗 T 篡改 R 抵赖 I 信息泄露 D 拒绝服务 E 权限提升 📌 复测复核要点 • 每个生命周期阶段至少对应 1 个 STRIDE 威胁类型 • 攻击面分析应覆盖所有阶段,不能仅关注构建或运行时 • 威胁模型用于指导复测用例设计,确保测试覆盖率

2.5 复测复核中的风险控制要点

基于上述攻击面和威胁模型,在复测记录复核中应重点关注以下风险控制点:

  1. 镜像来源验证:确认所有基础镜像均来自受信仓库,且具有可验证的签名。
  2. 构建过程审计:检查 CI/CD 管道日志,确保无未授权的构建步骤或层注入。
  3. 镜像层扫描:对每一层进行漏洞扫描和敏感信息检测,不遗漏中间层。
  4. 签名与完整性校验:部署前强制验证镜像签名,拒绝未签名或签名失效的镜像。
  5. 运行时基线检查:对照 CIS Benchmark 检查容器运行时配置,关闭特权模式和非必要挂载。
复测复核提示: 在复测记录中,如果发现某个阶段缺少对应的威胁模型覆盖(例如仅检查了构建阶段漏洞,未检查分发阶段的签名验证),应标记为“测试覆盖缺口”,并提升风险等级。