Открыть сервис

NT-хеш

NT-хеш — это криптографический хеш, используемый в операционных системах семейства Windows для хранения паролей пользователей. Он представляет собой результат применения алгоритма хеширования MD4 к паролю пользователя, предварительно закодированному в UTF-16LE (Little Endian). NT-хеш является основным механизмом аутентификации в протоколах NTLM (NT LAN Manager) и Kerberos, а также используется для хранения учётных данных в локальной базе SAM (Security Account Manager) и в Active Directory.

История

Разработка NT-хеша началась в начале 1990-х годов в рамках создания операционной системы Windows NT 3.1. Предшественником NT-хеша был LM-хеш (LAN Manager hash), который использовался в более ранних версиях Windows и OS/2. LM-хеш имел существенные недостатки: он разбивал пароль на две 7-символьные части, преобразовывал их в верхний регистр и не поддерживал символы, отличные от ASCII. Это делало его крайне уязвимым для атак перебором.

В Windows NT 3.1 (1993 год) был внедрён NT-хеш, который лишён этих ограничений. Он поддерживает пароли длиной до 256 символов, учитывает регистр символов и может обрабатывать любые символы Юникода. Несмотря на это, для обратной совместимости с устаревшими системами Windows продолжала хранить и LM-хеш, если длина пароля не превышала 14 символов. Начиная с Windows Vista и Windows Server 2008, создание LM-хеша по умолчанию отключено.

Алгоритм вычисления

Процесс вычисления NT-хеша состоит из следующих шагов:

  1. Кодирование пароля в UTF-16LE: каждый символ пароля преобразуется в двухбайтовую последовательность в формате Little Endian (младший байт вперёд). Например, символ «A» (U+0041) кодируется как 41 00.
  2. Применение MD4: к полученной последовательности байтов применяется криптографическая хеш-функция MD4 (Message Digest 4). Результатом является 128-битный (16-байтовый) дайджест.

Формула: NT-хеш = MD4(UTF-16LE(пароль))

Пример

Для пароля «password»:

  1. Кодирование в UTF-16LE: 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00
  2. Вычисление MD4: 8846F7EAEE8FB117AD06BDD830B7586C

Таким образом, NT-хеш для пароля «password» — 8846F7EAEE8FB117AD06BDD830B7586C.

Хранение в системе

Локальная база SAM

В локальных системах Windows NT-хеши хранятся в файле SAM (Security Account Manager), расположенном в директории %SystemRoot%\system32\config\. Файл SAM зашифрован с помощью ключей, хранящихся в системном реестре (ветка HKLM\SYSTEM\CurrentControlSet\Control\Lsa). Доступ к файлу SAM заблокирован для всех процессов, включая пользовательские, даже при работе с правами администратора. Для чтения хешей из SAM обычно требуется загрузка системы с другого носителя или использование уязвимостей.

Active Directory

В среде домена Windows NT-хеши хранятся в базе данных Active Directory (файл ntds.dit). Каждая учётная запись пользователя содержит атрибут unicodePwd, в котором хранится NT-хеш. База данных Active Directory также шифруется и защищается от несанкционированного доступа.

Использование в аутентификации

NTLM-аутентификация

Протокол NTLM (NT LAN Manager) использует NT-хеш для проверки подлинности пользователя. В процессе аутентификации сервер отправляет клиенту случайное число (nonce). Клиент вычисляет ответ, хешируя это число вместе с NT-хешем пароля. Сервер, зная NT-хеш пользователя, выполняет аналогичное вычисление и сравнивает результаты. Таким образом, пароль в открытом виде не передаётся по сети.

Kerberos

В доменных средах Windows предпочтительным протоколом аутентификации является Kerberos. При входе пользователя в систему его NT-хеш используется для расшифровки билета выдачи билетов (TGT), полученного от контроллера домена. Kerberos считается более безопасным, чем NTLM, так как использует более сложные механизмы защиты от подслушивания и атак повторного воспроизведения.

Уязвимости и критика

Слабость алгоритма MD4

MD4 — это устаревшая хеш-функция, разработанная Рональдом Ривестом в 1990 году. К настоящему времени найдены серьёзные уязвимости в MD4, позволяющие находить коллизии (разные входные данные, дающие одинаковый хеш) за время, значительно меньшее полного перебора. Однако для атак на пароли коллизии не представляют прямой угрозы, так как атакующему требуется найти именно исходный пароль, а не любой пароль с тем же хешем.

Отсутствие соли

NT-хеш не использует соль (случайную добавку). Это означает, что одинаковые пароли у разных пользователей дают одинаковые хеши. Это делает систему уязвимой для атак с использованием радужных таблиц — предварительно вычисленных таблиц, позволяющих быстро находить пароль по его хешу. Для защиты от таких атак в современных системах (например, в Linux с /etc/shadow) используется соль.

Скорость вычисления

MD4 — очень быстрый алгоритм. Это позволяет атакующим перебирать миллиарды паролей в секунду с использованием современных видеокарт (GPU) или специализированных ASIC. Например, на видеокарте NVIDIA RTX 4090 скорость перебора NT-хешей может достигать 100 миллиардов попыток в секунду. Это делает короткие и простые пароли крайне уязвимыми.

Передача по сети

Хотя протокол NTLM не передаёт пароль в открытом виде, он передаёт хеш, который может быть перехвачен злоумышленником. Атаки типа «Pass-the-Hash» (передача хеша) позволяют злоумышленнику, получившему NT-хеш, аутентифицироваться от имени пользователя без знания самого пароля. Для защиты от таких атак используются дополнительные механизмы, такие как Credential Guard и защищённые каналы связи.

Защита от атак

Длинные и сложные пароли

Основной метод защиты от перебора — использование длинных (более 15 символов) и сложных паролей, содержащих буквы разного регистра, цифры и специальные символы. Каждый дополнительный символ экспоненциально увеличивает время перебора.

Многофакторная аутентификация

Использование дополнительных факторов аутентификации (например, смарт-карт, биометрии или одноразовых кодов) делает кражу NT-хеша недостаточной для получения доступа.

Отключение NTLM

В современных средах рекомендуется отключать протокол NTLM и использовать только Kerberos. Это можно сделать с помощью групповых политик.

Credential Guard

В Windows 10 и Windows Server 2016 и новее доступна технология Credential Guard, которая изолирует NT-хеши и другие учётные данные в защищённой виртуальной среде, недоступной для обычных процессов и даже для ядра операционной системы.

Интересные факты

  • NT-хеш для пустого пароля представляет собой MD4 от нулевой последовательности байтов: 31D6CFE0D16AE931B73C59D7E0C089C0.
  • В Windows NT-хеш может быть извлечён с помощью утилит, таких как mimikatz (разработчик — Бенджамин Дельпи, программное обеспечение может использоваться для несанкционированного доступа), pwdump или samdump2.
  • NT-хеш используется не только для аутентификации, но и для шифрования некоторых системных данных, например, для защиты хранимых паролей в менеджере учётных данных Windows.
  • В некоторых версиях Windows NT-хеш может быть использован для входа в систему в автономном режиме (offline logon), если контроллер домена недоступен.

Источники

  • Microsoft Docs: «NTLM User Authentication»
  • Microsoft Docs: «Security Account Manager (SAM)»
  • RFC 1320: «The MD4 Message-Digest Algorithm»
  • «Windows Internals, Part 1» (7th Edition) — Pavel Yosifovich, Mark E. Russinovich, David A. Solomon, Alex Ionescu
  • «The NTLM Authentication Protocol» — Christopher D. M.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →