この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちわ、札幌のヨシエです。
社内にコンテナチャンネルがありまして、話題に上がったTrivy
というコンテナイメージ用脆弱性スキャナを試してみました。
対象OS
対象OSは以下となります。
注意点としてAmazonLinuxのコンテナイメージはスキャン対象外となりますのでご注意ください。
- Alpine
- RHEL
- CentOS
- RedHat Universal Base image
- Debian
- Ubuntu
MacOSへインストール
検証目的なので作業用MBPにTrivyをインストールします。
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.5
BuildVersion: 18F132
HomeBrewを使用してインストールを行いました。
$ brew tap knqyf263/trivy
$ brew install knqyf263/trivy/trivy
コマンド構文
基本となるコマンド構文は以下のようになります。
trivy [options] container_image_name
スキャン検証実施
試しにredisのコンテナイメージに脆弱性スキャンを実施してみます。
■スキャン実行(初回)
% time trivy redis
2019-05-21T16:50:26.608+0900 INFO Updating vulnerability database...
2019-05-21T16:54:05.479+0900 INFO Updating NVD data...
122582 / 122582 [======================================================================================================] 100.00% 3m57s
2019-05-21T16:58:02.860+0900 INFO Updating Alpine data...
11119 / 11119 [==========================================================================================================] 100.00% 17s
2019-05-21T16:58:20.343+0900 INFO Updating RedHat data...
19428 / 19428 [==========================================================================================================] 100.00% 31s
2019-05-21T16:58:51.666+0900 INFO Updating Debian data...
27846 / 27846 [==========================================================================================================] 100.00% 38s
2019-05-21T16:59:30.201+0900 INFO Updating Debian OVAL data...
59739 / 59739 [========================================================================================================] 100.00% 1m26s
2019-05-21T17:00:56.834+0900 INFO Updating Ubuntu data...
30192 / 30192 [==========================================================================================================] 100.00% 51s
2019-05-21T17:01:48.808+0900 WARN You should avoid using the :latest tag as it is cached. You need to specify '--clear-cache' option when :latest image is changed
2019-05-21T17:01:51.551+0900 INFO Detecting Debian vulnerabilities...
redis (debian 9.7)
==================
Total: 145 (UNKNOWN: 0, LOW: 21, MEDIUM: 76, HIGH: 40, CRITICAL: 8)
+-------------------+---------------------+----------+-----------------------+----------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+-------------------+---------------------+----------+-----------------------+----------------+--------------------------------+
| apt | CVE-2011-3374 | LOW | 1.4.9 | | |
+-------------------+---------------------+ +-----------------------+----------------+--------------------------------+
〜〜〜〜〜 省略 〜〜〜〜〜
+-------------------+---------------------+----------+-----------------------+----------------+--------------------------------+
| util-linux | CVE-2016-2779 | HIGH | 2.29.2-1+deb9u1 | | util-linux: runuser tty hijack |
| | | | | | via TIOCSTI ioctl |
+-------------------+---------------------+----------+-----------------------+----------------+--------------------------------+
trivy redis 97.34s user 104.27s system 29% cpu 11:25.16 total
初回実行時は脆弱性情報の取得処理が実行されることから約11分程かかりました。
■スキャン実行(2回目)
初回スキャンの実行後に再度実行してみます。
コンテナイメージのチェックとして、都度キャッシュをクリアする観点から-c
オプションを付与して実行してます。
% time trivy -c redis
2019-05-21T17:15:25.963+0900 INFO Removing image caches...
2019-05-21T17:15:25.974+0900 INFO Updating vulnerability database...
2019-05-21T17:15:29.799+0900 INFO Detecting Debian vulnerabilities...
redis (debian 9.7)
==================
Total: 145 (UNKNOWN: 0, LOW: 21, MEDIUM: 76, HIGH: 40, CRITICAL: 8)
trivy -c redis 0.40s user 0.75s system 28% cpu 4.043 total
およそ4秒でスキャンが完了しました。
実際の使い方
実際にTrivyを使用した使い方を考えてみました。
実行例①:単純なイメージ脆弱性スキャン
初めて使用するコンテナイメージなどに利用する形が良いかと思います。
% trivy --auto-refresh -c httpd
実行例②:CI環境での脆弱性スキャン
CI環境でコンテナイメージを作成する環境で使えそうなコマンド例です。
trivyが脆弱性スキャンを実行して脆弱性が存在する場合、終了コードはデフォルトで0を返します。
オプションである--exit-code
を入れることで脆弱性が存在した場合に1を返すオプションとなってます。
% trivy --exit-code 1 --auto-refresh -c -q httpd
% trivy --exit-code 1 --auto-refresh -c -q httpd ; echo $?
2019-05-21T17:31:54.326+0900 INFO Removing image caches...
2019-05-21T17:31:54.348+0900 INFO Updating vulnerability database...
2019-05-21T17:31:57.535+0900 INFO Detecting Debian vulnerabilities...
httpd (debian 9.7)
==================
Total: 340 (UNKNOWN: 0, LOW: 68, MEDIUM: 178, HIGH: 80, CRITICAL: 14)
1 ←終了コード
最後に
脆弱性情報の取得処理に多少時間がかかりましたが、前もって取得処理を完了している環境であれば高速なスキャン環境が実現出来ると思います。
また、CI環境で利用されることを想定して作られている点からも簡単に取り入れやすいのでぜひ活用いただければと思います。