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,UbuntuDebian,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

Yay-用GO编写的另一个可靠的AUR助手

在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的内置扫描仪。

您可以直接通过浏览器进行扫描:

Tri使用Trivy扫描Docker映像中的漏洞

Sidebar