【Web】クラウドセキュリティメタデータサービス

序文

最近またSRCを掘っていたらSSRFと思われるインターフェースに遭遇したのでメタデータサービスにアクセスしてみたところうまくいきましたが、以前はあまり触ることがなかったので当分分かりませんでした, そこで以下の記事を書きました。

この記事では、メタデータに関連するいくつかの知識ポイントと、メタデータの漏洩方法、ロール情報の取得、ロールの一時認証情報の取得、さらに認証情報を通じてリソースを取得する方法について詳しく紹介します

関連情報

1. クラウドサーバーインスタンス

クラウドコンピューティング環境上で動作する仮想サーバーのことを指します。インスタンスとはクラウドコンピューティングの基本単位であり、物理サーバー上に仮想化技術を用いて構築された仮想サーバーであり、コンピューティング、ストレージ、ネットワークなどのさまざまなサービスを提供できます。

ユーザーの観点からは、最初にモデル、リージョン、構成時間、または請求方法を選択する必要があり、購入が成功すると、クラウド サーバー インスタンスが生成されます。

2. メタデータ

メタデータとは、データを説明するデータのことであり、データの定義、構造、形式、属性などの記述を含む、データを説明する情報の一種です。言い換えれば、メタデータはデータに関するデータ、つまりデータの説明と管理に使用される情報です。

メタデータには、データ型、形式、サイズ、ソース、所有者、バージョン、作成時間、変更時間など、さまざまな種類の情報を含めることができます。メタデータは、データ間の関係、グループ化、分類、その他の情報に加えて、データの使用法や権限制御に関する情報も記述することができます。

クラウド サービス インスタンスでは、メタデータは通常、インスタンスのID、名前、ステータス、実行時間、オペレーティング システム、ネットワーク構成、セキュリティ グループ構成、ストレージ構成など、インスタンスを説明するデータ情報を指します。これらのメタデータは通常、クラウド サービス プロバイダーのメタデータ サービスに保存され、メタデータ サービスの API またはコマンド ライン ツールを通じてアクセスおよび管理できます。

クラウド サービス インスタンスでは、メタデータは通常読み取り専用であり、ユーザーはメタデータを直接変更できないことに注意してくださいただし、ユーザーは、インスタンスの名前、ネットワーク構成、セキュリティ グループ構成などを変更するなど、インスタンスの構成を変更することでメタデータを変更できます。

3. 共通のメタデータ クエリ インターフェイス

一般的なクラウド サービスのメタデータ クエリ インターフェイスには次のものがあります。

EC2 インスタンスのメタデータ クエリ インターフェイス: Amazon EC2 インスタンスのメタデータ クエリ インターフェイスは、HTTP リクエストを通じて EC2 インスタンスのメタデータを取得できるアマゾン ウェブ サービス (AWS) のメタデータ サービスです。たとえば、 http://169.254.169.254/latest/meta-data/ を使用してインスタンスのメタデータにアクセスできます。

Google Cloud インスタンス メタデータ クエリ インターフェース: Google Cloud インスタンス メタデータ クエリ インターフェースは、HTTP リクエストを通じてインスタンス メタデータを取得できる Google Cloud Platform のメタデータ サービスです。たとえば、 http://metadata.google.internal/computeMetadata/v1/ を使用してインスタンスのメタデータにアクセスできます。

Azure インスタンス メタデータ クエリ インターフェイス: Azure インスタンス メタデータ クエリ インターフェイスは、HTTP リクエストを通じてインスタンス メタデータを取得できる Microsoft Azure のメタデータ サービスです。たとえば、 http://169.254.169.254/metadata/instance?api-version=2017-08-01 を使用してインスタンスのメタデータにアクセスできます。

4.169.254.169.254

169.254.169.254 は、ローカル エリア ネットワークで自動的に構成されたサービスを提供するために通常使用される特別な IP アドレスです。クラウド コンピューティング環境では、このアドレスは通常、クラウド サービス インスタンスのメタデータ サービス アドレスとして使用されます。

具体的には、クラウド サービス プロバイダーは通常、クラウド サービス インスタンスにアドレス 169.254.169.254を事前構成して、インスタンスにメタデータ サービスを提供します。ユーザーはこのアドレスにアクセスすることでインスタンスのメタデータ情報を取得できます。

なお、169.254.169.254はローカルリンクアドレスであり、インスタンス内のみアクセス可能であり、外部からはアクセスできない。さらに、クラウド サービス プロバイダーによってメタデータ サービスの実装とアクセス方法が若干異なる場合があるため、ユーザーはメタデータ サービスへのアクセス方法と使用方法を理解するために、対応するドキュメントとガイドを参照する必要があります。

5. /latest/meta-data/ 

http://169.254.169.254/latest/meta-data/ は、Amazon EC2 インスタンスのメタデータにアクセスするための URL であり、この URL のパス部分にはいくつかのサブディレクトリが含まれており、各サブディレクトリに異なるメタデータ情報が格納されます。以下に、いくつかの一般的なサブディレクトリと対応するメタデータ情報を示します。

  1. ami-id: インスタンスの Amazon Machine Image (AMI) ID。
  2. ami-launch-index: インスタンスを起動するシーケンス番号。
  3. ami-manifest-path: AMI マニフェスト パス。
  4. block-device-mapping/: インスタンスの EBS ボリュームやインスタンス ストレージ デバイスなどのブロック デバイス マッピング情報。
  5. hostname: インスタンスのホスト名。
  6. インスタンス ID: インスタンスの ID。
  7. インスタンスタイプ: インスタンスのタイプ。
  8. local-ipv4: インスタンスのローカル IPv4 アドレス。
  9. mac: インスタンスの MAC アドレス。
  10. place/: インスタンスの配置情報 (リージョン、アベイラビリティ ゾーン、インスタンスが配置されているロケーション グループなど)。
  11. プロファイル: インスタンスの IAM ロール名。
  12. public-hostname: インスタンスのパブリックホスト名。
  13. public-ipv4: インスタンスのパブリック IPv4 アドレス。
  14. 予約 ID: インスタンスの予約 ID。
  15. security-groups: インスタンスが属するセキュリティ グループのリスト。

6. キャラクター名

AWS では、ロール名は AWS Identity and Access Management (IAM) でロールを識別するために使用されるリソース識別子です。IAM ロールは、ある AWS リソースまたはサービスが別の AWS リソースまたはサービスにアクセスできるようにするための一連の権限を定義する AWS リソースです。

ロール名は、ユーザーが IAM ロールを管理しやすいように設定されており、通常は文字、数字、特殊文字で構成され、長さは 64 文字を超えません。ユーザーは、さまざまな IAM ロールに異なる名前を設定して、これらのロールをより適切に区別して管理できます。

IAM ロールには、EC2 インスタンス、Lambda 関数、API ゲートウェイなどの他の AWS リソースおよびサービスへのアクセスを付与できます。これらのリソースは、ロール名を通じて対応する IAM ロールを参照およびアクセスできるため、対応するアクセス許可とアクセス制御を取得できます。

つまり、ロール名は AWS Identity and Access Management (IAM) でロールを識別するために使用されるリソース識別子であり、これによりユーザーは IAM ロールを管理できるようになり、他の AWS リソースやサービスによるアクセスと承認にも使用できます。

7. 役割の一時認証情報

ロールの一時的な認証情報を取得するには、AWS Security Token Service (STS) AssumeRole API を使用できます。AssumeRole APIを使用すると、IAM ロールで定義されたポリシーとアクセス許可を使用してAWS リソースとサービスにアクセスするための一時的なセキュリティ認証情報を取得できます。

アクセス キー ID、キー アクセス キー、セキュリティ トークンが含まれます。これらの認証情報は時間に敏感であり、一定期間内に AWS のリソースとサービスにアクセスするために使用できます。

具体的には、コマンドライン ツールで AWS SDK または AWS CLI を使用し、ロールの一時的な認証情報を使用して AWS リソースにアクセスできます。AWS CLI を使用して AWS リソースにアクセスするためのコマンドの例をいくつか示します。

  • バケットの名前を使用して、S3 バケット内のオブジェクトを一覧表示します。aws s3 ls s3://<bucket-name> --profile <profile-name>
  • EC2 インスタンス ID を使用してインスタンスのタグを一覧表示します。aws ec2 describe-tags --filters "Name=resource-id,Values=<instance-id>" --profile <profile-name>
  • Lambda 関数名を使用して関数の設定情報を一覧表示します。aws lambda get-function --function-name <function-name> --profile <profile-name>

これらのコマンドの は、<profile-name> 使用する IAM ロールの一時認証情報を指定する AWS CLI プロファイルのプロファイル名です設定ファイルでは、ロールの ARN (Amazon リソース ネーム) と、アクセス キー ID、キー アクセス キー、セキュリティ トークンなどの認証情報を指定します。

コマンドを使用して aws configure IAM ロールの一時認証情報を構成するには、次の手順に従います。

1. AWS マネジメントコンソールにサインインし、一時的な認証情報に使用する IAM ロールを選択します。

2. ロールのアクセス許可ポリシーで、アクセスしたい AWS リソースにアクセスするアクセス許可がロールにあることを確認します。

3. ローカルターミナルで AWS CLI を開き、 aws configure コマンドを実行します。

4. プロンプトに従って、次のような構成情報を入力します。

  • AWS アクセス キー ID とキー アクセス キー: IAM コンソールまたは AWS CLI を使用して、これらの認証情報を作成および管理できます。
  • デフォルトのリージョン: 使用する AWS リージョンを指定します。どの領域を使用すべきかわからない場合は、空白のままにしてデフォルト値を使用します。
  • 出力形式: AWS CLI の出力結果の形式を指定します。json 出力結果の解析と処理が容易な形式を使用することをお勧めします 。

5. AWS Access Key ID および について AWS Secret Access Keyは、IAM ロールの一時認証情報からのアクセス キー ID とキー アクセス キーを それぞれAWS Access Key ID および AWS Secret Access Key フィールドに入力します。

6. には Default region name、使用する AWS リージョンの名前を入力できます。どの領域を使用すべきかわからない場合は、空白のままにしてデフォルト値を使用します。

7. については 、出力結果の解析と処理を容易にするDefault output format入力を提案します 。json

8. 入力が完了したら、プロンプトに従って確認します。

上記の手順を完了すると、  aws IAM ロールの一時的な認証情報を手動で提供しなくても、コマンドライン ツールを使用して AWS リソースにアクセスできるようになります。たとえば、次のコマンドを使用して、S3 バケット内のオブジェクトを一覧表示できます。

aws s3 ls s3://<bucket-name>

8.IAM

IAM は AWS (アマゾン ウェブ サービス) の認証およびアクセス管理サービスであり、正式名は Identity and Access Management です。IAM を使用すると、AWS ユーザーとその AWS リソースへのアクセス権限を作成および管理できます。IAM を使用すると、各ユーザーに個別の認証情報を割り当て、ユーザーがアクセスできる AWS リソースとその方法を定義できます。IAM は、承認されたユーザーのみが AWS リソースにアクセスできるようにすることで、AWS リソースを保護するのにも役立ちます。

IAM の中核概念には、ユーザー、グループ、ロール、ポリシーが含まれます。ユーザーは、AWS リソースにアクセスする必要がある個人またはアプリケーションを表す AWS 内のエンティティです。グループは、同じ権限を付与できるユーザーの集合です。ロールは、AWS のサービスまたはアプリケーションを表す AWS のエンティティであり、サービスまたはアプリケーションがアクセスできる AWS リソースとその方法を定義します。ポリシーは、ユーザー、グループ、ロールの権限を定義し、これらのエンティティへのアクセスを制御する JSON 形式のルールのセットです。

IAM は、AWS リソースのセキュリティとコンプライアンスの要件を実装し、許可されたユーザーのみが AWS リソースにアクセスできるようにするのに役立ちます。

9. インスタンスメタデータ API

インスタンス メタデータ サービスは、インスタンスに関する IAM 関連情報にアクセスするための他の API も提供します。一般的に使用される API の一部を次に示します。

  • http://169.254.169.254/latest/meta-data/iam/: インスタンスの IAM メタデータ情報を取得するために使用されます。
  • http://169.254.169.254/latest/meta-data/iam/security-credentials/: インスタンスによって現在使用されている IAM ロールの一時的な認証情報を取得するために使用されます。
  • http://169.254.169.254/latest/meta-data/iam/info: インスタンスの IAM インスタンス構成情報を取得するために使用されます。
  • http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name>: 指定された IAM ロールの一時的な認証情報を取得するために使用されます。 は <role-name> ロールの名前です。
  • http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name>/: 指定された IAM ロールの一時的な認証情報を取得するために使用されます。この API と以前の API の違いは、URL の末尾にスラッシュが追加されることです /

10. メタデータ攻撃のアイデア

一般的なメタデータ攻撃のアイデアをいくつか示します。

ステップ 1 : SSRF、RCE、およびメタデータ サービスに基づくファイル読み取り攻撃 : 攻撃者は、クラウド サービス インスタンス内のアプリケーションに、攻撃者が制御するサーバーに HTTP リクエストを送信させ、サービスのメタデータ情報を取得させる悪意のあるリクエストを作成します。インスタンスです。http://169.254.169.254/latest/meta-data/iam/info : IAM インスタンスの構成情報、主にrole-name

ステップ 2: メタデータ サービスの機密情報を悪用するrole-name: 攻撃者は、メタデータ サービスを通じてインスタンスの機密情報を取得できます。次に例を示します。

  • キー、証明書、パスワード
  • 一時的な認証情報:http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name>

ステップ 3:ステップ 2 で取得した一時認証情報を使用して、インスタンスに関する機密情報を取得します。

IAM ロールの一時認証情報を正常に取得できた場合は、これらの認証情報を使用して AWS S3 バケット内の機密データにアクセスできます。考えられる攻撃は次のとおりです。

  • ファイルのダウンロード: ロールの一時認証情報を使用して、AWS CLI または SDK を使用して S3 バケットに保存されているファイルをダウンロードできます。次のコマンドを使用してファイルをダウンロードできます。
aws s3 cp s3://<bucket-name>/<object-key> <local-file-path> --profile <role-profile>
  • ファイルのリスト: ロールの一時認証情報を使用すると、AWS CLI または SDK を使用して、S3 バケットに保存されているすべてのファイルをリストできます。次のコマンドを使用してファイルを一覧表示できます。
aws s3 ls s3://<bucket-name> --profile <role-profile>

  • ファイルのアップロード: ロールの一時認証情報を使用すると、AWS CLI または SDK を使用してファイルを S3 バケットにアップロードできます。ファイルをアップロードするコマンドは、ファイルをダウンロードするコマンドと似ていますが、ローカル ファイル パスとターゲット S3 バケットの名前とオブジェクト キーを指定する必要があります。

あとがき

記録を通じて、これは単なる攻撃リンクであり、他にも悪用できる点が数多くあることがわかりました。たとえば、メタデータには一時的な認証情報だけでなく、鍵証明書やパスワードも含まれている可能性があります。これには、他のさまざまな API の使用が含まれます。これは後の話なので、記事の後半に記録します。

おすすめ

転載: blog.csdn.net/xiru9972/article/details/131039754