オープンソース

Trivy〜コンテナイメージの脆弱性診断ツール〜

近年、DockerやLXCといったコンテナ型仮想化技術が注目されています。コンテナ型仮想化とはOSの上に「コンテナ」と呼ばれる仮想的なユーザ空間を提供することをいいます。ユーザ空間とは、アプリケーションを実行するためのリソースがユーザに提供される空間です。通常は1つのOSの上に1つのユーザ空間しか作れませんが、コンテナ型仮想化では1つのOSの上に仮想的なユーザ空間であるコンテナを複数作ることができます。そのため、従来のサーバ仮想化と比べると非常に効率よく実装することが可能になりました。しかし、コンテナイメージ内には不正なプログラムや脆弱性が含まれる問題があります。そこでセキュリティを高めるために脆弱性を見つけ、対策をとる必要があります。
ここでは、コンテナイメージの脆弱性診断ツールであるTrivyの紹介をしていきます。

Trivyとは

Trivyとは、コンテナイメージの脆弱性診断ツールです。オープンソースのためソースコードはGitHubに掲載されています。Trivyは、もともとは日本国内で個人が開発し、OSSとして公開したツールでしたが、公開後、Aqua Security社に買収・譲渡され開発が継続しています。また開発者本人もAqua Security社の社員となって開発を継続しています。

Aqua Security社のホームページではTrivyを次のように紹介しています。
「A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI」

これからもわかるように、TrivyはCIなどでも簡単に組み込んで使えるようにシンプルに作られているツールとなっています。また、Trivyは他のスキャナーとは異なり、OSパッケージと言語固有の依存関係の両方をカバーし、組織のソフトウェア開発パイプラインに容易に統合することができます。公式サイトでRedhat系、Debian系のOS用のパッケージが配布されていますので、該当するパッケージをインストールするだけで動作可能です。

例えば、Trivyは下記の診断結果を1つのコマンドで表示させることができます。

診断結果の画像

Trivyの主な機能

Trivyの持つ主な機能は次の通りです。

対応するOSのパッケージ情報から脆弱性を検出する

Trivyは、yumやapt-getなどからinstallしたパッケージの脆弱性の検知をすることができます。

  • 対応OSイメージ
    • Alpine
    • CentOS
    • openSUSE Leap
    • SUSE Enterprise Linux
    • Red Hat Universal Base Image
    • Oracle Linux
    • Ubuntu
    • Photon OS
    • Red Hat Enterprise Linux
    • Debian
    • Amazon Linux
    • Distroless

アプリケーションの依存関係定義から脆弱性を発見する

Trivyは、gem(Ruby)、pip(Python)などのアプリケーションの依存性解決ツールでinstallされるライブラリの脆弱性をスキャンしてくれます。

  • 対応する依存関係定義
    • Bundler
    • poetry
    • Cargo
    • Composer
    • npm
    • pipenv
    • yarn

診断結果を標準出力・テキストに出力する

Trivyの脆弱性検出結果のデフォルトの出力フォーマットはtable形式になります。しかし、下記のようなフォーマットに変更することが可能ですので、幅広いアプリケーションに対応することができます。

  • 対応フォーマット
    • table
    • json
    • custom

以下のようにファイルに出力することができます。

ファイル出力の画像

Trivyの主な特徴

Trivyには、以下の特徴があります。

脆弱性データベースを元にコンテナイメージを診断

Trivyは、各ディストリビューションやPHP、Python等の脆弱性データベースと、コンテナのイメージに含まれるパッケージのバージョンを照合して出力されています。脆弱性データベースは、trivyコマンドの実行時に必要であれば更新されます。なお、Trivyは、脆弱性データベースの更新をスキップすることもできますし、脆弱性データベースのダウンロードのみを行うことも可能です。

また、検出する脆弱性の重要度を指定することもできます。デフォルトでは全種類が同様の重要度ですが、オプションによって容易に重要度を変更することができます。

単一バイナリでの導入

Go言語で開発されているため単一バイナリで動作します。単一バイナリであることの利点は、アプリのインストール・デプロイといった作業が非常に簡易的になることです。パッケージに梱包されているファイルも1つだけという、シンプルなものになります。

未修正の脆弱性の除外

ディストリビューションがまだ修正を行っていない脆弱性や、なんらかの理由で修正をとりやめている脆弱性も検知します。そのような内容を毎回精査するのは大変なため、除外するためのオプション(-ignore-unfixed)が用意されています。

CentOSはRHELのクローンOSですが、RHELで修正版のパッケージが提供されてから、CentOSでパッケージが提供されるまで、数日から数週間のタイムラグがあります。このため、CentOSをアップデートしても、解消しきれない脆弱性が報告されています。

任意の脆弱性の除外

システムの仕様上やむなく脆弱性のあるソフトウェアを使わなければいけないような場面もあります。このような場合、任意の脆弱性を無視することができます。無視するCVE IDの一覧を、.trivyignoreファイルに記載することで指定したCVE IDが無視され、検出されなくなります。

複数のシステムでの利用

サーバは単体・複数のどちらでも動作することが可能です。ただし、複数のサーバで診断を行いたい場合、逐一、脆弱性データベースをダウンロードする手間や時間がかかります。その場合は、脆弱性データベースを管理するサーバを1台用意することで解決します。クライアントはサーバとやりとりして、脆弱性の診断をすることができます。

クライアントは、サーバに接続するためのオプションを付与して診断を実行できます。脆弱性データベースは、サーバ側が定期的に更新します。

Trivyではできないこと

手軽にコンテナイメージを診断できる一方で、カバーできない領域もあります。例えば、下記のようなことはできません。

動作しているコンテナの診断

コンテナイメージのみ診断することができます。そのため脆弱性診断を行う度に診断対象のコンテナイメージを準備する必要があります。

ソースコードからコンパイルされたようなソフトウェアの脆弱性の検知

composerやnpm等の依存関係定義が存在する場合は除かれます。

脆弱性発見時のアラートの送信

脆弱性発見の認識が遅くなる可能性があります。しかしアラートに関しては、FalcoといったOSSを合わせることによって解決することができます。

UIでの操作・情報閲覧

UIでの操作はできないため、慣れていない方には結果等が分かりづらい可能性があります。しかしTrivyは、非常にシンプルに作られているツールのため特に知識がなくても操作ができます。そのため、操作性で悩む可能性は低いと考えられます。

つまり上手く活用するためには、コンテナイメージの設計からうまく診断ができるようにしていく必要があります。また、Trivyは単体で利用するというよりも、他のツールと組み合わせて脆弱性診断システムの一部として利用する方がより効果的です。

コンテナのセキュリティツール

Trivyの他に、コンテナのセキュリティを高めるツールには以下のようなソフトウェアがあります。

  • Vuls:動作中のコンテナの脆弱性診断

    Vulsは、動作中のコンテナの脆弱性を診断することができるオープンソースソフトウェアです。コンテナイメージの脆弱性を診断するTrivyとは反対に、Vulsはコンテナイメージの脆弱性診断には対応していません。

  • Falco:コンテナの侵入・改ざん検知

    Falcoは、動作中のコンテナの侵入検知や、コンテナ内の改ざんなどをチェックするオープンソースソフトウェアです。条件によって、システム上で通常行われないような操作を検知し、アラートが送られるようになっています。Falcoでは、脆弱性診断を行うことはできません。

以上のように、それぞれのツールの機能や役割は異なります。そのため、ツールを単体で利用するというよりも他のツールと組み合わせて利用する方が、コンテナのセキュリティを高める上でより効果的です。

デージーネットの取り組み

デージーネットでは、コンテナのセキュリティを高めるツールとして、Trivy、Vuls、Falcoについて調査を行い、調査報告書を公開しております。また、コンテナイメージレジストリHarbor等の調査も今後行っていきます。

デージーネットでは、上記のようなOSSを組み合わせて、お客様のニーズに合った便利で安心できるコンテナ環境を構築するサービスを提供しています。DockerやKubernetesの導入を考えているお客様向けの構築のコンサルティングも行っていますので、気になる方はぜひお問い合わせください。

「情報の一覧」

Trivy調査報告書

無料資料ダウンロード

Trivyは、コンテナイメージの脆弱性診断ツールです。もともとは日本国内で個人が開発しOSSとして公開したツールでした。本書は、コンテナイメージの脆弱性診断ツールTrivyの調査報告書です。

Docker〜コンテナ型仮想化〜

OSS情報

Dockerとは、docker社が開発しているコンテナ型仮想化の実装の1つです。オープンソースソフトウェアとして公開されていて、コンテナ型仮想化としては、事実上のデファクトスタンダードとなっています。

仮想化で使えるオープンソースソフトウェアとは?比較20選

仮想化ソフト比較

仮想化環境を構築すると、物理リソースの削減による社内スペースの確保、リソースの効率的な管理、運用コストの削減などが実現できます。この記事では、仮想化に関連したソフトウェアを、4つのカテゴリでご紹介します。

デモのお申込み

もっと使い方が知りたい方へ
操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。デモをご希望の方は、下記よりお申込みいただけます。


デモをご希望の方

デモの申し込みイメージ

OSS情報「Kubernetes」

Kubernetes〜コンテナ管理の課題を解決するOSS〜
ここでは、Dockerコンテナの管理を自動化するためのソフトウェア「Kubernetes」を紹介します。
Kubernetesクラスタの構築
ここでは、CentOS7に最小限のKubernetesクラスタを構築する方法について説明いたします。
KubernetesのPod機能
ここではPod機能について説明いたします。
Kubernetesのレプリカセットとデプロイメント
ここではデプロイメントという機能を利用してレプリカセットを作成する方法について説明いたします。
Kubernetesのアーキテクチャ
ここではアーキテクチャについて説明いたします。
Kubernetesのコンテナアップデート
ここでは、Kubernetesでソフトウェアをアップデートする場合の手法について説明いたします。
Kubernetesのローリングアップデート
ここでは、Kubernetesのローリングアップデート機能の概要について説明いたします。
Kubernetesのダッシュボード
ここでは管理用のダッシュボードについて説明いたします。
Kubernetesの永続ストレージ
ここでは永続ストレージについて説明いたします。
Rancher〜Kubernetesの管理ソフトウェア〜
ここでは、Kubernetesの管理ソフトウェアのRancherについて紹介します。
GitLab〜Dockerのプロジェクト管理とレジストリ〜
GitLabは、ウェブ型のGitリポジトリマネージャーです。ここではGitLabのコンテナレジストリについて説明いたします。
DRBD-SDSとKubernetes
ここではDRBD-SDSを利用することでサービスの冗長化を実現させる手法について説明いたします。
Falco〜コンテナの侵入・改ざん検知ツール〜
ここではKubernetesを代表するコンテナ環境をターゲットにしているコンテナランタイムセキュリティソフトウェアのFalcoについて説明いたします。
Trivy〜コンテナイメージの脆弱性診断ツール〜
Trivyは、コンテナイメージの脆弱性診断ツールです。ここではTrivyの機能や特徴などについて説明いたします。
コンテナ型仮想化に関連したOSS
ここでは、コンテナ型仮想化に関連したOSSを紹介いたします。

Trivy〜コンテナイメージの脆弱性診断ツール〜の先頭へ