Введение
Комплекс протоколов безопасности 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*.
In a Windows network, NT (New Technology) LAN Manager (NTLM) is a suite of Microsoft security protocols intended to provide authentication, integrity, and confidentiality to users. NTLM is the successor to the authentication protocol in Microsoft LAN Manager (LANMAN), an older Microsoft product. The NTLM protocol suite is implemented in a Security Support Provider, which combines the LAN Manager authentication protocol, NTLMv1, NTLMv2 and NTLM2 Session protocols in a single package. Whether these protocols are used or can be used on a system which is governed by Group Policy settings, for which different versions of Windows have different default settings. NTLM passwords are considered weak because they can be brute forced very easily with modern hardware. First, the client establishes a network path to the server and sends a NEGOTIATE MESSAGE advertising its capabilities. Next, the server responds with CHALLENGE MESSAGE which is used to establish the identity of the client. Finally, the client responds to the challenge with an AUTHENTICATE MESSAGE. The NTLM protocol uses one or both of two hashed password values, both of which are also stored on the server (or domain controller), and which through a lack of salting are password equivalent, meaning that if you grab the hash value from the server, you can authenticate without knowing the actual password. The two are the LM hash (a DES based function applied to the first 14 characters of the password converted to the traditional 8 bit PC charset for the language), and the NT hash (MD4 of the little endian UTF 16 Unicode password). Both hash values are 16 bytes (128 bits) each. The NTLM protocol also uses one of two one way functions, depending on the NTLM version; NT LanMan and NTLM version 1 use the DES based LanMan one way function (LMOWF), while NTLMv2 uses the NT MD4 based one way function (NTOWF). (and natively supported in Windows 2000), is a challenge response authentication protocol. It is intended as a cryptographically strengthened replacement for NTLMv1, enhancing NTLM security by hardening the protocol against many spoofing attacks and adding the ability for a server to authenticate to the client. NTLMv2 sends two responses to an 8 byte server challenge. Each response contains a 16 byte HMAC MD5 hash of the server challenge, a fully/partially randomly generated client challenge, and an HMAC MD5 hash of the user's password and other identifying information. The two responses differ in the format of the client challenge. The shorter response uses an 8 byte random value for this challenge. In order to verify the response, the server must receive as part of the response the client challenge. For this shorter response, the 8 byte client challenge appended to the 16 byte response makes a 24 byte package which is consistent with the 24 byte response format of the previous NTLMv1 protocol. In certain non official documentation (e. g. DCE/RPC Over SMB, Leighton) this response is termed LMv2. The second response sent by NTLMv2 uses a variable length client challenge which includes (1) the current time in NT Time format, (2) an 8 byte random value (CC2 in the box below), (3) the domain name and (4) some standard format stuff. The response must include a copy of this client challenge, and is therefore variable length. In non official documentation, this response is termed NTv2. Both LMv2 and NTv2 hash the client and server challenge with the NT hash of the user's password and other identifying information. The exact formula is to begin with the NT hash, which is stored in the SAM or AD, and continue to hash in, using HMAC MD5, the username and domain name. In the box below, X stands for the fixed contents of a formatting field. SC = 8 byte server challenge, random
CC = 8 byte client challenge, random
CC* = (X, time, CC2, domain name)
v2 Hash = HMAC MD5(NT Hash, user name, domain name)
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.