Trivy是由aquasecurity
开发的一个简单的漏洞扫描器,用于扫描容器和其他工件。它主要用于静态分析。适合与流水线的CI阶段集成。Aquasecurity
以构建针对容器和管道安全的安全工具而广为人知。Trivy在也可以在github中使用。
如上所述,它是一个漏洞扫描器,主要用于检测容器级别的漏洞和依赖关系。在它的核心,它主要是一个 CVE
扫描器,可用于查找丢失的补丁以及已经存在和公开披露的漏洞。它可以用作独立的二进制文件来扫描容器,也可以与 CI
集成(更常见的用途)。
github链接中给出了有关如何安装的明确说明。
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s — -b /usr/local/bin
使用Trivy
扫描独立镜像非常简单。扫描镜像的语法如下:
trivy image <image name>
请记住,扫描镜像只是 Trivy
的一项功能。您还可以扫描 repos、containers、project
等。为简单起见,在本博客中演示该工具,扫描镜像就足够了。我们选择了一个图像 'knqyf263/vuln-image:1.2.3'
, 这是一个特意构建的易受攻击的镜像,用于演示目的。下面是扫描结果的截图。
当然,这个截图并没有完全显示所有的漏洞。但这本质上是我们可以扫描本地构建的工件的方式。我们甚至可以将输出保存到我们选择的格式的文件中。例如,如果我们想将它以 json
格式存储在名为 trivy.json
的文件中,我们的命令将是这样的:
trivy image -f json -o trivy.json <image>
-f
参数负责显示格式,-o
参数为要保存的文件命名。更多此类选项可以在官方 github
页面中轻松探索。
我们将使用 gitlab pipeline
来演示。首先,请在 gitlab
中创建一个存储库。创建存储库后,我们将使用以下代码创建一个 .gitlab-ci.yml
文件:
stages:
- test
trivy:
stage: test
image: docker:stable-git
before_script:
- docker build -t trivy-ci-test .
- wget https://github.com/aquasecurity/trivy/releases/download/v0.1.6/trivy_0.1.6_Linux-64bit.tar.gz
- tar zxvf trivy_0.1.6_Linux-64bit.tar.gz
variables:
DOCKER_DRIVER: overlay2
allow_failure: true
services:
- docker:stable-dind
script:
- ./trivy --exit-code 0 --severity HIGH --no-progress --auto-refresh trivy-ci-test
- ./trivy — exit-code 1 — severity CRITICAL — no-progress — auto-refresh trivy-ci-test
代码非常简单易懂。在这里,我们尝试构建镜像,然后扫描它以查找漏洞。当且仅当发现任何关键漏洞时,buld 才会失败。请注意,出于演示目的,我们没有指定任何输出文件,因为我们将导航到管道并查看漏洞的输出。Dockerfile 的代码如下所示:
FROM composer:1.7.2
RUN git clone https://github.com/aquasecurity/trivy-ci-test.git && cd trivy-ci-test && rm Cargo.lock && rm Pipfile.lock
CMD apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]
再一次,我们只是试图重新创建一个由 Trivy
的制造商自己制作的公开可用的项目,用于测试目的。提交这些文件后,等待一段时间,然后转到 CI/CD —->Jobs
并查看 gitlab-terminal
。我们观察到构建失败。让我们调查一下它失败的原因:
滚动浏览命令,我们可以看到繁琐的扫描命令已经运行并且它也显示了漏洞。对于高漏洞:
对于严重漏洞:
但是对于构建失败的确切原因可能仍然有些模糊?为此,让我们在我们编写的 yml
文件中分析这两个命令:
- ./trivy — exit-code 0 — severity HIGH — no-progress — auto-refresh trivy-ci-test
- ./trivy — exit-code 1 — severity CRITICAL — no-progress — auto-refresh trivy-ci-test
很容易猜出这些命令使做什么的。第一个命令扫描高严重性漏洞,如果发现,它将以 exit -code 0
退出测试。第二个命令扫描严重性漏洞,如果发现,它将以退出代码 1
退出测试。
根据 Trivy 文档,如果测试以除 0
以外的任何退出代码结束,则构建将失败。由于 trivy 在映像中发现了严重漏洞,因此构建失败:(
还有 gitlab 终端:
测试通过的构建:我们修改了 .gitlab-ci.yml
文件并删除了第二个 trivy command
。所以基本上我们唯一的命令是:
./trivy — exit-code 0 — severity HIGH — no-progress — auto-refresh trivy-ci-test
提交后,我们等待片刻。一旦工作完成,我们可以看到我们的构建已经通过:) job:
和 gitlab 终端:
在这里,我们看到了通过构建和失败构建之间的区别。
Trivy
是一个非常简单且文档惊人的开源漏洞扫描工具。在这里,我们尝试使用 gitlab
管道实现一个非常基本的实用程序和该工具的示例。对于该工具的整个工作原理和用例,最好阅读 github
文档。请在下面的 url
中找到示例 repo https://gitlab.com/ironspideytrip/trivy-test/
原文链接:https://arnavtripathy98.medium.com/integrating-trivy-with-gitlab-656995a87270 >>>
DevOps云学堂,专注于企业级DevOps运维开发技术实践分享.