3. Trivy 核心能力:漏洞扫描、IaC 扫描、密钥扫描、SBOM 生成、镜像与文件系统扫描

Trivy 是一款由 Aqua Security 开源的综合性云原生安全扫描器,以其“开箱即用”、高精度和低误报率著称。在 Sigstore-Trivy 协同策略即代码回滚护栏 体系中,Trivy 承担了持续安全检测与策略评估的核心执行层角色。本章将深入解析 Trivy 的五大核心能力,并展示其在 CI/CD 流水线中的具体应用。

3.1 五大核心能力全景

Trivy 覆盖了从开发到部署的全链路安全检测需求。下表总结了其五大核心能力模块及其在运维剧本中的定位:

核心能力 检测对象 输出格式 在回滚护栏中的角色
漏洞扫描 操作系统包、语言依赖库 JSON / SARIF / Table 阻断已知高危 CVE 的部署
IaC 扫描 Terraform、CloudFormation、K8s Manifests JSON / SARIF / Table 检测基础设施配置漂移与错误
密钥扫描 硬编码密钥、、凭证 JSON / SARIF / Table 防止敏感信息泄露至制品仓库
SBOM 生成 容器镜像、文件系统 CycloneDX / SPDX 为 Sigstore 签名提供物料清单
镜像与文件系统扫描 容器镜像层、本地目录 JSON / SARIF / Table 全文件级安全审计
运维提示: 在策略即代码(Policy as Code)场景下,Trivy 的 JSON 输出是 OPA/Rego 策略评估的标准输入。建议始终使用 --format json 参数以获取结构化结果。

3.2 漏洞扫描:精准阻断已知风险

Trivy 的漏洞扫描引擎内置了多个漏洞数据库(NVD、Red Hat、Debian、Alpine、GitHub Advisory 等),并支持离线模式。其核心优势在于 层缓存 和 多架构支持。

典型命令示例:

# 扫描容器镜像中的漏洞
trivy image --severity CRITICAL,HIGH --ignore-unfixed --format json nginx:1.25

# 扫描本地文件系统
trivy fs --severity CRITICAL --format sarif ./app

在回滚护栏中,漏洞扫描结果会触发策略引擎:若发现 CVSS 评分 ≥ 9.0 的未修复漏洞,则自动拒绝该镜像的部署签名请求。

3.3 IaC 扫描:基础设施即代码的合规守门员

Trivy 内置了数百条针对 Terraform、CloudFormation、Kubernetes YAML 和 Dockerfile 的检查规则。它不仅能检测安全配置错误(如容器以特权模式运行),还能发现合规性偏离(如未设置资源限制)。

IaC 扫描的典型输出片段:

# 扫描 Terraform 目录
trivy config --severity HIGH,CRITICAL --format table ./terraform/

# 结果示例
# AWS: 安全组规则过于宽松 (0.0.0.0/0 -> 22)
# K8s: 容器未设置 securityContext.runAsNonRoot
避坑指南: IaC 扫描的误报率通常高于漏洞扫描。建议在策略中设置 --ignore-policy 或使用 .trivyignore 文件过滤已知的误报规则,避免流水线被无效阻断。

3.4 密钥扫描:防止凭证泄露

Trivy 的密钥扫描器基于正则表达式和熵检测,能够识别超过 150 种类型的密钥(AWS Access Key、GitHub 、Slack 等)。它支持扫描文件系统、Git 历史记录和容器镜像层。

关键参数:

  • --scanners secret:启用密钥扫描器
  • --secret-config:自定义密钥检测规则
  • --severity:按严重级别过滤

在协同剧本中,密钥扫描通常作为 预提交钩子 或 CI 构建阶段 执行,一旦发现硬编码密钥,立即中断流水线并通知开发者。

3.5 SBOM 生成:为签名提供可信物料清单

软件物料清单(SBOM)是 Sigstore 签名的前置条件。Trivy 支持生成 CycloneDX 和 SPDX 两种标准格式的 SBOM,并能够从容器镜像、文件系统和已安装的包中提取依赖关系。

生成 SBOM 的命令:

# 从镜像生成 CycloneDX 格式 SBOM
trivy image --format cyclonedx --output sbom.cdx.json alpine:3.19

# 从文件系统生成 SPDX 格式 SBOM
trivy fs --format spdx-json --output sbom.spdx.json ./app

生成的 SBOM 文件随后会被传递给 cosign 进行签名,确保部署的制品与物料清单一一对应,防止依赖混淆攻击。

3.6 镜像与文件系统扫描:全文件级审计

Trivy 的镜像扫描器能够逐层分析容器镜像,检测已安装的包、库文件以及配置文件中的安全问题。文件系统扫描则适用于本地目录、Git 仓库和 CI 工作区。

两种扫描模式的对比如下:

特性 镜像扫描 (trivy image) 文件系统扫描 (trivy fs)
扫描对象 容器镜像层 本地目录 / Git 仓库
依赖分析 支持 OS 包 + 语言库 支持语言库 + 配置文件
缓存机制 层缓存(加速重复扫描) 无层缓存
典型场景 CI/CD 镜像构建后 代码提交前 / 本地开发

3.7 核心能力协同架构

下图展示了 Trivy 五大核心能力在 Sigstore-Trivy 协同剧本中的调用关系与数据流向:

Trivy 核心能力协同架构图 Trivy 扫描引擎 漏洞扫描 IaC 扫描 密钥扫描 SBOM 生成 镜像与文件系统扫描 JSON / SARIF 报告 JSON / SARIF 报告 JSON / SARIF 报告 CycloneDX / SPDX JSON / SARIF 报告
架构要点: 五大能力共享同一个扫描引擎核心,但输出格式和策略评估入口不同。漏洞、IaC、密钥扫描的输出直接进入 OPA 策略引擎;SBOM 生成则先传递给 Sigstore 签名,再进入部署验证环节。

3.8 在 CI/CD 流水线中的集成示例

以下是一个 GitLab CI 作业片段,展示了如何在一个阶段内串联 Trivy 的多个核心能力:

trivy-scan:
  stage: security
  script:
    # 1. 生成 SBOM
    - trivy image --format cyclonedx --output sbom.cdx.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    # 2. 漏洞扫描(仅严重和高危)
    - trivy image --severity CRITICAL,HIGH --ignore-unfixed --format json --output vuln.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    # 3. IaC 扫描
    - trivy config --severity HIGH,CRITICAL --format json --output iac.json ./deploy/
    # 4. 密钥扫描
    - trivy fs --scanners secret --format json --output secret.json ./app/
  artifacts:
    paths:
      - sbom.cdx.json
      - vuln.json
      - iac.json
      - secret.json
    expire_in: 30 days

上述作业生成的四个 JSON 文件将作为后续策略评估(OPA)和签名(Cosign)的输入,构成完整的回滚护栏数据链路。