Trivy 镜像容器安全扫描工具详解

介绍

Trivy 是 Aqua Security 开发的一款开源安全扫描工具,是目前最流行的开源安全扫描器之一,支持漏洞扫描、IaC 扫描、SBOM 发现、云扫描和 Kubernetes 安全。

🔗 官网:

https://trivy.dev/

📦 下载:

https://github.com/aquasecurity/trivy/releases

📖 文档:

https://trivy.dev/docs/latest/

主要特性

  • 开源免费:全功能开源,代码完全透明
  • 多类型扫描:支持容器镜像、文件系统、Kubernetes、IaC 等
  • 简单易用:单一二进制文件,无需复杂配置
  • 全面检测:漏洞、敏感信息、配置错误、许可证等
  • 多平台支持:Linux、macOS、Windows、Docker、Kubernetes

支持的扫描类型

扫描目标

目标类型 说明
image 容器镜像(Docker、Podman、containerd)
fs 文件系统
rootfs 根文件系统
k8s Kubernetes 集群
cloud 云环境(AWS)
repo Git 仓库

扫描器类型

扫描器 说明
vuln 漏洞扫描(默认启用)
misconfig 配置错误扫描
secret 敏感信息扫描(默认启用)
license 许可证扫描(需单独启用)

支持的容器镜像

镜像源 支持情况
Docker Engine ✅ 本地镜像
containerd ✅ 本地镜像
Podman ✅ 本地镜像
Container Registry ✅ 远程镜像
Tar 文件 ✅ 导入的镜像

支持检测的内容

漏洞扫描

-操作系统软件包漏洞(CVE)

-语言级依赖漏洞

-已知漏洞数据库自动更新

配置错误扫描

  • Dockerfile 配置
  • Kubernetes YAML 配置
  • Terraform 配置
  • CloudFormation 配置

敏感信息检测

  • API 密钥
  • 密码/口令
  • 证书
  • GitHub Token
  • 环境变量中的敏感信息

许可证扫描

  • 软件许可证识别
  • 许可证合规性检查

安装

Docker(推荐)

docker run aquasec/trivy:latest image python:3.4-alpine

Homebrew(macOS/Linux)

brew install trivy

二进制安装(Linux/macOS)

# 下载

wget https://github.com/aquasecurity/trivy/releases/download/v0.69.3/trivy_0.69.3_Linux-64bit.tar.gz

# 解压

tar -xzf trivy_0.69.3_Linux-64bit.tar.gz

# 安装

chmod +x trivy

sudo mv trivy /usr/local/bin/

Windows

  1. 下载 trivy_x.xx.x_windows-64bit.zip
  1. 解压并添加到 PATH

GitHub Release

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin v0.69.3

基本使用

命令格式

trivy <target> [--scanners <scanner1,scanner2>] <subject>

查看帮助

trivy --help

查看版本

trivy version

容器镜像扫描

扫描镜像(默认)

# 扫描本地镜像

trivy image python:3.4-alpine

# 扫描远程镜像

trivy image nginx:latest

# 扫描特定镜像

trivy image myregistry.com/myapp:v1.0

指定扫描器

# 只扫描漏洞

trivy image --scanners vuln python:3.4-alpine

# 只扫描配置错误

trivy image --scanners misconfig python:3.4-alpine

# 只扫描敏感信息

trivy image --scanners secret python:3.4-alpine

# 扫描镜像配置(Dockerfile分析)

trivy image --image-config-scanners misconfig python:3.4-alpine

扫描 Tar 文件

# 导出镜像为 tar

docker save python:3.4-alpine -o python.tar

# 扫描 tar 文件

trivy image --input python.tar

输出格式

# JSON 输出

trivy image -f json python:3.4-alpine

# SARIF 输出(用于 CI/CD)

trivy image -f sarif python:3.4-alpine

# 输出到文件

trivy image -o results.json python:3.4-alpine

文件系统扫描

扫描目录

# 扫描当前目录

trivy fs .

# 扫描特定路径

trivy fs /path/to/project

# 指定扫描器

trivy fs --scanners vuln,secret,misconfig /path/to/project

扫描代码仓库

# 扫描 Git 仓库

trivy repo https://github.com/example/project

# 本地仓库

trivy repo ./myproject

Kubernetes 扫描

扫描集群

# 扫描整个集群

trivy k8s --report summary cluster

# 扫描特定命名空间

trivy k8s --namespace default --report summary cluster

# 扫描 K8s 配置

trivy k8s --scanners misconfig kubeconfig ~/.kube/config

使用场景

场景1:CI/CD 集成

# 在构建流水线中加入扫描

docker build -t myapp:latest .

trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest

# 如果发现高危漏洞则构建失败

if [ $? -eq 1 ]; then

echo "发现高危漏洞,构建终止"

exit 1

fi

场景2:Kubernetes 安全扫描

# 扫描运行中的 K8s 集群

trivy k8s --cluster

# 生成集群安全报告

trivy k8s --cluster --report summary

场景3:注册表扫描

# 扫描 Harbor/Artifactory 等私有仓库

trivy image myregistry.com/prod/backend:v2.0

# 批量扫描

trivy image --input images.tar

场景4:代码仓库扫描

# 扫描 Git 仓库中的漏洞和敏感信息

trivy repo https://github.com/example/project --scanners vuln,secret

场景5:IaC 安全扫描

# 扫描 Terraform 配置

trivy config --scanners misconfig ./terraform/

# 扫描 Kubernetes YAML

Agent: main | Model: MiniMax-M2.7 | Provider: minimax

main

trivy fs --scanners misconfig ./k8s/


输出示例

漏洞扫描结果

python:3.4-alpine3.9 (alpine 3.9.2)

Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0)

+---------+------------------+----------+-------------------+---------------+--------------------------------+

| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |

+---------+------------------+----------+-------------------+---------------+--------------------------------+

| openssl | CVE-2019-1543 | MEDIUM | 1.1.1a-r1 | 1.1.1b-r1 | openssl: ChaCha20-Poly1305... |

+---------+------------------+----------+-------------------+---------------+--------------------------------+

Dockerfile 配置扫描

alpine:3.17 (dockerfile)

Tests: 24 (SUCCESSES: 21, FAILURES: 3)

HIGH: Specify at least 1 USER command in Dockerfile with non-root user

LOW: Consider using 'COPY' instead of 'ADD'

LOW: Add HEALTHCHECK instruction


集成生态

Trivy 可与多种平台集成:

| 集成方式 | 说明 |

|---------|------|

| GitHub Actions | `trivy-action` |

| GitLab CI | 内置集成 |

| Kubernetes | `trivy-operator` |

| VS Code | `trivy-vscode-extension` |

| IDE | 支持多种 IDE 插件 |

GitHub Actions 示例

```yaml

name: Security Scan

on: [push, pull_request]

jobs:

trivy-scan:

runs-on: ubuntu-latest

steps:

  • uses: actions/checkout@v3

  • name: Run Trivy vulnerability scanner

uses: aquasecurity/trivy-action@master

with:

image-ref: '.'

format: 'sarif'

output: 'trivy-results.sarif'

常用命令速查

命令 说明
trivy image <镜像> 扫描容器镜像
trivy fs <路径> 扫描文件系统
trivy k8s cluster 扫描 K8s 集群
trivy repo <仓库> 扫描 Git 仓库
trivy config <路径> 扫描 IaC 配置
trivy --version 查看版本
trivy --help 查看帮助

注意事项

⚠️ 建议在 CI/CD 流水线中设置策略,发现 HIGH/CRITICAL 漏洞时中断构建

扫描建议

  1. 生产环境镜像必须扫描:上线前完成安全检查

  2. 定期扫描:作为日常安全巡检的一部分

  3. 配置策略:根据业务需求设置漏洞等级阈值

  4. 集成到流水线:实现自动化安全检测

总结

Trivy 是一款功能全面的开源安全扫描工具:

  • ✅ 零配置:下载即可使用
  • ✅ 多类型扫描:漏洞、配置、敏感信息、许可证
  • ✅ 多平台支持:容器、Kubernetes、云、IaC
  • ✅ 易于集成:CI/CD、IDE、K8s
  • ✅ 开源免费:社区活跃,文档完善

适用于:容器安全、合规检测、CI/CD 集成、Kubernetes 安全、云安全审计等场景。