最新消息:

Docker镜像漏洞扫描工具Trivy

IT技术 ipcpu 1060浏览 0评论

toc

一、概要

Trivy是一个简单易用并且全面的容器漏洞扫描程序。
Trivy可检测操作系统软件包(Alpine,RHEL,CentOS等)和应用程序依赖项(Bundler,Composer,npm,yarn等)的漏洞。
Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。

二、Trivy的安装

从官方网站下载RPM包安装,或者直接拉取docker镜像安装
https://github.com/aquasecurity/trivy

三、Trivy的使用命令

直接扫描镜像

trivy elasticsearch:7.10

输出如下

按严重性级别筛选漏洞

trivy --severity HIGH,CRITICAL ruby:2.3.0

按漏洞类型筛选漏洞

trivy --vuln-type os ruby:2.3.0

忽略指定的漏洞(使用.trivyignore文件)

$ cat .trivyignore
CVE-2018-14618
CVE-2019-1543

结果输出为json文件

trivy -f json -o results.json golang:1.12-alpine

指定缓存目录

trivy --cache-dir /tmp/trivy/ python:3.4-alpine3.9

清除镜像缓存
删除镜像缓存。如果更新具有相同tag的图像(例如使用最新tag时),此选项非常有用。

trivy --clear-cache

删除所有缓存和数据库

trivy --reset

使用轻量级数据库

trivy --light alpine:3.10

轻量级数据库不包含诸如描述和引用之类的漏洞详细信息。因此,数据库的大小更小,下载速度更快。
当您不需要漏洞详细信息时,此选项非常有用,并且适用于CI/CD。

四、C/S模式

上面我们展示的是单机模式的情况,如果一些客户端例如,CICD runner等可以以C/S模式运行。这样就不需要去下载漏洞数据库了。

服务器端Server需要使用如下命令开启,并指定端口和TOKEN

/usr/local/bin/trivy server --listen 0.0.0.0:8080 --token ipcpuchines

客户端Client在调用时指定服务器地址和TOKEN就可以了

trivy client --remote http://aq.ipcpu.com:8080 --token ipcpuchines  alpine:3.10

五、数据库更新问题

Trivy启动以后会去github加载漏洞库数据,并且每个一段时间(6小时)会自动更新。但是很多时候我们连不上github。
会出现下面的报错:

2021-12-14T13:57:17.606+0800    FATAL DB error: failed to download vulnerability DB: failed to download vulnerability DB: failed to list releases: Get "https://api.github.com/repos/aquasecurity/trivy-db/releases": dial tcp 192.30.255.117:443: connect: connection timed out

下面有两个办法给大家:
第一个是使用离线模式
从下面的地址下载离线数据包,解压以后放置到缓存目录中(默认是"/root/.cache/trivy")
https://github.com/aquasecurity/trivy-db/releases/
启动Trivy扫描时还要加上--skip-update 参数。
这个后期还是有些复杂,过段时间--skip-update也不行了,需要手动更新下离线数据包。
第二个就是直接给Trivy设置代理
例如我的systemd文件就是这样设置的

[Service]
Type=simple
Environment="HTTP_PROXY=http://172.28.9.46:10802/"
Environment="HTTPS_PROXY=http://172.28.9.46:10802/"
Environment="NO_PROXY=localhost,127.0.0.1,.ipcpu.com"
ExecStart=/usr/local/bin/trivy server --listen 0.0.0.0:8080 --token ipcpuchines

六、错误返回码和Gitlab CICD集成

默认情况下,即使检测到漏洞,Trivy 也会以代码 0 退出。如果要使用非零退出代码退出,需要使用 --exit code 选项。此选项对 CI/CD 很有用。我们以GitlabCICD为例,仅当发现关键漏洞时,测试才会失败。

# Fail on severe vulnerabilities
    - ./trivy client --remote http://10.140.100.35:8080 --token ipcpuchines --exit-code 1 --no-progress --severity CRITICAL  $IMAGE

转载请注明:IPCPU-网络之路 » Docker镜像漏洞扫描工具Trivy

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址