Вы больше не должны использовать NTLM. Он настолько старый и настолько плохой, что Microsoft Application Verifier (который используется для выявления распространенных ошибок программирования) выдаст предупреждение, если обнаружит, что вы используете NTLM.
Вот глава из документации Application Verifier о том, почему у них есть тест, если кто-то по ошибке использует NTLM:
Почему необходим плагин NTLM
NTLM - это устаревший протокол аутентификации с недостатками, которые
потенциально ставит под угрозу безопасность приложений и операционной
система. Наиболее важным недостатком является отсутствие сервера
аутентификация, которая может позволить злоумышленнику обмануть пользователей
подключение к поддельному серверу. Как следствие пропавшего сервера
приложения, использующие NTLM, также могут быть уязвимы
тип атаки, известный как атака «отражения». Этот последний позволяет
злоумышленник, чтобы перехватить разговор аутентификации пользователя с
законный сервер и использовать его для аутентификации злоумышленника на
компьютер пользователя. Уязвимости NTLM и способы их использования
являются целью увеличения исследовательской деятельности в области безопасности
сообщества.
Хотя Kerberos уже много лет доступен во многих приложениях
все еще написаны для использования только NTLM. Это излишне уменьшает
безопасность приложений. Однако Kerberos не может заменить NTLM во всех
Сценарии - в основном те, где клиент должен пройти аутентификацию
системы, которые не присоединены к домену (возможно, домашняя сеть
самый распространенный из них). Пакет безопасности согласования позволяет
обратно-совместимый компромисс, который использует Kerberos, когда это возможно
и возвращается к NTLM только тогда, когда нет другого выбора. Код переключения
использовать переговоры вместо NTLM значительно увеличит
безопасность для наших клиентов при внедрении нескольких приложений или их отсутствии
Совместимость. Договариваться само собой не серебряная пуля - есть
случаи, когда злоумышленник может принудительно перейти на NTLM, но это
значительно сложнее в эксплуатации. Тем не менее, один немедленный
улучшение заключается в том, что приложения, написанные для правильного использования, ведут переговоры
автоматически невосприимчивы к атакам отражения NTLM.
В качестве последнего слова предостережения против использования NTLM: в будущем
версии Windows можно будет отключить использование NTLM на
операционная система. Если приложения имеют жесткую зависимость от NTLM
они просто не смогут аутентифицироваться, когда NTLM отключен.
Как работает плагин
Подключаемый модуль Verifier обнаруживает следующие ошибки:
Пакет NTLM указывается непосредственно в вызове AcquireCredentialsHandle (или API-оболочки более высокого уровня).
Целевое имя в вызове InitializeSecurityContext равно NULL.
Целевое имя в вызове InitializeSecurityContext не является правильно сформированным доменным именем в стиле SPN, UPN или NetBIOS.
Последние два случая заставят Negotiate вернуться к NTLM либо напрямую (первый случай), либо косвенно (контроллер домена вернет ошибку «принципал не найден» во втором случае, что приведет к откату Negotiate).
Плагин также регистрирует предупреждения при обнаружении понижений до NTLM; например, когда SPN не найден контроллером домена. Они регистрируются только как предупреждения, поскольку они часто являются законными случаями, например, при аутентификации в системе, которая не присоединена к домену.
NTLM Остановки
5000 - Приложение явно выбрало пакет NTLM
Серьезность - Ошибка
Приложениеили подсистема явно выбирает NTLM вместо Negotiate при вызове AcquireCredentialsHandle. Даже если клиент и сервер могут пройти аутентификацию с использованием Kerberos, это предотвращается явным выбором NTLM.
Как исправить эту ошибку
Исправление этой ошибки - вместо пакета NTLM выбрать пакет согласования. Как это сделать, будет зависеть от конкретной сетевой подсистемы, используемой клиентом или сервером. Некоторые примеры приведены ниже. Вам следует обратиться к документации по конкретной библиотеке или набору API, который вы используете.
APIs(parameter) Used by Application Incorrect Value Correct Value
===================================== =============== ========================
AcquireCredentialsHandle (pszPackage) “NTLM” NEGOSSP_NAME “Negotiate”