在容器化和云原生时代,安全扫描已成为 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 等工具相当,但启动更快。
落地清单:
- 更新 DB:
trivy image --download-db-only(离线环境预热)。 - 阈值:CRITICAL>0 即 fail CI,HIGH<5 通过。
- 监控: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:仅报告政策违规,不阻塞。- 配置路径:扫描
.tf、k8s.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/测试自定义。
清单:
- 内置检查:https://trivy.dev/docs/latest/scanner/misconfiguration/check/builtin/ 列出 1000+ 规则。
- CI 集成:GitHub Actions
aquasecurity/trivy-actionwithargs: [--scanners config]. - 回滚:引入新规则前,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。
清单:
- 忽略:
.trivyignore添加secret|AWS\|.*KEY\|allow。 - 阈值:任何 secret 即 fail。
- 集成: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。
清单:
- VEX 支持:
trivy sbom --vex vex.json应用豁免。 - Attestation:Cosign 签名 SBOM。
- 监控:组件数 >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)