Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-

This commit is contained in:
Translator
2025-01-26 14:52:32 +00:00
parent 2796a2b612
commit 2e2c81355b
3 changed files with 42 additions and 42 deletions

View File

@@ -35,7 +35,7 @@ print(response)
```
### Cognito Sync
Identity Pool セッションを生成するには、まず **Identity ID を生成する必要があります**。この Identity ID は **そのユーザーのセッションの識別子です**。これらの識別子は最大 20 のデータセットを持ち、最大 1MB のキーと値のペアを保存できます。
Identity Pool セッションを生成するには、まず **Identity ID を生成する必要があります**。この Identity ID は **そのユーザーのセッションの識別子です**。これらの識別子は最大 20 のデータセットを持ち、最大 1MB のキーと値のペアを保存できます。
これは **ユーザーの情報を保持するのに便利です**(常に同じ Identity ID を使用するユーザー)。
@@ -43,19 +43,19 @@ Identity Pool セッションを生成するには、まず **Identity ID を生
### Tools for pentesting
- [Pacu](https://github.com/RhinoSecurityLabs/pacu) は、AWS のエクスプロイトフレームワークで、現在 "cognito\_\_enum" および "cognito\_\_attack" モジュールが含まれており、アカウント内のすべての Cognito アセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、またユーザー作成MFA サポートを含むや、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、ID トークン内の引き受け可能なロールに基づく特権昇格を自動化します。
- [Pacu](https://github.com/RhinoSecurityLabs/pacu) は、AWS のエクスプロイトフレームワークで、現在 "cognito\_\_enum" および "cognito\_\_attack" モジュールが含まれており、アカウント内のすべての Cognito アセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、ユーザー作成MFA サポートを含むや、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、ID トークン内の引き受け可能なロールに基づく特権昇格を自動化します。
モジュールの機能の説明については、[ブログ投稿](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート 2 を参照してください。インストール手順については、メインの [Pacu](https://github.com/RhinoSecurityLabs/pacu) ページを参照してください。
モジュールの機能の説明については、[ブログ記事](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート 2 を参照してください。インストール手順については、メインの [Pacu](https://github.com/RhinoSecurityLabs/pacu) ページを参照してください。
#### Usage
サンプル cognito\_\_attack 使用法は、特定のアイデンティティプールおよびユーザープールクライアントに対してユーザー作成とすべての特権昇格ベクターを試みるものです:
サンプル cognito\_\_attack 使用法は、特定のアイデンティティプールおよびユーザープールクライアントに対してユーザー作成とすべての特権昇格ベクターを試みるものです:
```bash
Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
```
サンプル cognito\_\_enum 使用法は、現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します
サンプル cognito\_\_enum 使用して、現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します:
```bash
Pacu (new:test) > run cognito__enum
```
@@ -65,22 +65,22 @@ Pacu (new:test) > run cognito__enum
```bash
$ pip install cognito-scanner
```
#### 使用法
#### 使用
```bash
$ cognito-scanner --help
```
詳細については、https://github.com/padok-team/cognito-scanner を確認してください。
For more information check https://github.com/padok-team/cognito-scanner
## IAMロールへのアクセス
### 認証されていない
攻撃者がCognitoアプリで**AWS資格情報**を取得するために認証されていないユーザーとして知っておくべき唯一のことは**Identity Pool ID**であり、この**IDはハードコーディング**されている必要があります。IDは次のようになります: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b`(ブルートフォース攻撃はできません)。
攻撃者がCognitoアプリで**AWSクレデンシャル**を取得するために認証されていないユーザーとして知っておく必要がある唯一のことは**アイデンティティプールID**であり、この**IDはハードコーディングされている必要があります**。IDは次のようになります: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b`(ブルートフォース攻撃はできません)。
> [!TIP]
> **IAM Cognitoの認証されていないロールは、デフォルトで** `Cognito_<Identity Pool name>Unauth_Role` **と呼ばれます**
ハードコーディングされたIdentity Pools ID見つけ、それが認証されていないユーザーを許可している場合、次の方法でAWS資格情報を取得できます:
ハードコーディングされたアイデンティティプールID見つかり、認証されていないユーザーを許可している場合、次の方法でAWSクレデンシャルを取得できます:
```python
import requests
@@ -116,9 +116,9 @@ aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --
### 強化された認証フローと基本認証フロー
前のセクションでは、**デフォルトの強化された認証フロー**に従いました。このフローは、生成されたIAMロールセッションに**制限的な**[**セッションポリシー**](../../aws-basic-information/#session-policies)を設定します。このポリシーは、セッションが[**このリストのサービスを使用することを許可する**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)だけです(ロールが他のサービスアクセスできた場合でも)。
前のセクションでは、**デフォルトの強化された認証フロー**に従いました。このフローは、生成されたIAMロールセッションに**制限的な**[**セッションポリシー**](../../aws-basic-information/index.html#session-policies)を設定します。このポリシーは、セッションが[**このリストのサービスを使用することを許可する**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)だけです(ロールが他のサービスへのアクセスを持っていても)。
ただし、これを回避する方法があります。**アイデンティティプールに「基本(クラシック)フロー」が有効になっている場合**、ユーザーはそのフローを使用してセッションを取得でき、**その制限的なセッションポリシーを持たない**ことになります
しかし、これを回避する方法があります。**アイデンティティプールに「基本(クラシック)フロー」が有効になっている場合**、ユーザーはそのフローを使用してセッションを取得でき、**その制限的なセッションポリシーは適用されません**
```bash
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
@@ -131,45 +131,45 @@ aws cognito-identity get-open-id-token --identity-id <identity_id> --no-sign
aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<role_name>" --role-session-name sessionname --web-identity-token <token> --no-sign
```
> [!WARNING]
> この**エラー**が表示され場合、**基本フローが有効になっていない(デフォルト)**ためです。
> この**エラー**が表示され場合、**基本フローが有効になっていない(デフォルト)**ためです。
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
IAM資格情報のセットを持っている場合は、[どのアクセス権があるかを確認し](../../#whoami)、[権限を昇格させる](../../aws-privilege-escalation/)ことを試みてください。
IAM資格情報のセットを持っている場合は、[どのアクセス権があるかを確認し](../../index.html#whoami)、[権限を昇格させる](../../aws-privilege-escalation/index.html)ことを試みてください。
### 認証済み
> [!NOTE]
> **認証済みユーザー**にはおそらく**異なる権限**が付与されるため、アプリ内で**サインアップできる**場合は、それを試みて新しい資格情報を取得してください。
> **認証済みユーザー**には**異なる権限**が付与される可能性があるため、もし**アプリ内でサインアップできる**場合は、それを試みて新しい資格情報を取得してください。
**認証済みユーザーがIdentity Poolにアクセスするための** **ロール**も利用可能かもしれません
**認証済みユーザーがIdentity Poolにアクセスするための役割**も存在する可能性があります
そのためには、**アイデンティティプロバイダー**へのアクセスが必要です。もしそれが**Cognitoユーザープール**であれば、デフォルトの動作を悪用して**自分で新しいユーザーを作成できるかもしれません**。
> [!TIP]
> **IAM Cognito認証ロールはデフォルトで** `Cognito_<Identity Pool name>Auth_Role` と呼ばれます。
> **IAM Cognito認証済みロールはデフォルトで** `Cognito_<Identity Pool name>Auth_Role` と呼ばれます。
いずれにせよ、**以下の例**は、Identity Poolにアクセスするために使用される**Cognitoユーザープール**にすでにログインしていることを前提としています(他のタイプのアイデンティティプロバイダーも構成されている可能性があることを忘れないでください)。
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
--identity-pool-id &#x3C;identity_pool_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-pool-id <identity_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# 前のコマンドの応答からidentity_idを取得
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# IdTokenにはユーザープールグループによってユーザーがアクセスできるロールが含まれています
# 特定のロールの資格情報を取得するには--custom-role-arnを使用します
# IdTokenにはユーザーがUser Poolグループのためにアクセスできる役割が含まれています
# --custom-role-arnを使用して特定の役割の資格情報を取得します
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
<strong> --custom-role-arn &#x3C;role_arn> \
</strong> --logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
<strong> --custom-role-arn <role_arn> \
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
</code></pre>
> [!WARNING]
> **ユーザーがログインしているアイデンティティプロバイダー**や**ユーザー**クレームを使用に応じて、異なるIAMロールを**構成することが可能です**。したがって、同じまたは異なるプロバイダーを通じて異なるユーザーにアクセスできる場合は、**すべてのユーザーのIAMロールにログインしてアクセスする価値があるかもしれません**。
> ユーザーがログインしているアイデンティティプロバイダーや**ユーザー**(クレームを使用)に応じて、**異なるIAMロールを構成することが可能です**。したがって、同じまたは異なるプロバイダーを通じて異なるユーザーにアクセスできる場合は、**すべてのユーザーのIAMロールにログインしてアクセスする価値があるかもしれません**。
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -20,7 +20,7 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド
- **セキュリティタイプ**:
- **標準セキュリティ**: これは特別な構成を必要としないデフォルトのセキュリティタイプです。
- **信頼できる起動**: このセキュリティタイプは、Secure Boot と仮想トラステッドプラットフォームモジュール (vTPM) を使用して、ブートキットやカーネルレベルのマルウェアに対する保護を強化します。
- **機密 VM**: 信頼できる起動に加えて、VM、ハイパーバイザー、およびホスト管理間のハードウェアベースの分離を提供し、ディスク暗号化を改善し、[**詳細**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。**
- **機密 VM**: 信頼できる起動に加えて、VM、ハイパーバイザー、およびホスト管理間のハードウェアベースの分離を提供し、ディスク暗号化を改善し、[**その他**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。**
- **認証**: デフォルトでは新しい **SSH キーが生成されます**が、公開鍵を使用したり、以前のキーとデフォルトのユーザー名 **azureuser** を使用することも可能です。**パスワード**を使用するように構成することもできます。
- **VM ディスク暗号化**: ディスクはデフォルトでプラットフォーム管理キーを使用して静止状態で暗号化されます。
- **ホストでの暗号化**を有効にすることも可能で、データはストレージサービスに送信する前にホストで暗号化され、ホストとストレージサービス間のエンドツーエンドの暗号化が保証されます ([**ドキュメント**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
@@ -38,20 +38,20 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド
- ネットワーク合計が 500GB を超える
- ネットワークアウト合計が 200GB を超える
- VmAvailabilityMetric が 1 未満
- **ヘルスモニター**: デフォルトではポート 80 HTTP プロトコルをチェックします
- **ヘルスモニター**: デフォルトではポート 80 HTTP プロトコルをチェックします
- **ロック**: VM をロックして、読み取り専用 (**ReadOnly** ロック) または読み取りと更新は可能だが削除はできない (**CanNotDelete** ロック) 状態にすることができます。
- ほとんどの VM 関連リソース **もロックをサポート**しています (ディスク、スナップショットなど)。
- ロックは **リソースグループおよびサブスクリプションレベル**でも適用できます。
## ディスクとスナップショット
- **2 つ以上の VM にディスクをアタッチすることを有効にする**ことができます
- **2 つ以上の VM にディスクをアタッチすることを有効にする**ことができます
- デフォルトでは、すべてのディスクは **プラットフォームキーで暗号化**されています。
- スナップショットでも同様です
- スナップショットでも同様です
- デフォルトでは、**すべてのネットワークからディスクを共有する**ことが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、**公開およびプライベートアクセスを完全に無効に**することもできます。
- スナップショットでも同様です
- **ディスクをエクスポートするための SAS URI** (最大 60 日間) を **生成する**ことができ、認証を要求するように構成することも可能です
- スナップショットでも同様です
- スナップショットでも同様です
- **ディスクをエクスポートするための SAS URI** (最大 60 日間) を **生成する**ことができ、認証を要求するように構成することも可能です
- スナップショットでも同様です
{{#tabs}}
{{#tab name="az cli"}}
@@ -77,7 +77,7 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
## 画像、ギャラリー画像と復元ポイント
**VMイメージ**は、**新しい仮想マシンVM**を作成するために必要なオペレーティングシステム、アプリケーション設定、およびファイルシステムを含むテンプレートです。イメージとディスクスナップショットの違いは、ディスクスナップショットが単一の管理ディスクの読み取り専用の時点コピーであり、主にバックアップやトラブルシューティングに使用されるのに対し、イメージは**複数のディスクを含むことができ、新しいVMを作成するためのテンプレートとして機能するように設計されています**。\
イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、これにより**バージョン**を生成したり、イメージをテナント間で**共有**したり、さらには公開することも可能です。
イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、**バージョン**を生成したり、イメージをテナント間で**共有**したり、さらには公開することもできます。
**復元ポイント**は、VMの構成と、VMに接続されているすべての管理ディスクの**時点での**アプリケーション整合性のある**スナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。
@@ -144,13 +144,13 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
## Azure Site Recovery
[**ドキュメント**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview)から: Site Recoveryは、障害時にビジネスアプリケーションとワークロードを稼働させることで、ビジネスの継続性を確保するのに役立ちます。Site Recoveryは、物理および仮想マシンVMで稼働しているワークロードをプライマリサイトからセカンダリロケーションに**レプリケート**します。プライマリサイトで障害が発生した場合、セカンダリロケーションにフェイルオーバーし、そこからアプリにアクセスします。プライマリロケーションが再稼働した後、元に戻すことができます。
[**ドキュメント**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview)から: Site Recoveryは、障害時にビジネスアプリケーションとワークロードを稼働させることで、ビジネスの継続性を確保ます。Site Recoveryは、物理および仮想マシンVMで稼働しているワークロードをプライマリサイトからセカンダリロケーションに**レプリケート**します。プライマリサイトで障害が発生した場合、セカンダリロケーションにフェイルオーバーし、そこからアプリにアクセスします。プライマリロケーションが再稼働した後、元に戻すことができます。
## Azure Bastion
Azure Bastionは、Azureポータルまたはジャンプボックスを介して、仮想マシンVMへの安全でシームレスな**リモートデスクトッププロトコルRDP**および**セキュアシェルSSH**アクセスを可能にします。これにより、VMに対するパブリックIPアドレスの必要性が**排除**されます。
Azure Bastionは、Azure Portalまたはジャンプボックスを介して、仮想マシンVMへの安全でシームレスな**リモートデスクトッププロトコルRDP**および**セキュアシェルSSH**アクセスを可能にします。これにより、VMに対する**パブリックIPアドレスの必要性排除**ます。
Bastionは、動作する必要があるVNet`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、`RDP`および`SSH`を使用してブラウザ経由で内部VMに**接続**できるようにし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、**ブラウザを介して内部VMに接続**することを可能にし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます。
@@ -431,7 +431,7 @@ Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
### VM 拡張機能
Azure VM 拡張機能は、Azure 仮想マシン (VM) 上で **デプロイ後の構成** と自動化タスクを提供する小さなアプリケーションです。
Azure VM 拡張機能は、Azure 仮想マシン (VM) 上で **デプロイ後の構成** と自動化タスクを提供する小さなアプリケーションです。
これにより、**VM 内で任意のコードを実行**することが可能になります。
@@ -721,7 +721,7 @@ az vm application set \
### ユーザーデータ
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。AzureユーザーデータはAWSやGCPとは異なることに注意してください。**ここにスクリプトを置いてもデフォルトでは実行されません**。
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。Azureでは、ユーザーデータはAWSやGCPとは異なり、**ここにスクリプトを置いてもデフォルトでは実行されません**。
### カスタムデータ
@@ -729,8 +729,8 @@ VMにいくつかのデータを渡すことが可能で、期待されるパス
- **Windows**では、カスタムデータは`%SYSTEMDRIVE%\AzureData\CustomData.bin`にバイナリファイルとして配置され、処理されません。
- **Linux**では、`/var/lib/waagent/ovf-env.xml`に保存されていましたが、現在は`/var/lib/waagent/CustomData/ovf-env.xml`に保存されています。
- **Linuxエージェント**: デフォルトではカスタムデータを処理しません。データが有効なカスタムイメージが必要です。
- **cloud-init:** デフォルトではカスタムデータを処理し、このデータは[**いくつかのフォーマット**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)である可能性があります。カスタムデータにスクリプトを送信するだけで、スクリプトを簡単に実行できます。
- **Linuxエージェント**デフォルトではカスタムデータを処理せず、データが有効なカスタムイメージが必要です。
- **cloud-init**デフォルトではカスタムデータを処理し、このデータは[**いくつかのフォーマット**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)である可能性があります。カスタムデータにスクリプトを送信するだけで、簡単にスクリプトを実行できます。
- UbuntuとDebianの両方がここに置いたスクリプトを実行することを試しました。
- これが実行されるためにユーザーデータを有効にする必要はありません。
```bash
@@ -793,7 +793,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
## 認証されていないアクセス
{{#ref}}
../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
{{#endref}}
## ポストエクスプロイト