文档来源:

https://zhuanlan.zhihu.com/p/132509622

https://www.jianshu.com/p/a9556f9cf1c5

官方文档:

https://aquasecurity.github.io/

https://github.com/knqyf263/trivy

1、介绍

Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。 推荐在CI中使用它,在推送到container registry之前,您可以轻松地扫描本地容器镜像,Trivy具备如下的特征:
  1. 检测面很全,能检测全面的漏洞,操作系统软件包(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);
  2. 使用简单,仅仅只需要指定镜像名称;
  3. 扫描快且无状态,第一次扫描将在10秒内完成(取决于您的网络)。随后的扫描将在一秒钟内完成。与其他扫描器在第一次运行时需要很长时间(大约10分钟)来获取漏洞信息,并鼓励您维护持久的漏洞数据库不同,Trivy是无状态的,不需要维护或准备;
  4. 易于安装,安装方式:
  • apt-get install
  • yum install
  • brew install
无需安装数据库、库等先决条件(例外情况是需要安装rpm以扫描基于RHEL/CentOS的图像)。

总结:

Trivy 是一个面向镜像的漏洞检测工具,具备如下特点:

  1. 开源
  2. 免费
  3. 易用
  4. 准确度高
  5. CI 友好
相对于老前辈 Clair,Trivy 的使用非常直观方便,适用于更多的场景。

对比图:

镜像漏洞扫描工具-Trivy - 图1

2、Trivy的简单使用

下面介绍一些Trivy的简单使用的命令和一些测试的结果。主要从几个方面来测试Trivy的性能指标:
  • 镜像大小对Trivy扫描速度的影响;
  • 扫描的镜像大小和网络流量使用情况的关系;
  • 扫描的结果是否容易解析;
这个工具的最大闪光点就是提供了很多适合用在自动化场景的用法。

3、安装

RHEL/CentOS

  1. $ sudo vim /etc/yum.repos.d/trivy.repo
  2. [trivy]
  3. name=Trivy repository
  4. baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
  5. gpgcheck=0
  6. enabled=1
  7. $ sudo yum -y update
  8. $ sudo yum -y install trivy

4、使用

快速开始

https://aquasecurity.github.io/trivy/v0.19.2/getting-started/quickstart/

扫描镜像

  1. $ trivy centos

扫描镜像文件

  1. $ docker save ruby:2.3.0-alpine3.9 -o ruby-2.3.0.tar
  2. $ trivy --input ruby-2.3.0.tar

根据严重程度进行过滤

  1. $ trivy --severity HIGH,CRITICAL ruby:2.3.0

忽略未修复问题

  1. $ trivy --ignore-unfixed ruby:2.3.0

忽略特定问题

使用 .trivyignore
  1. $ cat .trivyignore
  2. # Accept the risk
  3. CVE-2018-14618
  4. # No impact in our settings
  5. CVE-2019-1543
  6. $ trivy python:3.4-alpine3.9

使用 JSON 输出结果

  1. $ trivy -f json dustise/translat-chatbot:20190428-5

定义返回值

  1. $ trivy --exit-code 0 --severity MEDIUM,HIGH ruby:2.3.0
  2. $ trivy --exit-code 1 --severity CRITICAL ruby:2.3.0

相对于其它同类工具,Trivy 非常适合自动化操作,从 CircleCI 之类的公有服务,到企业内部使用的 Jenkins、Gitlab 等私有工具,或者作为开发运维人员的自测环节,都有 Trivy 的用武之地。