コンテナのLog4Shell脆弱性検出にAmazon Inspector/ECR拡張イメージスキャンを使う

2021.12.21

ども、ゲストブロガーのtakiponeです。

DockerコンテナでLog4Shellの脆弱性が該当するかどうかを確認するために、Amazon Inspectorのコンテナイメージスキャン機能を使ってみた様子を共有します。

AWSでのLog4Shell対策

AWSでのLog4Shell対策については、以下のAWSブログ記事にまとまっています。

この中の「検知」の項目にAmazon Inspectorがあります。なお、InspectorはDockerコンテナのほかEC2の脆弱性スキャンにも対応しており、非コンテナ環境でも活用できます。

試してみた

Inspectorのコンテナイメージスキャンは、AWSのコンテナリポジトリサービスAmazon ECRで動作します。今回はサンプルとしてElasticsearchの公式イメージを試してみます。Elasticsearch自体のLog4Shell関連情報は以下を参照してください。

公式Dockerイメージは以下のサイトで確認できます。

今回は少し古めのバージョン 7.7.1 と上記サイトでLog4j2の新しいバージョンが入っているとある 7.16.2-amd64 をそれぞれスキャンし、結果を比べてみます。(具体的な手順は記事後方の「参考: 検証手順」を参照ください)

elasticsearch:7.7.1

CVE-2021-44228がCRITICALで検出されました。続いて新しいバージョンのスキャン結果を見ます。

elasticsearch:7.16.2-amd64

お、CVE-2021-44228は検出されず、CRITICALの項目はなしという結果になりました。脆弱性情報は随時更新されますしLog4Shell関連の状況も変化しますので、これで安心というわけではありません。Inspectorには継続スキャン機能があるので、コンテナの日々の運用にイメージスキャンを組み込んでチェックしていくのが良いでしょう。

Amazon ECRの従来のイメージスキャン

ちなみに、Inspectorのコンテナスキャンが有償の一方で、ECRに従来からあるコンテナスキャンは無償で利用できます。無償版でのバージョン7.7.1のスキャン結果を以下に示します。

CVE-2021-44228の検知を期待していたのですが、検知されませんでした。これは従来のスキャンのデータベースがLinuxディストリビューションのソフトウェアパッケージのバージョンを照合するものであり、ソフトウェアに組み込まれたLog4jを直接検証するわけではないからなのかなと思いました。スキャン内容の差異については、InspectorのFAQ、「Q: Amazon ECR 用の Amazon Inspector コンテナイメージスキャンサービスは、Amazon ECR Clair ベースのソリューションとどのように異なりますか?」が詳しいです。

検出データベースに興味のある方は、DevIOの先人の記事が参考になるかもしれません。

参考: 検証手順

まずはECRの管理画面で拡張スキャンを有効にします。

続いてECRリポジトリを作成し、プッシュ時のスキャンを有効にします。

手元のPCにDockerイメージをダウンロード(pull)し、作成したECRリポジトリにアップロード(push)します。

# Dockerイメージのダウンロード
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.7.1
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.2-amd64
# DockerイメージにECRリポジトリのタグを付与
docker tag docker.elastic.co/elasticsearch/elasticsearch:7.7.1 XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch:7.7.1
docker tag docker.elastic.co/elasticsearch/elasticsearch:7.16.2-amd64 XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch2:7.16.2-amd64
# ECRの一時クレデンシャルをDocker CLIにセットしてアップロード
aws ecr get-login-password | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch2:7.7.1
docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch2:7.16.2-amd64

これでスキャンが実行されます。

まとめ

Amazon InspectorのコンテナイメージスキャンでDockerコンテナのLog4Shell脆弱性チェックを試してみました。ECR自体はAmazon ECSやEKS用途に限ったものではありませんので、ローカルの開発環境やオンプレミス環境でDockerを利用する場合でも活用できそうですね。

参考URL :