一 概述
1.1 Trivy简介
Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。
1.2 特性
- 检测面很全,能检测全面的漏洞,操作系统软件包(Alpine、Red Hat Universal Base Image、Red Hat Enterprise Linux、CentOS、Oracle Linux、Debian、Ubuntu、Amazon Linux、openSUSE Leap、SUSE Enterprise Linux、Photon OS 和Distrioless)、应用程序依赖项(Bundler、Composer、Pipenv、Poetry、npm、yarn和Cargo);
- 使用简单,仅仅只需要指定镜像名称;
- 扫描快且无状态,第一次扫描将在10秒内完成(取决于您的网络)。随后的扫描将在一秒钟内完成。与其他扫描器在第一次运行时需要很长时间(大约10分钟)来获取漏洞信息,并鼓励您维护持久的漏洞数据库不同,Trivy是无状态的,不需要维护或准备;
- 易于安装,安装方式:
1. apt-get install
2. yum install
3. brew install
无需安装数据库、库等先决条件(例外情况是需要安装rpm以扫描基于RHEL/CentOS的图像)。
二 安装部署
2.1 Linux安装
$ 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
2.2 Mac OS安装
$ brew install knqyf263/trivy/trivy
2.3 使用方式
当然,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 --reset
三 集成到CI
Trivy有对CI友好的特点,并且官方也以这种方式使用它,想要集成CI只需要一段简单的Yml配置文件即可,如果发现漏洞,测试将失败。如果不希望测试失败,请指定--exit code 0。由于在自动化场景(如CI/CD)中,您只对最终结果感兴趣,而不是对完整的报告感兴趣,因此请使用--light标志对此场景进行优化,以获得快速的结果。
集成GitLab CI的Yml配置可以参考:
https://github.com/aquasecurity/trivy#gitlab-ci
四 注意事项
- 国内拉取漏洞数据库慢。
- 同一台服务器,多个镜像扫描的时候不可并行执行。
- 可以使用--light使用轻量级数据库来优化执行扫描的效率。
五 反思
trivy不仅可以集成在CI过程中,及时发现镜像漏洞,而且可以于自建harbor进行集成,定时对已经上传的镜像进行扫描。