オープンソース

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・コンテナイメージレジストリHarbor等の調査も今後行っていきます。また、脆弱性診断ツール以外にも以下のようなコンテナのセキュリティを高めるためのツールがあります。

  • Kubernetes〜コンテナ管理ツール〜
  • Falco〜コンテナの侵入・改ざん検知ツール〜
  • GitLab〜Dockerのプロジェクト管理とレジストリ〜

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

「情報の一覧」

Trivy調査報告書

無料資料ダウンロード

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

Falco調査報告書

無料資料ダウンロード

Falcoは、Sysdig.inc社によって開発されたセキュリティソフトウェアです。特にKubernetesを代表するコンテナ環境をターゲットに開発されています。本書は、Kubernetes等コンテナ環境のランタイムセキュリティソフトウェアであるFalcoの調査報告書です。

Vuls調査報告書 1.01版

無料資料ダウンロード

Vuls(VULnerability Scanner)は、オープンソースソフトウェアの脆弱性診断ツールです。Vulsはgolangで作成されており、LinuxやFreeBSDで動作します。本書は、Vulsの機能と使用方法について調査した内容をまとめたものです。

Docker〜コンテナ型仮想化〜

OSS情報

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

メールマガジン 2020年6月号 記事「Falco〜OSSのコンテナの侵入・改ざん検知ツール〜」

メールマガジン2020年6月号

今回はコンテナの侵入・改ざん検知ツール「Falco」を紹介します。FalcoはSysdig.inc社によって開発されたセキュリティソフトです。特にKubernetesを代表するコンテナ環境をターゲットに開発されています。CNCF(Cloud Native Computing Foundation)のインキュベーションプロジェクトとしても登録されています。

デモのお申込み

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


デモをご希望の方

デモの申し込みイメージ

OSS情報「Kubernetes」

Kubernetes〜コンテナ管理ツール〜
ここでは、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の機能や特徴などについて説明いたします。

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