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 イメージのセキュリティ状況を理解し、修復が必要な領域を特定することができます。