Введение

Комплекс протоколов безопасности Microsoft для аутентификации, целостности и конфиденциальности. В сети Windows NT (New Technology) LAN Manager (NTLM) — это набор протоколов безопасности Microsoft, предназначенных для обеспечения аутентификации, целостности и конфиденциальности пользователей. NTLM является преемником протокола аутентификации в Microsoft LAN Manager (LANMAN), более старом продукте Microsoft. Протокол NTLM реализован в Security Support Provider, который объединяет протокол аутентификации LAN Manager, протоколы сеансов NTLMv1, NTLMv2 и NTLM2 в едином пакете. Использование этих протоколов или возможность их использования в системе определяется настройками групповой политики, которые различаются в разных версиях Windows. Пароли NTLM считаются слабыми, поскольку их можно легко взломать с помощью современного оборудования. Сначала клиент устанавливает сетевое соединение с сервером и отправляет СООБЩЕНИЕ NEGOTIATE, сообщающее о своих возможностях. Затем сервер отвечает СООБЩЕНИЕМ CHALLENGE, которое используется для установления личности клиента. Наконец, клиент отвечает на вызов СООБЩЕНИЕМ AUTHENTICATE. Протокол NTLM использует одно или оба из двух хеш-значений пароля, которые также хранятся на сервере (или контроллере домена). Отсутствие соли делает их эквивалентными паролю, то есть, получив хеш-значение с сервера, можно аутентифицироваться, не зная фактического пароля. Это LM-хеш (функция на основе DES, применяемая к первым 14 символам пароля, преобразованным в традиционный 8-битный набор символов для ПК для языка) и NT-хеш (MD4 маленького эндианского UTF-16 Unicode пароля). Оба значения хеша составляют 16 байтов (128 бит). Протокол NTLM также использует одну из двух односторонних функций в зависимости от версии NTLM: NT LanMan и NTLM версии 1 используют одностороннюю функцию LanMan на основе DES (LMOWF), а NTLMv2 — одностороннюю функцию NT MD4 (NTOWF). (и поддерживается в Windows 2000) — это протокол аутентификации типа «запрос-ответ». Он предназначен как криптографически усиленная замена NTLMv1, повышающая безопасность NTLM за счет защиты протокола от многих атак подмены и добавления возможности для сервера аутентифицироваться перед клиентом. NTLMv2 отправляет два ответа на 8-байтовый вызов сервера. Каждый ответ содержит 16-байтовый HMAC MD5 хеш вызова сервера, полностью или частично случайно сгенерированный вызов клиента, а также HMAC MD5 хеш пароля пользователя и другую идентифицирующую информацию. Эти ответы различаются форматом вызова клиента. Для более короткого ответа используется 8-байтовое случайное значение для этого вызова. Для проверки ответа сервер должен получить вызов клиента как часть ответа. Для этого более короткого ответа 8-байтовый вызов клиента, добавленный к 16-байтовому ответу, формирует 24-байтовый пакет, соответствующий 24-байтовому формату ответа предыдущего протокола NTLMv1. В некоторых неофициальных документах (например, DCE/RPC Over SMB, Leighton) этот ответ называется LMv2. Второй ответ, отправленный NTLMv2, использует клиентский вызов переменной длины, который включает (1) текущее время в формате NT Time, (2) 8-байтовое случайное значение (CC2 в таблице ниже), (3) имя домена и (4) некоторые стандартные данные форматирования. Ответ должен включать копию этого вызова клиента и, следовательно, имеет переменную длину. В неофициальной документации этот ответ называется NTv2. И LMv2, и NTv2 хешируют вызов клиента и сервера с помощью NT-хеша пароля пользователя и другой идентифицирующей информации. Точная формула: начать с NT-хеша, который хранится в SAM или AD, и продолжить хеширование, используя HMAC MD5, имени пользователя и имени домена. В таблице ниже X обозначает фиксированное содержимое поля форматирования. SC = 8-байтовый вызов сервера, случайный. CC = 8-байтовый вызов клиента, случайный. CC* = (X, время, CC2, имя домена). v2 Hash = HMAC MD5(NT Hash, имя пользователя, доменное имя). LMv2 = HMAC MD5(v2 Hash, SC, CC). NTv2 = HMAC MD5(v2 Hash, SC, CC*). response = LMv2 | CC | NTv2 | CC*.

Использование версий протоколов

После того, как разработчик приложения или Negotiate SSP приняли решение об использовании SSP NTLM для аутентификации, групповая политика определяет возможность использования каждого из протоколов, реализованных SSP NTLM. Существует пять уровней аутентификации. Отправка ответов LM и NTLM: клиенты используют аутентификацию LM и NTLM и никогда не используют безопасность сеанса NTLMv2; DC принимают аутентификацию LM, NTLM и NTLMv2. Отправка LM и NTLM с использованием безопасности сеанса NTLMv2 при согласовании: клиенты используют аутентификацию LM и NTLM и используют безопасность сеанса NTLMv2, если сервер ее поддерживает; DC принимают аутентификацию LM, NTLM и NTLMv2. Отправка ответа только NTLM: клиенты используют только аутентификацию NTLM и используют безопасность сеанса NTLMv2, если сервер ее поддерживает; DC принимают аутентификацию LM, NTLM и NTLMv2. Отправка ответа только NTLMv2: клиенты используют только аутентификацию NTLMv2 и используют безопасность сеанса NTLMv2, если сервер ее поддерживает; DC принимают аутентификацию LM, NTLM и NTLMv2. Отправка ответа только NTLMv2\отказ в LM: клиенты используют только аутентификацию NTLMv2 и используют безопасность сеанса NTLMv2, если сервер ее поддерживает; DC отказывают в LM (принимают только аутентификацию NTLM и NTLMv2). Отправка ответа только NTLMv2\отказ в LM и NTLM: клиенты используют только аутентификацию NTLMv2 и используют безопасность сеанса NTLMv2, если сервер ее поддерживает; DC отказывают в LM и NTLM (принимают только аутентификацию NTLMv2). Под DC подразумевается контроллер домена, но использование этого термина может ввести в заблуждение. Любой компьютер, выполняющий роль сервера и аутентифицирующий пользователя, в данном контексте выполняет роль DC, например, компьютер Windows с локальной учетной записью, такой как Administrator, при использовании этой учетной записи для сетевого входа. До Windows NT 4.0 Service Pack 4 SSP переходил на NTLMv1 и откатывался к LM, если другая машина не поддерживала его. Начиная с Windows NT 4.0 Service Pack 4, SSP согласовывал сеанс NTLMv2, когда обе стороны – клиент и сервер – поддерживали его. До Windows XP, включительно, на компьютерах, не относящихся к США, использовалось 40- или 56-битное шифрование, поскольку в США действовали строгие ограничения на экспорт технологий шифрования. Начиная с Windows XP SP3, 128-битное шифрование можно было добавить, установив обновление, а в Windows 7 оно стало использоваться по умолчанию. В Windows Vista и более поздних версиях LM отключена для входящей аутентификации. Операционные системы на базе Windows NT, включая Windows Server 2003, хранят два хэша паролей: хэш LAN Manager (LM) и хэш Windows NT. Начиная с Windows Vista, возможность хранения обоих хэшей присутствует, но один из них отключен по умолчанию. Это означает, что аутентификация LM не работает, если компьютер с Windows Vista выступает в роли сервера. Более ранние версии Windows (вплоть до Windows NT 4.0 Service Pack 4) могли быть настроены для работы таким образом, но это не было настройкой по умолчанию.

Слабость и уязвимость

NTLM остается уязвимой для атаки "pass the hash", являющейся вариантом атаки "отражения", которая была устранена обновлением безопасности Microsoft MS08-068. Например, Metasploit во многих случаях может быть использован для получения учетных данных с одной машины, которые затем могут быть использованы для получения контроля над другой машиной. Инструментарий Squirtle может использоваться для использования межсайтового скриптинга на веб-сайтах для атак на близлежащие ресурсы через NTLM. В феврале 2010 года компания Amplia Security обнаружила несколько уязвимостей в реализации механизма аутентификации NTLM в Windows, которые нарушили безопасность протокола, позволяя злоумышленникам получать права на чтение/запись файлов и удаленное выполнение кода. Одна из представленных атак включала возможность предсказывать псевдослучайные числа и запросы/ответы, генерируемые протоколом. Эти уязвимости существовали во всех версиях Windows на протяжении 17 лет. В консультации по безопасности, описывающей эти проблемы, были представлены полностью рабочие эксплойты-подтверждения концепции. Все эти уязвимости были устранены в MS10-012. В 2012 году было продемонстрировано, что любую возможную 8-символьную перестановку хэша пароля NTLM можно взломать менее чем за 6 часов. В 2019 году это время было сокращено примерно до 2,5 часов при использовании более современного оборудования. Также существуют Rainbow tables для восьми- и девятисимвольных паролей NTLM. Более короткие пароли могут быть восстановлены методом перебора. В 2019 году EvilMog опубликовал инструмент ntlmv1 multitool для форматирования ответов на запросы NTLMv1 в формат взлома, совместимый с hashcat. С помощью hashcat и достаточной мощности GPU хэш NTLM может быть получен с использованием известной атаки с открытым текстом путем взлома ключей DES с помощью режима 14000 в hashcat, как было продемонстрировано на форумах hashcat. Следует отметить, что эквиваленты хэшей паролей, используемые в атаках "pass the hash" и при взломе паролей, должны быть сначала "похищены" (например, путем компрометации системы с достаточными правами доступа к хэшам). Кроме того, эти хэши отличаются от "хэша" NTLMSSP AUTH, передаваемого по сети во время обычной аутентификации NTLM.

Совместимость с Linux

Реализации NTLM для Linux, такие как Cntlm и winbind (входящий в состав Samba), позволяют приложениям Linux использовать NTLM-прокси. FreeBSD также поддерживает хранение паролей с помощью Crypt (C) в небезопасном формате NT Hash.