連載
» 2022年06月24日 05時00分 公開

コンテナ/Kubernetesの脆弱性、機密情報、設定間違いが分かるOSS「Trivy」徹底解説〜もうイメージスキャンだけとは言わせないCloud Nativeチートシート(17)

Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、コンテナ/Kubernetesの脆弱性、機密情報、設定間違いを診断、検出するOSS「Trivy」を紹介する。

[西澤勇紀, 岡本隆史, 正野勇嗣,株式会社NTTデータ]

 OSパッケージやライブラリ、アプリケーションで発見される脆弱(ぜいじゃく)性は日々増え続けていますが、皆さんのアプリケーション、システムは大丈夫でしょうか?

 日々最新のバージョンに修正して脆弱性を対処していれば問題ありませんが、インターネット上に転がっているサンプルなどを参考して実装した場合、「記事で利用されている古いバージョンをそのまま使用して脆弱性が混入してしまっている」なんてことがあるかもしれません。

 また、本連載でテーマにしているKubernetesでいえば、rootユーザーでコンテナを実行したり、rootファイルシステムを不必要に書き込み可能に設定したりして、「攻撃されやすいコンテナになってしまっている」なんてこともあり得ます。

 Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する本連載「Cloud Nativeチートシート」。今回は、そんなアプリケーションの脆弱性を手軽に検知してくれる「Trivy」を紹介します。

 Trivyは、リリース当初はコンテナイメージの脆弱性スキャンツールというイメージが強かったのですが、パッケージやライブラリ以外の脆弱性もスキャンできるようになっているので、その辺りも含めて紹介します。

Trivyとは

 Trivyはパッケージやライブラリの脆弱性をスキャンできるオープンソースソフトウェア(OSS)の診断ツールです。初期はコンテナイメージの脆弱性スキャンに特化していましたが、最近ではコンテナに限らずファイルシステムやGitリポジトリを対象にしたり、設定ファイルをスキャンして設定の問題点を確認したりすることもできます。

 特徴は、何よりシンプルであること。Goのシングルバイナリで提供されるため簡単にスキャンできますし、パイプラインへの組み込みも容易です。またスキャンは高速で、精度も評価されています(※)。

※「Docker Image Security: Static Analysis Tool Comparison - Anchore Engine vs Clair vsTrivy - a10o.net - Alfredo Pardo

 パッケージやライブラリの脆弱性スキャンツールは他にもありますが、使い勝手の良さなどから「多くの利用者に愛されている代表的なスキャンツール」といえます。

GitHub Starの比較(Trivy、Clair、Grype)

 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
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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。