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

Как я прошёл HTB-машину Sauna: AS-REP Roasting и злоупотребление GenericAll в Active Directory

Как я прошёл HTB-машину Sauna: AS-REP Roasting и злоупотребление GenericAll в Active Directory
Время чтения: 10 мин.

75% вторжений в 2024 году задействовали действительные учётные данные — не эксплойты и не zero-day, а обычные логины и пароли (CrowdStrike Global Threat Report 2025). Не какой-то хитрый обход защиты, а «здравствуйте, я Вася из бухгалтерии». HTB Sauna — машина уровня Easy на Hack The Box, и она бьёт именно в эту точку: одна забытая галочка в настройках домена превращает веб-страницу с именами сотрудников в полный захват Active Directory. Ниже — моя цепочка от разведки до Domain Admin через AS-REP Roasting и злоупотребление правом GenericAll. Каждая команда — с объяснением, что происходит и как понять, что шаг сработал.

Что такое AS-REP Roasting и как работают атаки на Kerberos в Active Directory

Kerberos — протокол аутентификации в доменах Windows. Когда пользователь входит в систему, его машина общается с KDC (Key Distribution Center — служба на контроллере домена, которая выдаёт билеты аутентификации). Упрощённо обмен выглядит так:

  1. Клиент отправляет AS-REQ (Authentication Service Request) — запрос на вход. В штатном режиме в запрос вложена зашифрованная метка времени — доказательство, что клиент знает пароль. Этот механизм называется Kerberos pre-authentication (предварительная аутентификация).
  2. KDC проверяет метку и, если всё сходится, возвращает AS-REP (Authentication Service Response) с TGT (Ticket Granting Ticket — билет для дальнейшего доступа к сервисам домена). Часть AS-REP зашифрована хэшем пароля пользователя.

А теперь — где ломается. В свойствах учётной записи Active Directory есть опция «Do not require Kerberos preauthentication». Если она включена, KDC перестаёт требовать зашифрованную метку и отдаёт AS-REP сразу — любому, кто знает имя учётной записи. Атакующий получает данные, зашифрованные хэшем пароля, и ломает хэш оффлайн на своей машине. Без ограничений по количеству попыток. Без блокировки аккаунта. Без алертов.

В каталоге MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1558.004 — её идентификаторы) эта техника зарегистрирована как T1558.004 — AS-REP Roasting, тактика Credential Access (получение учётных данных). Для атаки не нужен пароль жертвы и не нужен доменный аккаунт атакующего — хватит сетевого доступа к контроллеру домена и знания имени пользователя.

AS-REP Roasting применялся в реальных ransomware-кампаниях. Это не лабораторная экзотика — техника работает в продуктивных доменах прямо сейчас.

HTB Sauna — разведка и сбор имён пользователей

Sauna эмулирует инфраструктуру вымышленного банка Egotistical Bank с доменом EGOTISTICAL-BANK.LOCAL. После запуска nmap -sC -sV (стандартные скрипты плюс определение версий) видны открытые порты: 53 (DNS), 80 (HTTP), 88 (Kerberos), 389 (LDAP), 445 (SMB), 5985 (WinRM). Порт 88 — Kerberos — однозначный маркер контроллера домена Active Directory. Порт 5985 — WinRM (Windows Remote Management) — подсказка: при наличии учётных данных можно получить удалённый PowerShell.

На веб-сайте банка (порт 80) есть страница «Meet The Team» с именами: Fergus Smith, Shaun Coins, Hugo Bear, Bowie Taylor, Sophie Driver, Steven Kerb. Готовый материал для составления доменных логинов. В корпоративных средах логины обычно строятся по шаблону: первая буква имени + фамилия (fsmith), имя.фамилия (fergus.smith), просто фамилия (smith). Составляю все варианты в файл users.txt.

Энумерация доменных учётных записей (T1087.002 — Domain Account, тактика Discovery) через Kerberos: утилита kerbrute отправляет AS-REQ для каждого имени из файла. Если KDC отвечает без ошибки «principal unknown» — учётная запись существует.

Запуск: kerbrute userenum --dc 10.10.10.175 -d EGOTISTICAL-BANK.LOCAL users.txt. В выводе ищу строки [+] VALID USERNAME. Для Sauna валидным оказывается fsmith. Стартовая точка для AS-REP Roasting найдена.

Impacket AS-REP Roasting: запрашиваем хэш без пароля

GetNPUsers — запрос AS-REP

Impacket — набор Python-утилит для работы с сетевыми протоколами Windows. GetNPUsers (NP — No Preauth) отправляет AS-REQ для указанных пользователей и, если у учётной записи отключена предварительная аутентификация, получает AS-REP с хэшем пароля.

Предусловия: Kali Linux с установленным Impacket (входит в стандартную поставку Kali), сетевой доступ до контроллера домена на порт 88.

impacket-GetNPUsers EGOTISTICAL-BANK.LOCAL/ \
  -usersfile users.txt -dc-ip 10.10.10.175 \
  -no-pass -format hashcat -request

Что происходит: утилита перебирает имена из users.txt. Для каждого отправляет AS-REQ без pre-authentication. Если флаг DONT_REQUIRE_PREAUTH установлен в атрибуте userAccountControl учётной записи (битовая маска 0x400000), KDC возвращает AS-REP с зашифрованными данными. Флаг -format hashcat форматирует вывод для Hashcat.

Ожидаемый вывод для уязвимой учётной записи — строка вида $krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:...длинный хэш.... Префикс $krb5asrep$23$ означает: Kerberos AS-REP, тип шифрования 23 (RC4-HMAC — устаревший алгоритм, который легче поддаётся перебору, чем AES). Сохраняю хэш в файл hash.txt.

Если вывод пустой — ни у одной учётной записи из списка не отключена pre-authentication, и AS-REP Roasting здесь не сработает.

Взлом хэша Kerberos в Hashcat

Hashcat — утилита для оффлайн-взлома хэшей с задействованием GPU. Режим 18200 — для хэшей Kerberos AS-REP (тот самый $krb5asrep$23$).

Предусловия: машина с GPU (на CPU перебор будет в десятки раз медленнее), установленный Hashcat, словарь паролей. В Kali стандартный словарь rockyou.txt лежит в /usr/share/wordlists/ (может быть сжат — распаковать через gunzip).

hashcat -m 18200 hash.txt /usr/share/wordlists/rockyou.txt

Что происходит: Hashcat берёт каждый пароль из словаря, вычисляет из него RC4-ключ и пытается расшифровать зашифрованную часть AS-REP. Совпадение — пароль найден. На среднем GPU словарь rockyou (14 млн паролей) прогоняется за секунды.

Результат: строка $krb5asrep$23$fsmith@...:Thestrokes23. Пароль учётной записи fsmith раскрыт. Если бы пароль был длинным и случайным — dictionary attack не сработал бы. AS-REP Roasting опасен именно в паре со слабыми паролями, и Thestrokes23 — слабый.

Первый доступ через evil-winrm

Порт 5985 открыт, пароль известен — подключаюсь через WinRM. Evil-winrm — инструмент для удалённого PowerShell через WinRM. Запуск: evil-winrm -i 10.10.10.175 -u fsmith -p 'Thestrokes23'.

Результат: приглашение *Evil-WinRM* PS C:\Users\fsmith\Documents>. Полноценная сессия от имени доменного пользователя. Забираю флаг user.txt — первая половина задачи решена.

С точки зрения MITRE ATT&CK, вход через валидные доменные учётные данные — T1078.002 (Domain Accounts). Ни malware, ни эксплойтов — стандартный логин. Для SOC-команды такая активность неотличима от нормальной работы, если нет корреляции с предшествующими AS-REP-запросами. Вот почему credential-based атаки так любят — они тихие.

BloodHound: GenericAll и путь к эскалации привилегий в Active Directory

Сбор данных SharpHound

У fsmith нет прав Domain Admin — нужна эскалация привилегий в Active Directory. Для поиска пути к Domain Admin использую BloodHound — инструмент, который строит граф связей и прав в домене: кто кем управляет, кто где состоит, какие ACL (Access Control Lists — списки прав доступа на объектах Active Directory) открывают путь к привилегированным группам.

SharpHound — коллектор данных для BloodHound. Загружаю его через evil-winrm командой upload SharpHound.exe, затем запускаю: .\SharpHound.exe -c All. Флаг -c All собирает всё: пользователей, группы, компьютеры, сессии, ACL и доверительные отношения. Результат — ZIP-архив, который скачиваю обратно на Kali (download <имя_файла.zip>) и загружаю в BloodHound.

Злоупотребление DACL — анализ графа прав

В интерфейсе BloodHound задаю запрос «Shortest Paths to Domain Admin». Граф показывает цепочку: svc_loanmgr → GenericAll → EGOTISTICAL-BANK.LOCAL (объект домена).

Что это значит. Учётная запись svc_loanmgr имеет право GenericAll на объект домена. GenericAll — полный контроль: чтение, запись, удаление атрибутов, смена пароля, изменение ACL. Записано это в DACL (Discretionary Access Control List — список разрешений, определяющий кто и что может делать с объектом) самого домена. GenericAll на домене позволяет самостоятельно добавить себе ACE с правами Replicating Directory Changes и Replicating Directory Changes All — а это уже DCSync-атака и доступ к NTLM-хэшам всех учётных записей. Формально это не членство в группе Domain Admins, но по последствиям — эквивалент.

Но для эксплуатации нужны учётные данные svc_loanmgr. На HTB Sauna они обнаруживаются через автологин: в реестре Windows по пути HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon хранятся поля DefaultUserName и DefaultPassword открытым текстом. Команда reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" в сессии evil-winrm возвращает логин svc_loanmgr и пароль Moneymakestheworldgoround!.

Пароли в реестре автологина — распространённая ошибка, которую утилиты постэксплуатации вроде winPEAS находят автоматически. Я встречал такое не только на HTB — в реальных доменах автологин на серверах мониторинга живёт годами, потому что «ну работает же, зачем трогать».

DCSync атака через GenericAll — полный захват домена

Учётная запись svc_loanmgr с GenericAll на домене позволяет выполнить DCSync (T1003.006, тактика Credential Access) — атаку, при которой атакующий имитирует контроллер домена и запрашивает репликацию хэшей паролей всех учётных записей через протокол DRS (Directory Replication Services).

Для DCSync нужны права Replicating Directory Changes и Replicating Directory Changes All на объекте домена. GenericAll позволяет svc_loanmgr самостоятельно добавить себе ACE с этими правами (через dacledit.py или PowerView), после чего DCSync становится возможен.

Используем secretsdump из Impacket:

impacket-secretsdump \
  'EGOTISTICAL-BANK.LOCAL/svc_loanmgr:Moneymakestheworldgoround!@10.10.10.175'

Что происходит: утилита аутентифицируется на контроллере домена от имени svc_loanmgr, отправляет запрос репликации и получает NTLM-хэши всех доменных учётных записей. В выводе ищу строку Administrator:500:aad3b435b51404ee...: — NTLM-хэш учётной записи Administrator.

С этим хэшем выполняю Pass the Hash (T1550.002, тактика Lateral Movement) — аутентификацию без знания пароля в открытом виде: impacket-psexec EGOTISTICAL-BANK.LOCAL/Administrator@10.10.10.175 -hashes <LM_hash>:<NTLM_hash>. Результат — сессия NT AUTHORITY\SYSTEM. Машина полностью скомпрометирована.

Полная цепочка: разведка имён на сайте → AS-REP Roasting fsmith → взлом хэша → WinRM → BloodHound → обнаружение GenericAll у svc_loanmgr → автологин из реестра → DCSync → Pass the Hash → SYSTEM. Четыре техники MITRE ATT&CK, ноль эксплойтов, всё через штатные протоколы домена.

Обнаружение и защита от атак на Kerberos в Active Directory

Цепочка из Sauna затрагивает несколько слоёв. Вот конкретные меры для каждого.

Детектирование AS-REP Roasting. Согласно рекомендациям Semperis, типичный индикатор — Event ID 4768 (запрос TGT) на контроллере домена с параметрами: Pre-Authentication Type отсутствует или равен 0, Service Name = krbtgt, Ticket Encryption Type = 0x17 (RC4). Всплеск таких событий от одного IP — почти гарантированный признак атаки.

Устранение уязвимых учётных записей. Команда Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} в PowerShell покажет все учётные записи с отключённой pre-authentication. Для каждой стоит определить: действительно ли нужна совместимость со старым ПО? По данным Netwrix, опция обычно остаётся включённой для давно заменённых приложений — настройку сделали для совместимости с устаревшей системой, систему вывели, галочку забыли убрать.

Защита сервисных учётных записей. gMSA (Group Managed Service Accounts) — учётные записи служб с автоматической генерацией паролей (120+ символов) и ротацией каждые 30 дней. Пароли не известны администраторам. Взлом через словарь или brute-force нереалистичен.

Аудит ACL и прав доступа. BloodHound или PingCastle позволяют найти учётные записи с избыточными правами: GenericAll, WriteDACL, GenericWrite на критичных объектах. Права ACL в Windows-доменах накапливаются годами — сервисный аккаунт получил GenericAll для одноразовой миграции и забылся с этими правами навсегда.

Детектирование DCSync. Event ID 4662 с обращением к правам репликации от нетипичных учётных записей (не контроллеров домена) — индикатор DCSync. В продуктивном домене DCSync-запросы должны приходить только от других контроллеров.

Удаление автологина. Учётные данные в реестре Winlogon — открытый текст, доступный любому пользователю с локальной сессией. Если автологин необходим — рассмотреть Windows Credential Manager или ограничить доступ к ключу реестра через ACL.

Среднее время lateral movement после начального доступа — 62 минуты, рекорд — 51 секунда (CrowdStrike, 2024). На Sauna весь путь от первого хэша до SYSTEM укладывается в двадцать минут ручной работы. Автоматизированная атака справится быстрее.

Три года назад я считал AS-REP Roasting экзотикой: кто в здравом уме отключает предварительную аутентификацию? Но на пентестах Active Directory эта галочка всплывает регулярно. Причина банальна — совместимость со старым ПО, которое давно списали, а настройки домена никто не ревизует. IBM X-Force Threat Intelligence Index 2025 фиксирует рост атак через действительные учётные данные на 71% за год, и начинаются они именно с таких ошибок конфигурации.

Что на практике удивляет больше самой атаки — второй этап. GenericAll на объекте домена у сервисной учётной записи — ошибка проектирования прав, которую BloodHound подсвечивает за секунду, но которую годами никто не проверяет. В реальных доменах я встречал цепочки из пяти-шести GenericWrite и GenericAll, ведущие к Domain Admin через три промежуточные группы. Без графового анализа такую цепочку не заметишь до инцидента. И пока SOC-команды строят корреляции на уровне endpoint, атакующие работают на уровне ACL — там, где штатные SIEM-правила молчат. Если ищешь первую роль в ИБ — базовый курс IB Basics плюс решённые лабы уровня Sauna дают конкретику, которую можно показать на собеседовании.

Эту тему и смежные навыки разбирают на практике в курсе «Анализ защищённости инфраструктуры на основе Active Directory» Codeby Academy.