Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。
1. apt-get install
2. yum install
3. brew install无需安装数据库、库等先决条件(例外情况是需要安装rpm以扫描基于RHEL/CentOS的图像)。
$ sudo vim /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://knqyf263.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
gpgcheck=0
enabled=1
$ sudo yum -y update
$ sudo yum -y install trivy$ brew install knqyf263/trivy/trivy当然,trivy也支持docker快速启动
docker run --rm -v [YOUR_CACHE_DIR]:/root/.cache/ knqyf263/trivy [YOUR_IMAGE_NAME]
需要将YOUR_CACHE_DIR替换成你的缓存目录,将之前缓存的漏洞库映射到容器中,不然启动会很慢
如果想通过这种方式扫描本机的容器镜像,需要将docker.sock文件映射到容器内,比如
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/.cache/:/root/.cache/ knqyf263/trivy python:3.4-alpine
trivy使用简单示例如下:
扫描镜像:
trivy [image_name]
扫描通过save方式打包的镜像:
trivy --input [image_name.tar]
将扫描结果存为json文件:
trivy -f json -o results.json [image_name]
通过设置漏洞级别过滤漏洞:
trivy --severity HIGH,CRITICAL [image_name]
通过设置漏洞类型过滤漏洞:
trivy --vuln-type os [image_name]
漏洞类型分为os和library
只更新某个系统类型的漏洞库:
trivy --only-update alpine,debia [image_name]
指定退出代码:
trivy --exit-code 1 [image_name]
指定退出代码,主要是为后续判断提供可操作性,主要是在CI中
由于trivy有缓存,所以在扫描镜像的latest版本的时候,会出现异常,需要清楚缓存操作:
trivy --clear-cache [image_name]
如果需要重建本地漏洞数据库,或清除所有缓存,可以通过trivy --resetTrivy有对CI友好的特点,并且官方也以这种方式使用它,想要集成CI只需要一段简单的Yml配置文件即可,如果发现漏洞,测试将失败。如果不希望测试失败,请指定--exit code 0。由于在自动化场景(如CI/CD)中,您只对最终结果感兴趣,而不是对完整的报告感兴趣,因此请使用--light标志对此场景进行优化,以获得快速的结果。
集成GitLab CI的Yml配置可以参考:
trivy不仅可以集成在CI过程中,及时发现镜像漏洞,而且可以于自建harbor进行集成,定时对已经上传的镜像进行扫描。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。