使用 Trivy 对容器、文件系统及 IaC 进行漏洞扫描,随后基于 AI驱动的可利用性、可达性及业务影响对结果进行分类。
Trivy Security Scanner. 运行 Trivy扫描器对容器图像,文件系统,Git寄存器,以及基础设施-as-Code进行扫描——然后应用智能的是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
对容器镜像、文件系统、Git 仓库及基础设施即代码(IaC)执行 Trivy 扫描,再通过智能分类(triage)过滤漏洞噪声。本能力不向团队直接抛出 500 个 CVE,而是依据可利用性(EPSS)、可达性分析、修复可用性及业务上下文,对发现项进行优先级排序,最终生成可落地的修复计划。
适用场景包括:“扫描该镜像是否存在漏洞”、“执行一次安全扫描”、“对 CVE 进行分类处理”、“检查我们依赖项中的漏洞”、“容器安全审计”,或在准备合规性审查时使用。
# 确保已安装 Trivy trivy version # 版本需 ≥ 0.50 # 若尚未安装: # Debian/Ubuntu 系统 sudo apt-get install -y wget apt-transport-https gnupg lsb-release wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/trivy.list sudo apt-get update && sudo apt-get install trivy # macOS 系统 brew install trivy # 更新漏洞数据库 trivy image --download-db-only
提供一个或多个扫描目标:
nginx:1.25、ghcr.io/org/app:latest 或本地镜像可选参数:
CRITICAL、HIGH、MEDIUM、LOW).trivyignore 路径以声明已接受的风险调用示例:
扫描我们的生产镜像
registry.example.com/api:v2.3.1,并提供一份优先级排序后的修复计划。
对该项目的文件系统执行扫描,并指出哪些漏洞在实际运行中真正可达。
扫描我们 Kubernetes 集群中的所有容器镜像,并生成一份面向 SOC2 的合规报告。
运行对应类型的 Trivy 扫描,并以 JSON 格式输出,便于结构化分析:
容器镜像扫描:
trivy image --format json --output /tmp/trivy-image.json --severity CRITICAL,HIGH,MEDIUM --vuln-type os,library --scanners vuln,secret,misconfig --list-all-pkgs registry.example.com/api:v2.3.1
文件系统扫描(项目依赖项):
trivy fs --format json --output /tmp/trivy-fs.json --severity CRITICAL,HIGH,MEDIUM --scanners vuln,secret,misconfig,license --list-all-pkgs /path/to/project
IaC 扫描(Terraform、CloudFormation、Kubernetes 清单、Dockerfile):
trivy config --format json --output /tmp/trivy-iac.json --severity CRITICAL,HIGH,MEDIUM /path/to/terraform
Kubernetes 集群扫描: trivy k8s --format json --report all --severity CRITICAL,HIGH cluster
SBOM 生成与扫描: 使用 trivy image --format cyclonedx 生成 SBOM,再用 trivy sbom --format json 执行扫描。
解析 Trivy 的 JSON 输出,提取结构化的漏洞数据:
# 提取漏洞摘要
cat /tmp/trivy-image.json | jq '{
target: .Results[].Target,
total_vulns: [.Results[].Vulnerabilities // [] | length] | add,
by_severity: [.Results[].Vulnerabilities // [] | .[]] | group_by(.Severity) |
map({severity: .[0].Severity, count: length}),
fixable: [.Results[].Vulnerabilities // [] | .[] | select(.FixedVersion)] | length,
unfixable: [.Results[].Vulnerabilities // [] | .[] | select(.FixedVersion == null)] | length
}'
为每个 CVE 补充可利用性数据,从而区分真实威胁与理论风险:
EPSS(Exploit Prediction Scoring System):
# 获取已发现 CVE 的 EPSS 分数
CVES=$(cat /tmp/trivy-image.json | jq -r '[.Results[].Vulnerabilities[]?.VulnerabilityID] | unique | join(",")')
curl -s "https://api.first.org/data/v1/epss?cve=$CVES" | jq '[.data[] | {
cve: .cve,
epss: .epss,
percentile: .percentile
}] | sort_by(-.epss)'
KEV(CISA Known Exploited Vulnerabilities):
# 对照 CISA KEV 目录校验 curl -s https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json | jq --argjson cves "$(cat /tmp/trivy-image.json | jq '[.Results[].Vulnerabilities[]?.VulnerabilityID] | unique')" '[.vulnerabilities[] | select(.cveID as $id | $cves | index($id))]'
分类策略(Triage classification):
| 类别 | 判定依据 | 响应动作 |
|---|---|---|
| 关键 — 已在野外被利用 | 列入 CISA KEV 或 EPSS > 0.5 | 24 小时内修复 |
| 高危 — 极可能被利用 | EPSS > 0.1 且网络可达 | 1 周内修复 |
| 中危 — 有可用修复 | 存在 FixedVersion 且 EPSS < 0.1 | 下一迭代周期内修复 |
| 低危 — 无修复方案 / 风险极低 | 无可修复版本、EPSS 极低、仅为开发依赖 | 接受风险或持续监控 |
| 噪声 — 误报 | 不可达、仅为测试依赖 | 加入 .trivyignore |
判断存在漏洞的代码是否在应用中实际可达:
# 检查漏洞包是直接依赖还是传递依赖 # Node.js 项目: npm ls2>/dev/null # 检查是否为 devDependency(不会进入生产环境) jq '.devDependencies[" "]' package.json # Python 项目: pip show | grep -i "required-by" # 检查是否仅出现在 requirements-dev.txt 中 grep -l " " requirements*.txt # Go 项目: go mod why go mod graph | grep # Java 项目: mvn dependency:tree -Dincludes= :
代理评估的可达性因素:
针对每个可操作的发现项,生成具体修复建议:
依赖升级:
# 显示所需的确切版本升级
cat /tmp/trivy-image.json | jq '[.Results[].Vulnerabilities // [] | .[] |
select(.FixedVersion) | {
package: .PkgName,
installed: .InstalledVersion,
fixed: .FixedVersion,
cve: .VulnerabilityID,
severity: .Severity
}] | unique_by(.package) | sort_by(.Severity)'
基础镜像升级:
# 检查更新的基础镜像是否能修复 OS 层 CVE trivy image --format json --severity CRITICAL,HIGH alpine:3.20 | jq '[.Results[].Vulnerabilities // []] | add | length'
Dockerfile 加固(基于 IaC 扫描结果):
# 改造前(不安全):
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
COPY . /app
CMD ["./app"]
# 改造后(加固):
FROM ubuntu:24.04 AS builder
RUN apt-get update && apt-get install -y --no-install-recommends curl
&& rm -rf /var/lib/apt/lists/*
COPY . /app
RUN ./build.sh
FROM gcr.io/distroless/base-debian12:nonroot
COPY --from=builder /app/binary /app/binary
USER 65532:65532
ENTRYPOINT ["/app/binary"]
将发现项映射至合规框架控制点:
SOC2 映射:
:latest 标签PCI-DSS 映射:
为已接受的风险生成或更新 .trivyignore 文件:
# 格式:CVE-ID + 过期时间 + 合理说明
# .trivyignore.yaml(推荐格式)
vulnerabilities:
- id: CVE-2024-1234
paths:
- "usr/lib/libfoo.so"
expired_at: "2026-06-30"
statement: "不可达 — 库已加载但漏洞函数未被调用。经 @security-team 于 2026-04-30 审核确认。"
- id: CVE-2024-5678
paths:
- "node_modules/dev-only-package"
expired_at: "2026-07-31"
statement: "仅为开发依赖 — 不会包含在生产镜像中。上游暂无修复方案。"
根据项目所用 CI 系统,推荐管道集成方式:
GitHub Actions:
- name: Trivy 漏洞扫描
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ env.IMAGE }}
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
exit-code: '1' # 发现问题时使构建失败
ignore-unfixed: true
trivyignores: '.trivyignore.yaml'
- name: 上传 Trivy SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'
该代理将生成以下成果:
.trivyignore.yaml 条目,含无需修复的发现项的合理说明CVSS 衡量的是理论严重性,而 EPSS 衡量的是实际被利用的概率。一个 CVSS 9.8 但 EPSS 仅为 0.001 的漏洞,其紧急程度远低于一个 CVSS 7.5 但 EPSS 达 0.85(已在野外被主动利用)的漏洞。本能力综合使用以下指标:
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章