
AWS EC2上でのSSRF攻撃を、より安全なインスタンスメタデータサービスv2(IMDSv2)への自動アップグレードにより防止します。
AWS EC2 における SSRF 攻撃を防ぐために、よりセキュアなインスタンスメタデータサービス v2 (IMDSv2) への自動アップグレードを実現します。
目的と機能
エンジニアリングチームは、AWS 上に多種多様なコンピューティングインフラストラクチャを保有しており、メタデータサービスを悪用する特定の脆弱性からそれらを保護する必要がある場合があります。IAM を使用する場合や、インスタンス起動時にユーザーデータ情報が必要な場合、インスタンス上でメタデータサービスを実行する必要があります。インスタンスの攻撃対象領域を制限することは、サービス自体が提供する情報を盗み取られて環境内で侵入されるのを防ぐ上で極めて重要です。過去の数多くの有名な攻撃では、このサービスを利用してインスタンスにアタッチされたロールを悪用したり、メタデータサービスを介してアクセス可能な機密データをダンプしたりしてきました。Metabadger は、インスタンスメタデータサービスの「どこで」「どのように」使用しているかを特定し、不要な攻撃の余地を減らして EC2 運用における全体的なリスク体制を低下させるのに役立ちます。
このツールを使用すると、AWS コンピューティングインフラストラクチャに影響を与える可能性があります。メタデータサービスが無効な状態、またはバージョン 2 では動作しないサービスやアプリケーションが存在する可能性があるためです。本番環境への導入には注意し、何か異常が発生した場合に備えてロールバック計画を立ててください。Metabadger には、-v1 フラグを使用してデフォルトのバージョン 1 のサービスにロールバックする機能が組み込まれています。これを使用してインスタンスをすばやくデフォルトに戻すことができます。理想的には、このツールを非本番環境で実行し、検証環境としてメタデータバージョンを更新してから、本番環境に適用することをお勧めします。
ステップ 1
まず、特定の AWS リージョンにおけるメタデータサービスの全体的な使用状況を把握します。Metabadger は、/.aws/credentials ファイル内の認証情報が指すリージョン、または現在引き受けているロールのリージョンにおける現在の使用状況を評価します。discover-metadata コマンドの実行時に --region フラグを指定すれば、現在設定されているリージョンとは別のリージョンに変更することもできます。インスタンスが実行しているバージョン、およびサービスが有効か無効かを把握したら、サービスを強化するためのより明確なアクションプンを策定できるようになります。設定可能な各メタデータオプションの正確な意味は こちら で確認できます。
ステップ 2
サービスを v2 に切り替える際に評価すべき領域の 1 つは、IAM ロールの使用です。Metabadger を使用すると、リージョン内で既に IAM ロールを使用している可能性のあるインスタンスを特定できます。discover-role-usage コマンドは、ロールがアタッチされているインスタンスのリストを出力します。ロールを使用しているインスタンスが多い場合は、ワークロードの全体的な機能に影響が出ないように、サービスを v2 に更新する際に注意が必要です。
ステップ 3
初期の調査と評価が完了したら、コンピューティングインフラストラクチャをメタデータサービスの v2 を使用するか、使用されていない場所では無効にするように段階的に強化するアプローチを取ることができます。harden-metadata コマンドを使用すると、特に指定がない限り、特定のリージョン内のすべてのインスタンスを更新できます。また、--tags フラグを使用してインスタンスタグを指定したり、設定を適用したいインスタンスの CSV を含む入力ファイルを指定することもできます。v2 への適切な更新を行い、不要なサービスを無効にしたら、ステップ 1 の項目を使用して再評価し、環境がロックダウンされていることを確認できます。更新したくないインスタンスがある場合は、--exclusion フラグを使用してタグまたはインスタンス ID で除外できます。
Metabadger は、以下の権限を持つ IAM ロールまたは認証情報を必要とします。
ec2:ModifyInstanceAttribute
ec2:DescribeInstances
インスタンスメタデータサービスに変更を加える際は、注意を払い、AWS のバージョン 2 への安全なアップグレードに関する追加のガイダンスに従う必要があります。Metabadger は、AWS のコンピューティングインフラストラクチャをさらにセキュアにするためのプロセスを支援するために設計されています。
AWS Best Practice Guide on Updating to IMDSv2
pip でインストール
pip3 install --user metabadger
Github でインストール
$ git clone https://github.com/salesforce/metabadger
$ cd metabadger
$ pip install -e .
$ metabadger
Usage: metabadger [OPTIONS] COMMAND [ARGS]...
Metabadger is an AWS Security Tool used for discovering and hardening the
Instance Metadata service.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
cloudwatch-metrics Pull CloudWatch Metrics for MetadataNoToken usage
disable-metadata Disable the IMDS service on EC2 instances
discover-metadata Discover summary of IMDS service usage within EC2
discover-role-usage Discover summary of IAM role usage for EC2
harden-metadata Harden the AWS instance metadata service from v1 to v2
cloudwatch-metrics
AWS CloudWatch の MetadataNoToken メトリクスを使用して、IMDSv1 の使用状況に関する情報を直接取得します。このコマンドは、過去 1 時間以内に v1 のサービスを積極的に使用しているインスタンスを表示します。このコマンドを実行する際は、CloudWatch メトリクスを表示する IAM 権限が必要であることに注意してください。
Options:
-a, --all-region Pull CloudWatch metrics across all available
regions
-r, --region TEXT Specify which AWS region you will perform this
command in
-t, --time-period INTEGER The CloudWatch time period in seconds used to
track the IMDS v1 metric
-p, --profile TEXT Specify the AWS IAM profile.
--help Show this message and exit.
discover-metadata
使用されているバージョンや全体的な適用率を含む、インスタンスメタデータサービスの全体的な使用状況のサマリー。これらの数値を利用して、メタデータの使用状況がどの程度強化されているか、v2 と v1 のどちらで実施しているかという全体的な体制を把握することができます。
Options:
-a, --all-region Provide a metadata summary for all available regions in the AWS account
-j, --json Get metadata summary in JSON format
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
discover-role-usage
インスタンスとそれらが使用しているロールのサマリー。これにより、メタデータサービス自体に更新を加える際にどの程度注意を払う必要があるかが把握できます。
Options:
-p, --profile TEXT Specify the AWS IAM profile.
-r, --region TEXT Specify which AWS region you will perform this command in
harden-metadata
インスタンスをメタデータ v1 または v2 のいずれかに変更する機能と、ドライランモードを実行することで変更されるインスタンスの数を把握する機能。
Options:
-a, --all-region Update IMDS across all regions in your account
-e, --exclusion The exclusion flag will apply to everything besides what is specified, tags or instances
-d, --dry-run Dry run of hardening metadata changes
-v1, --v1 Enforces v1 of the metadata service
-i, --input-file PATH Path of csv file of instances to harden IMDS for
-t, --tags TEXT A comma seperated list of tags to apply the hardening setting to
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
disable-metadata
インスタンス上のメタデータサービスを完全に無効にするコマンド。
Options:
-e, --exclusion The exclusion flag will apply to everything besides what is specified, tags or instances
-d, --dry-run Dry run of disabling the metadata service
-i, --input-file PATH Path of csv file of instances to disable IMDS for
-t, --tags TEXT A comma seperated list of tags to apply the hardening setting to
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
Metabadger によるすべての変更は、作業ディレクトリに保存される metabadger.log というファイルに記録されます。ファイルには、ツールがメタデータサービスに変更を加えるすべてのアクションについて、以下が含まれます。