CodeKitHub
Инструменты кодирования

Генератор хеша NTLM

Последнее обновление:

NTLM-хеш вычисляется путём кодирования входных данных в UTF-16LE (2 байта на символ, little-endian) и последующего пропуска через алгоритм дайджеста сообщений MD4 — эта однопроходная операция без соли и есть вся схема хеширования NTLM, которую Microsoft Windows использует со времён NT 4.0 для хранения верификаторов паролей. Этот инструмент выполняет точно такое же вычисление локально в браузере, полностью на JavaScript, так что ничего из введённого никогда не отправляется на сервер. Он предназначен для легитимной работы по безопасности — проверки экспортов хешей Active Directory, форматов вывода hashcat или Mimikatz, разбора задач CTF и учебных пентест-лабораторий, — а не для атак на учётные записи, которыми вы не владеете или на тестирование которых у вас нет разрешения.

NTLM-хеш

Что это за инструмент?

NTLM (NT LAN Manager) — устаревший протокол аутентификации Microsoft по схеме «запрос-ответ», всё ещё используемый сегодня для локальных входов в Windows и в качестве резервного варианта во многих средах Active Directory. Его верификатор пароля — обычно называемый «NTLM-хешем» — определён в собственной спецификации Microsoft MS-NLMP как `MD4(UTF-16-LE(пароль))`: пароль сначала кодируется в UTF-16 little-endian (каждый символ становится 2 байтами, в отличие от UTF-8), а затем эта последовательность байт один раз хешируется алгоритмом MD4 из RFC 1320.

Шаг кодирования UTF-16LE — деталь, которую чаще всего упускают при собственной реализации NTLM: хеширование байт UTF-8 строки вместо байт UTF-16LE даёт совершенно другой, некорректный дайджест, даже если видимый текст выглядит одинаково. Этот инструмент кодирует правильно, поэтому его вывод совпадает с тем, что хранит сама Windows, и с тем, что ожидают такие инструменты, как hashcat (режим 1000) и Mimikatz.

Поскольку NTLM появился раньше современного подхода к хешированию паролей, в нём нет ни одной из защит, придуманных специально для замедления подбора: ни соли для каждого пользователя, ни настраиваемого фактора трудоёмкости, ни намеренных итераций. Это единственный проход MD4, из-за чего вычисление происходит крайне быстро — удобно для совместимости со старыми системами, но губительно с точки зрения устойчивости к перебору и словарным атакам.

Зачем его использовать?

  • Вы только что извлекли партию хешей из NTDS.dit клиента в ходе санкционированного пентеста и хотите быстро проверить, что ваш собственный скрипт парсинга выдал корректный формат хеша, прежде чем скормить полный дамп в hashcat.
  • Вы разрабатываете собственный инструмент аудита учётных данных и только что написали свою реализацию MD4(UTF-16LE) по спецификации MS-NLMP — вставьте сюда известный тестовый вектор вроде «password», чтобы убедиться, что вывод вашего кода совпадает с правильным значением 8846F7EAEE8FB117AD06BDD830B7586C, прежде чем доверять ему на реальных данных.
  • Вы разбираете задачу CTF или домашнюю лабораторную работу по аутентификации Windows, и нужно быстро вычислить, каким должен быть NTLM-хеш конкретного пароля, не поднимая Windows-виртуалку ради одного значения.
  • Вы преподаёте курс по безопасности, посвящённый слабостям устаревшей аутентификации, и хотите наглядно показать студентам, почему отсутствие соли в NTLM приводит к тому, что один и тот же пароль всегда даёт одинаковый хеш — независимо от того, какой это аккаунт или домен.
  • 100% локально: ваш ввод никогда не покидает браузер, поэтому инструмент безопасен даже для чувствительных учётных данных в рамках санкционированной оценки.

Как использовать

  1. Введите пароль или строку, которую нужно захешировать, в поле ввода.
  2. Нажмите «Generate NTLM Hash».
  3. Прочитайте 32-символьный шестнадцатеричный NTLM-хеш (вывод в верхнем регистре включён по умолчанию — так его показывают Windows и большинство инструментов подбора; снимите галочку для нижнего регистра).
  4. Нажмите «Copy», чтобы скопировать хеш в буфер обмена.

Пример

Ввод

password

Результат

8846F7EAEE8FB117AD06BDD830B7586C

Это широко известный, независимо проверяемый тестовый вектор: NTLM-хеш строки «password» всегда равен 8846F7EAEE8FB117AD06BDD830B7586C. Вы можете сверить вывод этого инструмента с любой другой корректной реализацией NTLM.

NTLM в сравнении с современным хешированием паролей

Таблица ниже показывает, почему NTLM считается устаревшим для защиты новых систем, хотя он по-прежнему встроен в устаревшую инфраструктуру Windows и Active Directory.

СвойствоNTLMbcrypt / scrypt / Argon2
Базовый примитивОдин проход MD4Специально созданный медленный хеш с настраиваемой стоимостью
СольОтсутствует — одинаковые пароли всегда дают одинаковый хешУникальная случайная соль на каждый пароль
Итерации / растягиваниеОтсутствуютНастраиваемый фактор трудоёмкости, увеличиваемый со временем
Устойчивость к переборуОчень слабая — миллиарды попыток в секунду на современных GPUНамеренно дорогая каждая попытка
Где всё ещё встречаетсяУстаревшая аутентификация Windows, резерв Active DirectoryНовые приложения, актуальная лучшая практика

Похожие инструменты

Если вам нужен универсальный криптографический хеш, а не специфичная для NTLM конструкция MD4(UTF-16LE), эти инструменты могут подойти лучше.

Генератор хеша для нескольких алгоритмов · Генератор MD5 · Генератор паролей

Типичные рабочие процессы проверки NTLM

Этот инструмент наиболее полезен как быстрая проверка на здравый смысл внутри более крупного санкционированного рабочего процесса — подтверждение значения перед тем, как довериться ему в большом пайплайне, а не замена этого пайплайна целиком.

СценарийЧто вы проверяетеПочему это важно
Проверка собственного скриптаВаша реализация MS-NLMP против известного тестового вектораПозволяет поймать ошибку UTF-8 против UTF-16LE до того, как она незаметно испортит весь набор данных
Точечная проверка выгруженного хешаОдна извлечённая запись SAM/NTDS.dit против ожидаемого открытого текстаПодтверждает, что ваш инструмент извлечения корректно разобрал формат
Проверка формата hashcat/MimikatzСоответствие структуры вывода ожиданиям режима 1000Предотвращает бесполезные запуски подбора против некорректно сформированного списка хешей
Обучение и задачи CTFХеш, вычисленный вручную, против вывода инструментаФормирует интуитивное понимание того, как на самом деле работает MS-NLMP, шаг за шагом

Часто задаваемые вопросы

Что такое NTLM-хеш?

Это верификатор пароля, который Windows вычисляет и хранит для аутентификации NT LAN Manager; определён в спецификации Microsoft MS-NLMP как MD4(UTF-16LE(пароль)) — единственный проход MD4 по байтовому представлению пароля в UTF-16 little-endian. Всегда 128 бит, отображается как 32 шестнадцатеричных символа.

Почему именно UTF-16LE, а не UTF-8 или ASCII?

Windows хранит текст внутренне в UTF-16LE ещё со времён разработки NT, поэтому и пароли перед хешированием кодируются так же. Каждый символ становится 2 байтами (порядок little-endian), включая обычные символы ASCII вроде «a», которые превращаются в 0x61 0x00, а не просто 0x61. Хеширование байт UTF-8 той же строки даёт совершенно другой, неверный результат — это самая распространённая ошибка в реализациях NTLM «с нуля».

Безопасно ли использовать NTLM сегодня?

Нет, и сама Microsoft рекомендует переходить от него на Kerberos, где это возможно. У NTLM нет соли, поэтому одинаковые пароли всегда дают одинаковые хеши у любого пользователя и в любой системе, что делает возможным поиск по заранее вычисленным радужным таблицам. Также нет итераций или фактора трудоёмкости — единственный проход MD4 без соли, — поэтому современные GPU способны перебирать миллиарды вариантов в секунду против перехваченного хеша. NTLM держится в основном ради совместимости со старыми системами и приложениями Windows.

Чем NTLM отличается от современного хеширования паролей вроде bcrypt, scrypt или Argon2?

Современные средства хеширования паролей намеренно медленные и используют соль: bcrypt, scrypt и Argon2 добавляют уникальную случайную соль на каждый пароль и настраиваемый фактор трудоёмкости, который можно увеличивать со временем по мере роста производительности оборудования, — специально чтобы сделать перебор дорогим даже в больших масштабах. NTLM не делает ни того, ни другого — он разрабатывался в эпоху, когда офлайн-перебор ещё не был практической угрозой, и это заметно. Именно поэтому NTLM никогда не следует использовать для защиты чего-либо создаваемого сегодня; реальное назначение этого инструмента — совместимость с существующей инфраструктурой Windows и санкционированное тестирование безопасности, а не построение новых систем.

Каковы легитимные способы применения генератора NTLM-хеша?

Проверка хешей, извлечённых из базы SAM или NTDS.dit в ходе санкционированного пентеста или аудита учётных данных; проверка того, что ваши собственные инструменты или скрипты корректно реализуют MS-NLMP; генерация тестовых хешей для проверки совместимости с форматом hashcat (режим 1000) или Mimikatz в подконтрольной вам лаборатории; и выполнение упражнений CTF или учебных заданий, явно связанных с NTLM. Использование этого инструмента для атак на учётные записи или системы, которыми вы не владеете или на тестирование которых у вас нет письменного разрешения, легитимным применением не является.

Отправляется ли мой пароль или ввод на сервер?

Нет. Вычисление MD4 полностью выполняется на JavaScript в вашем браузере — нативного браузерного API для MD4 не существует, поэтому он реализован прямо в клиентском коде этой страницы, и ничто из введённого никуда не передаётся.

Обрабатывает ли этот инструмент также LM-хеш, или только NTLM?

Только NTLM. Более старый LM-хеш использует совершенно другую, более слабую схему (пароль делится на две половины по 7 символов, каждая хешируется алгоритмом DES), и Microsoft отключила хранение LM-хеша по умолчанию начиная с Windows Vista. Если вам нужно работать конкретно с устаревшими LM-хешами, потребуется отдельный инструмент, созданный именно для этого алгоритма.

Почему один и тот же ввод всегда даёт абсолютно одинаковый хеш, без какой-либо случайности?

Это ожидаемо и точно соответствует реальному поведению NTLM — у NTLM нет соли, поэтому MD4(UTF-16LE(ввод)) является чисто детерминированной функцией. Одинаковый ввод всегда даёт одинаковый вывод, и именно эта слабость делает NTLM уязвимым для атак по заранее вычисленным радужным таблицам.

Можно ли использовать это для хеширования чего-то помимо пароля, например имени пользователя или значения challenge?

Технически да — инструмент просто вычисляет MD4(UTF-16LE(ввод)) для любого введённого текста, так что он работает с любой строкой. Но если вы работаете с полным рукопожатием challenge-response NTLMv2 (которое включает NTLM-хеш плюс challenge сервера, nonce клиента и HMAC-MD5), потребуются дополнительные шаги помимо этого простого калькулятора одного хеша.

Как проверить, что вывод этого инструмента действительно корректен?

Используйте встроенный пример: NTLM-хеш строки «password» — это широко известный, независимо опубликованный тестовый вектор — 8846F7EAEE8FB117AD06BDD830B7586C. Введите его и убедитесь, что получаете точно такой же результат, а для дополнительной уверенности сверьтесь с другой доверенной реализацией, например с собственными тестовыми векторами hashcat.

Похожие инструменты