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アセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、変更可能なカスタム属性に基づいてユーザーの作成(MFAサポートを含む)および特権昇格を自動化する「cognito__enum」と「cognito__attack」モジュールが含まれています。使用可能なIdentity Pool資格情報、IDトークン内の仮定可能なロールなど。
モジュールの機能の説明については、ブログ記事の第2部を参照してください。インストール手順については、Pacuのメインページを参照してください。
使用方法
指定されたIdentity Poolとユーザープールクライアントに対してユーザーの作成とすべての特権昇格ベクトルを試行するためのcognito__attackの使用例:
以下は、現在のAWSアカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集するためのcognito__enumのサンプル使用方法です:
Cognito Scanner は、Cognito 上でのさまざまな攻撃、不要なアカウント作成、およびアイデンティティプールのエスカレーションを実装する Python の CLI ツールです。
インストール
使用法
For more information check 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ロールにログインしてアクセスする価値があるかもしれません。
最終更新