概要
Trivyはコンテナイメージやローカルディレクトリに依存するライブラリとOSパッケージの脆弱性を迅速かつ効果的に検出するOSSツールです。使い方は簡単で、開発プロセスにすぐに組み込むことができるのが特徴です。
インストール方法
Homebrewを使用したインストール
MacのユーザーはHomebrewを通じてインストールすることが可能です。
brew install aquasecurity/trivy/trivy
Dockerイメージを使用したインストール
Dockerを使用している場合、以下のコマンドでイメージを取得します。
docker pull aquasec/trivy
使用方法
Trivyでスキャン可能な対象は多岐にわたります。以下は主なスキャン対象とその方法です。
コンテナイメージのスキャン
脆弱性を含むdockerイメージに対してtrivy image
コマンドでスキャンを実行します。具体的なコマンドは以下の通りです。
以前の記事でも使用した、snykが公開する脆弱性を含むイメージをスキャン対象とします。
$ trivy image docker-goof --severity CRITICAL
2023-08-13T17:26:36.716+0900 INFO Vulnerability scanning is enabled
2023-08-13T17:26:36.717+0900 INFO Secret scanning is enabled
2023-08-13T17:26:36.717+0900 INFO If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-08-13T17:26:36.717+0900 INFO Please see also https://aquasecurity.github.io/trivy/v0.44/docs/scanner/secret/#recommendation for faster secret detection
2023-08-13T17:26:36.764+0900 INFO Detected OS: debian
2023-08-13T17:26:36.764+0900 INFO Detecting Debian vulnerabilities...
2023-08-13T17:26:36.833+0900 INFO Number of language-specific files: 2
2023-08-13T17:26:36.833+0900 INFO Detecting gobinary vulnerabilities...
2023-08-13T17:26:36.835+0900 INFO Detecting node-pkg vulnerabilities...
docker-goof (debian 11.6)
Total: 24 (CRITICAL: 24)
(省略)
Node.js (node-pkg)
Total: 18 (CRITICAL: 18)
(省略)
このコマンドは、コンテナに含まれるファイルの脆弱性とベースイメージの脆弱性を検出します。
ローカルディレクトリのスキャン
ローカルディレクトリに対する脆弱性スキャンはtrivy fs
コマンドを使用します。
こちらもsnykが公開する脆弱性を含むプロジェクトをスキャン対象とします。
$ trivy fs ./nodejs-goof --severity CRITICAL
2023-08-13T17:33:13.467+0900 INFO Vulnerability scanning is enabled
2023-08-13T17:33:13.467+0900 INFO Secret scanning is enabled
2023-08-13T17:33:13.467+0900 INFO If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-08-13T17:33:13.467+0900 INFO Please see also https://aquasecurity.github.io/trivy/v0.44/docs/scanner/secret/#recommendation for faster secret detection
2023-08-13T17:33:13.550+0900 INFO To collect the license information of packages in "package-lock.json", "npm install" needs to be performed beforehand
2023-08-13T17:33:13.611+0900 INFO Number of language-specific files: 1
2023-08-13T17:33:13.611+0900 INFO Detecting npm vulnerabilities...
package-lock.json (npm)
Total: 26 (CRITICAL: 26)
(省略)
リモートリポジトリのスキャン
リモートリポジトリに対するスキャンはtrivy repo
コマンドで実行できます。
$ trivy repo https://github.com/snyk-labs/nodejs-goof.git --severity CRITICAL
2023-08-13T17:37:55.491+0900 INFO Vulnerability scanning is enabled
2023-08-13T17:37:55.491+0900 INFO Secret scanning is enabled
2023-08-13T17:37:55.491+0900 INFO If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-08-13T17:37:55.491+0900 INFO Please see also https://aquasecurity.github.io/trivy/v0.44/docs/scanner/secret/#recommendation for faster secret detection
Enumerating objects: 695, done.
Counting objects: 100% (695/695), done.
Compressing objects: 100% (506/506), done.
Total 695 (delta 358), reused 498 (delta 177), pack-reused 0
2023-08-13T17:37:58.059+0900 INFO To collect the license information of packages in "package-lock.json", "npm install" needs to be performed beforehand
2023-08-13T17:37:58.118+0900 INFO Number of language-specific files: 1
2023-08-13T17:37:58.118+0900 INFO Detecting npm vulnerabilities...
package-lock.json (npm)
Total: 26 (CRITICAL: 26)
(省略)
IaC (Infrastructure as Code) のスキャン
IaCに対するスキャンもサポートしており、以下のようなコマンドで実行できます。
こちらもsnykが公開する脆弱性を含むIaCコードをスキャン対象とします。
$ trivy config ./infrastructure-as-code-goof/terraform/s3/unencrypted_s3_bucket.tf --severity HIGH,CRITICAL
2023-08-13T17:58:42.402+0900 INFO Misconfiguration scanning is enabled
2023-08-13T17:58:42.768+0900 INFO Detected config files: 2
unencrypted_s3_bucket.tf (terraform)
Tests: 28 (SUCCESSES: 5, FAILURES: 23, EXCEPTIONS: 0)
Failures: 23 (HIGH: 23, CRITICAL: 0)
(省略)
備考
デフォルトでは、trivyが脆弱性を検知してもexit codeは0になります。脆弱性の検知に応じてexit codeを1にしたい場合、以下のようにオプションを付与することができます。
$ trivy fs ./nodejs-goof --exit-code 1 --severity CRITICAL
まとめ
Trivyは、多岐にわたる対象に対して脆弱性スキャンを実行することができる強力なセキュリティツールです。開発プロセスに組み込んで早期にセキュリティリスクを発見し、安全なプロダクト開発を実現しましょう。この記事がどなたかの参考になれば幸いです。
コメント