介绍
Trivy 是 Aqua Security 开发的一款开源安全扫描工具,是目前最流行的开源安全扫描器之一,支持漏洞扫描、IaC 扫描、SBOM 发现、云扫描和 Kubernetes 安全。
🔗 官网:
📦 下载:
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
- 下载 trivy_x.xx.x_windows-64bit.zip
- 解压并添加到 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 漏洞时中断构建
扫描建议
-
生产环境镜像必须扫描:上线前完成安全检查
-
定期扫描:作为日常安全巡检的一部分
-
配置策略:根据业务需求设置漏洞等级阈值
-
集成到流水线:实现自动化安全检测
总结
Trivy 是一款功能全面的开源安全扫描工具:
- ✅ 零配置:下载即可使用
- ✅ 多类型扫描:漏洞、配置、敏感信息、许可证
- ✅ 多平台支持:容器、Kubernetes、云、IaC
- ✅ 易于集成:CI/CD、IDE、K8s
- ✅ 开源免费:社区活跃,文档完善
适用于:容器安全、合规检测、CI/CD 集成、Kubernetes 安全、云安全审计等场景。