Trivy 镜像容器安全扫描工具详解
Trivy 是 Aqua Security 开发的一款开源安全扫描工具,是目前最流行的开源安全扫描器之一,支持漏洞扫描、IaC 扫描、SBOM 发现、云扫描和 Kubernetes 安全。
介绍
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 安全、云安全审计等场景。
更多推荐
所有评论(0)