コンテナ/Kubernetesの脆弱性、機密情報、設定間違いが分かるOSS「Trivy」徹底解説〜もうイメージスキャンだけとは言わせない:Cloud Nativeチートシート(17)
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、コンテナ/Kubernetesの脆弱性、機密情報、設定間違いを診断、検出するOSS「Trivy」を紹介する。
OSパッケージやライブラリ、アプリケーションで発見される脆弱(ぜいじゃく)性は日々増え続けていますが、皆さんのアプリケーション、システムは大丈夫でしょうか?
日々最新のバージョンに修正して脆弱性を対処していれば問題ありませんが、インターネット上に転がっているサンプルなどを参考して実装した場合、「記事で利用されている古いバージョンをそのまま使用して脆弱性が混入してしまっている」なんてことがあるかもしれません。
また、本連載でテーマにしているKubernetesでいえば、rootユーザーでコンテナを実行したり、rootファイルシステムを不必要に書き込み可能に設定したりして、「攻撃されやすいコンテナになってしまっている」なんてこともあり得ます。
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する本連載「Cloud Nativeチートシート」。今回は、そんなアプリケーションの脆弱性を手軽に検知してくれる「Trivy」を紹介します。
Trivyは、リリース当初はコンテナイメージの脆弱性スキャンツールというイメージが強かったのですが、パッケージやライブラリ以外の脆弱性もスキャンできるようになっているので、その辺りも含めて紹介します。
目次
Trivyとは
Trivyはパッケージやライブラリの脆弱性をスキャンできるオープンソースソフトウェア(OSS)の診断ツールです。初期はコンテナイメージの脆弱性スキャンに特化していましたが、最近ではコンテナに限らずファイルシステムやGitリポジトリを対象にしたり、設定ファイルをスキャンして設定の問題点を確認したりすることもできます。
特徴は、何よりシンプルであること。Goのシングルバイナリで提供されるため簡単にスキャンできますし、パイプラインへの組み込みも容易です。またスキャンは高速で、精度も評価されています(※)。
パッケージやライブラリの脆弱性スキャンツールは他にもありますが、使い勝手の良さなどから「多くの利用者に愛されている代表的なスキャンツール」といえます。
Trivyは日本人のFukuda Teppei氏が個人で開発を進め、その功績が認められてAqua Securityに譲渡されたOSSです。Trivyの実装に着手した背景など分かりやすく記載されているので、興味のある方は同氏のブログもご確認ください。
Trivyは「Harbor」「GitLab」のデフォルトのスキャナーとしても採用されています。もともと別のスキャナーを利用していたにもかかわらずTrivyに移行するという決断は、Trivyの有用性を示している事例だと思います。
Trivyは精力的に新機能が開発されており、新しい機能が日々追加されていますが、本稿では、2022年6月の原稿執筆時点で最新のバージョン、v0.29.1を基に紹介します。
Trivyの主な機能
下記表は、Trivyの主な機能です。
機能 | 内容 | スキャン対象 |
---|---|---|
1.脆弱性のスキャン | CVE-IDが割り振られたパッケージやライブラリの脆弱性を検知する | コンテナイメージ、ファイルシステム、Gitリポジトリ |
2.設定ファイルのスキャン | 推奨される設定と比較して設定の誤りや問題点を指摘する | Terraform、Dockerfile、Kubernetesマニフェスト、AWS CloudFormation、Helmチャート |
3.シークレット情報のスキャン | ハードコーディングされた機密情報を検知する | コンテナイメージ、ファイルシステム、Gitリポジトリ |
4.Kubernetesクラスタのスキャン | クラスタ内のリソースを対象にコンテナイメージの脆弱性スキャン、Kubernetesマニフェストのスキャン、シークレット情報のスキャンを行う | Kubernetesクラスタ |
1.脆弱性のスキャン
TrivyはOSパッケージやアプリケーションの依存ライブラリをスキャンして、「CVE-ID」が割り振られた脆弱性を検知します。CVE-IDとは「CVE-YYYY-XXXX」の形式で割り振られる一意な脆弱性の識別番号です。ここ数年は割り振られるCVE-IDの件数が年々増加しており、2021年は2万件を超えました。このように日々新たな脆弱性が発見されるので、開発で利用しているパッケージやライブラリを定期的にスキャンすることが重要です。
Trivyはコンテナイメージの脆弱性をスキャンするツールとしてユーザーを増やしてきましたが、現在はコンテナイメージに限らず、ホストマシン上のファイルシステムやGitリポジトリを対象にスキャンできます。
v0.29.1では以下のOSパッケージをサポートしています。詳細はOS Packagesをご確認ください。「未修正の脆弱性検知」がNoの場合は、修正されたバージョンが存在するライブラリのみを検知します。
OS | サポートバージョン | パッケージ | 未修正の脆弱性検知 |
---|---|---|---|
Alpine Linux | 2.2〜2.7、3.0〜3.16、edge | apk | No |
Red Hat Universal Base Image | 7、8、9 | yum/rpm | Yes |
Red Hat Enterprise Linux | 6、7、8 | yum/rpm | Yes |
CentOS | 6、7、8 | yum/rpm | Yes |
AlmaLinux | 8 | yum/rpm | No |
Rocky Linux | 8 | yum/rpm | No |
Oracle Linux | 5、6、7、8 | yum/rpm | No |
CBL-Mariner | 1.0、2.0 | yum/rpm | Yes |
Amazon Linux | 1、2 | yum/rpm | No |
openSUSE Leap | 42、15 | zypper/rpm | No |
SUSE Enterprise Linux | 11、12、15 | zypper/rpm | No |
Photon OS | 1.0、2.0、3.0、4.0 | tdnf/yum/rpm | No |
Debian GNU/Linux | wheezy、jessie、stretch、buster、bullseye | apt/apt-get/dpkg | Yes |
Ubuntu | All versions supported by Canonical | apt/apt-get/dpkg | Yes |
Distroless | Any | apt/apt-get/dpkg | Yes |
アプリケーションの依存ライブラリのスキャンは以下の言語をサポートしています。詳細は「Language-specific Packages」をご確認ください。Trivyはスキャン対象から以下のようなファイルを探して依存ライブラリの情報を取得しています。スキャン対象やパッケージ管理方法の違いでスキャンの条件が変わることにご注意ください。
言語 | ファイル | Image/Rootfs | Filesystem/Repository | Dev dependencies |
---|---|---|---|---|
Ruby | Gemfile.lock | - | 〇 | included |
gemspe | 〇 | - | included | |
Python | Pipfile.lock | - | 〇 | excluded |
poetry.lock | - | 〇 | included | |
requirements.txt | - | 〇 | included | |
egg package(\*.egg-info、\*.egg-info/PKG-INFO、\*.egg、EGG-INFO/PKG-INFO) | 〇 | - | excluded | |
wheel package(.dist-info/META-DATA) | 〇 | - | excluded | |
PHP | composer.lock | 〇 | 〇 | excluded |
Node.js | package-lock.json | - | 〇 | excluded |
yarn.lock | - | 〇 | included | |
package.json | 〇 | - | excluded | |
.NET | packages.lock.json | 〇 | 〇 | included |
packages.config | 〇 | 〇 | excluded | |
Java | JAR、WAR、PAR、EAR(\*.jar、\*.war、\*.par、\*.ear) | 〇 | - | included |
pom.xml | - | 〇 | excluded | |
Go | Binaries | 〇 | - | excluded |
go.mod | - | 〇 | included | |
Rust | Cargo.lock | 〇 | 〇 | included |
「Dev dependencies」が「included」の場合、開発用途のライブラリも検知します。例えば、Node.jsで「yarn.lock」ファイルから依存ライブラリを確認した場合、「yarn add <ライブラリ> --dev」のように開発用途として導入したライブラリもスキャン対象になります。
TrivyはスキャンしたOSパッケージやアプリケーションの依存ライブラリの情報を脆弱性のデータソースと突合することで、インストールされているパッケージやライブラリに脆弱性が含まれるかどうか教えてくれます。
2.設定ファイルのスキャン
Trivyはv0.19.0から設定ファイルをスキャンできるようになりました。設定ファイルをスキャンすることで、設定誤りや見落としていた問題点を確認できます。現在は、次のような設定ファイルをスキャンできます。
- Dockerfile
- Kubernetesマニフェスト
- Terraform
- AWS CloudFormation
- Helmチャート
インターネット上に転がっているサンプルファイルはセキュリティを考慮していないものが多く、気付かないうちに脆弱な設定ファイルを作成している可能性があります。そのような場合にもTrivyのようなツールによるスキャンが効果的です。
設定ファイルのスキャンでは、例えば次のような問題点を検知できます。
- rootユーザーで実行されるDockerfile
- 特権コンテナの起動が許されるKubernetesマニフェスト
- 「Amazon S3」バケットが外部に公開されるTerraformコード
3.シークレット情報のスキャン
Trivyはv0.27.0からシークレット情報をスキャンできるようになりました。コンテナイメージやファイルシステムにハードコーディングされているシークレット情報を検知できます。
現在は50以上のカテゴリーに対してシークレット情報を検知できます。例えば以下のようなものになります。
カテゴリー | シークレット情報 | 重大度 |
---|---|---|
AWS | Access Key ID、Secret Access Key | CRITICAL |
Account ID | HIGH | |
Alibaba | AccessKey ID、Secret Key | HIGH |
GCP | Service Account | CRITICAL |
GitHub | Personal Access Token、OAuth Access Token、App Token、Refresh Token | CRITICAL |
GitLab | Personal Access Token | CRITICAL |
Slack | Access Token | HIGH |
Webhook | MEDIUM | |
Heroku | API Key | HIGH |
npm | Access Token | CRITICAL |
4.Kubernetesクラスタのスキャン
Trivyはv0.28.0から実験的な位置付けでありながらもKubernetesクラスタを直接スキャンできるようになりました。KubernetesのAPI Serverと通信することでクラスタ内に存在するリソースを対象に次のようなスキャンができます。
- コンテナイメージの脆弱性スキャン
- Kubernetesマニフェストのスキャン
- シークレット情報のスキャン
Trivyでできること、できないこと
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Kubernetesのセキュリティ対策を整理する「脅威モデリング」のすすめ
クラウドへの移行が進み、Kubernetesなどコンテナ技術を活用するシーンが増えた昨今、管理者を悩ませるのはそのセキュリティ対策だ。GMOペパボのセキュリティエンジニアによる「Cloud Native Days Tokyo 2021」の講演から、脅威モデリングの基本やKubernetesクラスタを題材にした具体的なモデリング方法などを解説する。 - 攻撃事例で考える「コンテナセキュリティ」のリスクと対策
コンテナ基盤にセキュリティリスクがあることは認識している。セキュリティのガイドラインなどもチェックしている。だが、いまひとつ攻撃やリスクのイメージが湧かない。そんな開発者に向けて、NTTデータのクラウドエンジニア、望月敬太氏が具体的な攻撃デモを通して、意識すべきリスクや対策について分かりやすく解説する。2021年11月4〜5日にオンラインで開催された「CloudNative Days Tokyo 2021」から「乗っ取れコンテナ!!〜開発者から見たコンテナセキュリティの考え方〜」で紹介された内容だ。 - Kubernetesクラスタのセキュリティ問題の根本原因は何か、Alcideが概説
「Kubernetes」ネイティブのセキュリティプラットフォームを手掛けるAlcideは、Kubernetesクラスタのセキュリティを確保する上での課題を概説したブログを公開した。Kubernetesのセキュリティ問題の根本原因と原因を絶つコツを紹介している。