Hotdry.
ai-security

Trivy 统一扫描器:漏洞、误配置、密钥与 SBOM 检测实践

Trivy 是 Go 实现的开源安全扫描工具,支持多目标统一检测漏洞、误配置、敏感密钥及 SBOM 生成/分析,提供 CLI 参数、忽略规则与 CI/CD 集成要点。

在容器化和云原生时代,安全扫描已成为 DevSecOps 管道的核心环节。Trivy 作为 Aqua Security 开源的 Go 语言工具,提供统一接口扫描漏洞(vuln)、误配置(misconfig)、敏感密钥(secrets)及软件物料清单(SBOM),覆盖容器镜像、文件系统、Git 仓库、Kubernetes 集群等多目标,避免多工具切换的复杂性。其单二进制部署、无需额外数据库安装(自动下载 vuln DB),扫描速度快、资源占用低,特别适合 CI/CD 集成。

漏洞检测模块:精准 CVE 匹配与风险分级

Trivy 的漏洞扫描基于 NVD、GitHub Advisory 等权威源,覆盖 OS 包(如 Debian、Alpine、RHEL)和语言依赖(Java、Python、Node.js 等 10+ 生态)。核心观点:优先过滤高危漏洞,避免低危噪音。

实用参数:

  • --scanners vuln:仅扫描漏洞。
  • --severity HIGH,CRITICAL:仅报告高危 / 严重级,忽略 LOW/MEDIUM。
  • --ignore-unfixed:跳过无补丁漏洞,聚焦可修复项。
  • --vuln-type os,library:区分 OS 包和应用库漏洞。

示例命令:

trivy image --severity HIGH,CRITICAL --ignore-unfixed alpine:3.18

输出表格显示 Pkg、Installed、Fixed、Severity 等列,便于快速 triage。证据显示,对于 python:3.9-slim,Trivy 可捕获 pip 依赖 CVE 如 CVE-2023-XXXX,与 Grype 等工具相当,但启动更快。

落地清单:

  1. 更新 DB:trivy image --download-db-only(离线环境预热)。
  2. 阈值:CRITICAL>0 即 fail CI,HIGH<5 通过。
  3. 监控:JSON 输出 --format json --output vuln.json,解析 count.critical >0 告警。

误配置扫描:IaC 与配置文件的 Rego 规则引擎

误配置常导致 70% 云安全事件,Trivy 使用 Rego(OPA 语言)内置数百检查规则,支持 Kubernetes YAML、Terraform、Dockerfile、Helm Chart、CloudFormation 等 IaC,以及 AWS/GCP/Azure 配置。

观点:自定义规则 + 内置政策,实现合规自动化。

参数:

  • --scanners config:启用误配置扫描。
  • --policy-report-only:仅报告政策违规,不阻塞。
  • 配置路径:扫描 .tfk8s.yaml 等自动识别。

示例:

trivy config --format sarif --output misconfig.sarif infra/

检测如 Kubernetes PodSecurity 未限制 privileged,Terraform S3 bucket public。

参数调优:

  • .trivyignore 文件:config|AVD-AWS-0021|deny 忽略特定规则。
  • --skip-dirs "tests/":排除测试目录。 风险:规则误报率~10%,用 --config contrib/policy/builtin/ 测试自定义。

清单:

  1. 内置检查:https://trivy.dev/docs/latest/scanner/misconfiguration/check/builtin/ 列出 1000+ 规则。
  2. CI 集成:GitHub Actions aquasecurity/trivy-action with args: [--scanners config].
  3. 回滚:引入新规则前,dry-run 验证零误报。

密钥泄露检测:模式匹配与熵分析

Secrets 扫描内置 400+ 模式(AWS Key、Private Key、API Token),结合高熵检测硬编码凭证,支持 Git 历史扫描。

观点:全扫描 + 白名单,零信任密钥管理。

参数:

  • --scanners secret:启用密钥扫描。
  • --secret-config:自定义 YAML 规则集。
  • --detection-priority high:优先高置信匹配。

示例:

trivy fs --scanners secret --format json . | jq '.Results[].Misconfigurations'

报告如 GitHub Token 在 .env。

清单:

  1. 忽略:.trivyignore 添加 secret|AWS\|.*KEY\|allow
  2. 阈值:任何 secret 即 fail。
  3. 集成:pre-commit hook trivy fs --scanners secret --exit-code 1 --no-progress .

SBOM 生成与分析:Syft 兼容 CycloneDX/SPDX

Trivy 原生生成 / 解析 SBOM,支持 CycloneDX 1.4/1.5、SPDX 2.3,集成 Syft 引擎,列出组件、PURL、依赖图。

观点:SBOM + vuln 扫描闭环,符合 SLSA/Executive Order。

命令:

trivy sbom generate --format cyclonedx-json alpine:3.18 > bom.json
trivy sbom --scanners vuln bom.json

参数:

  • --sbom-options components,relationships:控制输出。
  • --generate-sbom:边扫描边生 SBOM。

清单:

  1. VEX 支持:trivy sbom --vex vex.json 应用豁免。
  2. Attestation:Cosign 签名 SBOM。
  3. 监控:组件数 >1000 告警,未知 license 审查。

工程化集成与监控要点

统一 CLI:trivy fs --scanners vuln,config,secret,sbom . 一键全扫。

CI/CD 示例(GitHub Actions):

- uses: aquasecurity/trivy-action@master
  with:
    scan-type: 'fs'
    scanners: 'vuln,config,secret'
    severity: 'CRITICAL,HIGH'
    exit-code: '1'

性能:缓存 --cache-dir /tmp/trivy,DB 自更新。

风险限:大 repo 扫描 <5min,误报用 ignore-file 降至 <5%。无网络时 --offline-scan

资料来源:Trivy GitHub README 介绍其多扫描器架构 [1],官方文档详述覆盖范围 [2]。

[1] https://github.com/aquasecurity/trivy
[2] https://trivy.dev/docs/latest/coverage/

(字数:1256)

查看归档