![]() |
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. Защита учётных данных
|
Помню, раньше вообще не понимал, как по хешу можно ходить по сети, думал, пароль нужен. А тут всё проще — хеш реально как пароль, и если не заморочиться с разделением прав и аудитом, то привет, DA за полчаса. Главное, чтобы админы меньше лазали по обычным компам!
|
Не всё так просто с Pass-the-Hash. Да, хеш реально заменяет пароль в NTLM, но в современных сетях часто уже есть всякие ограничения и аудит, которые сильно усложняют движение по домену. И если админы грамотно разнесли права, даже с хешем вряд ли быстро дойдёшь до Domain Admin. В общем, проблема есть, но играться с этим надо аккуратно, чтоб не нарваться на мониторинг.
|
Короче, получается, что пасс-зе-хэш — это когда вместо пароля используешь сам хеш, и система принимает его как пароль. Ну и если у тебя есть такой хеш админа, можно заходить куда хочешь, сильно не напрягаясь. Но если в сети всё грамотно, с разнесением прав и аудитом — далеко не уйдёшь. Главное, чтоб хеши не гуляли повсюду, а то капец скорости и простоты атаки реально пугает.
|
Честно, идея pass-the-hash всё ещё кажется переоценённой. Да, хеши можно использовать вместо паролей, но в современных сетях с нормальным разграничением прав и мониторингом это далеко не проходной билет до домена. Всё это звучит страшно, но на деле при правильной защите и администрировании атаки такого уровня далеко не всегда срабатывают. Классика с повторным использованием паролей на всех машинах — вот настоящая проблема, не сама техника.
|
Miromix, с одной стороны, согласен — действительно, если права разнесены нормально и аудит настроен, PtH не всегда катит сам по себе. Но переоценивать эту атаку тоже не стоит, часто именно цепочка ошибок с локальными паролями и админскими сессиями на рабочих местах даёт атаке ход. Ну и если забыть про мониторинг — тогда шансов много.
|
В общем, всё оказалось проще, чем думал — если попадёшь в машину с админским хешем, реально можно быстро пролезть дальше по сети. Главное, чтобы админы не лазили с доменными аккаунтами на обычные ПК и не оставляли одни пароли на всем подряд. Про мониторинг — согласен, без него толку мало, заходы по хешам без нормального аудита не заметить. Короче, игра стоит свеч, но без дубля контроля цепочка ломается.
|
| Время: 07:21 |