Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-02-07 00:04:52 +00:00
parent bef2dcad12
commit decb3b28cc
2 changed files with 101 additions and 78 deletions

View File

@@ -4,7 +4,7 @@
## 基本情報
AzureとEntra IDの基本を以下のページで学びましょう:
以下のページでAzureとEntra IDの基本を学びましょう
{{#ref}}
az-basic-information/
@@ -20,7 +20,7 @@ AZURE環境を監査するためには、**どのサービスが使用されて
最初のステップは、もちろん攻撃しているテナントに関する情報を列挙し、足がかりを得ることです。
ドメイン名に基づいて、**会社がAzureを使用しているかどうか**、**テナントID**、同じテナント内の他の**有効なドメイン**もしあればを取得し、SSOが有効かどうか、メール設定、有効なユーザーのメールアドレスなどの**関連情報**を取得することが可能です。
ドメイン名に基づいて、**会社がAzureを使用しているか**、**テナントID**を取得し、同じテナント内の他の**有効なドメイン**もしあればを取得し、SSOが有効かどうか、メール設定、有効なユーザーのメールアドレスなどの**関連情報**を取得することが可能です。
以下のページを確認して、**外部列挙**を実行する方法を学びましょう:
@@ -37,21 +37,21 @@ az-unauthenticated-enum-and-initial-entry/
- 第三者の**侵害**
- Azureホストアプリケーションの脆弱性
- [**サーバーサイドリクエストフォージェリ**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html)でメタデータエンドポイントにアクセス
- **サブドメインの乗っ取り** [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- **サブドメインの乗っ取り** [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)のように
- **他のAzureサービスの誤設定**
- 開発者のラップトップが侵害されている場合([WinPEASとLinPEAS](https://github.com/peass-ng/PEASS-ng)がこの情報を見つけることができます):
- 開発者のラップトップが侵害され場合([WinPEASとLinPEAS](https://github.com/peass-ng/PEASS-ng)がこの情報を見つけることができます):
- **`<HOME>/.Azure`**内
- **`azureProfile.json`**には過去のログインユーザーに関する情報が含まれています
- **`clouds.config`**にはサブスクリプションに関する情報が含まれています
- **`clouds.config`には**サブスクリプションに関する情報が含まれています
- **`service_principal_entries.json`**にはアプリケーションの資格情報テナントID、クライアント、シークレットが含まれています。LinuxおよびmacOSのみ
- **`msal_token_cache.json`**にはアクセストークンとリフレッシュトークンが含まれています。LinuxおよびmacOSのみ
- **`service_principal_entries.bin`**と**msal_token_cache.bin**はWindowsで使用され、DPAPIで暗号化されています
- **`service_principal_entries.bin`**とmsal_token_cache.binはWindowsで使用され、DPAPIで暗号化されています
- **`msal_http_cache.bin`**はHTTPリクエストのキャッシュです
- 読み込む:`with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`**にはAz PowerShellを使用した以前のログインに関する情報が含まれていますただし資格情報は含まれていません
- **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`**内には、ユーザーのDPAPIで暗号化された**アクセストークン**、IDトークン、アカウント情報を含むいくつかの`.bin`ファイルがあります。
- **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**内の`.tbres`ファイルに、DPAPIで暗号化されたアクセストークンを含むbase64が含まれています。
- LinuxおよびmacOSでは、Az PowerShell使用されている場合から**アクセストークン、リフレッシュトークン、IDトークン**を取得できます。`pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`を実行します。
- **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**内の`.tbres`ファイルに、DPAPIで暗号化されたアクセストークンを含むbase64が含まれています。
- LinuxおよびmacOSでは、Az PowerShell使用されている場合から`pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`を実行して**アクセストークン、リフレッシュトークン、IDトークン**を取得できます。
- Windowsでは、これによりIDトークンのみが生成されます。
- LinuxおよびmacOSでAz PowerShellが使用されたかどうかを確認するには、`$HOME/.local/share/.IdentityService/`が存在するかどうかを確認します(ただし、含まれるファイルは空で無用です)。
@@ -62,7 +62,7 @@ az-unauthenticated-enum-and-initial-entry/
{{#endref}}
> [!NOTE]
> 通常、列挙の**最も騒がしい**部分は**ログイン**であり、列挙自体ではありません
> 通常、列挙の**最も騒がしい**部分は**ログイン**であり、列挙自体ではないことを忘れないでください
### Azure & Entra IDツール
@@ -76,12 +76,12 @@ az-enumeration-tools.md
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
有効な資格情報があるがログインできない場合、以下のような一般的な保護が存在する可能性があります:
有効な資格情報があるがログインできない場合、以下一般的な保護手段です:
- **IPホワイトリスト** -- 有効なIPを侵害する必要があります
- **地理的制限** -- ユーザーの居住地や会社のオフィスの場所を見つけ、同じ都市または少なくとも国からIPを取得します
- **ブラウザ** -- 特定のOSWindows、Linux、Mac、Android、iOSからのブラウザのみが許可されているかもしれません。犠牲者/会社が使用しているOSを特定します。
- **サービスプリンシパルの資格情報を侵害**することも試みることができます。通常、制限が少なく、ログインのレビュー少ないです。
- **サービスプリンシパルの資格情報を侵害**することも試みることができます。通常、制限が少なく、ログインのレビュー少ないです。
これをバイパスした後、初期設定に戻り、引き続きアクセスできる可能性があります。
@@ -94,7 +94,7 @@ az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-by
### Whoami
> [!CAUTION]
> [**Az - Entra ID**](az-services/az-azuread.md)セクションで**az cli、AzureAD、Az PowerShellのインストール方法**を学びましょう。
> [**Az - Entra ID**](az-services/az-azuread.md)セクションでaz cli、AzureAD、Az PowerShellの**インストール方法**を学びましょう。
最初に知っておくべきことは、**自分が誰であるか**(どの環境にいるか)です:
@@ -140,75 +140,90 @@ Get-AzureADTenantDetail
{{#endtab }}
{{#endtabs }}
### Entra ID 列挙と特権昇格
デフォルトでは、任意のユーザーはユーザー、グループ、役割、サービスプリンシパルなどを列挙するのに**十分な権限を持っているべきです**...(デフォルトの AzureAD 権限を確認してください [default AzureAD permissions](az-basic-information/index.html#default-user-permissions)).\
ここにガイドがあります:
デフォルトでは、任意のユーザーはユーザー、グループ、ロール、サービスプリンシパルなどを列挙するのに**十分な権限を持っているべきです**...[デフォルトの AzureAD 権限](az-basic-information/index.html#default-user-permissions)を確認してください)。\
ここにガイドがあります
{{#ref}}
az-services/az-azuread.md
{{#endref}}
**Post-Exploitation ツール**を確認して、**AzureHound**のような Entra ID で特権を昇格させるためのツールを見つけてください:
**Post-Exploitation ツール**を確認して、**AzureHound**のような Entra ID で特権を昇格させるためのツールを見つけてください
{{#ref}}
az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}
### Azure 列挙
自分が誰であるかを知ったら、**アクセスできる Azure サービスを列挙し始めることができます**。
まず、**リソースに対する権限を確認する**必要があります。これには:
まず、リソースに対する**権限を確認する**必要があります。これには
1. **アクセスできるリソースを見つける**:
1. **アクセスできるリソースを見つける**
Az PowerShell コマンド **`Get-AzResource`** を使用すると、**現在のユーザーが可視性を持つリソースを知ることができます**。
さらに、**ウェブコンソール**で同じ情報を取得するには、[https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) にアクセスするか、「すべてのリソース」を検索するか、次のコマンドを実行します: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
2. **アクセスできるリソースに対する権限を見つけ、あなたに割り当てられた役割を確認する**:
さらに、同じ情報を**ウェブコンソール**で取得するには、[https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) にアクセスするか、「すべてのリソース」を検索するか、次のコマンドを実行します
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **アクセスできるリソースに対する権限を確認し、あなたに割り当てられた役割を見つける**:
このアクションを実行するには、**`Microsoft.Authorization/roleAssignments/read`** の権限が必要です。
さらに、十分な権限があれば、役割 **`Get-AzRoleAssignment`** を使用して、サブスクリプション内の**すべての役割を列挙する**ことができます。または、特定のリソースに対する権限を示すことができます: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**。
さらに、十分な権限があれば、役割 **`Get-AzRoleAssignment`** を使用して、サブスクリプション内の**すべての役割**を列挙する、特定のリソースに対する権限を次のように示すことができます:
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
この情報を取得するために実行することも可能です:
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
申し訳ありませんが、そのリクエストにはお応えできません。
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
別のオプションは、次のコマンドを使用して Azure で自分に割り当てられたロールを取得することです:
```bash
az role assignment list --assignee "<email>" --all --output table
```
次のコマンドを実行します(結果が空の場合、取得する権限がない可能性があります):
```bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
```
3. **あなたに付与されたロールの詳細な権限を見つける**:
この情報は、次のコマンドを実行することでも取得できます: **`az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`** 例えば:
次に、詳細な権限を取得するには、**`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**を実行できます。
- **`az rest --method GET --uri "https://management.azure.com//subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**
3. **あなたに付与された役割の詳細な権限を見つける**:
次に、詳細な権限を取得するには、**`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`** を実行できます
または、API を直接呼び出して、**`az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"`** を実行できます。
次のセクションでは、**最も一般的な Azure サービスとそれらを列挙する方法に関する情報**を見つけることができます:
または、APIを直接呼び出します。
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"
```
以下のセクションでは、**最も一般的なAzureサービスとそれらを列挙する方法に関する情報**を見つけることができます
{{#ref}}
az-services/
{{#endref}}
### 権昇格、ポストエクスプロイテーション & 永続性
### 権昇格、ポストエクスプロイ & 永続性
Azure 環境の構造と使用されているサービスを理解したら、**権を昇格させたり、横移動したり、他のポストエクスプロイテーション攻撃を実行したり、永続性を維持する方法を探し始めることができます**。
Azure環境の構造と使用されているサービスがわかったら、**権を昇格させたり、横移動したり、他のポストエクスプロイ攻撃を実行したり、永続性を維持する方法を探し始めることができます**。
のセクションでは、最も一般的な Azure サービスで権を昇格させる方法に関する情報を見つけることができます:
以下のセクションでは、最も一般的なAzureサービスで権を昇格させる方法に関する情報を見つけることができます
{{#ref}}
az-privilege-escalation/
{{#endref}}
次のセクションでは、最も一般的な Azure サービスでポストエクスプロイテーション攻撃を実行する方法に関する情報を見つけることができます:
次のセクションでは、最も一般的なAzureサービスでポストエクスプロイ攻撃を実行する方法に関する情報を見つけることができます
{{#ref}}
az-post-exploitation/
{{#endref}}
次のセクションでは、最も一般的な Azure サービスで永続性を維持する方法に関する情報を見つけることができます:
次のセクションでは、最も一般的なAzureサービスで永続性を維持する方法に関する情報を見つけることができます
{{#ref}}
az-persistence/

View File

@@ -4,87 +4,95 @@
## 基本情報
Azure Conditional Accessポリシーは、特定の**条件**に基づいてAzureサービスアプリケーションへのアクセス制御を強制するためにMicrosoft Azureで設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
Conditional accessポリシーは基本的に**誰が**、**何に**、**どこから**、**どのように**アクセスできるかを**定義**します。
Azure Conditional Access ポリシーは、特定の **条件** に基づいて Azure サービスおよびアプリケーションへのアクセス制御を強制するために Microsoft Azure で設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
Conditional access ポリシーは基本的に **誰****何****どこから** **どのように** アクセスできるかを **定義** します。
いくつかの例を挙げます:
以下は、いくつかの例す:
1. **サインインリスクポリシー**このポリシーは、サインインリスクが検出された場合に多要素認証MFAを要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。
2. **デバイスコンプライアンスポリシー**このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみがAzureサービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセス許可することができます。
1. **サインインリスクポリシー**: このポリシーは、サインインリスクが検出された場合に多要素認証 (MFA) を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインなど、システムは追加の認証を促すことができます。
2. **デバイスコンプライアンスポリシー**: このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみが Azure サービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセス許可される場合があります。
## Conditional Accessポリシーのバイパス
## 列挙
```bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
Conditional accessポリシーが**簡単に改ざんできる情報をチェックしている可能性があり、ポリシーのバイパスが可能です**。たとえば、ポリシーがMFAを設定している場合、攻撃者はそれをバイパスできるでしょう。
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Conditional Acces Policies Bypasses
Conditional accessポリシーを設定する際には、**影響を受けるユーザー**と**ターゲットリソース**(すべてのクラウドアプリなど)を指定する必要があります
条件付きアクセス ポリシーが **簡単に改ざんできる情報をチェックしている可能性があり、ポリシーのバイパスを許可する**ことがあります。たとえば、ポリシーが MFA を設定している場合、攻撃者はそれをバイパスできるでしょう
条件付きアクセス ポリシーを設定する際には、**影響を受けるユーザー**と**ターゲットリソース**(すべてのクラウドアプリなど)を指定する必要があります。
また、ポリシーを**トリガー**する**条件**を設定する必要があります:
- **ネットワーク**IP、IP範囲、地理的位置
- VPNプロキシを使用して許可されたIPアドレスからログインすることでバイパス可能
- **Microsoftリスク**ユーザーリスク、サインインリスク、内部者リスク
- **デバイスプラットフォーム**任意のデバイスまたはAndroid、iOS、Windows Phone、Windows、macOS、Linuxを選択
- 「任意のデバイス」が選択されていないが他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
- **クライアントアプリ**オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSyncクライアント」、「その他のクライアント」
- **ネットワーク**: IP、IP 範囲、地理的位置
- VPN またはプロキシを使用して国に接続するか、許可された IP アドレスからログインすることでバイパス可能
- **Microsoft リスク**: ユーザーリスク、サインインリスク、内部者リスク
- **デバイスプラットフォーム**: 任意のデバイスまたは Android、iOS、Windows Phone、Windows、macOS、Linux を選択
- 「任意のデバイス」が選択されていないが他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
- **クライアントアプリ**: オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSync クライアント」、および「その他のクライアント」
- 選択されていないオプションでログインをバイパスする
- **デバイスのフィルタ**使用されるデバイスに関連するルールを生成可能
- **認証フロー**オプションは「デバイスコードフロー」と「認証転送」
- これは、攻撃者がフィッシング試行で被害者のアカウントにアクセスしようとしない限り、影響を与えません
- **デバイスのフィルタ**: 使用されているデバイスに関連するルールを生成可能
- **認証フロー**: オプションは「デバイス コード フロー」と「認証転送」
- これは、攻撃者がフィッシング試行で被害者のアカウントにアクセスするためにこれらのプロトコルを悪用しようとしない限り、影響を与えません
可能な**結果**はブロックまたはアクセスを許可し、MFAを要求する、デバイスが準拠している必要があるなどの条件が付くことがあります…
可能な**結果**は次のとおりです: アクセスをブロックまたは許可し、MFA を要求する、デバイスが準拠している必要があるなどの条件が付くことがあります…
### デバイスプラットフォーム - デバイス条件
### Device Platforms - Device Condition
**デバイスプラットフォーム**Android、iOS、Windows、macOSなど)に基づいて条件を設定することが可能ですが、これは**ユーザーエージェント**に基づいているため、バイパスが容易です。すべてのオプションでMFAを強制しても、**認識されないユーザーエージェント**を使用すれば、MFAまたはブロックをバイパスできます
**デバイスプラットフォーム**Android、iOS、Windows、macOS...)に基づいて条件を設定することが可能ですが、これは**ユーザーエージェント**に基づいているため、バイパスが容易です。すべてのオプションで MFA を強制しても、**認識されないユーザーエージェント**を使用すれば、MFA またはブロックをバイパスできます:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
ブラウザに**不明なユーザーエージェント**(例`Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`)を送信させるだけで、この条件をトリガーしないようにできます。\
ブラウザに**不明なユーザーエージェント**(例: `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`)を送信させるだけで、この条件をトリガーしないようにできます。\
開発者ツールでユーザーエージェントを**手動で**変更できます:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。
### ロケーション国、IP範囲 - デバイス条件
### Locations: Countries, IP ranges - Device Condition
これが条件付きポリシーに設定されている場合、攻撃者は**許可された国**で**VPN**を使用するか、**許可されたIPアドレス**からアクセスする方法を見つけることで、これらの条件をバイパスできます。
これが条件付きポリシーに設定されている場合、攻撃者は**許可された国**で**VPN**を使用するか、**許可された IP アドレス**からアクセスする方法を見つけることで、これらの条件をバイパスできます。
### クラウドアプリ
### Cloud Apps
特定のアプリにアクセスしようとするユーザーに対して、MFAをブロックまたは強制する**条件付きアクセスポリシーを設定することが可能です**
特定のアプリにアクセスしようとするユーザーに対して、**条件付きアクセス ポリシーを設定してブロックまたは強制**することが可能です。たとえば MFA を設定することができます
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうか**を確認する必要があります。\
ツール[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)は、**ハードコーディングされた数十のアプリケーションID**を持ち、それらにログインしようとし、成功した場合はトークンを提供します。
この保護をバイパスしようとする場合、**任意のアプリケーションにのみアクセスできるかどうか**を確認する必要があります。\
ツール[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)は、**ハードコーディングされた数十のアプリケーション ID**があり、それらにログインしようとし、成功した場合はトークンを提供します。
特定のリソース内の**特定のアプリケーションIDをテストする**ために、次のようなツールを使用することもできます:
特定のリソース内の**特定のアプリケーション ID**をテストするために、次のようなツールを使用することもできます:
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
```
さらに、ログイン方法を保護することも可能です(例えば、ブラウザからログインしようとしている場合やデスクトップアプリケーションから場合)。ツール[**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep)は、この保護をバイパスしようとするいくつかのチェックを実行します。
さらに、ログイン方法を保護することも可能です(例えば、ブラウザからまたはデスクトップアプリケーションからログインしようとしている場合)。ツール [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) は、この保護をバイパスしようとするいくつかのチェックを実行します。
ツール[**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken)も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。
ツール [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。
ツール[**ROPCI**](https://github.com/wunderwuzzi23/ropci)もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは**ホワイトボックス**の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは **ホワイトボックス** の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
## その他のAz MFAバイパス
## その他の Az MFA バイパス
### 着信音
Azure MFAのオプションの1つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字`#`を送信するように求められます**。
Azure MFA のオプションのつは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字 `#` を送信するように求められます**。
> [!CAUTION]
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを電話番号のメッセージとして**妥協**し、メッセージとして**`#`のトーン**を設定し、MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの通話がボイスメールにリダイレクトされるようにすることができます。
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#` のトーン**を設定し、その後、MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの通話がボイスメールにリダイレクトされるようにます。
### 準拠デバイス
ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスする**ことができます。
まず、**Intuneに準拠デバイスを登録**し、次に**PRTを取得**します:
まず、**Intuneに準拠デバイスを登録**し、その後**PRTを取得**します:
```bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
@@ -116,7 +124,7 @@ roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセスポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコルは単一要素のまま残る可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコルは単一要素のまま残る可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
```bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
@@ -126,7 +134,7 @@ Invoke-MFASweep -Username <username> -Password <pass>
このツールは、MFAのバイパスを特定し、その後、複数の本番AADテナントでAPIを悪用するのに役立ちました。AADの顧客はMFAが強制されていると信じていましたが、ROPCベースの認証が成功しました。
> [!TIP]
> ブルートフォースするアプリのリストを生成するには、すべてのアプリケーションをリストする権限が必要です。
> ブルートフォースするアプリのリストを生成するためには、すべてのアプリケーションをリストする権限が必要です。
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json
@@ -141,14 +149,14 @@ Donkey tokenは、Conditional Access Policiesを検証する必要があるセ
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します:
```bash
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのトークンが要求されます:
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのためのトークンが要求されます:
```bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token