NTLM
NTLM (от англ. NT LAN Manager — LAN-менеджер новой технологии) — семейство протоколов безопасности компании Microsoft, предназначенных для обеспечения аутентификации, целостности и конфиденциальности пользователей в сетях на базе Windows[1][2][3]. NTLM является преемником протокола аутентификации LAN Manager (LANMAN), более старого продукта Microsoft. Пакет протоколов NTLM реализован в поставщике поддержки безопасности, который объединяет в себе протокол аутентификации LAN Manager, NTLMv1, NTLMv2 и NTLM2 Session. Использование этих протоколов на системе определяется настройками групповой политики, причём для разных версий Windows действуют различные параметры по умолчанию.
Пароли NTLM считаются слабыми, поскольку могут быть вскрыты перебором достаточно быстро даже на современном оборудовании[4].
Протокол
NTLM представляет собой протокол аутентификации по принципу «вызов-ответ», который использует три сообщения для аутентификации клиента в среде с ориентированными на соединение коммуникациями (в безсоединительном режиме используется схожий процесс), а также четвёртое сообщение — если необходима проверка целостности[5][6][7][8]:
- Сначала клиент устанавливает сетевой путь к серверу и отправляет сообщение NEGOTIATE_MESSAGE, объявляя свои возможности[9].
- Затем сервер отвечает сообщением CHALLENGE_MESSAGE, которое используется для установления личности клиента[10].
- В итоге клиент отвечает на вызов сообщением AUTHENTICATE_MESSAGE[11].
Протокол NTLM использует одно или оба из двух хеш-значений пароля, которые также хранятся на сервере (или контроллере домена) и по причине отсутствия соли считаются «эквивалентом пароля», то есть при получении хеша можно аутентифицироваться без знания пароля. Это LM-хеш (реализованный на основе DES для первых 14 символов пароля, переведённых в традиционную 8-битовую локальную кодировку), и NT-хеш (MD4-хеш от little endian UTF-16 Unicode-представления пароля). Оба хеша имеют длину 16 байт (128 бит)[12].
В зависимости от версии NTLM применяется одна из двух односторонних функций: для NT LanMan и NTLM версии 1 используется основанная на DES функция (LMOWF), для NTLMv2 — функция, основанная на NT MD4 (NTOWF)[12][13].
Аутентификация клиента осуществляется сервером путём отправки 8-байтового случайного числа (challenge). Клиент выполняет вычисление, используя это число и общий с сервером секрет — а именно, один из двух приведённых выше хешей пароля. Клиент возвращает 24-байтовый результат. Обычно в NTLMv1 вычисления производятся по обоим хешам, и оба результата возвращаются серверу. Сервер проверяет корректность результата, подтверждая наличие у клиента секрета, а значит, и его подлинность.
Оба хеша дают по 16 байт, к которым добавляется 5 байт нулей, получается 21 байт, делящийся на три 7-байтовых (56-битных) фрагмента. Каждый фрагмент используется как ключ для шифрования вызова по DES. Три полученных результата объединяются в 24-байтовый ответ. Как с помощью LM-хеша, так и с помощью NT-хеша формируются ответы; поведение может быть настроено.
C = 8-байтовый случайный challenge от сервера K1 | K2 | K3 = NTLM-Hash | 5-байтовый 0 response = DES(K1,C) | DES(K2,C) | DES(K3,C)
NTLMv2, появившийся в Windows NT 4.0 SP4[14] (и поддерживаемый нативно в Windows 2000), реализует схему challenge-response, являясь криптографически усиленной заменой NTLMv1 и добавляя возможность серверу аутентифицироваться перед клиентом[1][15][16].
NTLMv2 отправляет два ответа на 8-байтовый «вызов» сервера. Каждый ответ содержит 16-байтовый HMAC-MD5-хеш вызова сервера, полностью или частично случайно сгенерированный «вызов» клиента и HMAC-MD5-хеш пароля пользователя и других идентифицирующих данных. Отличие двух видов ответов — в формате клиентского вызова. Первый из них короче и использует просто 8 байт случайных данных; для проверки серверу требуется, чтобы этот challenge был частью ответа. Суммарно — 24 байта (8 байт challenge + 16 байт ответа), совместимые по формату с NTLMv1 (в неофициальной документации называется LMv2).
Второй ответ (NTv2) использует переменной длины client-challenge, содержащий: (1) текущее время в формате NT Time, (2) 8-байтовое случайное значение (CC2), (3) имя домена и (4) элементы стандартного формата. Весь служебный блок также включается в ответ (делая его переменной длины). В неофициальной документации называется NTv2.
Для обоих случаев LMv2 и NTv2, challenge сервера и клиента хешируются с NT-хешем пароля пользователя и прочими идентификаторами. Точная формула: берётся NT-хеш из SAM или AD, затем к нему через HMAC-MD5 добавляются имя пользователя и домен. X — служебные поля.
SC = 8-байтовый вызов сервера, случайный CC = 8-байтовый вызов клиента, случайный CC* = (X, время, CC2, имя домена) 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*
NTLM2 Session аналогичен MS-CHAPv2: аутентификация производится схемой NTLMv1, а безопасность сеанса усиливается как в NTLMv2.
Алгоритм таков: используется NTLMv1, но клиент к вызову сервера добавляет свой 8-байтовый вызов, их сумма MD5-хешируется, и младшие 8 байт результата используются как challenge в NTLMv1. Клиентский вызов возвращается одной частью 24-байтового ответа, а вычисленный результат — другой.
Этот вариант упрочняет NTLMv1, сохраняя совместимость с текущей инфраструктурой контроллеров домена, но предотвращает словарная атака с подменой challenge на стороне сервера (атаку можно реализовать с помощью радужных таблиц)[17].
Существующая инфраструктура NTLMv1 позволяет отправлять challenge/response для проверки не только на сервере, но и на контроллер домена. При NTLM2 Session эта особенность сохраняется, теперь challenge сервера подменяется на хеш обоих вызовов.
NTLMv1 Клиент<-Сервер: SC Клиент->Сервер: H(P,SC) Сервер->DomCntl: H(P,SC), SC Сервер<-DomCntl: да/нет NTLM2 Session Клиент<-Сервер: SC Клиент->Сервер: H(P,H'(SC,CC)), CC Сервер->DomCntl: H(P,H'(SC,CC)), H'(SC,CC) Сервер<-DomCntl: да/нет
Доступность и использование NTLM
С 2010 года Microsoft не рекомендует использовать NTLM в новых приложениях:[18]
Разработчикам важно учитывать, что NTLM не поддерживает современные криптографические методы, такие как AES или SHA-256. Для обеспечения целостности применяется циклический избыточный код (CRC) или MD5, для шифрования — RC4.
Ключ, производимый из пароля — по стандартам RFC1320 и FIPS46-2. В связи с этим рекомендуется по возможности не использовать NTLM.
Несмотря на эти рекомендации, NTLM до сих пор широко используется — главным образом ради совместимости со старыми системами. Порой использование NTLM можно избежать.
Microsoft добавила NTLM-хеш в свою реализацию протокола Kerberos (в особенности для типа шифрования RC4-HMAC) для улучшения совместимости. По данным независимого исследователя, это позволяет атакующему, зная NTLM-хеш, получить Kerberos-билет от контроллера домена[19]. C версии Windows 2000 для доменов Active Directory Microsoft официально использует Kerberos как основной протокол аутентификации[16]; Kerberos применяется, когда сервер состоит в домене Windows Server. Microsoft не рекомендует разработчикам обращаться напрямую ни к Kerberos, ни к поставщику безопасности NTLM (SSP)[20].
Ваше приложение не должно обращаться к пакету безопасности NTLM напрямую; вместо этого используйте пакет Negotiate. Negotiate позволяет использовать более современные протоколы при их поддержке, выбирая между Kerberos и NTLM. При возможности по умолчанию выбирается Kerberos, иначе — NTLM.
Провайдер NTLM используетcя в следующих случаях:
- Клиент аутентифицируется на сервере вне домена или когда домена Active Directory нет (режим «рабочей группы»)
- На сервере должна быть включена функция «общий доступ с защитой паролем», которая по умолчанию отключена и несовместима с HomeGroup в некоторых версиях Windows.
- Если сервер и клиент состоят в одной HomeGroup, вместо NTLM применяется протокол, аналогичный Kerberos — Public Key Cryptography based User to User Authentication[21]. HomeGroup упрощает совместное использование ресурсов в небольшой сети, требуя минимальных настроек, и скорее всего используется чаще, чем обычное совместное использование с защитой паролем.
- Если сервер — это устройство с поддержкой SMB, например, NAS или сетевой принтер, то NTLM SSP может быть единственным поддерживаемым методом аутентификации. Некоторые реализации SMB или старые версии Samba могут вынуждать Windows использовать для исходящей аутентификации NTLMv1 или даже LM, что позволяет взаимодействовать с устаревшими и небезопасными устройствами вне зависимости от их возраста.
- Если сервер состоит в домене, но Kerberos использовать нельзя.
- Аутентификация по IP-адресу (без обратного разрешения имени)
- Сервер состоит в другом лесу Active Directory с унаследованным доверительным отношением NTLM вместо сквозного доверия между лесами
- Между клиентом и сервером находится брандмауэр, блокирующий порты Kerberos (обычно TCP 88)
Когда применение NTLM SSP определено разработчиком или механизмом Negotiate, разрешение использования конкретных протоколов задаётся групповой политикой. Существует пять уровней аутентификации[22]:
- Отправлять ответы LM и NTLM: клиент использует LM и NTLM-аутентификацию, никогда не применяет NTLMv2; серверы принимают LM, NTLM и NTLMv2.
- Отправлять LM и NTLM — использовать NTLMv2, если возможно: клиент применяет LM и NTLM, использует NTLMv2 в случае поддержки сервером; серверы принимают LM, NTLM и NTLMv2.
- Только ответ NTLM: клиент использует только NTLM и при поддержке сервера — NTLMv2; серверы принимают LM, NTLM и NTLMv2.
- Только ответ NTLMv2: клиент использует только NTLMv2 и при необходимости NTLMv2 session; серверы принимают LM, NTLM и NTLMv2.
- Только ответ NTLMv2, отказ от LM: клиент использует только NTLMv2 и NTLMv2 session; серверы отвергают LM (принимают только NTLM и NTLMv2).
- Только ответ NTLMv2, отказ от LM и NTLM: клиент использует только NTLMv2 и NTLMv2 session; серверы отвергают LM и NTLM (принимают только NTLMv2).
В данном контексте DC (Domain Controller) — любой сервер, выполняющий роль аутентификатора, даже если это обычная рабочая станция Windows с локальной учётной записью администратора.
До Windows NT 4.0 Service Pack 4 SSP проводил переговоры по NTLMv1 и при отсутствии поддержки у другой стороны переходил на LM.
С Windows NT 4.0 Service Pack 4 поддержка NTLMv2 Session становится возможной при условии поддержки с обеих сторон[23]. Вплоть до Windows XP на неамериканских версиях использовалось 40- или 56-битное шифрование (ограничения экспортного контроля США). В Windows XP SP3 появилась возможность 128-битного шифрования (при установке обновления), и начиная с Windows 7 такой режим становится стандартом.
В Windows Vista и более поздних системах протокол LM для входящих соединений отключён. В системах на базе Windows NT вплоть до Windows Server 2003 хранились обе версии хеша пароля (LM и NT). В Windows Vista возможность сохранять оба хеша осталась, но LM по умолчанию отключён — тем самым LM-аутентификация не работает при этой ОС в роли сервера. В предыдущих версиях (начиная с NT 4.0 SP4) данное поведение также могло быть задано, но по умолчанию использовалось LM[24].
Недостатки и уязвимости
NTLM остаётся уязвимым к атаке pass the hash, которая основана на отражении хеша и была частично устранена патчем MS08-068. Например, Metasploit позволяет получить идентификационные данные и использовать их для получения контроля над другими машинами[3][25]. Инструментарий Squirtle позволяет использовать межсайтовый скриптинг для подобных атак на защищённые ресурсы с помощью NTLM[26].
В феврале 2010 года Amplia Security обнаружила ряд уязвимостей реализации NTLM в Windows, позволявших атакующим получать права на чтение/запись файлов и даже удалённо выполнять код. Одна из атак включала прогнозирование псевдослучайных чисел для вызова и ответа протокола. Данные уязвимости существовали во всех версиях Windows более 17 лет; были полностью устранены патчем MS10-012[27][28].
В 2012 году было показано, что каждая возможная хеш-функция стандартного 8-символьного пароля NTLM может быть вскрыта менее чем за 6 часов[29].
В 2019 году время было сокращено до примерно 2,5 часов на современном оборудовании[4][30]. Также существуют радужные таблицы для взлома 8- и 9-символьных паролей NTLM; более короткие пароли перебираются в лоб[31].
В 2019 году EvilMog[32][33] опубликовал утилиту ntlmv1-multitool[34], преобразующую отклики NTLMv1 в формат, совместимый с инструментом hashcat. С помощью hashcat и мощных GPU NTLM-хеш может быть восстановлен из известного открытого текста через поиск DES-ключей (см. hashcat mode 14000), что было продемонстрировано пользователем atom на форуме hashcat[35].
Следует учитывать, что эквивалентные паролю хеши, используемые в атаках pass-the-hash и взломе паролей, сначала необходимо «украсть» (например, получив права администратора на системе, чтобы выгрузить хеши); также эти хеши не равны «hash» из NTLMSSP_AUTH, передаваемому по сети при обычной аутентификации NTLM.
Совместимость с Linux
Примечания
- ↑ 1 2 Введение. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ Подробности сеансовой безопасности. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ 1 2 Reflecting on NTLM Reflection. FrequencyX Blog. IBM Internet System Security (ISS) (17 декабря 2009). Дата обращения: 14 августа 2010. Архивировано 31 декабря 2009 года.
- ↑ 1 2 Claburn, Thomas Use an 8-char Windows NTLM password? Don't. Every single one can be cracked in under 2.5hrs (англ.). www.theregister.co.uk (14 февраля 2019). Дата обращения: 26 ноября 2020.
- ↑ Microsoft NTLM. MSDN. Microsoft. Дата обращения: 15 августа 2010.
- ↑ Message Syntax. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ Connection-Oriented. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ Connectionless. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ NEGOTIATE_MESSAGE. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ CHALLENGE_MESSAGE. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ AUTHENTICATE_MESSAGE. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ 1 2 NTLM v1 Authentication. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ NTLM v2 Authentication. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 15 августа 2010.
- ↑ What's New in Windows NT 4.0 Service Pack 4? Дата обращения: 6 июня 2024. Архивировано 17 января 1999 года.
- ↑ How to enable NTLM 2 authentication. Microsoft (25 января 2007). Дата обращения: 14 августа 2010.
- ↑ 1 2 Security Configuration. TechNet. Microsoft (24 марта 2009). Дата обращения: 14 августа 2010.
- ↑ Varughese, Sam Rainbow Cracking and Password Security. Palisade (февраль 2006). Дата обращения: 14 августа 2010. Архивировано 1 июня 2010 года.
- ↑ Security Considerations for Implementers. NT LAN Manager (NTLM) Authentication Protocol Specification. Microsoft. Дата обращения: 16 августа 2010.
- ↑ Active Directory Vulnerability Disclosure: Weak encryption enables attacker to change a victim's password without being logged - Aorato. Дата обращения: 5 октября 2014. Архивировано 6 октября 2014 года.
- ↑ Microsoft NTLM. TechNet Library. Microsoft. Дата обращения: 2 ноября 2015.
- ↑ Public Key Cryptography based User to User Authentication Overview. TechNet Library. Microsoft. Дата обращения: 2 ноября 2015.
- ↑ Уровни аутентификации LAN Manager. MSDN Library. Microsoft. Дата обращения: 2 ноября 2015.
- ↑ Windows Authentication. TechNet Library. Microsoft (29 июня 2011). Дата обращения: 2 ноября 2015.
- ↑ The Most Misunderstood Windows Security Setting of All Time. TechNet Magazine. Microsoft. Дата обращения: 2 ноября 2015.
- ↑ HD Moore. MS08-068: Metasploit and SMB Relay. Дата обращения: 6 июня 2024.
- ↑ Kurt Grutzmacher. Nail the Coffin Shut, NTLM is Dead (8 августа 2008). Дата обращения: 6 июня 2024.
- ↑ Hernan Ochoa и Agustin Azubel. Understanding the Windows SMB NTLM Weak Nonce vulnerability (28 июля 2010). Дата обращения: 6 июня 2024.
- ↑ Hernan Ochoa и Agustin Azubel. Windows SMB NTLM Weak Nonce vulnerability Security Advisory. Дата обращения: 6 июня 2024.
- ↑ Goodin, Dan 25-GPU cluster cracks every standard Windows password in <6 hours. Ars Technica (10 декабря 2012). Дата обращения: 23 ноября 2020.
- ↑ hashcat hand-tuned hashcat 6.0.0 beta and 2080Ti (stock clocks) breaks NTLM cracking speed mark of 100GH/s on a single compute device (англ.). @hashcat (13 февраля 2019). Дата обращения: 26 февраля 2019.
- ↑ A Case for Modern Rainbow Table Usage. Дата обращения: 6 июня 2024.
- ↑ Ethical hacker Dustin Heywood, a.k.a. EvilMog: 'My mission is to make companies safer' (en-CA), The Globe and Mail (9 декабря 2019). Дата обращения: 12 октября 2023.
- ↑ Dustin Heywood: The "Evil" Hacker Using his Neurodivergent Mind for Good (англ.). IBM Newsroom. Дата обращения: 12 октября 2023.
- ↑ Heywood, Dustin 10 Nov, 2020 Updates (11 октября 2023). Дата обращения: 12 октября 2023.
- ↑ How to make use of the DES KPA mode. hashcat.net. Дата обращения: 12 октября 2023.
- ↑ Cntlm: Fast NTLM Authentication Proxy in C. Дата обращения: 6 июня 2024.
- ↑ NTLM authentication - MoodleDocs. Дата обращения: 6 июня 2024.
- ↑ NT MD4 password hash as new password encryption method for FreeBSD. Mail-archive.com. Дата обращения: 2 декабря 2018.
Литература
- NT LAN Manager (NTLM) Authentication Protocol Specification
- The NTLM Authentication Protocol and Security Support Provider — подробный анализ протокола.
Ссылки
- Онлайн-взлом NTLM-хеша с помощью радужных таблиц
- Cntlm — NTLM/NTLMv2 прокси и ускоритель — персональный HTTP(S)/SOCKS5 прокси для приложений, не поддерживающих NTLM (Windows/Linux/UNIX)
- MSDN: переименование протокола
- MSDN: описание аутентификации NTLM
- Libntlm — свободная реализация (C)
- NTLM Authorization Proxy Server — ПО для аутентификации пользователей через прокси-сервер Microsoft
- Установка NTLM
- NTLM v2 и настройка LMCompatibilityLevel
- Jespa — интеграция с Active Directory на Java — комплексная реализация NTLM.
- EasySSO — NTLM-аутентификатор для JIRA
- ntlmv2-auth — API и фильтр сервлетов для Java
- Генератор NTLM-сообщений
- WAFFLE — Java/C# фреймворк аутентификации Windows Архивировано 20 октября 2010 года.
- Objectif-securite (радужные таблицы для ophcrack)
- Px для Windows — HTTP-прокси, автоматически аутентифицирующийся с NTLM-прокси
- NTLMv1 Multi Tool — форматирование откликов NTLMv1 под hashcat