如何验证镜像不含 CVE-2024-XXXX 高危漏洞?
解读
面试官想确认候选人是否具备镜像供应链安全的实战能力,而非仅停留在“用工具扫一下”的层面。国内金融、运营商、政务云对**“0-CVE 上线”有刚性要求,CouchDB 作为基础组件,必须证明其镜像在构建、传输、运行**三阶段都可验证、可回溯、可阻断。回答要体现“能落地、能审计、能闭环”。
知识点
- 国内合规基线:等保 2.0、关基、工信部 418 号文要求“上线前完成漏洞修复或补偿措施”,高危 CVE 必须24 小时内定位、72 小时内闭环。
- CouchDB 官方镜像特点:基于 Debian slim,自带 Erlang/OTP、SpiderMonkey 1.8.5、NPM 依赖,历史 CVE 集中在 Erlang 与 JS 引擎。
- 镜像签名与 attestation:国内大厂生产环境已强制Harbor + Cosign + in-toto,需验证digest 与签名证书 CN 一致才能拉取。
- 多引擎交叉验证:Trivy 对系统包识别最全,Grype 对 Erlang 包识别更准,必须双引擎结果对齐才能出报告。
- SBOM 闭环:以 SPDX/CycloneDX JSON 形式入库,与 CMDB 资产编号绑定,后续出现新 CVE 可秒级定位影响范围。
答案
我采用“三签两审一阻断”流程,确保 CouchDB 镜像不带 CVE-2024-XXXX上线。
-
准入前阻断
a. 在 CI 阶段拉起临时隔离 Harbor 项目,仅允许 Jenkins 服务账号推送。
b. 使用官方 CouchDB 3.3.3 源码自行构建,Dockerfile 中把erlang=1:25.3.2.8-1与spidermonkey=1.8.5+ci20230321钉死版本,杜绝 latest 漂移。
c. 构建节点启用BuildKit 缓存挂载,--mount=type=cache,sharing=locked防止层缓存污染,保证可重复构建。 -
双引擎扫描
a. 镜像推送到 Harbor 后,触发 Trivy + Grype 并行扫描,参数统一--ignore-unfixed=false --severity HIGH,CRITICAL。
b. 结果写入 Kafka 漏洞消息队列,由 VulnOps 服务去重并关联 NVD、CNNVD、CNVD 三库,确保 CVE-2024-XXXX 编号一致。
c. 若任一引擎报出 CVE-2024-XXXX,自动创建 JIRA 红线工单,并冻结镜像 digest,Harbor 项目立即开启不可变规则,禁止覆盖。 -
签名与 attestation
a. 扫描通过后,调用 Cosign 对镜像进行签名,证书使用公司 私有 CA 颁发短周期证书(有效期 7 天),私钥托管在 KMS(阿里云 KMS 或国密 HSM)。
b. 同时生成 in-toto attestation,声明“CVE-2024-XXXX 未检出”,并把 SBOM、扫描报告、构建日志作为 predicate 一并写入 OCI 镜像的 attest 层。
c. 签名摘要写入 Harbor 的 Notary v2 元数据,生产集群只有校验签名通过才允许拉取。 -
运行时二次审核
a. 镜像真正部署到 K8s 前,Kyverno 策略引擎会校验cosign verify返回值,摘要、签名、attestation 三者任一不符即拒绝创建 Pod。
b. 每周一凌晨,安全团队拉取上周全部镜像重新扫描,使用最新漏洞库,防止“0day 变 1day”。若发现 CVE-2024-XXXX 在新库中出现,自动触发回滚与隔离。 -
审计与闭环
a. 所有扫描报告、签名证书、attestation 统一存入 ElasticSearch 安全索引,保留 180 天,支持等保审计快速举证。
b. 出现争议时,可通过docker buildx imagetools inspect <digest>与cosign verify --certificate-identity ...秒级还原构建链,实现“镜像-代码-责任人”三级定位。
通过上述流程,CVE-2024-XXXX 在镜像上线前、中、后三个阶段均被显性化、可验证、可阻断,满足国内监管“零高危带病上线”要求。
拓展思考
- 红队视角:如果攻击者通过 供应链污染 BuildKit 缓存 植入恶意 .beam 文件,上述流程仍可能被绕过。可引入 eBPF 运行时行为基线,对比 CouchDB beam 文件哈希白名单,秒级发现动态加载异常模块。
- 国密改造:金融信创要求SM2 签名 + SM3 摘要,Cosign 已支持 pkcs11 国密插件,但 Harbor 侧需二次开发 Notary v2 国密验签插件,实现全链路国密合规。
- 离线场景:边缘机房无法实时拉取 NVD 库,可预置 漏洞库离线包(每周同步),并通过 Harbor 复制策略 把漏洞库与镜像同步到边缘节点,保证离线扫描结果与中心一致。