3、镜像供应链安全全景:全链路风险分析

镜像供应链安全是云原生安全的核心防线。一个容器镜像从代码提交到生产运行,历经构建、存储、传输、部署和运行时五个阶段,每个阶段都存在独特的安全风险。本章从全链路视角拆解各阶段风险,并给出可落地的巡检与防护策略。

核心观点:镜像供应链安全不是单点防护,而是从“代码到运行”的端到端安全水位管控。任何一环的疏漏都可能导致整个集群沦陷。

3.1 镜像构建阶段风险

构建阶段是安全左移的第一道关口。风险主要来自基础镜像、依赖库、构建过程和构建工具链。

风险类别 具体风险 影响等级 巡检要点
基础镜像 使用过时/未打补丁的基础镜像(如 Ubuntu 18.04 已停止维护) 高 检查基础镜像版本、CVE 扫描结果
依赖库 引入已知漏洞的第三方库(如 Log4j、OpenSSL) 高 SBOM 生成与依赖审计
构建过程 Dockerfile 中硬编码密钥、使用 root 用户运行 中 Dockerfile 静态扫描(Hadolint)
构建工具链 CI/CD 管道被篡改、构建缓存投毒 高 构建环境隔离、签名验证
最佳实践:构建阶段应强制使用“最小基础镜像”(如 distroless、Alpine),并集成 Trivy/Grype 进行 CVE 扫描,未通过扫描的镜像禁止进入仓库。

3.2 镜像仓库存储阶段风险

镜像仓库是供应链的中枢节点。风险集中在访问控制、镜像完整性、仓库配置和镜像老化管理。

  • 访问控制薄弱:匿名拉取、弱密码、未启用 RBAC,导致镜像被非法拉取或篡改。
  • 镜像完整性缺失:未使用签名(Cosign/Notary),镜像被中间人替换后无法感知。
  • 仓库配置风险:公开仓库暴露敏感信息、未启用镜像扫描、未限制存储配额。
  • 镜像老化与垃圾:大量过时镜像占用存储,且包含未修复漏洞的旧版本。
常见陷阱:很多团队只关注仓库的认证,却忽略了“镜像标签可变性”。例如 latest 标签可以被覆盖,导致不同时间拉取的镜像内容不一致。建议使用不可变标签(如 SHA256 digest)。

3.3 镜像传输阶段风险

镜像从仓库传输到集群节点的过程,面临中间人攻击、传输劫持和镜像缓存投毒等风险。

风险点 攻击方式 防护措施
网络传输 中间人篡改镜像层数据 启用 HTTPS/TLS、镜像签名验证
镜像代理/缓存 代理服务器缓存被投毒 配置镜像代理白名单、启用完整性校验
多集群拉取 跨集群传输时凭证泄露 使用临时凭证、最小权限 ServiceAccount
镜像传输安全风险与防护 构建环境 镜像仓库 K8s 集群 中间人篡改 缓存投毒 防护措施 HTTPS/TLS + Cosign 签名验证 + 镜像代理白名单 + 临时凭证

3.4 镜像部署阶段风险

部署阶段是安全策略落地的关键环节。K8s 在拉取和启动镜像时,需要验证镜像的合法性、完整性和策略合规性。

  • 镜像拉取策略不当:使用 imagePullPolicy: Always 导致频繁拉取,增加攻击面;使用 IfNotPresent 可能使用本地被篡改的缓存。
  • 镜像准入控制缺失:未配置 OPA/Gatekeeper 或 Kyverno 策略,允许未签名、高危漏洞或非白名单镜像运行。
  • 镜像凭证泄露:将私有仓库凭证硬编码在 Pod YAML 或 ConfigMap 中。
  • 镜像拉取超时与重试:恶意镜像导致 kubelet 反复拉取,引发节点资源耗尽。
巡检命令示例:检查集群中所有 Pod 的镜像拉取策略和凭证使用情况。
# 查看所有 Pod 的 imagePullPolicy
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\t"}{.spec.containers[*].imagePullPolicy}{"\n"}{end}'

# 检查是否使用了 imagePullSecrets
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.imagePullSecrets == null) | .metadata.namespace + "/" + .metadata.name'

3.5 镜像运行时阶段风险

镜像启动后,风险从镜像本身转移到容器进程、文件系统和系统调用。运行时安全是最后一道防线。

风险类别 攻击场景 检测手段
容器逃逸 利用内核漏洞或配置缺陷逃逸到宿主机 Falco 规则、Seccomp/AppArmor 配置
恶意进程 镜像内包含后门或挖矿程序,运行时启动 运行时 CVE 扫描、进程白名单
文件篡改 容器内关键文件被修改(如 /etc/passwd) 文件完整性监控(AIDE、Tripwire)
网络攻击 容器内进程发起对外恶意连接或横向移动 网络策略(NetworkPolicy)、流量审计
镜像运行时安全风险全景 容器运行时 容器逃逸 恶意进程 文件篡改 网络攻击 运行时防护层 Falco 异常检测 | Seccomp/AppArmor | 进程白名单 | NetworkPolicy 文件完整性监控 | 运行时 CVE 扫描 | 容器行为基线

3.6 全链路风险矩阵与巡检策略

将五个阶段的风险汇总,形成可操作的巡检矩阵,帮助团队快速定位安全水位短板。

阶段 关键风险 巡检工具/方法 修复优先级
构建 基础镜像漏洞、依赖库漏洞 Trivy、Grype、SBOM 生成 P0
存储 镜像未签名、仓库访问控制弱 Cosign、Harbor 策略、镜像扫描 P0
传输 中间人攻击、缓存投毒 HTTPS、镜像代理白名单、签名验证 P1
部署 准入控制缺失、凭证泄露 OPA/Gatekeeper、Kyverno、Secret 审计 P0
运行时 容器逃逸、恶意进程 Falco、Seccomp、NetworkPolicy P1