# Az - Cloud Kerberos Trust

{{#include ../../../banners/hacktricks-training.md}}

**この投稿は** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **の要約であり、攻撃に関するさらなる情報を確認できます。この技術については** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)**でもコメントされています。**

## Kerberos Trust Relationship Overview

**Cloud Kerberos Trust (Entra ID -> AD)** -- この機能（Windows Hello for Businessの一部）は、一方向の信頼を確立し、オンプレミスのADが**Entra IDを信頼して**ADのためにKerberosチケットを発行します。これを有効にすると、ADに**AzureADKerberos$**コンピュータオブジェクトが作成され（読み取り専用ドメインコントローラとして表示される）、リンクされた**`krbtgt_AzureAD`**アカウント（セカンダリKRBTGT）が作成されます。Entra IDはこれらのアカウントの鍵を保持し、ADユーザーのために「部分的」Kerberos TGTを発行できます。ADドメインコントローラはこれらのチケットを尊重しますが、RODCのような制限があります：デフォルトでは、**高特権グループ（Domain Admins、Enterprise Adminsなど）は*拒否*され**、通常のユーザーは許可されます。これにより、Entra IDは通常の条件下でドメイン管理者を信頼を介して認証できなくなります。しかし、後で見るように、十分なEntra IDの権限を持つ攻撃者はこの信頼設計を悪用できます。

## Pivoting from Entra ID to On-Prem AD

**シナリオ：** 対象組織は**Cloud Kerberos Trust**をパスワードレス認証のために有効にしています。攻撃者はEntra ID（Azure AD）で**Global Administrator**権限を取得しましたが、まだオンプレミスのADを制御していません。攻撃者はまた、ドメインコントローラへのネットワークアクセスを持つ足場を確保しています（VPNまたはハイブリッドネットワーク内のAzure VM経由）。クラウドの信頼を利用して、攻撃者はAzure ADの制御を活用してAD内で**Domain Admin**レベルの足場を取得できます。

**前提条件：**

-   **Cloud Kerberos Trust**がハイブリッド環境で構成されている（指標：ADに`AzureADKerberos$` RODCアカウントが存在する）。

-   攻撃者はEntra IDテナント内で**Global Admin（またはHybrid Identity Admin）**権限を持っている（これらの役割はAD Connectの**同期API**を使用してAzure ADユーザーを変更できます）。

-   攻撃者が認証できる少なくとも1つの**ハイブリッドユーザーアカウント**（ADとAADの両方に存在）が必要です。これは、その資格情報を知っているかリセットするか、パスワードレスの方法（例：一時的アクセスパス）を割り当ててプライマリリフレッシュトークン（PRT）を生成することで取得できます。

-   デフォルトのRODC「拒否」ポリシーに*含まれない*高特権の**オンプレミスADターゲットアカウント**。実際には、**AD Connect同期アカウント**（通常は**MSOL_***と名付けられる）が優れたターゲットであり、AD内でDCSync（レプリケーション）権限を持っていますが、通常は組み込みの管理グループのメンバーではありません。このアカウントは通常Entra IDに同期されないため、そのSIDは衝突なく偽装するために利用可能です。

**攻撃手順：**

1.  **Azure AD同期APIアクセスを取得する：** Global Adminアカウントを使用して、Azure AD **Provisioning（同期）API**のアクセストークンを取得します。これは**ROADtools**や**AADInternals**のようなツールを使用して行うことができます。例えば、ROADtools（roadtx）を使用して：
```bash
# Using roadtx to get an Azure AD Graph token (no MFA)
roadtx gettokens -u <GlobalAdminUPN> -p <Password> --resource aadgraph
```
*(Alternatively, AADInternals' `Connect-AADInt` can be used to authenticate as Global Admin.)*

2.  **ハイブリッドユーザーのオンプレミス属性を変更する:** Azure AD **同期API**を利用して、選択したハイブリッドユーザーの**onPremises Security Identifier (SID)**と**onPremises SAMAccountName**をターゲットADアカウントに一致させます。これにより、Azure ADに対してクラウドユーザーが偽装したいオンプレミスアカウントに対応していることを効果的に伝えます。オープンソースの**ROADtools Hybrid**ツールキットを使用して:
```bash
# Example: modify a hybrid user to impersonate the MSOL account
python3 modifyuser.py -u <GlobalAdminUPN> -p <Password>\
--sourceanchor <ImmutableID_of_User>\
--sid <TargetAD_SID> --sam <TargetAD_SAMName>
```
> ユーザーの `sourceAnchor` (不変ID) は、変更するAzure ADオブジェクトを特定するために必要です。このツールは、ハイブリッドユーザーのオンプレSIDとSAMアカウント名をターゲットの値（例：MSOL_xxxxアカウントのSIDとSAM）に設定します。Azure ADは通常、Graphを介してこれらの属性を変更することを許可していません（読み取り専用です）が、同期サービスAPIはそれを許可し、グローバル管理者はこの同期機能を呼び出すことができます。

3.  **Azure ADから部分的なTGTを取得する:** 変更後、ハイブリッドユーザーとしてAzure ADに認証します（例えば、デバイス上でPRTを取得するか、彼らの資格情報を使用します）。ユーザーがサインインすると（特にドメイン参加またはEntra参加のWindowsデバイス上で）、Azure ADはそのアカウントに対して**部分的なKerberos TGT (TGT**<sub>**AD**</sub>)を発行します。これはCloud Kerberos Trustが有効になっているためです。この部分的なTGTはAzureADKerberos$ RODCキーで暗号化され、設定した**ターゲットSID**が含まれています。これをROADtoolsを介してユーザーのためにPRTを要求することでシミュレートできます:
```bash
roadtx getprt -u <HybridUserUPN> -p <Password> -d <DeviceID_or_Cert>
```
この出力は、部分的なTGTとセッションキーを含む`.prt`ファイルを生成します。アカウントがクラウド専用のパスワードであった場合、Azure ADはPRTレスポンスにTGT_ADを含めます。

4.  **部分的TGTをフルTGTに交換（AD上で）:** 部分的TGTは、ターゲットアカウントの**フルTGT**を取得するためにオンプレミスのドメインコントローラーに提示できます。これは、`krbtgt`サービス（ドメインの主要なTGTサービス）に対してTGSリクエストを実行することで行います。基本的に、チケットをフルPACを持つ通常のTGTにアップグレードします。この交換を自動化するためのツールが利用可能です。例えば、ROADtools Hybridのスクリプトを使用します:
```bash
# Use the partial TGT from the PRT file to get a full TGT and NTLM hash
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash
```
このスクリプト（またはImpacketの同等物）は、ドメインコントローラーに連絡し、ターゲットADアカウントの有効なTGTを取得します。特別なKerberos拡張が使用されている場合、アカウントのNTLMハッシュも含まれます。**`KERB-KEY-LIST-REQ`**拡張は自動的に含まれ、DCにターゲットアカウントのNTLMハッシュを暗号化された返信で返すように要求します。その結果、ターゲットアカウントのための資格情報キャッシュ（`full_tgt.ccache`）または回収されたNTLMパスワードハッシュが得られます。

5. **ターゲットを偽装し、ドメイン管理者に昇格する:** これで攻撃者は実質的に**ターゲットADアカウントを制御**しています。たとえば、ターゲットがAD Connect **MSOLアカウント**であった場合、ディレクトリに対するレプリケーション権限を持っています。攻撃者は、そのアカウントの資格情報またはKerberos TGTを使用して、ADからパスワードハッシュをダンプする**DCSync**攻撃を実行できます（ドメインKRBTGTアカウントを含む）。例えば：
```bash
# Using impacket's secretsdump to DCSync as the MSOL account (using NTLM hash)
secretsdump.py 'AD_DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash> LOCAL
```
これはすべてのADユーザーのパスワードハッシュをダンプし、攻撃者にKRBTGTハッシュを提供します（これにより、ドメインKerberosチケットを自由に偽造でき）、実質的に**Domain Admin**権限をADに対して持つことになります。ターゲットアカウントが別の特権ユーザーであった場合、攻撃者はそのユーザーとして任意のドメインリソースにアクセスするために完全なTGTを使用できます。

6.  **クリーンアップ:** オプションとして、攻撃者は同じAPIを介して変更されたAzure ADユーザーの元の`onPremisesSAMAccountName`とSIDを復元するか、単に作成された一時ユーザーを削除できます。多くの場合、次のAzure AD Connect同期サイクルでは、同期された属性の不正な変更が自動的に元に戻されます。（ただし、この時点でダメージはすでに発生しています -- 攻撃者はDA権限を持っています。）

> [!WARNING]
> クラウドトラストと同期メカニズムを悪用することにより、Azure ADのグローバル管理者はRODCポリシーによって明示的に保護されていないほぼ*すべての* ADアカウントを偽装できます。たとえそのアカウントがクラウド同期されていなくてもです。デフォルトの構成では、これは**Azure ADの侵害からオンプレミスADの侵害への完全な信頼を橋渡しします**。

## 参考文献

- [Obtaining Domain Admin from Azure AD via Cloud Kerberos Trust](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/)

{{#include ../../../banners/hacktricks-training.md}}
