Cognito Identity Pools
基本情報
Identity poolsは、ユーザーが一時的な資格情報を取得できるようにすることで重要な役割を果たします。これらの資格情報は、Amazon S3やDynamoDBなどのさまざまなAWSサービスにアクセスするために必要です。Identity poolsの注目すべき機能の1つは、匿名のゲストユーザーとユーザー認証のためのさまざまなアイデンティティプロバイダーのサポートです。サポートされているアイデンティティプロバイダーには以下が含まれます:
Amazon Cognitoユーザープール
Facebook、Google、Login with Amazon、Sign in with Appleなどのソーシャルサインインオプション
OpenID Connect(OIDC)に準拠したプロバイダー
SAML(Security Assertion Markup Language)アイデンティティプロバイダー
開発者認証済みのアイデンティティ
Cognito Sync
Identity Poolセッションを生成するには、まずIdentity IDを生成する必要があります。このIdentity IDは、そのユーザーのセッションの識別です。これらの識別には、最大20のデータセットを持つことができ、1MBのキーと値のペアを保存できます。
これは、ユーザーの情報を保持するのに便利です(常に同じIdentity IDを使用するユーザー)。
さらに、サービスcognito-syncは、この情報を管理および同期するためのサービスです(データセット内で情報を送信し、ストリームやSNSメッセージに情報を送信する)。
ペンテストツール
Pacu、AWSの脆弱性検出フレームワークには、現在、アカウント内のすべてのCognitoアセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、変更可能なカスタム属性、使用可能なIdentity Pool資格情報、IDトークン内の仮定可能なロールなどに基づいて、ユーザーの作成(MFAサポートを含む)と特権昇格を自動化する「cognito__enum」と「cognito__attack」モジュールが含まれています。
モジュールの機能の説明については、ブログ記事の第2部を参照してください。インストール手順については、メインのPacuページを参照してください。
使用方法
指定されたIdentity Poolとユーザープールクライアントに対してユーザーの作成とすべての特権昇格ベクトルを試行するためのcognito__attackの使用例:
サンプルcognito__enumの使用方法を示します。現在のAWSアカウントで表示されているすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します。
Cognito Scanner は、Cognito 上でのさまざまな攻撃を実装した Python の CLI ツールであり、望ましくないアカウント作成やアイデンティティプールのエスカレーションを含みます。
インストール
使用法
詳細については、https://github.com/padok-team/cognito-scanner を参照してください。
IAMロールへのアクセス
認証されていない
CognitoアプリでAWS資格情報を取得するために攻撃者が知る必要がある唯一のものは、Identity Pool IDであり、このIDはWeb/モバイルアプリケーションにハードコードされている必要があります。IDは次のように見えます:eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(ブルートフォースできません)。
IAM Cognito未認証ロールはデフォルトでCognito_<Identity Pool name>Unauth_Role
と呼ばれます。
ハードコードされたIdentity Pools IDを見つけ、認証されていないユーザーを許可している場合、次の手順でAWS資格情報を取得できます:
または、次のaws cliコマンドを使用できます:
デフォルトでは、未認証のCognitoユーザーはポリシーを介して割り当てられた場合でも、権限を持つことはできません。以下のセクションを確認してください。
強化認証フローと基本認証フロー
前のセクションでは、デフォルトの強化認証フローに従いました。このフローは、生成されたIAMロールセッションに制限があるセッションポリシーを設定します。このポリシーでは、セッションがこのリストからのサービスのみを使用できるようにします(ロールが他のサービスにアクセスできる場合でも)。
ただし、Identity poolが"Basic (Classic) Flow"を有効にしている場合、ユーザーはそのフローを使用してセッションを取得でき、そのセッションにはその制限のあるセッションポリシーが適用されません。
このエラーを受け取った場合、**基本フローが有効になっていない(デフォルト)**ためです。
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
IAM資格情報を持っている場合は、どのアクセス権限を持っているかを確認し、特権を昇格しようとしてください。
認証済み
認証済みユーザーはおそらく異なる権限が付与されるため、アプリ内でサインアップできる場合は、それを試して新しい資格情報を取得してください。
認証済みユーザーがアクセスするIdentity Poolにはロールも利用可能かもしれません。
そのためにはアイデンティティプロバイダへのアクセスが必要です。それがCognitoユーザープールである場合、デフォルトの動作を悪用して新しいユーザーを作成することができるかもしれません。
IAM Cognito認証済みロールはデフォルトでCognito_<Identity Pool name>Auth_Role
と呼ばれます。
とにかく、次の例では、すでにCognitoユーザープールにログインしてIdentity Poolにアクセスしていることを想定しています(他のタイプのアイデンティティプロバイダも構成されている可能性があることを忘れないでください)。
ユーザーがログインしているアイデンティティプロバイダによって異なるIAMロールを構成することが可能です。また、クレームを使用してユーザーによっても異なるIAMロールを構成することも可能です。したがって、同じまたは異なるプロバイダを介して異なるユーザーにアクセス権がある場合は、すべてのユーザーのIAMロールにログインしてアクセスする価値があるかもしれません。
Last updated