推荐一款适用CI的容器漏洞扫描工具
trivy是一个简单而全面的容器漏洞扫描程序。它能够检测操作系统软件包(Alpine,RHEL,CentOS等)的漏洞
和应用程序依赖项(Bundler,Composer,npm,yarn等),通过检测容器中的以下文件并扫描依赖项中的漏洞
Gemfile.lock
Pipfile.lock
poetry.lock
composer.lock
package-lock.json
yarn.lock
Cargo.lock
Trivy很容易使用。只需安装二进制文件即可进行扫描。需要执行的扫描操作是指定容器的镜像名称
先来直观的感受一下它的强大
安装
trivy安装非常简单,方便,在Centos中可通过yum包管理工具,或rpm包安装,同样支持源码编译安装
yum安装,需要在yum存储库中添加trivy.repo,内容如下:
然后通过yum makecache生成缓存
通过yum install trivy进行安装
rpm安装,通过如下命令进行安装:
rpm -ivh https://github.com/knqyf263/trivy/releases/download/v0.0.15/trivy_0.0.15_Linux-64bit.rpm
二进制安装即编译安装,需要依赖go编译环境
$ mkdir -p $GOPATH/src/github.com/knqyf263$ cd $GOPATH/src/github.com/knqyf263
$ git clone https://github.com/knqyf263/trivy
$ cd trivy/cmd/trivy/
$ export GO111MODULE=on
$ go install
使用
trivy首次使用需要等待很长时间,它会从github上更新所有的漏洞库
完成后,会在用户家目录的.cache/trivy下生成缓存文件
当然,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
trivy的另一个牛逼特性是对持续集成(CI)的支持,即在docker的持续集成环境中,可以在启动服务前,对镜像进行扫描,并通过漏洞级别指定退出代码
trivy的ci配置如下:
$ cat .travis.yml
services:
- docker
env:
global:
- COMMIT=${TRAVIS_COMMIT::8}
before_install:
- docker build -t trivy-ci-test:${COMMIT} .
- export VERSION=$(curl --silent "https://api.github.com/repos/knqyf263/trivy/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
- wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz
- tar zxvf trivy_${VERSION}_Linux-64bit.tar.gz
script:
- ./trivy --exit-code 0 --severity HIGH --quiet --auto-refresh trivy-ci-test:${COMMIT}
- ./trivy --exit-code 1 --severity CRITICAL --quiet --auto-refresh trivy-ci-test:${COMMIT}
cache:
directories:
- $HOME/.cache/trivy
trivy除了支持公有镜像仓库,同时也支持私有镜像仓库,只需要在ENV中指定TRIVY_AUTH_URL, TRIVY_USERNAME 和 TRIVY_PASSWORD
比如:
export TRIVY_AUTH_URL=https://registry.hub.docker.com
export TRIVY_USERNAME={DOCKERHUB_USERNAME}
export TRIVY_PASSWORD={DOCKERHUB_PASSWORD}
持续更新,欢迎扫码关注,敬请期待!
原文链接:https://github.com/knqyf263/trivy
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。