🌊

Trivyを活用したコンテナの効果的な脆弱性チェック方法

2024/10/10に公開

こんにちは。dotDのエンジニアの遠藤です。

dotDでは、クラウドネイティブな開発環境を採用しており、その中でDockerコンテナは不可欠な存在となっています。セキュリティの脅威は高まっていっています。特に、脆弱性を放置することは、システム全体のセキュリティリスクを引き上げてしまうため、コンテナの脆弱性チェックは非常に重要となります。

今回は、脆弱性スキャンツール Trivy を使ってDockerイメージのセキュリティを確保する方法について紹介します。

1.Trivyとは?

Trivy は、Aqua Security社が提供するオープンソースの脆弱性スキャナです。コンテナイメージ、ファイルシステム、Kubernetes、リポジトリなどに潜む脆弱性を迅速かつ簡単に検出することができます。
https://trivy.dev/

Trivyの特徴としては、以下が挙げられます:

  • 多彩なスキャン対象: Dockerイメージやファイルシステム、Kubernetesクラスタ、IaC(Infrastructure as Code)などに対応
  • 高精度な脆弱性検出: 詳細な脆弱性データベース(NVDやRed Hat、Ubuntuなど)を活用し、精度の高いスキャンを実現
  • 簡単なセットアップ: 初期設定が非常に簡単で、短時間でスキャンを実行可能

2.Trivyのインストール

Trivyはコマンドラインから直接インストールするか、Dockerイメージとして利用できます。

コマンドラインからインストール

macOSの場合

brew install trivy

Windowsの場合

curl -LO https://github.com/aquasecurity/trivy/releases/download/v0.56.1/trivy_0.56.1_windows-64bit.zip
unzip trivy_0.56.1_windows-64bit.zip

Dockerイメージを使用した場合

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image <イメージ名>

3.Dockerイメージの脆弱性スキャンの方法

Trivyのインストールが完了したら、実際にDockerイメージをスキャンしてみましょう。Trivyコマンドは、インストール方法に関係なく同様に機能します。

trivy image <イメージ名>

スキャン例

たとえば、公式のNginxイメージをスキャンするには、以下のように実行します。

trivy image nginx:latest

また、Dockerイメージを利用してNginxイメージをスキャンする場合は、以下のように実行します。

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image nginx:latest

このコマンドでは、TrivyのDockerコンテナを一時的に起動し、指定されたDockerイメージをスキャンします。オプションの -v /var/run/docker.sock:/var/run/docker.sock は、ホスト上のDockerデーモンとコンテナを共有するための設定です。

スキャン結果例

スキャン結果は、以下のように脆弱性の詳細が表示されます。

Total: 10 (CRITICAL: 2, HIGH: 4, MEDIUM: 3, LOW: 1)
+---------+------------------+----------+-------------------+---------------+-----------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE                 |
+---------+------------------+----------+-------------------+---------------+-----------------------+
| libc6   | CVE-2021-33574    | CRITICAL | 2.31-0ubuntu9.9   | 2.31-0ubuntu9.10 | GNU C Library: buffer overflow |
|         | CVE-2021-40528    | HIGH     | 2.31-0ubuntu9.9   | 2.31-0ubuntu9.10 | glibc: assertion failure       |
+---------+------------------+----------+-------------------+---------------+-----------------------+

このレポートでは、脆弱性のID(VULNERABILITY ID)や深刻度(SEVERITY)、脆弱性が含まれているパッケージのバージョン、修正されたバージョンが表示されます。これに基づいて、イメージや依存パッケージを更新することが可能です。
Trivyは、脆弱性を以下の4段階に分類して表示します。CRITICALやHIGHがスキャン結果に表示された場合は速やかに対応が必要となります。

深刻度 説明
CRITICAL 即座に対処すべき致命的なリスク
HIGH 速やかに対応が必要な重大なリスク
MEDIUM 注意が必要なリスク
LOW 軽微なリスク

4.まとめ

Dockerコンテナを活用する上で、セキュリティ管理は欠かせません。Trivyを利用することで簡単にかつ確実に脆弱性を発見・対応することが可能となります。ローカルにインストールするか、Dockerイメージを使うかは用途に応じて選択できます。
このTrivyをdotDでは導入しており、ローカルでビルドをする際にTrivyの実行も合わせて実行されるようにしています。スキャン結果を開発者が日々目にすることでセキュリティの意識もそれぞれ高まるのではないかと思っています。

安全なコンテナ運用を目指し、継続的な脆弱性チェックを習慣化することが大切です。
ぜひ導入を検討してみてください。

さいごに

dotDでは一緒にサービスを作ってくれる仲間を大募集中です!
dotDに興味を持たれたエンジニアの方がいらっしゃいましたお気軽にご連絡ください。
https://herp.careers/v1/dotd/rlSJy5XbeWLa

dotDTechBlog

Discussion