2. 镜像供应链安全威胁模型

镜像供应链安全威胁贯穿从代码开发、构建、分发到部署的全链路。攻击者利用供应链中任何一个环节的薄弱点,将恶意载荷注入最终运行的容器中。理解这些威胁模型是制定巡检策略和资源规划的前提。

2.1 软件供应链攻击

软件供应链攻击指攻击者通过污染上游依赖、构建工具或分发通道,将恶意代码植入合法软件中。在容器镜像场景下,攻击面包括:

  • 基础镜像投毒:攻击者篡改官方或第三方基础镜像仓库,替换为包含后门的镜像。
  • 依赖库劫持:通过域名抢注、仓库账号泄露或恶意 PR 合并,向开源库中注入恶意代码。
  • 构建管道入侵:CI/CD 系统被攻破后,在镜像构建过程中插入恶意层。
  • 镜像签名伪造:签名私钥泄露或使用弱签名算法,攻击者可伪造合法镜像签名。
关键指标: 镜像层哈希校验通过率、基础镜像来源可信度评分、构建管道审计日志覆盖率。
软件供应链攻击链路 代码仓库 开源依赖库 CI/CD 管道 镜像仓库 生产集群 恶意 PR / 代码后门 依赖混淆 / 域名抢注 构建脚本 篡改 攻击者可在代码、依赖、构建、分发任意环节植入恶意载荷,最终影响生产环境

2.2 镜像投毒

镜像投毒是攻击者将恶意镜像上传到公共或私有仓库,诱骗用户拉取并运行。常见手法包括:

  • 名称仿冒:使用与官方镜像相似的名称(如 kubemetes 冒充 kubernetes)。
  • 标签劫持:在官方镜像的合法标签后追加恶意层,重新推送。
  • 多层隐藏:将恶意文件隐藏在镜像历史层的深层,常规扫描难以发现。
  • 运行时激活:恶意代码在容器启动后延迟执行,绕过静态扫描。
投毒类型 检测难度 典型特征 巡检手段
名称仿冒 低 拼写差异、额外字符 镜像来源白名单、名称正则校验
标签劫持 中 层哈希与官方不一致 层哈希比对、签名验证
多层隐藏 高 大体积层、非标准文件 逐层分析、文件类型审计
运行时激活 高 启动脚本异常、定时任务 运行时行为监控、沙箱检测
巡检建议: 在镜像仓库入口配置自动扫描策略,对每个推送的镜像执行层哈希校验和恶意软件扫描,阻断投毒镜像进入分发环节。

2.3 依赖混淆

依赖混淆攻击利用包管理器的解析优先级漏洞,诱使构建工具从公共仓库拉取恶意包而非内部私有包。攻击者将恶意包命名为与内部包相同的名称,上传到公共仓库(如 npm、PyPI、Maven Central),由于公共仓库优先级更高,构建过程会下载恶意版本。

典型攻击场景:

  1. 攻击者获取企业内部使用的私有包名称(如 internal-auth-lib)。
  2. 攻击者将同名恶意包上传到公共包仓库,版本号高于内部版本。
  3. CI/CD 构建时,包管理器优先从公共仓库拉取高版本恶意包。
  4. 恶意代码在构建或运行时执行,窃取凭证或植入后门。
风险提示: 依赖混淆攻击在 2022-2024 年间增长超过 300%,尤其影响使用多语言微服务架构的团队。必须建立严格的包来源管控机制。

2.4 恶意代码植入

恶意代码植入指攻击者将可执行恶意载荷写入镜像文件系统,在容器运行时触发。常见植入方式包括:

  • 二进制后门:植入反弹 Shell、挖矿程序、勒索软件等可执行文件。
  • 脚本注入:在 entrypoint.sh、Dockerfile 的 RUN 指令或 CMD 中嵌入恶意命令。
  • 动态链接库劫持:替换或添加 .so / .dll 文件,劫持系统调用。
  • 配置篡改:修改 /etc/hosts、DNS 配置、CA 证书,实现流量劫持。
恶意代码植入路径 镜像层结构 Layer 1: 基础 OS Layer 2: 依赖库 Layer 3: 恶意载荷 二进制后门 反弹 Shell / 挖矿 脚本注入 entrypoint / RUN 动态库劫持 .so / .dll 替换 数据窃取 凭证 / 文件 权限提升 容器逃逸 横向移动 集群渗透 恶意代码可植入任意镜像层,在容器运行时触发数据窃取、权限提升或横向移动

2.5 威胁模型对比总结

威胁类型 攻击阶段 影响范围 检测难度 巡检优先级
软件供应链攻击 开发 → 构建 → 分发 全链路 高 最高
镜像投毒 分发 → 部署 单镜像/仓库 中 高
依赖混淆 构建 单项目/组织 中 高
恶意代码植入 构建 → 部署 → 运行 单容器/集群 中-高 高
巡检策略建议: 针对上述威胁模型,应建立分层巡检体系:
1. 构建层:依赖来源白名单、SBOM 生成、构建环境隔离。
2. 分发层:镜像签名验证、仓库访问控制、层哈希审计。
3. 部署层:运行时安全策略(Seccomp/AppArmor)、异常行为检测、镜像不可变部署。