GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Trivyを使用してDockerコンテナイメージの脆弱性をスキャンする方法

今日は、Dockerコンテナイメージをスキャンする方法を学びます。

はじめに

トリビートライ triのように発音されます gger、 vy en vyのように発音されます )は、コンテナイメージ、ファイルシステム、Gitリポジトリの脆弱性、および構成の問題に対するシンプルで包括的なスキャナーです。 Trivyは、OSパッケージ(Alpine、RHEL、CentOSなど)および言語固有のパッケージ(Bundler、Composer、npm、yarnなど)の脆弱性を検出します。

さらに、Trivyは、Terraform、Dockerfile、KubernetesなどのInfrastructure as Code(IaC)ファイルをスキャンして、デプロイメントを攻撃のリスクにさらす可能性のある構成の問題を検出します。 Trivyは使いやすいです。バイナリをインストールするだけで、スキャンする準備が整います。

機能

  • 包括的な脆弱性検出
    • OSパッケージ(Alpine Linux、Red Hat Universal Base Image、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、CBL-Mariner、Oracle Linux、Debian、Ubuntu、Amazon Linux、openSUSE Leap、SUSE Enterprise Linux、Photon OSおよびDistroless)
    • 言語固有のパッケージ (Bundler、Composer、Pipenv、Poetry、npm、yarn、Cargo、NuGet、Maven、Go)
  • 構成ミスの検出(IaCスキャン)
    • さまざまな組み込みポリシーがすぐに使用可能で提供されます
      • Kubernetes、Docker、Terraformなどが間もなく登場します
    • カスタムポリシーをサポートする
  • 高精度
  • 複数のターゲットをサポートする
    • コンテナイメージ、ローカルファイルシステム、リモートgitリポジトリ

インストール

CenTOSについて

  • そのリポジトリからCentOSにTrivyをインストールするので、trivyのリポジトリを追加してから、次のようにインストールします。
echo -e "\n[trivy]\nname=Trivy repository\nbaseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/\$releasever/\$basearch/\ngpgcheck=0\nenabled=1" | sudo tee -a /etc/yum.repos.d/kubernetes.repo

sudo yum -y install trivy
  • またはRPMソースからtrivyをインストールする場合は、最新のTrivyリリースを入手して実行する必要があります:
wget https://github.com/aquasecurity/trivy/releases/download/v0.23.0/trivy_0.23.0_Linux-64bit.rpm
sudo yum localinstall ./trivy_0.23.0_Linux-64bit.rpm

Ubuntuの場合

  • リポジトリから
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
sudo apt-get update
sudo apt-get install trivy
  • Debianソースから、CentOSで行ったように、最新のTrivyリリースも入手してから、以下のコマンドを実行する必要があります。
wget https://github.com/aquasecurity/trivy/releases/download/v0.23.0/trivy_0.23.0_Linux-64bit.deb
sudo apt install ./trivy_0.23.0_Linux-64bit.deb

ArchLinuxの場合|Manjaro

pikaur -Sy trivy-bin
OR
yay  -Sy trivy-bin

Trivyを使用する

ファイルシステムとgitリポジトリのスキャン

  • トリビー ファイルシステム(ホストマシン、仮想マシンイメージ、解凍されたコンテナイメージファイルシステムなど)をスキャンできます。
trivy fs /home/glassfish/
  • Gitリポジトリをtrivyでスキャンするには
trivy repo https://github.com/aquasecurity/trivy

コンテナイメージのスキャン

  • 画像を一覧表示する
docker images
  • トリビーでスキャンする
trivy image httpd

DockerfileでTrivyを適用

trivyを含めることができます Dockerfile イメージを構築するときにすべてをスキャンします。

例:

  • trivyを含むDockerfileを作成します
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 /
  • イメージを作成します。
[root@unixcop ~]# docker build -t scanned-image .
Sending build context to Docker daemon  244.6MB
Step 1/2 : FROM alpine:3.7
3.7: Pulling from library/alpine
5d20c808ce19: Pull complete 
Digest: sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10
Status: Downloaded newer image for 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 7f2b8771050d
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.23.0 for v0.23.0/Linux/64bit
aquasecurity/trivy info installed /usr/local/bin/trivy
2022-02-12T11:47:49.846Z	INFO	Need to update DB
2022-02-12T11:47:49.846Z	INFO	Downloading DB...
2022-02-12T11:48:24.761Z	INFO	Detected OS: alpine
2022-02-12T11:48:24.761Z	INFO	Detecting Alpine vulnerabilities...
2022-02-12T11:48:24.789Z	INFO	Number of language-specific files: 0
2022-02-12T11:48:24.789Z	WARN	This OS version is no longer supported by the distribution: alpine 3.7.3
2022-02-12T11:48:24.789Z	WARN	The vulnerability detection may be insufficient because security updates are not provided

7f2b8771050d (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...      |
|            |                  |          |                   |               | -->avd.aquasec.com/nvd/cve-2019-14697 |
+------------+                  +          +                   +               +                                       +
| musl-utils |                  |          |                   |               |                                       |
|            |                  |          |                   |               |                                       |
|            |                  |          |                   |               |                                       |
|            |                  |          |                   |               |                                       |
+------------+------------------+----------+-------------------+---------------+---------------------------------------+
The command '/bin/sh -c 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 /' returned a non-zero code: 1
[root@unixcop ~]#

上に示したように、trivyはビルド中にDockerfileに含まれるイメージの脆弱性をスキャンしました。

  • 次の方法で重大度で脆弱性をフィルタリングすることもできます:
trivy image --severity HIGH,CRITICAL httpd:latest

上に示したように、重大度と重大度が高い場合にのみ結果をフィルタリングしました。

  • コンテナの内側からコンテナをスキャンします
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 /

結論

以上です

このガイドでは、ファイルシステムとgitリポジトリに加えて、Trivyを使用してDockerコンテナイメージの脆弱性をスキャンする方法を説明しました。

ありがとう


Docker
  1. UbuntuにDockerでWordPressをインストールする方法

  2. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  3. テスト用の MySQL Docker コンテナを作成する方法

  1. Dockerを使用してJenkinsをインストールする方法

  2. Dockerイメージを他の人と共有する方法

  3. Dockerコンテナのタイムゾーンを変更する方法

  1. Dockerを使用してJenkinsコンテナをSystemdサービスとして実行する方法

  2. Dockerの学習:Dockerコンテナを作成する方法

  3. Minikube でローカル docker イメージを使用するには?