Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Internal-Monologue — Атака внутреннего монолога: получение NTLM-хэшей без обращения к LSASS | Kitploit
Инструменты/GitHubGitHub/eladshamir/internal-monologue
Атаки на ПаролиЛатеральное перемещениеПост-эксплуатацияТестирование на ПроникновениеRed Teaming
GitHubeladshamir/internal-monologue

Internal-Monologue

Атака внутреннего монолога: получение NTLM-хэшей без обращения к LSASS

Репозиторий
1.7k2387 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Атака Internal Monologue: получение NTLM-хешей без обращения к LSASS

Введение

Mimikatz, разработанный Бенджамином Делпи (@gentilkiwi), является широко известным инструментом для постэксплуатации, позволяющим злоумышленникам извлекать из памяти пароли в открытом виде, NTLM-хеши и билеты Kerberos, а также выполнять такие атаки, как pass-the-hash, pass-the-ticket или создавать golden ticket. Бесспорно, основное применение Mimikatz — это получение учётных данных пользователя из памяти процесса LSASS для использования в последующем латеральном перемещении.

Недавно Microsoft внедрила Credential Guard в Windows 10 Enterprise и Windows Server 2016, который использует виртуализацию для изоляции секретов и очень эффективно предотвращает извлечение хешей Mimikatz напрямую из памяти. Кроме того, Mimikatz стал главной целью большинства средств защиты конечных точек, которые активно пытаются его обнаружить и заблокировать. Хотя эти попытки обречены на провал, они становятся всё более досадной помехой.

NetNTLM

NetNTLM — это протокол «вызов-ответ» Windows, используемый в основном там, где Kerberos не поддерживается. В NetNTLM сервер отправляет клиенту случайное 8-байтовое значение (nonce) в качестве вызова, а клиент вычисляет ответ, обрабатывая вызов с помощью NTLM-хеша в качестве ключа, который является MD4-хешем пароля пользователя. Существует две версии протокола аутентификации NetNTLM, и обе уязвимы к определённым атакам. Естественно, версия 1 значительно слабее версии 2, поэтому начиная с Windows Vista/2008 NetNTLM версии 1 по умолчанию отключена.

Pass the Hash

Поскольку NTLM-хеш является ключом для вычисления ответа, злоумышленнику не обязательно получать пароль жертвы в открытом виде для аутентификации; следовательно, извлечение хеша из памяти LSASS с помощью Mimikatz практически эквивалентно краже пароля. Крис Хаммель опубликовал статью, описывающую эту технику в 2009 году, и назвал её «Pass the Hash» [https://www.sans.org/reading-room/whitepapers/testing/crack-pass-hash-33219].

Разделяй и властвуй

На Defcon 2012 Мокси Марлинспайк и Дэвид Халтон представили атаку «Разделяй и властвуй» против NetNTLMv1 [https://www.youtube.com/watch?v=sIidzPntdCM]. В NetNTLMv1 клиент получает 8-байтовый вызов и вычисляет ответ, шифруя его три раза с помощью DES, используя различные части NTLM-хеша в качестве ключа. Эффективная длина ключа DES составляет 56 бит, то есть 7 байт, тогда как NTLM-хеш имеет размер 16 байт. NetNTLMv1 сначала шифрует вызов, используя первые 7 байт NTLM-хеша в качестве ключа, затем шифрует вызов, используя следующие 7 байт NTLM-хеша в качестве ключа, и, наконец, шифрует вызов, используя последние 2 байта NTLM-хеша, дополненные нулями, в качестве ключа. Фактически это означает, что для получения NTLM-хеша по заданному вызову и ответу NetNTLMv1 злоумышленник должен взломать два 56-битных ключа DES, что экспоненциально проще, чем взлом одного 128-битного ключа. Мокси и Халтон разработали специальное оборудование для этой задачи и смогли перебрать всё пространство ключей DES менее чем за 24 часа, что гарантирует успешное получение NTLM-хеша за разумное время. Обратите внимание: в отличие от атак по словарю или полного перебора пароля, которые могут не дать результата, данная атака гарантирует успешное получение NTLM-хеша.

Радужные таблицы

Как показано на ToorCon (https://crack.sh), возможно создать полную радужную таблицу для всех возможных ответов NetNTLMv1 на выбранный вызов, например 0x1122334455667788, что позволяет взломать NTLM-хеш для заданного ответа за несколько минут. Это означает, что перехват ответа NetNTLMv1 на выбранный вызов может быть почти мгновенно преобразован в соответствующий NTLM-хеш, что практически эквивалентно получению пароля благодаря атаке Pass the Hash.

Атака понижения версии NetNTLM

Mimikatz обычно выполняется после того, как злоумышленник получил повышенный доступ к целевому хосту. На этом этапе злоумышленник может также изменить ключи реестра, такие как LMCompatibilityLevel, который определяет, должен ли хост согласовывать NetNTLMv1 или NetNTLMv2. Злоумышленник может изменить значение на 0, 1 или 2, что включает NetNTLMv1 на стороне клиента, а затем попытаться аутентифицироваться на подставном SMB-сервере, который перехватит ответ клиента, как описано в блог-посте Optiv [https://www.optiv.com/blog/post-exploitation-using-netntlm-downgrade-attacks].

Расширенная атака понижения версии NetNTLM

Есть ещё два параметра, которые могут помешать жертве согласовать ответ NetNTLMv1:

  1. NTLMMinClientSec — если настроен на «Требовать безопасность сеанса NTLMv2», соединение завершится ошибкой, если не будет согласован протокол NTLMv2.
  2. RestrictSendingNTLMTraffic — если настроен на «Запретить всё», клиентский компьютер не сможет аутентифицироваться на удалённом сервере с использованием NetNTLM любой версии. Как и в случае атаки понижения версии NetNTLM, эти параметры можно при необходимости изменить. Обратите внимание, что в отличие от LMCompatibilityLevel, эти параметры по умолчанию не настроены на блокировку аутентификации NetNTLMv1.

Атака Internal Monologue

В защищённых средах, где Mimikatz не должен выполняться, злоумышленник может провести атаку Internal Monologue, при которой он вызывает локальный вызов процедуры к пакету аутентификации NTLM (MSV1_0) из пользовательского приложения через SSPI для вычисления ответа NetNTLM в контексте вошедшего пользователя после выполнения расширенного понижения версии NetNTLM.

Поток атаки Internal Monologue описан ниже:

  1. Отключите превентивные меры NetNTLMv1, изменив LMCompatibilityLevel, NTLMMinClientSec и RestrictSendingNTLMTraffic на соответствующие значения, как описано выше.
  2. Получите все токены входа в систему, не связанные с сетью, из текущих запущенных процессов и олицетворите связанных пользователей.
  3. Для каждого олицетворённого пользователя взаимодействуйте с NTLM SSP локально, чтобы получить ответ NetNTLMv1 на выбранный вызов в контексте безопасности олицетворённого пользователя.
  4. Восстановите исходные значения LMCompatibilityLevel, NTLMMinClientSec и RestrictSendingNTLMTraffic.
  5. Взломайте NTLM-хеш перехваченных ответов с помощью радужных таблиц.
  6. Pass the Hash.

Обновление: совместимость с Credential Guard

Недавно я повторно протестировал Internal Monologue в средах с включённым Credential Guard и получил отрицательные результаты. Я не уверен, работал ли Credential Guard неправильно в моей тестовой среде во время первоначальных тестов, или с тех пор что-то изменилось. Я обновил реализацию, чтобы динамически получать серверный токен из AcceptSecurityContext и изменять его для обхода ловушки локальной аутентификации, чтобы в случае неудачи NetNTLMv1 без расширенной безопасности сеанса можно было перехватить хотя бы вызов-ответ NetNTLMv2.

Журнал аудита

Атака Internal Monologue, возможно, более скрытна, чем запуск Mimikatz, поскольку нет необходимости внедрять код или сбрасывать память из/в защищённый процесс. Поскольку ответ NetNTLMv1 вызывается путём локального взаимодействия с NTLM SSP, сетевой трафик не генерируется, а выбранный вызов не является легко обнаруживаемым. В журналах не регистрируется событие успешной аутентификации NTLM. Изменения в реестре для понижения версии NetNTLM, а также кража токенов/олицетворение других пользователей могут вызвать срабатывание индикаторов.

Доказательство концепции

Этот инструмент является доказательством концепции, реализующим атаку Internal Monologue на C#. Перенос кода в PowerShell может заменить одни события журнала в цепочке аудита на другие. Код PoC далёк от совершенства. Приветствуются положительный вклад и улучшения.

Автор

Элад Шамир из The Missing Link Security

Благодарности

  • Мэттью Буш (3xocyte) из The Missing Link Security и Шон Уильямсон (AusJock) из Beyond Binary за помощь в обсуждении идей и сборке этого проекта
  • Мокси Марлинспайк и Дэвид Халтон за их доклад «Defeating PPTP VPNs and WPA2 Enterprise with MS-CHAPv2» на Defcon 20
  • Optiv за атаку понижения версии NetNTLM
  • Бялек Джозеф (clymb3r) за Invoke-TokenManipulation
  • MWR Labs за Incognito
  • Антон Сапожников (snowytoxa) за Selfhash
  • Тим Малком Веттер (malcomvetter) за множество улучшений
  • Марчелло Сальвати (byt3bl33d3r) за добавление библиотеки DLL
Скачать инструмент