Trivy Security Scanner

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 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 ls  2>/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=:

代理评估的可达性因素:

  1. 直接依赖 vs 传递依赖 — 传递依赖通常不可达
  2. 运行时依赖 vs 构建/测试依赖 — 开发依赖不会进入生产环境
  3. 是否调用漏洞函数 — 具体的漏洞函数是否被实际导入并使用
  4. 网络暴露面 — 漏洞组件是否接收来自不可信来源的输入
  5. 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'

输出内容

该代理将生成以下成果:

  1. 执行摘要 — 总发现数、可修复与不可修复项数量、预估修复工作量
  2. 优先级排序的发现表格 — 按可利用性(EPSS + KEV + 可达性)而非仅 CVSS 排序
  3. 修复计划 — 具体的版本升级、基础镜像变更及 Dockerfile 修改建议,并附带工作量估算
  4. 已接受风险 — .trivyignore.yaml 条目,含无需修复的发现项的合理说明
  5. 合规性映射 — 将发现项关联至相关框架的具体控制点
  6. 趋势对比 — 若存在历史扫描结果,则展示新增项与已解决项的对比
  7. CI/CD 集成配置 — 即开即用的持续扫描流水线配置

为何采用 EPSS 而非仅依赖 CVSS

CVSS 衡量的是理论严重性,而 EPSS 衡量的是实际被利用的概率。一个 CVSS 9.8 但 EPSS 仅为 0.001 的漏洞,其紧急程度远低于一个 CVSS 7.5 但 EPSS 达 0.85(已在野外被主动利用)的漏洞。本能力综合使用以下指标:

  • CVSS — 用于理解漏洞被利用后的潜在影响
  • EPSS — 用于评估漏洞被实际利用的可能性
  • KEV — 用于确认该漏洞是否已在现实中被利用
  • 可达性 — 用于确认该漏洞在您的具体部署环境中是否真正可触发

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习