Az - Cloud Kerberos Trust

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

Αυτή η ανάρτηση είναι μια περίληψη του https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/ που μπορεί να ελεγχθεί για περισσότερες πληροφορίες σχετικά με την επίθεση. Αυτή η τεχνική σχολιάζεται επίσης στο https://www.youtube.com/watch?v=AFay_58QubY.

Kerberos Trust Relationship Overview

Cloud Kerberos Trust (Entra ID -> AD) – Αυτή η δυνατότητα (μέρος του Windows Hello for Business) δημιουργεί μια μονομερή εμπιστοσύνη όπου το on-prem AD εμπιστεύεται το Entra ID να εκδίδει Kerberos tickets για το AD. Η ενεργοποίησή της δημιουργεί ένα αντικείμενο υπολογιστή AzureADKerberos$ στο AD (εμφανίζεται ως Read-Only Domain Controller) και έναν συνδεδεμένο λογαριασμό krbtgt_AzureAD (δευτερεύων KRBTGT). Το Entra ID κρατά τα κλειδιά για αυτούς τους λογαριασμούς και μπορεί να εκδώσει “μερικά” Kerberos TGTs για χρήστες του AD. Οι ελεγκτές τομέα του AD θα τιμήσουν αυτά τα εισιτήρια, αλλά με περιορισμούς παρόμοιους με τους RODC: από προεπιλογή, οι ομάδες υψηλών προνομίων (Domain Admins, Enterprise Admins, κ.λπ.) είναι αρνημένες και οι κανονικοί χρήστες επιτρέπονται. Αυτό αποτρέπει το Entra ID από το να πιστοποιεί τους διαχειριστές τομέα μέσω της εμπιστοσύνης υπό κανονικές συνθήκες. Ωστόσο, όπως θα δούμε, ένας επιτιθέμενος με επαρκή προνόμια στο Entra ID μπορεί να εκμεταλλευτεί αυτό το σχέδιο εμπιστοσύνης.

Pivoting from Entra ID to On-Prem AD

Σενάριο: Ο στόχος οργανισμός έχει Cloud Kerberos Trust ενεργοποιημένο για πιστοποίηση χωρίς κωδικό πρόσβασης. Ένας επιτιθέμενος έχει αποκτήσει Global Administrator προνόμια στο Entra ID (Azure AD) αλλά δεν ελέγχει ακόμη το on-prem AD. Ο επιτιθέμενος έχει επίσης πρόσβαση σε έναν Ελεγκτή Τομέα (μέσω VPN ή ενός Azure VM σε υβριδικό δίκτυο). Χρησιμοποιώντας την εμπιστοσύνη του cloud, ο επιτιθέμενος μπορεί να εκμεταλλευτεί τον έλεγχο του Azure AD για να αποκτήσει μια Domain Admin–επίπεδο πρόσβαση στο AD.

Προαπαιτούμενα:

  • Cloud Kerberos Trust είναι ρυθμισμένο στο υβριδικό περιβάλλον (ένδειξη: υπάρχει ένας λογαριασμός AzureADKerberos$ RODC στο AD).

  • Ο επιτιθέμενος έχει Global Admin (ή Hybrid Identity Admin) δικαιώματα στον Entra ID tenant (αυτοί οι ρόλοι μπορούν να χρησιμοποιήσουν το AD Connect synchronization API για να τροποποιήσουν τους χρήστες του Azure AD).

  • Τουλάχιστον ένας υβριδικός λογαριασμός χρήστη (υπάρχει και στα AD και AAD) που ο επιτιθέμενος μπορεί να πιστοποιήσει ως. Αυτό θα μπορούσε να αποκτηθεί γνωρίζοντας ή επαναφέροντας τα διαπιστευτήριά του ή αναθέτοντας μια μέθοδο χωρίς κωδικό πρόσβασης (π.χ. ένα Temporary Access Pass) για να δημιουργήσει ένα Primary Refresh Token (PRT) γι’ αυτόν.

  • Ένας στοχευμένος λογαριασμός on-prem AD με υψηλά προνόμια που δεν είναι στην προεπιλεγμένη πολιτική “άρνησης” του RODC. Στην πράξη, ένας εξαιρετικός στόχος είναι ο λογαριασμός συγχρονισμού AD Connect (συχνά ονομάζεται MSOL_*), ο οποίος έχει δικαιώματα DCSync (αναπαραγωγής) στο AD αλλά συνήθως δεν είναι μέλος των ενσωματωμένων ομάδων διαχειριστών. Αυτός ο λογαριασμός συνήθως δεν συγχρονίζεται με το Entra ID, καθιστώντας το SID του διαθέσιμο για προσποίηση χωρίς σύγκρουση.

Βήματα Επίθεσης:

  1. Απόκτηση πρόσβασης στο Azure AD sync API: Χρησιμοποιώντας τον λογαριασμό Global Admin, αποκτήστε ένα access token για το Azure AD Provisioning (sync) API. Αυτό μπορεί να γίνει με εργαλεία όπως το ROADtools ή το AADInternals. Για παράδειγμα, με το ROADtools (roadtx):
# Using roadtx to get an Azure AD Graph token (no MFA)
roadtx gettokens -u <GlobalAdminUPN> -p <Password> --resource aadgraph

(Εναλλακτικά, μπορεί να χρησιμοποιηθεί το Connect-AADInt του AADInternals για να αυθεντικοποιηθεί ως Global Admin.)

  1. Τροποποιήστε τα On-Prem Attributes ενός Υβριδικού Χρήστη: Εκμεταλλευτείτε το Azure AD synchronization API για να ορίσετε τον επιλεγμένο υβριδικό χρήστη’s onPremises Security Identifier (SID) και onPremises SAMAccountName ώστε να ταιριάζει με τον στοχοθετημένο λογαριασμό AD. Αυτό ουσιαστικά λέει στο Azure AD ότι ο χρήστης του cloud αντιστοιχεί στον on-prem λογαριασμό που θέλουμε να προσποιηθούμε. Χρησιμοποιώντας το ανοιχτού κώδικα ROADtools Hybrid toolkit:
# Example: modify a hybrid user to impersonate the MSOL account
python3 modifyuser.py -u <GlobalAdminUPN> -p <Password>\
--sourceanchor <ImmutableID_of_User>\
--sid <TargetAD_SID> --sam <TargetAD_SAMName>

Η sourceAnchor (αμετάβλητο ID) του χρήστη είναι απαραίτητη για να προσδιορίσει το αντικείμενο Azure AD που θα τροποποιηθεί. Το εργαλείο ρυθμίζει το SID και το όνομα λογαριασμού SAM του υβριδικού χρήστη στις τιμές του στόχου (π.χ., το SID και το SAM του λογαριασμού MSOL_xxxx). Η Azure AD κανονικά δεν επιτρέπει την τροποποίηση αυτών των χαρακτηριστικών μέσω του Graph (είναι μόνο για ανάγνωση), αλλά η API υπηρεσίας συγχρονισμού το επιτρέπει και οι Παγκόσμιοι Διαχειριστές μπορούν να ενεργοποιήσουν αυτή τη λειτουργία συγχρονισμού.

  1. Αποκτήστε ένα Μερικό TGT από την Azure AD: Μετά την τροποποίηση, αυθεντικοποιηθείτε ως ο υβριδικός χρήστης στην Azure AD (για παράδειγμα, αποκτώντας ένα PRT σε μια συσκευή ή χρησιμοποιώντας τα διαπιστευτήριά τους). Όταν ο χρήστης συνδεθεί (ιδιαίτερα σε μια συσκευή Windows που είναι συνδεδεμένη σε τομέα ή σε Entra), η Azure AD θα εκδώσει ένα μερικό Kerberos TGT (TGTAD) για αυτόν τον λογαριασμό επειδή η Cloud Kerberos Trust είναι ενεργοποιημένη. Αυτό το μερικό TGT είναι κρυπτογραφημένο με το κλειδί AzureADKerberos$ RODC και περιλαμβάνει το target SID που ρυθμίσαμε. Μπορούμε να το προσομοιώσουμε ζητώντας ένα PRT για τον χρήστη μέσω ROADtools:
roadtx getprt -u <HybridUserUPN> -p <Password> -d <DeviceID_or_Cert>

Αυτό εξάγει ένα αρχείο .prt που περιέχει το μερικό TGT και το κλειδί συνεδρίας. Εάν ο λογαριασμός ήταν μόνο cloud password, το Azure AD περιλαμβάνει ακόμα ένα TGT_AD στην απόκριση PRT.

  1. Ανταλλαγή Μερικού TGT για Πλήρες TGT (σε AD): Το μερικό TGT μπορεί τώρα να παρουσιαστεί στον τοπικό Domain Controller για να αποκτήσει ένα πλήρες TGT για τον στοχοθετημένο λογαριασμό. Το κάνουμε αυτό εκτελώντας ένα αίτημα TGS για την υπηρεσία krbtgt (την κύρια υπηρεσία TGT του τομέα) – ουσιαστικά αναβαθμίζοντας το εισιτήριο σε κανονικό TGT με πλήρες PAC. Διατίθενται εργαλεία για την αυτοματοποίηση αυτής της ανταλλαγής. Για παράδειγμα, χρησιμοποιώντας το σενάριο του ROADtools Hybrid:
# Use the partial TGT from the PRT file to get a full TGT and NTLM hash
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash

Αυτό το σενάριο (ή τα ισοδύναμα του Impacket) θα επικοινωνήσει με τον Domain Controller και θα ανακτήσει ένα έγκυρο TGT για τον στοχοθετημένο λογαριασμό AD, συμπεριλαμβανομένου του NTLM hash του λογαριασμού εάν χρησιμοποιηθεί η ειδική επέκταση Kerberos. Η επέκταση KERB-KEY-LIST-REQ περιλαμβάνεται αυτόματα για να ζητήσει από τον DC να επιστρέψει το NTLM hash του στοχοθετημένου λογαριασμού στην κρυπτογραφημένη απάντηση. Το αποτέλεσμα είναι μια κρυφή μνήμη διαπιστευτηρίων (full_tgt.ccache) για τον στοχοθετημένο λογαριασμό ή το ανακτηθέν NTLM password hash.

  1. Υποκίνηση Στόχου και Ανύψωση σε Domain Admin: Τώρα ο επιτιθέμενος ελέγχει αποτελεσματικά τον στοχοθετημένο λογαριασμό AD. Για παράδειγμα, εάν ο στόχος ήταν ο λογαριασμός AD Connect MSOL, έχει δικαιώματα αναπαραγωγής στον κατάλογο. Ο επιτιθέμενος μπορεί να εκτελέσει μια επίθεση DCSync χρησιμοποιώντας τα διαπιστευτήρια αυτού του λογαριασμού ή το Kerberos TGT για να εξάγει τα password hashes από το AD (συμπεριλαμβανομένου του λογαριασμού KRBTGT του τομέα). Για παράδειγμα:
# Using impacket's secretsdump to DCSync as the MSOL account (using NTLM hash)
secretsdump.py 'AD_DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash> LOCAL

Αυτό εξάγει όλα τα hashes κωδικών πρόσβασης χρηστών AD, δίνοντας στον επιτιθέμενο το hash KRBTGT (επιτρέποντάς τους να πλαστογραφήσουν τα εισιτήρια Kerberos τομέα κατά βούληση) και αποτελεσματικά δικαιώματα Domain Admin πάνω από το AD. Εάν ο στοχευμένος λογαριασμός ήταν άλλος προνομιούχος χρήστης, ο επιτιθέμενος θα μπορούσε να χρησιμοποιήσει το πλήρες TGT για να αποκτήσει πρόσβαση σε οποιοδήποτε πόρο τομέα ως αυτός ο χρήστης.

  1. Καθαρισμός: Προαιρετικά, ο επιτιθέμενος μπορεί να αποκαταστήσει το αρχικό onPremisesSAMAccountName και SID του τροποποιημένου χρήστη Azure AD μέσω της ίδιας API ή απλά να διαγράψει οποιονδήποτε προσωρινό χρήστη δημιουργήθηκε. Σε πολλές περιπτώσεις, ο επόμενος κύκλος συγχρονισμού Azure AD Connect θα αναιρέσει αυτόματα τις μη εξουσιοδοτημένες αλλαγές σε συγχρονισμένα χαρακτηριστικά. (Ωστόσο, μέχρι αυτό το σημείο η ζημιά έχει γίνει – ο επιτιθέμενος έχει δικαιώματα DA.)

Warning

Εκμεταλλευόμενος την εμπιστοσύνη του cloud και τον μηχανισμό συγχρονισμού, ένας Global Admin του Azure AD μπορεί να προσποιηθεί σχεδόν οποιονδήποτε λογαριασμό AD που δεν προστατεύεται ρητά από την πολιτική RODC, ακόμη και αν αυτός ο λογαριασμός δεν έχει ποτέ συγχρονιστεί με το cloud. Σε μια προεπιλεγμένη διαμόρφωση, αυτό δημιουργεί μια πλήρη εμπιστοσύνη από την παραβίαση του Azure AD στην παραβίαση του on-prem AD.

Αναφορές

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