使用 Trivy 对容器、文件系统及 IaC 进行漏洞扫描,随后基于 AI驱动的可利用性、可达性及业务影响对结果进行分类。
Trivy Security Scanner. 运行 Trivy扫描器对容器图像,文件系统,Git寄存器,以及基础设施-as-Code进行扫描——然后应用智能的
功能概述
Trivy Security Scanner. 运行 Trivy扫描器对容器图像,文件系统,Git寄存器,以及基础设施-as-Code进行扫描——然后应用智能的是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
Trivy 安全扫描器
对容器镜像、文件系统、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或本地镜像 - 文件系统路径 — 扫描项目依赖项与源代码
- Git 仓库 URL — 扫描远程仓库
- Kubernetes 集群 — 扫描正在运行的工作负载
- SBOM 文件 — 扫描已有的 CycloneDX 或 SPDX 格式 SBOM
可选参数:
- 严重性阈值 — 报告的最低严重等级(
CRITICAL、HIGH、MEDIUM、LOW) - 合规框架 — 将发现项映射至特定标准(SOC2、PCI-DSS、HIPAA、CIS)
- 忽略文件 — 指定
.trivyignore路径以声明已接受的风险 - 仅显示可修复项 — 仅报告存在可用修复方案的漏洞
调用示例:
扫描我们的生产镜像
registry.example.com/api:v2.3.1,并提供一份优先级排序后的修复计划。
对该项目的文件系统执行扫描,并指出哪些漏洞在实际运行中真正可达。
扫描我们 Kubernetes 集群中的所有容器镜像,并生成一份面向 SOC2 的合规报告。
工作原理
步骤 1:执行扫描
运行对应类型的 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 执行扫描。
步骤 2:原始结果解析
解析 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
}'
步骤 3:可利用性增强分析
为每个 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 |
步骤 4:可达性分析
判断存在漏洞的代码是否在应用中实际可达:
# 检查漏洞包是直接依赖还是传递依赖 # 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= :
代理评估的可达性因素:
- 直接依赖 vs 传递依赖 — 传递依赖通常不可达
- 运行时依赖 vs 构建/测试依赖 — 开发依赖不会进入生产环境
- 是否调用漏洞函数 — 具体的漏洞函数是否被实际导入并使用
- 网络暴露面 — 漏洞组件是否接收来自不可信来源的输入
- OS 包 vs 应用包 — 在 distroless 镜像中的 OS 包通常未被使用
步骤 5:修复计划制定
针对每个可操作的发现项,生成具体修复建议:
依赖升级:
# 显示所需的确切版本升级
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"]
步骤 6:合规性映射
将发现项映射至合规框架控制点:
SOC2 映射:
- CC6.1(逻辑访问控制)—— 容器以 root 用户运行、缺少 RBAC
- CC6.8(漏洞管理)—— 存在未修复的关键 CVE
- CC7.1(系统监控)—— CI/CD 中未集成安全扫描
- CC8.1(变更管理)—— 镜像使用
:latest标签
PCI-DSS 映射:
- Req 6.3 — 软件组件中存在已知漏洞
- Req 6.5 — 安全编码实践(IaC 配置错误)
- Req 11.2 — 漏洞扫描要求
步骤 7:.trivyignore 管理
为已接受的风险生成或更新 .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: "仅为开发依赖 — 不会包含在生产镜像中。上游暂无修复方案。"
步骤 8:CI/CD 集成建议
根据项目所用 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'
输出内容
该代理将生成以下成果:
- 执行摘要 — 总发现数、可修复与不可修复项数量、预估修复工作量
- 优先级排序的发现表格 — 按可利用性(EPSS + KEV + 可达性)而非仅 CVSS 排序
- 修复计划 — 具体的版本升级、基础镜像变更及 Dockerfile 修改建议,并附带工作量估算
- 已接受风险 —
.trivyignore.yaml条目,含无需修复的发现项的合理说明 - 合规性映射 — 将发现项关联至相关框架的具体控制点
- 趋势对比 — 若存在历史扫描结果,则展示新增项与已解决项的对比
- CI/CD 集成配置 — 即开即用的持续扫描流水线配置
为何采用 EPSS 而非仅依赖 CVSS
CVSS 衡量的是理论严重性,而 EPSS 衡量的是实际被利用的概率。一个 CVSS 9.8 但 EPSS 仅为 0.001 的漏洞,其紧急程度远低于一个 CVSS 7.5 但 EPSS 达 0.85(已在野外被主动利用)的漏洞。本能力综合使用以下指标:
- CVSS — 用于理解漏洞被利用后的潜在影响
- EPSS — 用于评估漏洞被实际利用的可能性
- KEV — 用于确认该漏洞是否已在现实中被利用
- 可达性 — 用于确认该漏洞在您的具体部署环境中是否真正可触发
热门AI工具
相关专题
本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。
0
2026.11.12
本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。
0
2026.11.12
本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。
0
2026.11.12
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习
最新文章