Snyk Container の脆弱性スキャンでイメージ内のアプリケーション・ランタイム・ライブラリのバージョン情報を確認できるのか試してみた
Snyk Container は各種コンテナレジストリに保存されているイメージに対して脆弱性スキャンを実行できます。代表的なものでは Dcoker Hub、Amazon ECR とインテグレーションでき Snyk のダッシュボードで管理できます。
イメージ内のアプリケーションや、ランタイム、ライブラリのバージョンの一覧を確認したい、管理したいといったときに確認できるツールがあるのか探していました。Snyk で確認できましたので「どんな画面で確認できたのか」を中心に紹介します。
確認結果
脆弱性スキャンの結果からアプリケーションや、ランタイム、ライブラリのバージョンを確認できる。
Snyk で ECR のイメージをスキャンしてみる
コンテナではなく EC2 の場合ですと、Systems Manager Inventory で インストールされているのランタイムのバージョンを確認できます。
画像引用: AWS Systems Manager(SSM) インベントリを使ってインスタンスにインストールされているアプリケーションをチェックする | DevelopersIO
同様の情報をコンテナ(イメージ)から出力することができるのか?が今回の疑問です。そこで商用ツールならかゆいところに手が届くのではないかと Snyk で ECR のイメージをスキャンする環境を構築しました。設定方法は以下のリンクを参考にしてください。
Snyk でイメージの脆弱性スキャンした結果をみていきましょう。
スキャンのサポート対象
Amazon Linux2 と、Debian、Distroless のイメージをスキャンしてみました。
Snyk の脆弱性スキャンがサポートしている OS、Distribution は以下のドキュメントを参照ください。
Supported operating system distributions - Snyk User Docs
Disstroless のようなパッケージマネージャーもないイメージもサポートされています。スキャン検証の対象に加えてみました。
Note: Snyk also supports images using packages from those distributions but without the associated package manager, such as Distroless images. How Snyk Container works - Snyk User Docs
Amazon Linux 2
Dependenceis
タブからランタイム、ライブラリのバージョンを確認できました。bash
などのバージョンを確認できますね。あれやこれや入って146個もあると人力チェックする運用には無理がありますね。
古めの Amazon Linux2 のイメージを脆弱性スキャンした結果です。python
、curl
などのメジャーどころで問題を検出してますね。
python
の詳細を確認した画面です。上部の CVE のリンクは以下となっていました。
Debian
Nginx のイメージを脆弱性スキャンした結果です。Amazon Linux 2 同様にバージョン情報を確認できます。
curl
の詳細を確認した画面です。
Distroless
さすが Distroless 最小限のランタイムだけですかね、少ないです。
10か月前にプッシュしてあったイメージをスキャンするとopenssl
の脆弱性を検出しました。必要最低限のイメージとは言え脆弱性がなくなるわけではありません。引き当てる確率が低いだけなので脆弱性スキャンは継続的に実施したいですね。
ビューは階層構造で表示もできます。
CSV 形式でエクスポート機能
Reports
機能が利用可能な Bussiness
, Enterprise
プランですと CSV 形式でエクスポートもできます。(2022/7/13 現在の料金プランです)
Reports
タブから該当のプロジェクト(ECR のリポジトリ)を選択します。
Reports
画面からアプリケーション、ランタイム、ライブラリのバージョン情報を CSV 形式でエクスポートできます。
Excel で開くとこのような CSV を確認できました。他の情報資産管理ツールなどへ連携も可能なのではないでしょうか。
かゆいところに手が届くさすが商用ツールです。なにげに需要がありそうな気がします。
おわりに
イメージ内のアプリケーションや、ランタイム、ライブラリのバージョンの一覧を確認することができるとわかったのが収穫です。たとえば ECR ですと拡張スキャンを使ったとしてもここまでの情報量はありません。Amazon Linux 2 の例ですと以下のイメージです。脆弱性のあったパッケージ名はわかりますが、脆弱性がなければ表示されません。とは言え「脆弱性があります」とわかるため必要十分な情報だと思います。
以上、バージョン一覧があって使うかどうかは別としてできるのか、できないのか知るための検証でした。同様の商用ツールまたは OSS でも確認できるのかもしれません。機会があれば試してみたいと思います。