分析 Docker 镜像中的漏洞
在这一步中,你将学习如何使用 Trivy 分析 Docker 镜像中的漏洞。Trivy 是一款全面且通用的安全扫描工具。它可以检测操作系统软件包(Alpine、RHEL、CentOS、Debian、Ubuntu 等)和应用程序依赖项(Bundler、Composer、npm、yarn 等)中的漏洞。此外,Trivy 支持多种扫描目标,如容器镜像、文件系统和 Git 仓库。
首先,让我们拉取一个存在漏洞的 Docker 镜像,用于后续分析。我们将使用 library/ubuntu:18.04
镜像,该镜像已知存在一些漏洞。
docker pull library/ubuntu:18.04
你应该会看到表明镜像正在被拉取和下载的输出信息。
18.04: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
现在我们已经有了这个镜像,接下来需要安装 Trivy。由于 LabEx 环境中并未预装 Trivy,我们将从官方 GitHub 仓库下载并安装它。
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
此命令会下载 Trivy 的 Debian 软件包。你应该会看到类似如下的输出:
--2023-10-27 08:00:00-- https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=... [following]
--2023-10-27 08:00:00-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50000000 (48M) [application/octet-stream]
Saving to: ‘trivy_0.50.1_Linux-64bit.deb’
trivy_0.50.1_Linux-64bit.deb 100%[=================================================>] 47.68M --.-MB/s in 0.5s
2023-10-27 08:00:01 (95.3 MB/s) - ‘trivy_0.50.1_Linux-64bit.deb’ saved [50000000/50000000]
现在,使用 dpkg
安装下载好的软件包。
sudo dpkg -i trivy_0.50.1_Linux-64bit.deb
你应该会看到表明安装过程的输出信息。
Selecting previously unselected package trivy.
(Reading database ... 100000 files and directories currently installed.)
Preparing to unpack trivy_0.50.1_Linux-64bit.deb ...
Unpacking trivy (0.50.1) ...
Setting up trivy (0.50.1) ...
Trivy 安装完成后,我们现在可以扫描 library/ubuntu:18.04
Docker 镜像中的漏洞了。
trivy image library/ubuntu:18.04
Trivy 将开始扫描镜像。这可能需要一些时间,因为它需要下载漏洞数据库并分析镜像层。你会看到显示进度的输出,随后是找到的漏洞的详细报告。
2023-10-27T08:00:05.000+0000 INFO Need to update DB
2023-10-27T08:00:05.000+0000 INFO Downloading DB...
...
2023-10-27T08:00:10.000+0000 INFO Detected OS: ubuntu
2023-10-27T08:00:10.000+0000 INFO Detecting Ubuntu vulnerabilities...
...
library/ubuntu:18.04 (ubuntu 18.04)
===================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)
┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│ Library/Package │ Vulnerability │ Severity │ Installed Version │ Fixed Version │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt │ CVE-YYYY-XXXX │ HIGH │ 1.6.12 │ 1.6.14 │
│ ... │ ... │ ... │ ... │ ... │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘
输出提供了找到的漏洞总数的摘要,并按严重程度(UNKNOWN、LOW、MEDIUM、HIGH、CRITICAL)进行了分类。然后,它会列出每个漏洞的详细信息,如受影响的软件包、漏洞 ID(如 CVE-YYYY-XXXX)、严重程度级别、软件包的安装版本以及可用的修复版本。这份报告有助于你了解 Docker 镜像的安全状况,并确定需要修复的区域。