1. ホーム
  2. 記事一覧
  3. Trivyを使ったセキュリティスキャンの基本と導入方法

2024.09.26

Trivyを使ったセキュリティスキャンの基本と導入方法

はじめに

Trivy(トライヴィ) は、オープンソースのセキュリティスキャナで、コンテナイメージやKubernetesリソースの脆弱性を簡単にスキャンできるツールです。開発者の 福田鉄平(Teppei Fukuda) さんは、Kubernetesの運用でセキュリティ対策が複雑でコストがかかることに気付き、シンプルで使いやすい脆弱性スキャナが必要だと感じてTrivyを開発しました。
彼の目指す「使いやすさ」はTrivyの設計に反映されており、単一のバイナリで動作し、依存関係も少ないため、初めてのユーザーでも簡単に利用できます。現在、福田さんはAqua Security社でTrivyの開発をリードしています​。

Trivyとは何か?

Trivyは、コンテナイメージ、ファイルシステム、リポジトリ、Kubernetesクラスターの脆弱性スキャンに対応しているツールです。以下の特徴があります。

  • 簡単なセットアップ

    インストール後すぐに使用可能。

  • 幅広い脆弱性データベース

    CVEなどをカバーし、包括的な脆弱性チェックが可能。

  • 多様なプラットフォーム対応

    Linux、Windows、macOS、Docker、Kubernetesなどで使用可能。

Trivyを使う具体的な場面

  • デプロイ前の脆弱性チェック

    セキュアなイメージを作成し、リスクを軽減。

  • Kubernetesのセキュリティ強化

    クラスターやリソースの脆弱性をスキャン。

  • CI/CDパイプラインへの統合

    自動スキャンで早期発見と対処が可能。

Trivyは、シンプルな操作で幅広いセキュリティニーズに応え、初心者でも簡単に導入できます。

Trivyのインストール方法

公式ドキュメントとリポジトリ

詳細なインストール方法については、以下の公式サイトで確認できます。

必要な前提条件

  • 対応OS: Linux、macOS、Windows
  • Dockerのインストール(推奨): コンテナセキュリティスキャンを行う場合

インストール手順

Homebrewでのインストール(macOS/Linux)

brew install trivy

Linux/macOS用のインストールスクリプト

GitHubから直接バイナリをダウンロードしてインストールするには、以下のコマンドを使用します。

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin

この方法は、最もシンプルで汎用的なバイナリインストール方法です。

Debian/Ubuntuの場合

Trivyの公式リポジトリを追加してインストールすることが推奨されています。

sudo apt-get install wget apt-transport-https gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy

Windowsでのインストール

Windows用のバイナリは、公式リリースページからダウンロードできます。

curl -LO https://github.com/aquasecurity/trivy/releases/download/v0.34.0/trivy_0.34.0_Windows-64bit.zip
unzip trivy_0.34.0_Windows-64bit.zip

Dockerを使ったインストール

Dockerイメージを使用してTrivyを実行するには、以下のコマンドを使用します。

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image <コンテナイメージ名>

これらの手順は最新の公式リソースに基づいています。

Trivyの基本的な使い方

Trivyは非常にシンプルなコマンド操作で脆弱性スキャンを行うことができ、初めてのユーザーでもすぐに使用を開始できます。ここでは、まずコンテナイメージのスキャンから始めますが、Trivyは他にもファイルシステムやKubernetesリソースのスキャンにも対応しています。

コンテナイメージのスキャン

Trivyの基本機能の一つは、Dockerコンテナイメージのスキャンです。これにより、特定のイメージに含まれる脆弱性を簡単に確認できます。以下は、Dockerイメージをスキャンするための基本コマンドです。

trivy image <コンテナイメージ名>

このコマンドを実行すると、指定したコンテナイメージの脆弱性をスキャンし、その結果を詳細に表示します。

スキャンの例

例えば、nginx:latestというコンテナイメージをスキャンしたい場合は、次のようにコマンドを実行します。

trivy image nginx:latest

これにより、nginx:latestイメージ内に存在するパッケージやライブラリの脆弱性が検出され、CVE(Common Vulnerabilities and Exposures)リストに基づく深刻度と共に表示されます。

スキャン結果の表示

スキャン結果は、脆弱性が見つかったパッケージごとにCVE IDとその脆弱性の詳細が表示されます。CVE IDは脆弱性の国際的なデータベースに登録された一意の識別子で、各CVEには脆弱性の概要や修正情報が記載されています。

nginx:latest (alpine 3.14)
=======================================================
CVE-2021-36159  High  BusyBox up to 1.33.1 has a...
CVE-2021-34698  Medium  BusyBox up to 1.33.0 has an...
...

スキャン結果の解釈

スキャン結果の中で特に重要なのは、脆弱性の深刻度です。Trivyは、脆弱性を以下の4段階に分類して表示します。

深刻度説明
Low軽微なリスク
Medium注意が必要なリスク
High重大なリスクで、速やかな対応が必要
Critical即座に対処すべき致命的なリスク

脆弱性にはそれぞれCVE IDが付与されており、これを元に詳細な情報を調査できます。CVE IDを検索することで、対処方法や影響範囲の詳細を知ることができます。

スキャン結果をフィルタリングする方法

スキャン結果が多くなる場合、Trivyのオプションを使用して結果をフィルタリングすることができます。たとえば、重大度がHigh以上の脆弱性のみを表示したい場合は、次のコマンドを実行します。

trivy image --severity HIGH,CRITICAL <コンテナイメージ名>

また、スキャン結果をファイルに保存したい場合は、-oオプションを使って出力ファイルを指定できます。

trivy image -f json -o result.json <コンテナイメージ名>

以上のように、Trivyは柔軟なオプションを使って、結果のフィルタリングやレポート作成を簡単に行えます。

Trivyを使ってKubernetesリソースをスキャンする方法

Trivyはコンテナイメージだけでなく、Kubernetesのリソースもスキャンできます。以下のコマンドでKubernetesクラスタの脆弱性チェックを行います。

trivy k8s cluster <クラスタ名>

また、Kubernetesマニフェストファイルもスキャン可能です。

trivy k8s manifest <マニフェストファイル>

このコマンドによりKubernetes環境におけるセキュリティリスクを事前に検出でき、セキュアなデプロイが可能になります。

Trivyの設定とオプション

カスタマイズされたスキャン

Trivyでは、スキャンをさらに細かくカスタマイズすることもできます。例えば、特定の深刻度以上の脆弱性のみを表示したい場合、以下のようにフィルタリングが可能です。

trivy image --severity HIGH,CRITICAL <コンテナイメージ名>

また、出力形式をJSONにすることで、他のツールとの統合も簡単に行えます。

trivy image -f json -o results.json <コンテナイメージ名>

高度な設定オプション

Trivyには、スキャン結果のキャッシュ機能や、脆弱性データベースの自動更新機能も備わっています。定期的にスキャンを実行する場合、この機能を活用すると便利です。

trivy image --cache-dir /path/to/cache <コンテナイメージ名>

Trivy導入のメリット

継続的なセキュリティチェックの重要性

Trivyを導入することで、継続的にセキュリティチェックを行うことが可能になります。特にCI/CDパイプラインに組み込むことで、新しいコンテナイメージやアプリケーションをデプロイするたびに自動的に脆弱性チェックが実行され、セキュリティリスクを未然に防ぐことができます。

自動化による効率化

CIツール(Jenkins、GitHub Actionsなど)とTrivyを連携させることで、デプロイプロセス全体を効率化し、手動でのチェックを省略できます。これにより、セキュリティ対策をスピーディかつ確実に行えるようになります。

まとめ

Trivyは、その手軽さと強力な機能により、初めてのセキュリティスキャナとして非常に適しています。コンテナやKubernetes環境の脆弱性を簡単にスキャンできるため、開発者や運用エンジニアにとって、セキュリティを強化するための重要なツールと言えるでしょう。ぜひ導入して、自分の環境をセキュアに保ちましょう!

参考リンク

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事