Amazon Inspector のアップデートでコンテナセキュリティの優先順位付けが改善!
今年の5月にAmazon Inspectorで以下のアップデートがありました。
https://aws.amazon.com/jp/blogs/news/amazon-inspector-enhances-container-security-by-mapping-amazon-ecr-images-to-running-containers/
Amazon Inspector が Amazon ECR イメージを実行中のコンテナにマッピングするようになりました。このため、セキュリティチームは環境内で現在実行されているコンテナに基づいて脆弱性の優先順位付けを行えるようになります。これらの新機能を使用することで、Amazon ECR イメージの脆弱性を分析するとともに、それらが現在実行中かどうか、コンテナ環境で最後に実行されたのはいつだったかに基づいて、検出結果に優先順位を付けることができます。さらに、クラスターの Amazon リソースネーム (ARN) を表示し、イメージがデプロイされている EKS ポッドまたは ECS タスクの数を確認することもできます。これは、使用状況と重大度に基づいた修正の優先順位付けに役立ちます。
このアップデートの最大のメリットは、コンテナイメージの「使用状況」に基づいた脆弱性の優先順位付けが可能になった点です。従来は、重要度(severity)や悪用コードの存在有無(exploitAvailable)といった、脆弱性そのものの情報でしか優先順位をつけられませんでした。そのため、本番環境では使われていない古いイメージや、今後利用予定のない開発用イメージにまで脆弱性が見つかり、対応すべき脆弱性を見極めるのに時間がかかっていました。
上記のアップデートでECSかEKSのコンテナとして使用されているイメージ(または使用された実績がある)をフィルタリングできるようになったので、対応が必要なコンテナイメージを効率的に絞り込み、セキュリティ対応の優先順位付けを改善できるようになりました。
新機能の使い方は? コンソール画面で見てみよう!
この課題を解決するため、Amazon Inspector のコンソールに新しいフィルタリング項目が追加されました。それが、Image in use count と Image last in use at です。
Image in use count
Image in use countではそのイメージが使用されてるコンテナ数を条件にフィルタリングできます。
詳細画面から対象のコンテナも追跡できます。
Image last in use at
Image last in use atでそのイメージが使用されていた実績を過去の日数ベースでフィルタリングできます。
コンテナ使用の追跡はリアルタイムではなく日次レベル(少なくとも)となるので、常時稼働ではないコンテナはImage in use countだと漏れる可能性があるためこちらでフィルタリングした方が良さそうです。
実践!EventBridge で緊急度の高い脆弱性だけを Slack に通知する
即時対応が必要なイメージの脆弱性を検知するため、Image in use countで絞って通知する仕組みを構築します。
通知の構成は以下となります。
主にEventBridgeでフィルタリングの仕方を本記事で記載します。
SNSとChatbotでSlackに通知する仕組みは、ドキュメントにて割愛いたします。
https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html
EventBridgeの実装
緊急度の高い脆弱性は即時対応したいので通知を実装します。
重要度はCriticalでフィルタリングします。
比較演算子は以下ドキュメントを参考にしました。
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-create-pattern-operators.html
イベントフィルタリング
{ "source": ["aws.inspector2"], "detail-type": ["Inspector2 Finding"], "detail": { "severity": ["CRITICAL"], "status": ["ACTIVE"], "resources": { "details": { "awsEcrContainerImage": { "inUseCount": [{ "numeric": [">", 0] }] } } } } }
"inUseCount": [{ "numeric": [">", 0]
の部分がコンテナとして使用されているかどうかをフィルターしてくれています。
より優先度を高いもので絞りたい場合は以下をフィルターに追加することも可能です。
exploitAvailable:既知の悪用コードの公開有無
fixAvailable:修正方法(バージョンアップ先など)の有無
"detail": { "exploitAvailable": ["YES"], "fixAvailable": ["YES"] }
入力トランスフォーマー
EventBridgeからSNS→ChatbotでSlackに送ると、デフォルトだと以下のように味気ない表示になります。
EventBridgeの入力トランスフォーマーで表示内容をカスタムできます。
Inspector2 Finding内で取得した情報以外を表示させたい場合(ECRリポジトリタグなど)は、Lambadaでカスタムする必要があります。
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-transform-target-input.html
注意点
使用しているかの追跡は日次レベル(リアルタイムではない)
以下のドキュメントにも記載がありますが、コンテナ使用の追跡はリアルタイムではなく日次レベル(少なくとも)となります。通知設定している場合は、タイミングによっては実態とずれることもあります。
https://aws.amazon.com/jp/blogs/news/amazon-inspector-enhances-container-security-by-mapping-amazon-ecr-images-to-running-containers/
Amazon ECS タスクまたは Amazon EKS ポッドコンテナで実行されているイメージのデータの両方を監視し、この情報を少なくとも 1 日 1 回更新します。
脆弱性を解消しないかぎり毎日通知がくる
Inspector2 Findingのイベントごとに通知される仕組みなので、脆弱性を解消するか、またはコンテナとして使用をやめないかぎり基本的に毎日通知(おそらく再スキャンされるごと)がきます。
通知が多いようなら、severityやexploitAvailable、fixAvailableなど他の項目でもフィルタリングを行い、即時対応が必要なものだけを通知するようにしたり、
InspectorのSuppression ruleを使用して、対応不要とした脆弱性を通知対象外とする(EventBridgeのフィルターでStatusをActiveで絞っているためSuppressedになった脆弱性は通知されない)などの工夫が必要となります。
https://docs.aws.amazon.com/ja_jp/inspector/latest/user/findings-managing-supression-rules.html
その他
検出対象のフィルタリング
本記事では検出した脆弱性に対してのフィルタリング方法を記載しましたが、検出自体を利用実績に基づいてフィルタリングすることもできます。
container-image-re-scan(イメージの再スキャン料金)は$0.01/スキャン と単価は少額ですが、複数世代で管理している場合や、使っていないが放置されている(消していいかわからないが再スキャンがずっとされている状態)イメージが多い場合はそれなりのコストインパクトがあるかと思います。
https://aws.amazon.com/jp/inspector/pricing/
ECRにイメージを保存するのも費用が発生するので不要なイメージは削除したり、ECRのライフサイクルポリシーで制御するのが基本にはなります。
設定変更箇所
※日数は任意の日数を指定してください
※プッシュ日 OR 最終使用日(または最終プル日)で算出されるため、プッシュ日の日数の指定も必要となります。
ECR re-scan duration settings determines how long Amazon Inspector continuously monitors images in repositories. You can configure re-scan durations for both image push date and image pull date. If the push date of an image is less than the value configured for Image push date, or the image has been pulled within the configured Image pull date, Amazon Inspector will continue to monitor the image and rescan it if a new CVE affecting that image is published.
Security Hubとの統合
Inspectorの検収処理はSecurity Hubと統合することもできます。
ただしImage in use countとImage last in use atは、まだSecurity Hubからはフィルタリングはできないようです。
以上