![]() |
https://forum.antichat.xyz/attachmen...4/54459033.png
На каждом внутреннем пентесте первые полчаса выглядят одинаково: подключение к пользовательскому VLAN, запуск Responder, ожидание. В среде без харденинга Active Directory первый NTLMv2-хеш прилетает быстрее, чем заваривается кофе. Дальше - hashcat, credential stuffing, lateral movement, и через пару часов у тебя Domain Admin. Каждый. Раз. - полный путь от разведки до DCSync с инструментами и техниками я разобрал в гайде по пентесту Active Directory. По данным Microsoft Digital Defense Report (на который ссылается Semperis), почти половина инцидентов, расследуемых Microsoft Incident Response, содержала небезопасные конфигурации Active Directory. Mandiant подтверждает: 9 из 10 кибератак эксплуатируют AD. При этом три меры - отключить LLMNR, выполнить NBT-NS disable и провести LAPS настройку - закрывают основные векторы credential harvesting, за которые атакующий хватается в первые часы внутреннего пентеста. Здесь не будет теории ради теории. Конкретные команды, GPO-пути, ключи реестра, проверки и грабли, на которые я лично наступал при развёртывании харденинга AD в инфраструктурах от 200 до 3000 машин. Что видит атакующий в сети без харденинга AD Прежде чем закрывать дыры, стоит понять, как именно они эксплуатируются. Безопасность Active Directory начинается с понимания атаки - иначе ты чинишь не то и не там. LLMNR/NBT-NS poisoning - credential harvesting за минуты LLMNR (Link-Local Multicast Name Resolution) и NBT-NS (NetBIOS Name Service) - fallback-протоколы. Когда DNS не может разрешить имя хоста, Windows шлёт широковещательный запрос в локальную сеть: «Кто знает, где находится сервер FILESHRE?» (опечатка пользователя). Проблема: у этих протоколов нет механизма аутентификации - ответить может кто угодно. Атакующий запускает Responder и ждёт. Как только жертва пытается обратиться к несуществующему ресурсу - а это происходит постоянно из-за опечаток, устаревших ярлыков, отключённых серверов - Responder отвечает: «Это я, аутентифицируйся». Жертва послушно отправляет NTLMv2-хеш учётной записи. По классификации MITRE ATT&CK это техника LLMNR/NBT-NS Poisoning and SMB Relay (T1557.001, тактики: Credential Access, Collection). Отдельно стоит упомянуть Forced Authentication (T1187, Credential Access) - принуждение к аутентификации через вредоносные файлы (.lnk, .scf, .url с UNC-путями). Она может использоваться совместно с Responder для генерации трафика, но это самостоятельный вектор, а не часть poisoning-сценария. Запуск Responder на практике - команда из материалов TCM Security: Bash: Код:
sudoКод:
CORP\ivanovBash: Код:
hashcat -mОдин хеш - полный lateral movement по домену Допустим, пароль не крякнулся. Атакующий не остановился. В средах без LAPS Active Directory все рабочие станции обычно живут с одинаковым паролем локального администратора - он задаётся через групповые политики или образ. Один скомпрометированный хеш локального админа открывает доступ ко всем машинам через Pass the Hash (T1550.002, тактики: Defense Evasion, Lateral Movement). CrackMapExec проходит по всей подсети за секунды, собирает SAM-базы, находит привилегированные учётки. Другой сценарий: пароль всё-таки крякнулся, и это доменная учётка с правами локального администратора. Тут уже не PtH, а использование валидных учётных данных - Valid Accounts (T1078, тактики: Defense Evasion, Persistence, Privilege Escalation, Initial Access). Lateral movement становится тривиальным: атакующий аутентифицируется на машинах напрямую, и через пару прыжков оказывается на контроллере домена. Именно поэтому защита Active Directory начинается с трёх конкретных мер, а не с покупки дорогого SIEM. Отключить LLMNR - первый шаг LLMNR poisoning защиты Отключение LLMNR - самая простая из трёх мер и одна из самых эффективных. В среде с работающим DNS отключение LLMNR не вызывает вообще никаких проблем. Лично я начинаю харденинг всегда с неё - пять минут работы, а целый вектор отваливается. Настройка через групповую политику Путь в Group Policy Management Editor: Код: Код:
Computer Configuration → Policies → Administrative Templates → Network → DNS Client → Turn off multicast name resolution → EnabledКод: Код:
HKLM\Software\Policies\Microsoft\Windows NT\DNSClientВерификация отключения LLMNR После применения политики проверяем на рабочей станции через PowerShell (команда из TCM Security): Код: Код:
(Get-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name EnableMulticast).EnableMulticastКод:
0Код:
1Код:
gpresult /rNBT-NS disable - подводные камни отключения NetBIOS С NBT-NS всё веселее. Отключить NBT-NS Windows можно несколькими способами, но не все из них одинаково надёжны в масштабе. Почему отключение через NIC не масштабируется Стандартная рекомендация - зайти в свойства сетевого адаптера, TCP/IPv4 → Advanced → WINS → Disable NetBIOS over TCP/IP. Проблема: настройка привязана к конкретному адаптеру. У каждого NIC свой GUID в реестре, и при добавлении нового адаптера (VPN-клиент, Wi-Fi, Docker) настройка не наследуется. В среде из 500+ машин ручное управление per-NIC - утопия. NodeType P-node через реестр - правильный подход Решение из серии Active Directory Hardening от Microsoft TechCommunity - установить NetBT NodeType в режим P-node на уровне хоста. В P-node клиент использует только WINS для разрешения NetBIOS-имён и полностью отключает широковещание. Поскольку WINS-серверов в современных средах нет (и не должно быть), NetBIOS name resolution фактически перестаёт работать: Код: Код:
HKLM\SYSTEM\CurrentControlSet\Services\NetBT\ParametersКод:
SecGuide.admxАльтернативный подход для NBT-NS (упомянут в материалах ProjectBlack) - через ключ DNS-клиента: Код: Код:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\ParametersДля старых версий Windows, где реестровые ключи Dnscache не поддерживаются, используется PowerShell startup script. Метод описан и у TCM Security, и у Blumira: Код: Код:
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces\tcpip* -Name NetbiosOptions -Value 2Код: Код:
Computer Configuration → Policies → Windows Settings → Scripts → StartupЦитата:
Код: Код:
wmic nicconfig get caption,index,TcpipNetbiosOptionsКод:
TcpipNetbiosOptionsКод:
2LAPS настройка - уникальные пароли локальных администраторов Отключение LLMNR и NBT-NS убирает Responder-вектор. Но даже без Responder атакующий может получить хеш локального администратора другими путями - дамп SAM после физического доступа, уязвимость в сервисе, любой другой credential harvesting AD. Если пароль локального админа одинаковый на всех машинах - одного хеша достаточно для Pass the Hash по всему домену. Local Administrator Password Solution (LAPS) решает эту проблему: каждая машина получает уникальный, автоматически ротируемый пароль локального администратора, который хранится в атрибутах объекта компьютера в AD. Зачем нужен LAPS и что он заменяет До LAPS администраторы часто управляли паролями локальных админов через Group Policy Preferences (GPP). Пароль задавался в GPP и хранился в SYSVOL в XML-файле, зашифрованном AES-ключом. А теперь внимание: ключ AES-256 был включён в открытую документацию протокола (MS-GPPREF) на MSDN. Шифрование - бесполезное. Любой доменный пользователь может прочитать файл Groups.xml из SYSVOL и расшифровать пароль с помощью этого ключа. MS14-025 запретил создание новых GPP с встроенными паролями, но не удалил существующие - их надо удалять вручную. По MITRE ATT&CK это техника Group Policy Preferences (T1552.006, Credential Access). Я до сих пор нахожу GPP-пароли в SYSVOL на проектах. В 2025 году. Серьёзно. LAPS заменяет этот небезопасный механизм. Атрибут с паролем в AD защищён ACL - только авторизованные учётки могут его прочитать. Legacy LAPS vs Windows LAPS Legacy LAPS требовал отдельной установки MSI-пакета на каждую рабочую станцию и расширения схемы AD (атрибуты Код:
ms-Mcs-AdmPwdКод:
ms-Mcs-AdmPwdExpirationTimeКод:
msLAPS-PasswordДля сред, где ещё живут машины на Windows 7/Server 2012 - legacy LAPS остаётся единственным вариантом. В гетерогенных средах может потребоваться одновременное использование обеих версий (и это отдельная головная боль с делегированием). Развёртывание LAPS пошагово Порядок действий для развёртывания Windows LAPS: Шаг 1: обновление схемы AD. На контроллере домена с правами Schema Admin: Код: Код:
Update-LapsADSchemaКод: Код:
Set-LapsADComputerSelfPermission -Identity "OU=Workstations,DC=corp,DC=local"Код: Код:
Computer Configuration → Policies → Administrative Templates → System → LAPSПараметрРекомендацияConfigure password backup directoryActive DirectoryPassword complexityБольшие + малые буквы + цифры + спецсимволыPassword length20+ символовPassword age30 днейName of administrator account to manageОставить пустым (управляет встроенным Administrator) Шаг 4: делегирование прав на чтение паролей. Определите, кто должен читать пароли LAPS - обычно это группа helpdesk или отдельная группа безопасности: Код: Код:
Set-LapsADReadPasswordPermission -Identity "OU=Workstations,DC=corp,DC=local" -AllowedPrincipals "CORP\LAPS-Readers"Код: Код:
Get-LapsADPassword -Identity "WS-001" -AsPlainTextВерификация харденинга: до и после глазами атакующего Харденинг AD без проверки - самообман. Покажу, что конкретно меняется для атакующего после внедрения трёх мер. Responder после отключения LLMNR и NBT-NS До харденинга запуск Код:
sudo responder -I eth0 -dwPНо есть нюанс. Если хотя бы одна машина не получила GPO (выключена, вне сети, потеряла связь с DC), она продолжит отправлять LLMNR/NBT-NS-запросы. Поэтому после внедрения я всегда провожу контрольный запуск Responder в пассивном режиме ( Код:
responder -I eth0 -ACrackMapExec после внедрения LAPS До LAPS lateral movement через Pass the Hash выглядит так: один хеш локального админа → CrackMapExec проходит по всей подсети с результатом Код:
Pwn3d!После внедрения LAPS каждый хеш работает только на одной конкретной машине. CrackMapExec на соседних хостах возвращает Код:
STATUS_LOGON_FAILUREПроверочная команда (от лица пентестера, для демонстрации): Bash: Код:
# пример для демонстрации концепцииКод:
Pwn3d!Грабли и edge-cases при развёртывании GPO-конфликты и legacy-системы На проектах по харденингу я регулярно наступаю на одни и те же грабли: Конфликты GPO. Если в домене уже есть политика, которая задаёт пароль локального администратора через GPP - она будет конфликтовать с LAPS. GPP перезапишет пароль поверх того, что установил LAPS. Решение: удалить все GPP с паролями до развёртывания LAPS. Проверить наличие GPP-паролей можно утилитой Код:
Get-GPPPasswordКод:
cpasswordLegacy-системы без поддержки LAPS. Windows XP, Server 2003, а в некоторых средах даже Server 2008 без SP - не поддерживают ни одну версию LAPS. Для этих машин остаётся ручная ротация или скриптовый подход, но главное - они должны быть изолированы в отдельный VLAN с минимальными правами. Если у вас в 2025 году Server 2003 в продуктиве - LAPS не самая большая ваша проблема. Делегирование прав - типичная ошибка. Администраторы часто дают право чтения LAPS-паролей группе Domain Admins и забывают про helpdesk. Или наоборот - дают helpdesk права на все OU, включая серверные. Правильный подход: отдельные группы для разных OU (LAPS-Readers-Workstations, LAPS-Readers-Servers) с минимально необходимым scope. Шифрование паролей LAPS. Windows LAPS поддерживает шифрование паролей в AD - атрибут хранится в зашифрованном виде, расшифровать может только авторизованный пользователь. Legacy LAPS хранит пароль в открытом виде в атрибуте Код:
ms-Mcs-AdmPwdКогда LLMNR нельзя отключить полностью Бывает, что полное отключение невозможно. По данным Blumira, многие legacy-продукты полагаются на широковещательное разрешение имён. В таких случаях - альтернативные меры:
Дополнительный вектор: mDNS Помимо LLMNR и NBT-NS, ProjectBlack рекомендует отключать mDNS (Multicast DNS) - ещё один протокол обнаружения, который можно использовать для poisoning: Код: Код:
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\ParametersСводная таблица: три меры харденинга Active Directory МераВектор атакиMITRE ATT&CKСложность внедренияВлияние на инфраструктуруОтключить LLMNRLLMNR PoisoningT1557.001Низкая (один параметр GPO)Минимальное при работающем DNSNBT-NS disableNBT-NS PoisoningT1557.001Средняя (реестр / startup script)Низкое в современных средахLAPS настройкаPass the Hash, credential reuseT1550.002, T1552.006Средняя (схема + GPO + делегирование)Изменение процесса сброса паролей Порядок внедрения для практиков Если ты только начинаешь харденинг AD - вот порядок, который я использую на проектах:
Безопасность Active Directory - не про дорогие решения. Это про последовательный харденинг, который почему-то до сих пор не сделан в большинстве доменов. Запусти Responder в своей сети прямо сейчас - и посмотри, сколько хешей прилетит за час. Если ответ «ноль» - поздравляю, ты в меньшинстве. |
| Время: 07:31 |