NTLMv2
В этой статье недостаточно критики, так как необходимо освещение с различных точек зрения. |
Возможно, эта статья содержит оригинальное исследование. |
В этой статье использованы только первичные либо аффилированные источники. |
NTLMv2 (NTLM версии 2) — встроенный в операционные системы семейства Microsoft Windows протокол сетевой аутентификации. Широко применяется в различных сервисах на их базе. Изначально был предназначен для повышения безопасности аутентификации путём замены устаревших LM и NTLM v1. NTLMv2 был введён начиная с Windows NT 4.0 SP4 и используется версиями Microsoft Windows вплоть до Windows 10 включительно. С самого изобретения протоколы NTLMv1 и NTLMv2 подвергались множеству нападений и демонстрировали широкий спектр серьёзных уязвимостей.
Схема аутентификации[править | править код]
Эта статья или раздел содержит незавершённый перевод с английского языка. |
Эта статья или раздел описывает ситуацию лишь применительно к частным случаям (Windows). |
В схеме аутентификации, реализованной при помощи SMB или SMB2 сообщений, вне зависимости от того, какой вид диалекта аутентификации будет использован (LM, LMv2, NTLM, NTLM2, NTLMv2), процесс аутентификации происходит следующим образом:
- Клиент пытается установить соединение с сервером и посылает запрос, в котором информирует сервер, на каких диалектах он способен произвести аутентификации, например: LM, NTLM, NTLM2, NTLMv2. Следовательно, диалект аутентификации LMv2 между клиентом и сервером исключается.
- Сервер из полученного от клиента списка диалектов (по умолчанию) выбирает наиболее защищённый диалект (например, NTLMv2), затем отправляет ответ клиенту.
- Клиент, определившись с диалектом аутентификации, пытается получить доступ к серверу и посылает запрос NEGOTIATE_MESSAGE.
- Сервер получает запрос от клиента и посылает ему ответ CHALLENGE_MESSAGE, в котором содержится случайная (random) последовательность из 8 байт. Она называется Server Challenge.
- Клиент, получив от сервера последовательность Server Challenge, при помощи своего пароля производит шифрование этой последовательности, а затем посылает серверу ответ AUTHENTICATE_MESSAGE, который содержит 24 байта.
- Сервер, получив ответ, производит ту же операцию шифрования последовательности Server Challenge, которую произвёл клиент. Затем, сравнив свои результаты с ответом от клиента, на основании совпадения разрешает или запрещает доступ.
Эволюция алгоритмов аутентификации LM и NTLM[править | править код]
LM[править | править код]
- Пароль пользователя, в виде OEM-строки, преобразуется в верхний регистр. Например, пароль «
SecREt01
», тогда получается OEM строка:0x5345435245543031
- Если пароль меньше 14 символов, он дополняется нулями до 14 байт:
0x5345435245543031000000000000
- Полученная последовательность из 14 байт делится на две половины по 7 байт:
0x53454352455430
и0x31000000000000
- Каждая из половин, состоящая из 7 байт, используется для создания двух DES-ключей, состоящих из 8 байт:
0x52a2516b252a5161
и0x3180010101010101
- Используя алгоритм DES и ASCII строку «
KGS!@#$%
», а также сформированные ранее два DES-ключа, вычисляются два hash-значения, каждое по 8 байт:0xff3750bcc2b22412
и0xc2265b23734e0dac
- Hash-значения из 8 байт объединяются в последовательность из 16 байт, формируя LM-hash:
0xff3750bcc2b22412c2265b23734e0dac
- LM-hash из 16 байт дополняется нулями до 21 байта:
0xff3750bcc2b22412c2265b23734e0dac0000000000
- Последовательность из 21 байта делится на три части по 7 байт:
0xff3750bcc2b224
,0x12c2265b23734e
и0x0dac0000000000
- Каждая из частей используется для создания трёх DES-ключей:
0xfe9bd516cd15c849
,0x136189cbb31acd9d
и0x0dd6010101010101
- Используя алгоритм DES и Server Challenge, а также сформированные ранее три DES-ключа, вычисляются три hash-значения, каждое по 8 байт. Например, если Server Challenge был
0x0123456789abcdef
, тогда получаются:0xc337cd5cbd44fc97
,82a667af6d427c6d
иe67c20c2d3e77c56
- Hash-значения из 8 байт объединяются в последовательность из 24 байт. Эта последовательность и есть LM Response:
0xc337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56
LMv2[править | править код]
- Из пароля пользователя в виде Unicode строки, при помощи алгоритма MD4 вычисляется NTLM-hash, состоящий из 16 байт. Например, пароль «
SecREt01
» или Unicode строка0x53006500630052004500740030003100
после преобразования посредством алгоритма MD4 будет иметь вид:0xcd06ca7c7e10c99b1d33b7485a2ed808
- Имя пользователя и имя домена в виде Unicode строк, объединяются и приводятся к верхнему регистру. Далее из этой последовательности и ранее полученного NTLM-hash при помощи алгоритма HMAC-MD5 вычисляется NTLMv2-hash, состоящий из 16 байт. Например, имя пользователя «
User
» и имя домена «Domain
» дадут строку «USERDOMAIN
» или Unicode строку0x550053004500520044004f004d00410049004e00
. После алгоритма HMAC-MD5, где применяется NTLM-hash, вычисляется NTLMv2-hash :0x04b8e0ba74289cc540826bab1dee63ae
. - Формируется последовательность Client Challenge из 8 байт, выбранных случайным образом (random), например:
0xffffff0011223344
- Server Challenge и Client Challenge объединяются в последовательность из 16 байт. Например, если Server Challenge был
0x0123456789abcdef
, тогда получаем:0x0123456789abcdefffffff0011223344
- Из последовательности Server Challenge и Client Challenge и ранее вычисленного NTLMv2-hash при помощи алгоритма HMAC-MD5 вычисляется hash-значение, состоящее из 16 байт:
0xd6e6152ea25d03b7c6ba6629c2d6aaf0
- Hash-значение объединяется с Client Challenge в последовательность из 24 байт. Эта последовательность и есть LMv2 Response:
0xd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344
NTLM[править | править код]
- Из пароля пользователя в виде Unicode строки при помощи алгоритма MD4 вычисляется NTLM-hash, состоящий из 16 байт. Например, пароль «
SecREt01
» или Unicode строка0x53006500630052004500740030003100
после преобразования посредством алгоритма MD4 будет иметь вид:0xcd06ca7c7e10c99b1d33b7485a2ed808
- NTLM-hash из 16 байт дополняется нулями до 21 байта:
0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
- Последовательность из 21 байта делится на три части по 7 байт.
0xcd06ca7c7e10c9
,0x9b1d33b7485a2e
и0xd8080000000000
- Каждая из частей, состоящая из 7 байт, используется для создания трёх DES-ключей, состоящих из 8 байт:
0xcd83b34fc7f14392
,0x9b8f4c767543685d
и0xd904010101010101
- Используя алгоритм DES и Server Challenge, а также сформированные ранее три DES-ключа, вычисляются три hash-значения, каждое по 8 байт. Например, если Server Challenge был
0x0123456789abcdef
, тогда получается:0x25a98c1c31e81847
,0x466b29b2df4680f3
и0x9958fb8c213a9cc6
- Нash-значения из 8 байт объединяются в последовательность из 24 байт. Эта последовательность и есть NTLM Response:
0x25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6
NTLM2[править | править код]
- Формируется последовательность Client Challenge из 8 байт, выбранных случайным образом (random), например:
0xffffff0011223344
- Client Challenge дополняется нулями до 21 байта. Эта последовательность и есть LMv2 Response:
0xffffff001122334400000000000000000000000000000000
- Server Challenge и Client Challenge объединяются в последовательность из 16 байт. Например, если Server Challenge был
0x0123456789abcdef
, тогда получается:0x0123456789abcdefffffff0011223344
- Из полученной последовательности при помощи алгоритма MD5 вычисляется следующее hash-значение, состоящее из 16 байт:
0xbeac9a1bc5a9867c15192b3105d5beb1
- Отсекаются первые 8 байт от полученного ранее hash-значения:
0xbeac9a1bc5a9867c
- Из пароля пользователя в виде Unicode строки, при помощи алгоритма MD4 вычисляется NTLM-hash, состоящий из 16 байт. Например, пароль «
SecREt01
» или Unicode строка0x53006500630052004500740030003100
после преобразования посредством алгоритма MD4 будет иметь вид:0xcd06ca7c7e10c99b1d33b7485a2ed808
- NTLM-hash из 16 байт дополняется нулями до 21 байта:
0xcd06ca7c7e10c99b1d33b7485a2ed8080000000000
- Последовательность из 21 байта делится на три части по 7 байт.
0xcd06ca7c7e10c9
,0x9b1d33b7485a2e
и0xd8080000000000
- Каждая из частей, состоящая из 7 байт, используется для создания трёх DES-ключей, состоящих из 8 байт:
0xcd83b34fc7f14392
,0x9b8f4c767543685d
и0xd904010101010101
- Используя алгоритм DES и отсечённую часть hash-значения, а также сформированные ранее три DES-ключа, вычисляются три hash-значения, каждое по 8 байт. Например, если Server Challenge был
0x0123456789abcdef
, тогда получается:0x10d550832d12b2cc
,0xb79d5ad1f4eed3df
и0x82aca4c3681dd455
- Нash-значения из 8 байт объединяются в последовательность из 24 байт. Эта последовательность и есть NTLM2 Response:
0x10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455
NTLMv2[править | править код]
Эта статья или раздел содержит незавершённый перевод с английского языка. |
- Из пароля пользователя в виде Unicode строки при помощи алгоритма MD4 вычисляется NTLM-hash, состоящий из 16 байт. Например, пароль «
SecREt01
» или Unicode строка0x53006500630052004500740030003100
после преобразования посредством алгоритма MD4 будет иметь вид:0xcd06ca7c7e10c99b1d33b7485a2ed808
- Имя пользователя и имя домена в виде Unicode строк объединяются и приводятся к верхнему регистру. Далее, из этой последовательности и ранее полученного NTLM-hash при помощи алгоритма HMAC-MD5 вычисляется NTLMv2-hash, состоящий из 16 байт. Например, имя пользователя «
User
» и имя домена «Domain
» дадут строку «USERDOMAIN
» или Unicode строку0x550053004500520044004f004d00410049004e00
. После алгоритма HMAC-MD5, где применяется NTLM-hash, вычисляется NTLMv2-hash :0x04b8e0ba74289cc540826bab1dee63ae
- Формируется последовательность Client Challenge из 8 байт, выбранных случайным образом (random), например:
0xffffff0011223344
- Формируется blob, например:
0x01010000
— the blob signature,0x00000000
— reserved value,0x0090d336b734c301
— timestamp,0xffffff0011223344
— a random Client challenge,0x00000000
— unknown,0x02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0000000000
— target information block,0x00000000
— unknown - Server Challenge и blob объединяются в последовательность, из которой при помощи алгоритма HMAC-MD5 и ранее вычисленного NTLMv2-hash вычисляется hash-значение, состоящие из 16 байт. Например, если Server Challenge был
0x0123456789abcdef
, тогда получается следующая последовательность:0x0123456789abcdef01010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000
. После использования алгоритма HMAC-MD5 получается следующее hash-значение:0xcbabbca713eb795d04c97abc01ee4983
- Нash-значения из 16 байт объединяются с blob в последовательность. Эта последовательность и есть NTLMv2 Response:
0xcbabbca713eb795d04c97abc01ee498301010000000000000090d336b734c301ffffff00112233440000000002000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d000000000000000000
Уязвимости[править | править код]
У этого раздела надо проверить нейтральность. |
Прослушивание сетевого трафика[править | править код]
Прослушивая сетевой трафик, можно перехватить SMB пакеты аутентификации, тем самым завладев последовательностью Server Challenge и ответом Response от клиента. Имея эти два параметра, несмотря на способ аутентификации (даже при NTLMv2), возможно, при помощи современного программного обеспечения (при условии не сложного пароля, допустим: «12345») в течение нескольких часов подобрать пароль клиента. Но если способом аутентификации является NTLMv2 и пароль клиента содержит прописные, заглавные, строчные буквы, цифры, а также специальные символы, то на взлом такого пароля могут уйти многие годы.
Подмена сервера[править | править код]
- Вывести из строя сервер, к которому клиент желает получить доступ. Для этого можно воспользоваться самой примитивной DDoS-атакой.
- Назначить компьютеру, с которого будет произведена атака, все параметры сервера, то есть имя сервера, IP-адрес сервера и MAC-адрес сервера. Это необходимо для того, чтобы клиент, обращаясь к серверу, произвел попытку подключения к компьютеру, с которого будет произведена атака.
- На запрос клиента о выборе диалекта аутентификации, компьютер, с которого будет произведена атака, должен будет выбрать самый небезопасный диалект, а именно LM (или более защищённый NTLM). В результате чего компьютер, с которого проводилась атака, получит LM Response (ответ). Злоумышленник, имея последовательность Server Challenge и LM Response, время взлома пароля прямым перебором (Bruteforce атака) займёт всего несколько часов.
Подмена пакетов аутентификации[править | править код]
Этот способ мало чем отличается от подмены сервера. Сервер, при помощи специального программного обеспечения или изменения настроек локальной политики безопасности, выбирает наиболее незащищённый вид диалекта аутентификации.
Профилактика успешных атак[править | править код]
Пароли[править | править код]
При выборе пароля клиент должен руководствоваться следующими правилами:
- Пароль должен содержать как можно больше символов;
- Пароль должен содержать буквы, цифры и другие символы;
- Пароли для всех важных аккаунтов должны быть уникальные.
Настройка политики безопасности Windows[править | править код]
Эта статья или раздел описывает ситуацию лишь применительно к частным случаям (Windows). |
Стиль этого раздела неэнциклопедичен или нарушает нормы литературного русского языка. |
Запустите «Панель управления» и откройте раздел «Администрирование → Локальная политика безопасности → Локальные политики → Параметры безопасности» (Administrative Tools → Local Security Policy → Local Policies → Security Options). В этом разделе найдите политику «Сетевая безопасность: уровень проверки подлинности LAN Manager». Из раскрывающегося списка необходимо выбрать параметр «Отправлять только NTLMv2-ответ. Отказывать LM и NTLM»
Примеры[править | править код]
Эта статья или раздел содержит незавершённый перевод с английского языка. |
Этот раздел представляет собой неупорядоченный список разнообразных фактов о предмете статьи. |
См. также[править | править код]
Ссылки[править | править код]
- [MS-NLMP]: NT LAN Manager (NTLM) Authentication Protocol Архивная копия от 18 января 2017 на Wayback Machine / Microsoft, 2007—2016
- https://www.owasp.org/images/3/37/OWASP-IL-2014-01_nhastie-presentation.pdf
- https://www.defcon.org/images/defcon-16/dc16-presentations/defcon-16-grutzmacher.pdf Архивная копия от 13 марта 2013 на Wayback Machine
- https://www.blackhat.com/presentations/bh-asia-04/bh-jp-04-pdfs/bh-jp-04-seki.pdf Архивная копия от 18 октября 2016 на Wayback Machine