Aqua EnterpriseでECRにあるイメージをスキャンしてみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。コンサルティング部の枡川です。

コンテナとクラウドネイティブアプリのためのセキュリティソリューションである、Aqua Enterpriseでコンテナイメージをスキャンしてみました。
Aquaでイメージスキャンしてみたということで、弊社濱田が記載した下記記事と大筋は一緒となります。

下記が違う点となります。

  • ECRのイメージをスキャンしている点
  • Image Layersについて試してみた点

脆弱性情報をわかりやすくまとめてくれますし、パッケージマネージャ以外でインストールした一部のライブラリも脆弱性を検知してくれるので最高ですよ!

前提・注意点について

本記事における検証においては、Aqua社から提供いただいたトライアルアカウントを利用しています。
コンテナイメージや、セットアップ用のドキュメントなどは、公式ドキュメントアクセス用のアカウントが必要となりますのでご留意ください。

セットアップについて

今回はDockerを利用してセットアップします。
弊社Todaが記載した下記ブログと同様にセットアップしております。
勢いで無料枠のt2.microを使用するとメモリ不足に陥ったりするので気をつけて下さい。
今回は下記インスタンスでセットアップしました。
AMI:AmazonLinux2 x86 (ami-0701e21c502689c31)
インスタンスタイプ:t3.small

ECRとの連携

セットアップ完了後に下図のようなダッシュボードを見ることができます。 ECRと連携したいので、Integrationsをクリックします。

何もしなくてもDocker Hubからはイメージをインストールすることができます。
他のレジストリを追加したいのでAdd Registryをクリックします。

連携するレジストリの設定を行います。
Access KeyとSecret Keyは設定していませんが、IAMロールをAquaインストール先のEC2インスタンスにアタッチして連携させます。

今回設定したポリシーは下記です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRScanning",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:ListImages"
            ],
            "Resource": "*"
        }
    ]
}

Test Connectionを押すことで設定を保存する前に接続テストをすることもできます。

イメージスキャンしてみた

ECRがレジストリ一覧に追加されたことを確認して、Imagesに移動します。

Add Imagesをクリックすると、先程設定したレジストリを選ぶことができます。

イメージとタグを選んでAddをクリックします。

今回使用するイメージは下記Dockerfileをイメージ化したものです。
パストラバーサル攻撃の脆弱性があったApache HTTP Server2.4.49に設定ファイルを追加した簡単なものとなります。

FROM httpd:2.4.49
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf

Scan Queueでは各スキャンの進行状況を確認することができます。
スキャンが失敗した際はRescanで最初からやり直すこともできます。

スキャンが完了したらGeneralからイメージ名をクリックすることでスキャン結果を確認することができます。

Riskではスキャンした日時や脆弱性の数などの概要を確認することができます。

Vulnerabilitiesでは、検知された各脆弱性情報を確認することができます。
脆弱性の概要や米国脆弱性情報データベース(NVD)へのリンクも確認できます。

Layersが以前は無かった機能になります。
各イメージのどのレイヤで脆弱性が発生しているのかを確認することができます。
脆弱性が検知された後の対応が楽になりますね!

Resourcesではインストールされているパッケージとバージョンおよび脆弱性情報を一覧で確認できます。
aquaではOSのパッケージマネージャや言語のパッケージマネージャでインストールされたライブラリだけでなく、直接ソースからインストールされたパッケージについても脆弱性を確認することができます!
この機能はApache、GZIP、Java、Mongoなどの主要な500種類のライブラリに適用され、設定で有効化や無効化をすることができます。(私がセットアップした際は最初から有効でした。)
http_serverTypeExecutableと表示されていますが、今回のイメージ内でyum経由でインストールされていないにも関わらず、脆弱性を確認することができています。
他のパッケージはDEB Packageと記載されているのでどのようにインストールされたかもわかります。

最後に

Aqua Enterpriseを使用してECRのイメージをスキャンしてみました。
脆弱性情報をきれいに図示してくれるのでわかりやすいですし、パッケージマネージャでインストールしなくても検出されるのは良いですね。
イメージスキャンだけでなく他にも様々な機能があるのでこれからいろいろ検証してみます!