3. Trivy 基础扫描:镜像扫描基础命令、扫描结果解读、常见漏洞类型(CVE、CWE)

Trivy 是一款轻量级、高准确率的开源安全扫描器,被广泛用于容器镜像、文件系统、Git 仓库和 Kubernetes 的漏洞与配置扫描。本章聚焦于 Trivy 最核心的使用场景——容器镜像扫描,涵盖基础命令、输出结果的结构化解读以及漏洞分类体系(CVE / CWE)。

3.1 镜像扫描基础命令

Trivy 的镜像扫描命令格式统一,核心参数包括指定镜像名称、输出格式、严重级别过滤等。以下为最常用的命令组合:

# 扫描本地已拉取的镜像(默认输出表格)
trivy image nginx:1.25

# 扫描远程镜像仓库中的镜像(自动拉取)
trivy image docker.io/library/alpine:3.19

# 指定输出格式为 JSON(便于程序解析)
trivy image --format json --output result.json nginx:1.25

# 仅显示指定严重级别及以上的漏洞(CRITICAL, HIGH)
trivy image --severity CRITICAL,HIGH nginx:1.25

# 跳过漏洞数据库更新(使用本地缓存)
trivy image --skip-db-update nginx:1.25

# 扫描并忽略已修复的漏洞(仅显示未修复项)
trivy image --ignore-unfixed nginx:1.25
提示:首次运行 Trivy 时会自动下载漏洞数据库(约 500MB),后续扫描使用本地缓存。建议在 CI/CD 流水线中定期执行 trivy image --download-db-only 以保持数据库最新。

3.2 扫描结果解读

Trivy 默认输出表格格式,包含以下关键字段。理解每个字段的含义是进行安全决策的基础。

字段 说明 示例值
Library 受影响的软件包名称及版本 openssl 3.0.8-r4
Vulnerability ID CVE 编号,唯一标识漏洞 CVE-2023-3817
Severity 严重级别:CRITICAL / HIGH / MEDIUM / LOW / UNKNOWN HIGH
Installed Version 镜像中当前安装的版本 3.0.8-r4
Fixed Version 修复该漏洞的版本(若为空则表示暂无修复) 3.0.8-r5
Title 漏洞的简短描述 openssl: denial of service via ...

以下为实际扫描输出的示例片段:

+-------------------+------------------+----------+-------------------+--------------+---------------------------------------+
|     LIBRARY       | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION |                TITLE                  |
+-------------------+------------------+----------+-------------------+--------------+---------------------------------------+
| openssl           | CVE-2023-3817    | HIGH     | 3.0.8-r4          | 3.0.8-r5      | openssl: denial of service via ...    |
| libcrypto3        | CVE-2023-4807    | MEDIUM   | 3.0.8-r4          | 3.0.8-r5      | openssl: POLY1305 MAC ...             |
| zlib              | CVE-2023-45871   | CRITICAL | 1.2.13-r1         | 1.2.13-r2     | zlib: integer overflow ...            |
+-------------------+------------------+----------+-------------------+--------------+---------------------------------------+
关键解读要点:
  • Fixed Version 为空时,表示该漏洞尚无官方补丁,需通过临时缓解措施(如限制网络访问、移除高危功能)降低风险。
  • Severity 基于 CVSS 评分,但 Trivy 会结合漏洞利用成熟度(EPSS)进行微调。
  • 同一 CVE 可能影响多个 Library(如 openssl 和 libcrypto3),需逐一确认修复版本。

3.3 常见漏洞类型:CVE 与 CWE

Trivy 扫描结果中主要涉及两类标识:CVE(Common Vulnerabilities and Exposures) 和 CWE(Common Weakness Enumeration)。两者在安全体系中扮演不同角色。

维度 CVE CWE
定义 具体漏洞实例的唯一编号 漏洞类型的分类编号
粒度 细粒度,对应一个具体的软件缺陷 粗粒度,对应一类缺陷模式
示例 CVE-2023-3817(openssl 拒绝服务) CWE-400(资源耗尽)
用途 追踪、修复、通报具体漏洞 分类、统计、培训、安全设计
Trivy 输出 直接显示在 Vulnerability ID 列 在 JSON 输出的 cwe_ids 字段中

在 Trivy 的 JSON 输出中,CWE 信息位于每个漏洞对象的 cwe_ids 数组中:

{
  "VulnerabilityID": "CVE-2023-3817",
  "PkgName": "openssl",
  "Severity": "HIGH",
  "CweIDs": ["CWE-400"],
  "Title": "openssl: denial of service via ..."
}
注意:并非所有 CVE 都关联了 CWE。Trivy 从 NVD 数据源获取 CWE 映射,部分历史漏洞或低质量数据可能缺失 CWE 信息。在安全审计报告中,建议同时标注 CVE 和 CWE 以提供完整上下文。

3.4 镜像扫描流程与数据流

下图展示了 Trivy 镜像扫描的完整数据流,从镜像层解析到漏洞匹配的全过程:

Trivy 镜像扫描数据流 输入镜像 层解析与提取 包清单生成 漏洞数据库 CVE 匹配引擎 结果输出 说明: 1. 镜像层解析:Trivy 逐层提取操作系统发行版和包管理器信息。 2. CVE 匹配:基于包名+版本号与漏洞数据库进行精确匹配。

3.5 常见 CWE 类型与对应缓解措施

在 Trivy 扫描结果中,以下 CWE 类型出现频率最高,了解它们有助于制定针对性的修复策略:

CWE 编号 类型名称 典型场景 缓解措施
CWE-400 资源耗尽 openssl 拒绝服务、zlib 内存耗尽 升级到修复版本;限制并发连接数
CWE-787 越界写入 libcurl 缓冲区溢出 升级到修复版本;启用地址空间布局随机化(ASLR)
CWE-79 跨站脚本(XSS) 前端依赖库中的反射型 XSS 升级前端库;实施内容安全策略(CSP)
CWE-20 输入验证不当 XML 解析器外部实体注入 禁用外部实体解析;升级解析库
CWE-200 信息泄露 日志中暴露敏感路径或版本号 配置日志脱敏;移除调试信息
实践建议:在 CI/CD 流水线中,建议将 Trivy 扫描结果中的 CWE 分布作为安全质量门禁的辅助指标。例如,若某次构建新增了 CWE-787(越界写入)类漏洞,应视为高风险并阻止合并,因为此类漏洞通常可被利用实现远程代码执行。

3.6 扫描结果优先级排序

面对大量漏洞时,建议按以下优先级顺序处理:

  1. CRITICAL 级别 + 有修复版本:立即升级,阻断最高风险。
  2. CRITICAL 级别 + 无修复版本:评估缓解措施(如网络隔离、功能禁用),并持续监控。
  3. HIGH 级别 + 有修复版本:纳入当前迭代修复计划。
  4. HIGH 级别 + 无修复版本:记录风险,定期复查。
  5. MEDIUM / LOW 级别:根据业务影响决定是否修复,或纳入定期维护窗口。
注意:切勿仅根据严重级别排序。部分 MEDIUM 级别的漏洞(如 CWE-200 信息泄露)在特定业务场景下可能造成严重合规风险。建议结合 CVSS 向量、EPSS 利用概率和业务上下文综合判断。