![]() |
https://forum.antichat.xyz/attachmen...6878003ee1.png
При проведении внутреннего пентеста корпоративной AD-среды, редко нужен чей-то пароль в открытом виде. Достаточно получить NTLM-хеш одной привилегированной учётки - и через 15 минут мы на контроллере домена. Никакой магии, просто фундаментальная особенность протокола NTLM: хеш пароля функционально эквивалентен самому паролю. Для протокола разницы нет. Дальше - полная цепочка атак: от дампа учётных данных через Pass-the-Hash и Pass-the-Ticket до захвата домена (в общем гайде по пентесту Active Directory эти техники вписаны в полный маршрут от разведки до DA). Каждый шаг с конкретными командами, разбором флагов и объяснением того, что именно видит Blue Team на каждом этапе. Почему NTLM-хеш равнозначен паролю Прежде чем переходить к эксплуатации NTLM хешей, стоит разобраться в корневой причине. Когда пользователь Windows задаёт пароль, система вычисляет его NTLM-хеш через алгоритм MD4. Этот хеш валяется в памяти процесса LSASS, в базе SAM (для локальных аккаунтов) и в NTDS.dit на контроллере домена. Корень проблемы: при NTLM-аутентификации по схеме challenge-response хеш используется напрямую для вычисления ответа на challenge сервера. Пароль в открытом виде не требуется ни на одном этапе. Более того, NTLM-хеши не используют соль (salt) - два одинаковых пароля всегда дают идентичный хеш, и он остаётся неизменным от сессии к сессии, пока пользователь не сменит пароль. Как описано в MITRE ATT&CK T1550.002 (Pass the Hash), атакующий может аутентифицироваться на удалённом сервере, используя перехваченный хеш вместо пароля. Для протокола NTLM разницы между «знаю пароль» и «имею хеш» попросту не существует. Схема NTLM challenge-response:
Credential dumping: извлечение хешей из Windows Перед выполнением lateral movement в Active Directory нужно получить хеши. По классификации MITRE ATT&CK это техника OS Credential Dumping (T1003, Credential Access). Два основных источника: база SAM и память процесса LSASS. Извлечение хешей из базы SAM SAM (Security Account Manager) - защищённая ветка реестра Windows, хранящая NTLM-хеши локальных учётных записей. Для извлечения нужны права SYSTEM или привилегия SeBackupPrivilege. По MITRE - подтехника T1003.002 (Security Account Manager, Credential Access). Экспорт через PowerShell: Код: Код:
reg save HKLM\SAM sam.saveBash: Код:
secretsdump.py -sam sam.save -system system.save LOCALКод: Код:
privilege::debugКод:
privilege::debugКод:
token::elevateКод:
lsadump::samОграничение SAM: она содержит только локальные учётные записи. Доменные аккаунты здесь не живут. Но если локальный администратор использует один и тот же пароль на нескольких машинах (а на практике я это встречаю в большинстве корпоративных сред), хеш из SAM одной машины открывает доступ к остальным. Дамп LSASS: доменные учётные данные из памяти Процесс lsass.exe - сердце аутентификации Windows. Согласно MITRE ATT&CK T1003.001 (LSASS Memory), он загружает Security Support Providers (SSP), хранит в памяти NTLM-хеши, Kerberos TGT/TGS билеты, сессионные ключи и токены доступа всех пользователей, прошедших аутентификацию на машине. Если администратор домена хотя бы раз залогинился на скомпрометированную рабочую станцию (через RDP, PSExec или интерактивно) - его NTLM-хеш сидит в памяти LSASS как минимум на протяжении активной сессии (включая disconnected RDP-сессии), а в ряде конфигураций - и после logoff, вплоть до перезагрузки. На системах до Windows 8.1/2012 R2 без KB2871997 WDigest-пароли хранились в открытом виде по умолчанию; KB2871997 отключает WDigest и сокращает время хранения учётных данных, но не гарантирует полную очистку при logoff во всех сценариях. Надёжную защиту от дампа LSASS даёт только Credential Guard. Дамп через mimikatz: Код: Код:
privilege::debugКод:
sekurlsa::logonpasswordsУдалённый credential dumping AD через NetExec (ранее CrackMapExec): Bash: Код:
nxc smbКод:
--lsaPass-the-Hash: горизонтальное перемещение через NTLM Хеши на руках - переходим к эксплуатации. Pass-the-Hash - передача перехваченного NTLM-хеша напрямую в протокол аутентификации без знания исходного пароля. PtH через mimikatz ( Код:
sekurlsa::pКод: Код:
sekurlsa::pth /user:administrator /domain:corp.local /ntlm:e19ccf75ee54e06b06a5907af13cef42Код:
corp.local\administratorРазбор флагов:
Код: Код:
dir \\dc01.corp.local\c$PtH через Impacket Impacket - набор Python-скриптов для работы с протоколами Windows. Для Pass-the-Hash три основных инструмента: psexec.py, wmiexec.py и smbexec.py: Bash: Код:
# psexec.py - создаёт сервис на целевой машине, возвращает интерактивный shellКод:
-hashesКод:
:e19ccf75ee54e06b06a5907af13cef42Разница между инструментами на практике: psexec.py создаёт Windows-сервис и оставляет больше артефактов в логах (Event ID 7045). wmiexec.py работает через WMI и менее заметен, но требует открытый порт 135 (RPC). Лично я использую wmiexec.py для первичной разведки, а psexec.py - когда нужен полноценный интерактивный shell. PtH через NetExec (CrackMapExec) NetExec (nxc) - рабочая лошадка для массовой проверки хешей на множестве хостов: Bash: Код:
# Проверка хеша на диапазоне IPКод:
[+]Код:
(Pwn3d!)Pass-the-Ticket: Kerberos ticket hijacking Pass-the-Ticket (PtT) - принципиально другая техника, хотя цель та же: lateral movement в Active Directory без знания пароля. Если PtH работает с NTLM-хешами и протоколом NTLM, то PtT оперирует Kerberos-тикетами. Согласно MITRE ATT&CK (T1550.003, Pass the Ticket), атакующие используют украденные Kerberos-тикеты для перемещения в среде, обходя стандартные механизмы контроля доступа. Kerberos TGT и TGS: что именно мы крадём Kerberos использует два типа билетов: ПараметрTGT (Ticket Granting Ticket)TGS (Ticket Granting Service)НазначениеПодтверждае т личность пользователя перед KDCПредоставляет доступ к конкретному сервисуВыдаётKDC (AS_REP)TGS (TGS_REP)Область примененияЗапрос любых TGS в доменеДоступ к одному сервису (SMB, HTTP, SQL)Срок жизниПо умолчанию 10 часовПо умолчанию 10 часовЦенность для атакующегоВысокая - эквивалент сессии пользователяСредняя - доступ только к одному ресурсу Перехватив TGT пользователя, мы можем запрашивать TGS к любому сервису, к которому у него есть доступ. Перехваченный TGS даёт доступ только к конкретному ресурсу. Разница существенная. PtT через Rubeus Rubeus - основной инструмент для работы с Kerberos в AD-среде. Экспорт тикетов из текущей сессии: Код: Код:
# Дамп всех Kerberos-тикетов из памятиКод: Код:
# Экспорт всех Kerberos-тикетов на дискРазница между PtH и PtT на уровне сети Для Blue Team критически важно понимать различие: КритерийPass-the-HashPass-the-TicketПротоколNTLMKerberosЧто передаётсяNTLM response на challengeKerberos-тикет (AP_REQ)Трафик на DCДа - для доменных аккаунтов целевой хост пересылает response на DC через Netlogon (NRPC). Нет - только для локальных аккаунтовPtT с TGT - да, при каждом запросе TGS (4769); PtT с TGS - нет, тикет предъявляется напрямую сервисуДетект по Event ID4624 (Logon Type 3, AuthPkg NTLM)4768/4769 (аномальный IP)Срок действияПока не сменён парольДо истечения тикета (10ч)Какие порты используются445 (SMB), 135 (RPC)88 (Kerberos), 445 (SMB) Overpass-the-Hash: мост между NTLM и Kerberos Overpass-the-Hash (он же Pass-the-Key) - гибридная атака, которую я использую чаще всего на реальных проектах. Идея: берём NTLM-хеш, но вместо NTLM-аутентификации используем его для запроса Kerberos TGT. На выходе - легитимный Kerberos-тикет, полученный на основе хеша. Зачем это нужно? В средах, где NTLM ограничен через GPO ( Код:
Network Security: Restrict NTLMЧерез mimikatz: Код: Код:
sekurlsa::pth /user:administrator /domain:corp.local /ntlm:e19ccf75ee54e06b06a5907af13cef42 /run:powershell.exeЧто это значит для детекта: Код:
sekurlsa::pthЧерез Rubeus: Код: Код:
Rubeus.exe asktgt /user:administrator /rc4:e19ccf75ee54e06b06a5907af13cef42 /ptt
Код: Код:
Rubeus.exe asktgt /user:administrator /aes256: /pttКогда атакующий добрался до контроллера домена - открывается возможность подделки Kerberos-тикетов. Тут начинается самое интересное. Golden Ticket атака Golden Ticket - поддельный TGT, подписанный хешем учётной записи KRBTGT. Согласно MITRE ATT&CK T1558.001 (Golden Ticket), эта техника позволяет атакующему генерировать произвольные TGT. Учётная запись KRBTGT используется контроллером домена для шифрования всех TGT в домене. Если атакующий получает её NTLM-хеш (например, через DCSync), он может генерировать TGT для любого пользователя, включая несуществующих, с любыми привилегиями. По сути - карт-бланш на весь домен. Извлечение хеша KRBTGT через DCSync: Код: Код:
# mimikatz - DCSync для учётной записи krbtgtКод: Код:
kerberos::golden /user:ControlledAdmin /domain:corp.local /sid:S-1-5-21-XXXXXXXXXX /krbtgt: /pttSilver Ticket атака Silver Ticket - поддельный TGS для конкретного сервиса, описанный в MITRE ATT&CK как T1558.002 (Silver Ticket). Подписывается хешем сервисной учётной записи (а не KRBTGT). Плюс: не требует обращения к контроллеру домена, поэтому операция менее заметна. Код: Код:
kerberos::golden /user:fakeuser /domain:corp.local /sid:S-1-5-21-XXXXXXXXXX /target:sqlserver.corp.local /service:MSSQLSvc /rc4: /pttПолная цепочка: от рабочей станции до Domain Admin На реальных пентестах атаки на Active Directory разворачиваются по предсказуемому пути. Согласно данным Qualys, типичная последовательность: 🔓 Часть контента скрыта: Эксклюзивный контент для зарегистрированных пользователей. Зарегистрироваться или Войти Initial Access → Credential Dumping (LSASS) → Pass-the-Hash или Pass-the-Ticket → Lateral Movement → Privilege Escalation → Domain Takeover. Как это выглядит руками: Шаг 1. Первоначальный доступ. Компрометация рабочей станции через фишинг, эксплуатацию веб-приложения или физический доступ. Получение локальных прав администратора. Шаг 2. Дамп LSASS. На скомпрометированной машине вытаскиваем все хеши из памяти: Код: Код:
privilege::debugШаг 3. Pass-the-Hash - lateral movement. Проверяем, где этот хеш даёт администраторский доступ: Bash: Код:
nxc smbШаг 5. Получение Domain Admin. Когда находим хеш Domain Admin, используем его для доступа к контроллеру домена: Bash: Код:
wmiexec.py corp.local/domainadmin@dc01.corp.local -hashes :a87f3c657b8e4e0e894b032f7f14bffeКод: Код:
lsadump::dcsync /domain:corp.local /all /csvДетектирование: что видит Blue Team Каждая техника оставляет следы. Вот конкретные индикаторы для SOC-команд. Детектирование Pass-the-Hash Основной индикатор - Event ID 4624 (успешный вход) с параметрами:
Детектирование Pass-the-Ticket
Golden Ticket детектируется сложнее, но характерные признаки есть:
На основе практического опыта пентестов и рекомендаций MITRE ATT&CK - приоритизированный список мер. Ограничение NTLM Самая действенная мера против Pass-the-Hash - отключение NTLM. GPO: Код: Код:
Network Security: Restrict NTLM: NTLM authentication in this domain → Deny All, чтобы выявить сервисы, зависящие от NTLM, как рекомендует Vaadata. Я видел случаи, когда после отключения NTLM без аудита ложилась половина легаси-приложений. Переход на Kerberos устраняет PtH, но не PtT. Защита учётных данных
|
| Время: 20:57 |