Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操做系统中存在的故障、缺陷或弱点。Trivy检测操做系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就能够扫描了。扫描只需指定容器的镜像名称。与其余镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优点。java
推荐在CI中使用它,在推送到container registry以前,您能够轻松地扫描本地容器镜像,Trivy具有以下的特征:python
易于安装,安装方式:mysql
无需安装数据库、库等先决条件(例外状况是须要安装rpm以扫描基于RHEL/CentOS的图像)。git
这里安装Trivy的环境是Centos7,安装的版本是0.4.4,安装的命令以下:github
rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.4.4/trivy_0.4.4_Linux-64bit.rpmsql
安装结果以下图所示即安装成功:docker
下面介绍一些Trivy的简单使用的命令和一些测试的结果。主要从几个方面来测试Trivy的性能指标:数据库
命令:trivy registry.cn-hangzhou.aliyuncs.com/choerodon-tools/javabase:0.5.0npm
结果:json
时间:第一次扫描会DownLoad DB,大概花十分钟之内(14M,看网速),国外的主机10s之内,第二次扫描十秒钟之内完成。
trivy registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql:5.7.17
结果:
时间:10秒左右。
结果:
时间:20s左右
结论:本地扫描镜像的大小对扫描速度影响不大,线上扫描与本地扫描的方式对扫描的速度影响大不。
扫描镜像大小:316M左右
结论:接收到的网络流量等于线上镜像的大小,镜像被下载放在服务器磁盘的某处(目前本服务器未装docker)。
注:再次全量扫描相同的镜像,接收流量和磁盘使用占比均再也不增长。
扫描镜像,openjdk:15-ea-jdk-buster
大小:316M左右
时间:10s左右
返回结果:标准的josn格式的文件
其余更多使用命令以下,结果可自行测试:
$ trivy --severity HIGH,CRITICAL ruby:2.3.0
$ trivy --vuln-type os ruby:2.3.0
$ trivy --skip-update python:3.4-alpine3.9
$ trivy --download-db-only
$ trivy --download-db-only --only-update alpine
$ trivy --ignore-unfixed ruby:2.3.0
$ trivy --exit-code 1 python:3.4-alpine3.9
$ trivy --exit-code 0 --severity MEDIUM,HIGH ruby:2.3.0
$ trivy --exit-code 1 --severity CRITICAL ruby:2.3.0
$ cat .trivyignore
CVE-2018-14618
CVE-2019-1543
$ trivy python:3.4-alpine3.9
$ trivy --cache-dir /tmp/trivy/ python:3.4-alpine3.9
$ trivy --clear-cachez
$ trivy --reset
$ trivy --light alpine:3.10
轻量级数据库不包含诸如描述和引用之类的漏洞详细信息。所以,数据库的大小更小,下载速度更快。
当您不须要漏洞详细信息时,此选项很是有用,而且适用于CI/CD。
要查找其余信息,能够在NVD网站上搜索漏洞详细信息。(https://nvd.nist.gov/vuln/search网站)
不推荐使用的选项:
--only-update,--refresh而且--auto-refresh被废弃了,由于他们如今是没必要要的。这些选项将在下一版本中删除。
Trivy有对CI友好的特色,而且官方也以这种方式使用它,想要集成CI只须要一段简单的Yml配置文件便可,若是发现漏洞,测试将失败。若是不但愿测试失败,请指定--exit code 0。因为在自动化场景(如CI/CD)中,您只对最终结果感兴趣,而不是对完整的报告感兴趣,所以请使用--light标志对此场景进行优化,以得到快速的结果。
集成GitLab CI的Yml配置能够参考:
https://github.com/aquasecurity/trivy#gitlab-ci
参考资料: https://github.com/aquasecurity/trivy本篇文章出自Choerodon猪齿鱼社区汪翔。