2. 镜像供应链安全威胁模型
镜像供应链安全威胁贯穿从代码开发、构建、分发到部署的全链路。攻击者利用供应链中任何一个环节的薄弱点,将恶意载荷注入最终运行的容器中。理解这些威胁模型是制定巡检策略和资源规划的前提。
2.1 软件供应链攻击
软件供应链攻击指攻击者通过污染上游依赖、构建工具或分发通道,将恶意代码植入合法软件中。在容器镜像场景下,攻击面包括:
- 基础镜像投毒:攻击者篡改官方或第三方基础镜像仓库,替换为包含后门的镜像。
- 依赖库劫持:通过域名抢注、仓库账号泄露或恶意 PR 合并,向开源库中注入恶意代码。
- 构建管道入侵:CI/CD 系统被攻破后,在镜像构建过程中插入恶意层。
- 镜像签名伪造:签名私钥泄露或使用弱签名算法,攻击者可伪造合法镜像签名。
关键指标: 镜像层哈希校验通过率、基础镜像来源可信度评分、构建管道审计日志覆盖率。
2.2 镜像投毒
镜像投毒是攻击者将恶意镜像上传到公共或私有仓库,诱骗用户拉取并运行。常见手法包括:
- 名称仿冒:使用与官方镜像相似的名称(如
kubemetes冒充kubernetes)。 - 标签劫持:在官方镜像的合法标签后追加恶意层,重新推送。
- 多层隐藏:将恶意文件隐藏在镜像历史层的深层,常规扫描难以发现。
- 运行时激活:恶意代码在容器启动后延迟执行,绕过静态扫描。
| 投毒类型 | 检测难度 | 典型特征 | 巡检手段 |
|---|---|---|---|
| 名称仿冒 | 低 | 拼写差异、额外字符 | 镜像来源白名单、名称正则校验 |
| 标签劫持 | 中 | 层哈希与官方不一致 | 层哈希比对、签名验证 |
| 多层隐藏 | 高 | 大体积层、非标准文件 | 逐层分析、文件类型审计 |
| 运行时激活 | 高 | 启动脚本异常、定时任务 | 运行时行为监控、沙箱检测 |
巡检建议: 在镜像仓库入口配置自动扫描策略,对每个推送的镜像执行层哈希校验和恶意软件扫描,阻断投毒镜像进入分发环节。
2.3 依赖混淆
依赖混淆攻击利用包管理器的解析优先级漏洞,诱使构建工具从公共仓库拉取恶意包而非内部私有包。攻击者将恶意包命名为与内部包相同的名称,上传到公共仓库(如 npm、PyPI、Maven Central),由于公共仓库优先级更高,构建过程会下载恶意版本。
典型攻击场景:
- 攻击者获取企业内部使用的私有包名称(如
internal-auth-lib)。 - 攻击者将同名恶意包上传到公共包仓库,版本号高于内部版本。
- CI/CD 构建时,包管理器优先从公共仓库拉取高版本恶意包。
- 恶意代码在构建或运行时执行,窃取凭证或植入后门。
风险提示: 依赖混淆攻击在 2022-2024 年间增长超过 300%,尤其影响使用多语言微服务架构的团队。必须建立严格的包来源管控机制。
2.4 恶意代码植入
恶意代码植入指攻击者将可执行恶意载荷写入镜像文件系统,在容器运行时触发。常见植入方式包括:
- 二进制后门:植入反弹 Shell、挖矿程序、勒索软件等可执行文件。
- 脚本注入:在
entrypoint.sh、Dockerfile的RUN指令或CMD中嵌入恶意命令。 - 动态链接库劫持:替换或添加
.so/.dll文件,劫持系统调用。 - 配置篡改:修改
/etc/hosts、DNS 配置、CA 证书,实现流量劫持。
2.5 威胁模型对比总结
| 威胁类型 | 攻击阶段 | 影响范围 | 检测难度 | 巡检优先级 |
|---|---|---|---|---|
| 软件供应链攻击 | 开发 → 构建 → 分发 | 全链路 | 高 | 最高 |
| 镜像投毒 | 分发 → 部署 | 单镜像/仓库 | 中 | 高 |
| 依赖混淆 | 构建 | 单项目/组织 | 中 | 高 |
| 恶意代码植入 | 构建 → 部署 → 运行 | 单容器/集群 | 中-高 | 高 |
巡检策略建议: 针对上述威胁模型,应建立分层巡检体系:
1. 构建层:依赖来源白名单、SBOM 生成、构建环境隔离。
2. 分发层:镜像签名验证、仓库访问控制、层哈希审计。
3. 部署层:运行时安全策略(Seccomp/AppArmor)、异常行为检测、镜像不可变部署。
1. 构建层:依赖来源白名单、SBOM 生成、构建环境隔离。
2. 分发层:镜像签名验证、仓库访问控制、层哈希审计。
3. 部署层:运行时安全策略(Seccomp/AppArmor)、异常行为检测、镜像不可变部署。