コンテナイメージの脆弱性スキャンツールTrivyを使ってみる 〜とりあえず試す編〜
Docker Bench for Securityに引き続き、コンテナイメージの脆弱性スキャンツールTrivyを使ってみます。
Docker Bench for Securityについてのエントリーはこちら takapi86.hatenablog.com
Trivyとは何か
Docker Bench for Securityがコンテナイメージの作成方法や動作環境が基準に沿ったセキュアな環境かどうか診断するのに対し、Trivyはイメージに含まれる具体的な脆弱性情報を検知してくれるツールです。
対象はyum/rpm, apt/apt-get/dpkg, apkやGemfile.lockやcomposer.lockなど、アプリケーションのライブラリの依存関係から脆弱性情報を検知できます。
https://github.com/aquasecurity/trivy#os-packages https://github.com/aquasecurity/trivy#application-dependencies
また、リポジトリのAboutにもある通り、
A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI
と、CIに組み込みやすい特徴があるようです。
公式リポジトリ
https://github.com/aquasecurity/trivy
今回はお試しということで、CIには組み込まず、コマンドで実行し脆弱性情報を確認するところまでやっていきます。
インストールする
様々なパッケージ管理システムを使ってインストールできるようです。 https://github.com/aquasecurity/trivy#installation
実行する
- 直接コマンドで実行する場合
trivy image [your_image]
- コンテナイメージを使う場合
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v [YOUR_CACHE_DIR]:/root/.cache/ aquasec/trivy [YOUR_IMAGE_NAME]
試す
2年ほど放置していて稼働していないPrivateリポジトリにあるRailsアプリケーションのイメージで試してみます。
trivy image rails_app
このようにたんまり脆弱性情報が出てしまいました 🥺
usr/src/app/Gemfile.lock ======================== Total: 22 (UNKNOWN: 0, LOW: 0, MEDIUM: 11, HIGH: 9, CRITICAL: 2) +----------------------+------------------+----------+-------------------+--------------------------------+--------------------------------+ | LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE | +----------------------+------------------+----------+-------------------+--------------------------------+--------------------------------+ | XXXXXXXXXX | XXXXXXXXXX | HIGH | XXXXX | XXXXXXXXXX | XXXXXXXXXX | | | | | | | XXXXXXXXXX | + +------------------+----------+ + +--------------------------------+ | | XXXXXXXXXX | MEDIUM | | | XXXXXXXXXX | | | | | | | XXXXXXXXXX | | | | | | | XXXXXXXXXX | +----------------------+------------------+ + +--------------------------------+--------------------------------+ (この下にもばーっと脆弱性情報が出ています)
GitHub Actionsに組み込んで試す
続いて、CIで検知できるようGitHub Actionsに組み込んでみようと思います。 こちらはCI導入編ということで別エントリーであげようと思います。
今回はここまで