# 全面易用的镜像漏洞检测工具：Trivy

> 道路千万条，安全第一条；
> 镜像不规范，同事两行泪。

[Trivy](https://github.com/aquasecurity/trivy) 是一个面向镜像的漏洞检测工具，具备如下特点：

1. 开源
1. 免费
1. 易用
1. 准确度高
1. CI 友好

相对于老前辈 [Clair](https://github.com/coreos/clair)，Trivy 的使用非常直观方便，适用于更多的场景。

下面是官方出具的对比表格：

| 扫描器        | 操作系统 | 依赖检测 | 适用性 | 准确度 | CI 友好 |
| -------------- | :------------: | :-------------------------: | :---------: | :------: | :-------------------: |
| Trivy          |       ◯        |              ◯              |      ◯      |    ◎     |           ◯           |
| Clair          |       ◯        |              ×              |      △      |    ◯     |           △           |
| Anchore Engine |       ◯        |              △              |      △      |    ◯     |           △           |
| Quay           |       ◯        |              ×              |      ◯      |    ◯     |           ×           |
| MicroScanner   |       ◯        |              ×              |      ◯      |    △     |           ◯           |
| Docker Hub     |       ◯        |              ×              |      ◯      |    ×     |           ×           |
| GCR            |       ◯        |              ×              |      ◯      |    ◯     |           ×           |

> 另外还提供了精确度的对比表格，但是追究下来，无非是采用的参考数据的差异。至少这并不是我看重的东西，顺手是第一要务。

## 安装

### MacOS

    $ brew tap knqyf263/trivy
    $ brew install knqyf263/trivy/trivy

### 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

## 使用

这个工具的最大闪光点就是提供了很多适合用在自动化场景的用法。

### 扫描镜像：

    $ trivy centos

### 扫描镜像文件

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

### 根据严重程度进行过滤

    $ trivy --severity HIGH,CRITICAL ruby:2.3.0

### 忽略未修复问题

    $ trivy --ignore-unfixed ruby:2.3.0

### 忽略特定问题

使用 `.trivyignore`：

    $ cat .trivyignore
    # Accept the risk
    CVE-2018-14618

    # No impact in our settings
    CVE-2019-1543

    $ trivy python:3.4-alpine3.9

### 使用 JSON 输出结果

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

### 定义返回值

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

## 总结

相对于[其它同类工具](https://github.com/knqyf263/trivy#comparison-with-other-scanners)，Trivy 非常适合自动化操作，从 CircleCI 之类的公有服务，到企业内部使用的 Jenkins、Gitlab 等私有工具，或者作为开发运维人员的自测环节，都有 Trivy 的用武之地。

## 参考链接

`https://github.com/aquasecurity/trivy`
