Tri使用Trivy扫描Docker映像中的漏洞
在将应用程序发布到生产环境之前,您需要采取非常严格的安全措施和协议来帮助保护您的资产。
今天,我们将介绍Trivy。
Trivy是用于容器和其他工件的简单而全面的漏洞扫描程序。
它有助于检测操作系统软件包(Alpine,RHEL,CentOS等)中的漏洞以及应用程序依赖项(捆绑程序,Composer,npm,yarn等)。
在提交到容器注册或部署应用程序之前,您可以轻松地扫描本地容器映像和其他工件,从而使您确信应用程序一切正常。
Trivy的特点
- 发现复杂漏洞
- 简单性-仅指定图像名称或工件名称。
- 快速-第一次扫描将在10秒内完成(取决于您的网络)。 后续扫描将在几秒钟内完成
- DevSecOps-适用于Travis CI,CircleCI,Jenkins,GitLab CI等CI。
- 支持多种格式-包括:容器映像,本地文件系统,远程git存储库。
- 易于安装-无需安装数据库,库等先决条件即可安装apt-get,yum install和brew。
如何使用Trivy图像扫描仪
Trivy可以安装在许多Linux发行版以及macOS上。
我们将介绍在CentOS,Ubuntu,Debian,Arch和MacOS上安装Trivy。
在CentOS上安装Trivy
如果您想在CentOS上安装Trivy,则有两个选择。
您可以使用Trivy存储库或直接从RPM安装它。
要从存储库安装,请添加以下存储库,然后继续进行Trivy安装。
echo -e "n[trivy]nname=Trivy repositorynbaseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$releasever/$basearch/ngpgcheck=0nenabled=1" | sudo tee -a /etc/yum.repos.d/kubernetes.repo
添加Trivy存储库后,更新服务器并按如下所示安装trivy软件包:
sudo yum -y update
sudo yum -y install trivy
要从RPM安装trivy,您需要获取最新版本的Trivy,然后运行以下命令:
$ rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.12.0/trivy_0.12.0_Linux-64bit.rpm
在Debian上安装Trivy 的Ubuntu
与在CentOS上安装Trivy相似,您还可以使用两个选项将其安装到Debian | Linux。 Ubuntu的。
您可以使用Trivy存储库或直接从DEB源安装它。
要从存储库安装,请添加以下存储库,然后继续安装Trivy。
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/trivy.list
添加Trivy存储库后,更新服务器并按如下所示安装trivy软件包:
sudo apt-get update
sudo apt-get install trivy
另外,如果您是deb源代码的粉丝,则可以使用Trivy的DEB源代码安装Trivy。 要以这种方式安装Trivy,您将需要获取最新版本的Trivy,然后运行以下命令:
sudo apt-get install rpm
wget <deb-package-url>
sudo apt install ./<deb-package>.deb
在Arch Linux上安装Trivy 万家郎
好了,对于所有专用的Arch风扇,您可以使用pikaur或yay AUR在计算机上轻松安装Trivy,如下所示。
pikaur -Sy trivy-bin
或者,您可以像这样使用yay AUR助手:
yay -Sy trivy-bin
在macOS上安装Trivy
您可以通过运行以下命令通过Homebrew在MacOS上安装此出色的工具:
brew install aquasecurity/trivy/trivy
Trivy在行动-如何使用Trivy
安装了Trivy之后,我们就可以立即开始使用。
Trivy涵盖了许多用例,我们将在本指南中涵盖其中一些用例。
文件系统扫描
Trivy可以扫描文件系统(例如,主机,虚拟机映像或解压缩后的容器映像的文件系统)。
在扫描过程中,它将基于锁定文件(例如Gemfile.lock和package-lock.json)查找漏洞。
语法如下所示:
$ trivy fs /home/vagrant
2020-11-09T10:35:41.656Z WARN OS is not detected and vulnerabilities in OS packages are not detected.
2020-11-09T10:35:41.656Z INFO Detecting ruby vulnerabilities...
2020-11-09T10:35:41.656Z INFO Detecting nodejs vulnerabilities...
octant/site/Gemfile.lock
========================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
octant/web/package-lock.json
============================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
扫描您的Git存储库
幸运的是,您可以使用此简单但功能强大的工具扫描远程git存储库。
但是,应注意,此处仅支持公共存储库。
使用回购切换器扫描您的Git存储库,如下所示:
$ trivy repo https://github.com/aquasecurity/trivy
2020-11-09T07:13:25.265Z INFO Need to update DB
2020-11-09T07:13:25.265Z INFO Downloading DB...
19.13 MiB / 19.13 MiB [-----------------------------------------------------------] 100.00% 512.75 KiB p/s 38sEnumerating objects: 2338, done.
Counting objects: 100% (2338/2338), done.
Compressing objects: 100% (1260/1260), done.
Total 2338 (delta 1229), reused 1943 (delta 933), pack-reused 0
2020-11-09T07:40:29.758Z WARN OS is not detected and vulnerabilities in OS packages are not detected.
扫描影像
在将应用程序开发并构建为映像(Docker左右)后,您将有机会发现可能错过的任何安全问题。
只需提供图像名称和标签以及简单的命令,如下所示。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c39a868aad02 3 days ago 133MB
$ trivy image nginx
您应该在终端输出中看到一份详尽的详细报告。
将Trivy插入Dockerfile
该工具的另一个很酷的功能是您可以将其包含在Dockerfile中,并且它将在构建映像时扫描所有内容。
我们将使用Nginx图像在此处进行演示,如下所示:
$ vim Dockerfile
FROM alpine:3.7
RUN apk add curl
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin
&& trivy filesystem --exit-code 1 --no-progress /
然后使用类似于以下所示的输出构建图像:
$ docker build -t scanned-image .
Sending build context to Docker daemon 8.704 kB
Step 1/2 : FROM alpine:3.7
Trying to pull repository docker.io/library/alpine ...
3.7: Pulling from docker.io/library/alpine
5d20c808ce19: Pull complete
Digest: sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10
Status: Downloaded newer image for docker.io/alpine:3.7
---> 6d1ef012b567
Step 2/2 : RUN apk add curl && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s
-- -b /usr/local/bin && trivy filesystem --exit-code 1 --no-progress /
---> Running in 445558539f6f
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20190108-r0)
(2/4) Installing libssh2 (1.9.0-r1)
(3/4) Installing libcurl (7.61.1-r3)
(4/4) Installing curl (7.61.1-r3)
Executing busybox-1.27.2-r11.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 6 MiB in 17 packages
aquasecurity/trivy info checking GitHub for latest tag
aquasecurity/trivy info found version: 0.12.0 for v0.12.0/Linux/64bit
aquasecurity/trivy info installed /usr/local/bin/trivy
2020-11-09T10:13:02.597Z INFO Need to update DB
2020-11-09T10:13:02.597Z INFO Downloading DB...
2020-11-09T10:13:27.545Z INFO Detecting Alpine vulnerabilities...
2020-11-09T10:13:27.547Z WARN This OS version is no longer supported by the distribution: alpine 3.7.3
2020-11-09T10:13:27.547Z WARN The vulnerability detection may be insufficient because security updates are not provided
445558539f6f (alpine 3.7.3)
===========================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
+------------+------------------+----------+-------------------+---------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+------------+------------------+----------+-------------------+---------------+--------------------------------+
| musl | CVE-2019-14697 | CRITICAL | 1.1.18-r3 | 1.1.18-r4 | musl libc through 1.1.23 |
| | | | | | has an x87 floating-point |
| | | | | | stack adjustment imbalance, |
| | | | | | related... |
+------------+ + + + + +
| musl-utils | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
+------------+------------------+----------+-------------------+-----
按严重性过滤漏洞
如果您有特殊需要,并且希望对生成的报告进行过滤,以便可以看到HIGH,CRITICAL和其他字段,那么Trivy会立即为您提供帮助。
只需运行类似于以下命令:
$ trivy image --severity HIGH,CRITICAL nginx:latest
使用锁定文件扫描项目
如果您有一个Python项目,则很有可能会有一个锁定文件。
因此,您可以像这样用trivy扫描这样的项目:
$ trivy fs ~/src/github.com/aquasecurity/trivy-ci-test
扫描容器内部的容器
要在甜茶中添加更多糖,值得一提的是Trivy可以从该容器中扫描正在运行的容器。
这是可以实现的方式,请注意,您不需要在主机上安装Trivy。
$ docker run --rm -it nginx
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin
&& trivy fs /
使用Harbor扫描
我们之前看过这个工具:
☸️使用Helm在Kubernetes / OpenShift中安装Harbor-Image Registry
🐳如何使用Harbor扫描Docker映像中的漏洞
Trivy是Clair的内置扫描仪。
您可以直接通过浏览器进行扫描: