Назад | Перейти на главную страницу

Аутентификация через RADIUS: ошибка MSCHAPv2 691

Я работаю над настройкой аутентификации в Acme Packet Net-Net 3820 (SBC) через RADIUS. Бухгалтерская сторона дела работает нормально, без проблем. Другое дело - аутентификация. Я могу видеть из захвата пакета, что сообщения запроса доступа на самом деле попадают на сервер RADIUS, в этот момент сервер RADIUS начинает взаимодействовать с контроллерами домена. Затем я вижу, как цепочка связи возвращается к RADIUS, а затем, наконец, обратно к SBC. Проблема в том, что ответ, который я получаю, всегда представляет собой сообщение об отказе в доступе с кодом причины 16 (аутентификация не удалась из-за несоответствия учетных данных пользователя. Либо указанное имя пользователя не соответствует существующей учетной записи, либо пароль был неверным). Это подтверждается просмотром журналов событий безопасности, где я вижу события 4625 и 6273. См. События ниже (Примечание: имена и IP-адреса были изменены для защиты невиновных):

Код события: 6273


Network Policy Server denied access to a user.

Contact the Network Policy Server administrator for more information.

User:
    Security ID:            NULL SID
    Account Name:           real_username
    Account Domain:         real_domain
    Fully Qualified Account Name:   real_domain\real_username

Client Machine:
    Security ID:            NULL SID
    Account Name:           -
    Fully Qualified Account Name:   -
    OS-Version:         -
    Called Station Identifier:      -
    Calling Station Identifier:     -

NAS:
    NAS IPv4 Address:       10.0.0.10
    NAS IPv6 Address:       -
    NAS Identifier:         radius1.real_domain
    NAS Port-Type:          -
    NAS Port:           101451540

RADIUS Client:
    Client Friendly Name:       sbc1mgmt
    Client IP Address:          10.0.0.10

Authentication Details:
    Connection Request Policy Name: SBC Authentication
    Network Policy Name:        -
    Authentication Provider:        Windows
    Authentication Server:      RADIUS1.real_domain
    Authentication Type:        MS-CHAPv2
    EAP Type:           -
    Account Session Identifier:     -
    Logging Results:            Accounting information was written to the SQL data store and the local log file.
    Reason Code:            16
    Reason:             Authentication failed due to a user credentials mismatch. Either the user name provided does not map to an existing user account or the password was incorrect.

Код события: 4625


An account failed to log on.

Subject:
    Security ID:        SYSTEM
    Account Name:       RADIUS1$
    Account Domain:     REAL_DOMAIN
    Logon ID:       0x3E7

Logon Type:         3

Account For Which Logon Failed:
    Security ID:        NULL SID
    Account Name:       real_username
    Account Domain:     REAL_DOMAIN

Failure Information:
    Failure Reason:     Unknown user name or bad password.
    Status:         0xC000006D
    Sub Status:     0xC000006A

Process Information:
    Caller Process ID:  0x2cc
    Caller Process Name:    C:\Windows\System32\svchost.exe

Network Information:
    Workstation Name:   
    Source Network Address: -
    Source Port:        -

Detailed Authentication Information:
    Logon Process:      IAS
    Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
    Transited Services: -
    Package Name (NTLM only):   -
    Key Length:     0

This event is generated when a logon request fails. It is generated on the computer where access was attempted.

The Subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.

The Logon Type field indicates the kind of logon that was requested. The most common types are 2 (interactive) and 3 (network).

The Process Information fields indicate which account and process on the system requested the logon.

The Network Information fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.

The authentication information fields provide detailed information about this specific logon request.
    - Transited services indicate which intermediate services have participated in this logon request.
    - Package name indicates which sub-protocol was used among the NTLM protocols.
    - Key length indicates the length of the generated session key. This will be 0 if no session key was requested.

Таким образом, на первый взгляд может показаться, что проблема заключается только в неверном имени пользователя или несоответствующем пароле. Это дополнительно подтверждается в захвате пакета, где я вижу, что ответ MSCHAPv2 имеет код ошибки 691 (доступ запрещен, потому что имя пользователя или пароль, или и то, и другое, недействительны в домене). Дело в том, что я знаю, что использую действительное имя пользователя, и я перепробовал множество имен пользователей, включая новые, которые я создал только для устранения неполадок. Я не знаю, сколько раз я сбрасывал пароль, пытаясь убедиться, что это не несоответствующий пароль. Я даже позаботился о том, чтобы пароли были достаточно короткими и содержали только буквы, чтобы гарантировать отсутствие проблем с кодировкой терминала (мы подключаемся к SBC через клиентов SSH). Я также проделал то же самое с общим секретом, используемым во время связи между SBC и сервером RADIUS. Я пробовал ставить перед именем пользователя имя домена при входе в систему (хотя я не думаю, что это необходимо). Я также пробовал использовать полное имя участника-пользователя для входа в систему. Я пробовал несколько клиентов тестирования RADIUS (NTRadPing, RadiusTest и т. Д.), Но они либо не поддерживают MSCHAPv2, либо поддерживают только EAP-MSCHAPv2. Я даже создал свой собственный клиент, используя модуль PHP PECL RADIUS. Тем не менее, при аутентификации MSCHAPv2 всегда возникает сбой с кодом ошибки 691. Есть ли у кого-нибудь идеи относительно того, почему я всегда получаю неверное имя пользователя или ответ с неверным паролем, когда я сделал все возможное, чтобы убедиться, что это не так?

Вот спецификации для нашей конфигурации RADIUS:

Единственное, на что следует обратить внимание, это тот факт, что в событиях выше вы можете видеть, что идентификатор безопасности равен «NULL SID». Теперь я знаю, что это часто встречается, особенно среди неудачных входов в систему, но, учитывая, что эта проблема связана с неверным именем пользователя или неправильным паролем, возможно, в данном случае это имеет значение. Кроме того, этот сервер был перестроен с использованием той же учетной записи компьютера в Active Directory. Не знаю, сработало бы до пересборки. По сути, мы построили этот сервер и дошли до авторизации сервера в домене и добавления SQL только тогда, когда решили выделить роль SQL на другой сервер. Вместо того, чтобы удалять SQL, мы просто перестроили машину. Однако перед переустановкой Windows я сделал сброс учетной записи компьютера. Я не думаю, что это должно иметь значение, но подумал, что укажу на это, если есть какая-то странная причуда, когда повторное использование того же SID ранее авторизованного сервера NPS может вызвать проблему.

В целом, это довольно простая настройка, и, надеюсь, я предоставил достаточно информации, чтобы кто-то понял, что может происходить. Прошу прощения, если мое понимание этого кажется немного базовым, в конце концов, когда дело доходит до серверов RADIUS, я думаю, вы могли бы сказать, что я здесь новичок.

Изменить 1:

Пытаясь устранить эту проблему, я попытался вызвать дополнительные серверы для тестирования. Вот дополнительные тесты, которые я провел.

Несколько доменов

Теперь я пробовал это в 3 разных изолированных доменах. И тестовый, и рабочий домены, а также мой частный домашний домен, в котором очень мало настроек, кроме изменений, сделанных для Exchange и ConfigMgr. Все имеют одинаковые результаты, описанные выше.

VPN сервис

Используя Windows Server 2012 R2, мы создали отдельный сервер для стандартной настройки VPN. Намерение состояло в том, чтобы посмотреть, можем ли мы использовать аутентификацию RADIUS с VPN, и если бы это сработало, мы бы знали, что проблема связана с SBC. Однако, прежде чем мы смогли даже настроить его для использования RADIUS, мы просто попытались убедиться, что он работает со стандартной аутентификацией Windows на локальном сервере VPN. Интересно, что он тоже не работает с теми же событиями, которые регистрируются на серверах RADIUS. Клиентская машина является рабочей станцией Windows 8.1. Я снова указываю, что у нас есть рабочие серверы RADIUS, которые используются специально для нашей беспроводной среды. Единственная разница между этими серверами RADIUS и теми, с которыми у меня возникли проблемы, заключается в том, что работающие беспроводные серверы используют PEAP вместо MSCHAPv2.

FreeRADIUS

Сейчас я не гуру Linux, но считаю, что он у меня уже есть. Я могу использовать ntlm_auth для аутентификации пользователей при входе в консоль. Однако, когда служба radiusd пытается использовать ntlm_auth, чтобы сделать то же самое, она терпит неудачу и возвращает то же сообщение, которое я получал с сервером Windows (E = 691). У меня служба radiusd работает в режиме отладки, поэтому я могу больше видеть, что происходит. Я могу опубликовать полученную отладочную информацию, если потребуется. Однако особенно интересны следующие строки:

(1) ERROR: mschap : Program returned code (1) and output 'Logon failure (0xc000006d)'
(1) mschap : External script failed.
(1) ERROR: mschap : External script says: Logon Failure (0xc000006d)
(1) ERROR: mschap : MS-CHAP2-Response is incorrect

Здесь следует отметить, что хотя мы, по сути, все еще получаем сообщение «неправильный пароль», фактический код состояния (0xc000006d) немного отличается от того, что я получал на серверах Windows, который был (0xc000006a). Из этого документа вы можете увидеть, что означают эти коды: Ценности NTSTATUS . В этом сервере FreeRADIUS хорошо то, что я могу видеть все ответы на запросы, когда он находится в режиме отладки. Так что, если я могу понять, как вычисляется ответ MSCHAPv2, я могу сравнить его, чтобы увидеть, является ли это просто неправильно вычисленным ответом на вызов. Обновить Просто заметил, что код 6a - это просто код субстатуса для кода 6d. Так что ничем не отличается от серверов Windows, мне все еще интересно, есть ли ошибка вычислений с ответами на запросы.

В настоящее время я работаю над созданием экземпляра Windows Server 2008 R2 сервера RADIUS, чтобы посмотреть, помогает ли это вообще. Однако я был бы удивлен, если бы что-то с сервисом сломалось между W2K8 R2 и W2K12 R2, чего до сих пор никто не заметил. Если это не сработает, мне, возможно, придется открыть дело в Microsoft. Обновить: Те же результаты с W2K8 R2.

Обновление 2

Я открыл дело с Microsoft, и они работали над ним пару недель. Первую неделю я потратил свое время, просто пытаясь заставить их понять, что это не имеет ничего общего с беспроводной связью и что устройство, к которому мы пытаемся подключиться, не поддерживает аутентификацию на сервере RADIUS с использованием любой формы EAP. Как только они наконец поняли, что мы пытаемся настроить метод аутентификации только для MSCHAPv2, его первая реакция была просто «вы не можете этого сделать». Он сказал, что независимо от того, что вам всегда нужно, какая-то форма настройки EAP или PEAP в верхнем поле (даже для PAP и других «менее безопасных методов» в этом окне метода аутентификации). Мне это показалось маловероятным, поэтому я попросил документацию, подтверждающую это, для чего он затем сменил тему и никогда не предоставил никакой документации. Стало ясно, что я ничего не добился в Microsoft, когда они сказали мне, что проблема, похоже, связана с именем пользователя и паролем. Таким образом, им потребовалось 2 недели, чтобы прийти к такому выводу, когда в строке темы моего билета на премьеру был указан код ошибки E691, что означает несоответствие имени пользователя и пароля, и, несмотря на очень длинный абзац, в котором я объяснял, что я сделал все возможное, чтобы это гарантировать неплохой логин и пароль.

К сожалению, мой руководитель проекта не хочет больше тратить на это премьерные часы поддержки, поэтому мы закрыли дело. Скорее всего, мы просто разберемся с локальным общим входом в систему SBC и настроим какой-либо другой способ обеспечения подотчетности (только 4 из нас будут иметь доступ).

Я отмечу, что до того, как мне сказали отказаться от проекта, я заставил сервер FreeRADIUS работать только с использованием MSCHAPv2, но смог сделать это только с учетными записями, локальными для сервера FreeRADIUS. Это пароли в виде простого текста, хранящиеся где-то в конфигурационном файле FreeRADIUS. Очевидно, это не решение, но, по крайней мере, показывает, что SBC правильно взаимодействует с сервером RADIUS через MSCHAPv2. Это и другие вещи, о которых я упомянул выше, наводят меня на мысль, что проблема заключается между сервером RADIUS и контроллерами домена. Хотя проверка подлинности NTLM отлично работает на серверах Windows RADIUS и FreeRADIUS при локальном входе на серверы (можно войти в Windows RADIUS через тестовую учетную запись и получить успешную проверку подлинности на сервере FreeRADIUS при использовании команды ntlm_auth только с именем пользователя и паролем) , ни один из серверов RADIUS не проходит аутентификацию через пользователей при входе в качестве запроса доступа RADIUS (FreeRADIUS использует ту же команду ntlm_auth, которую я использую при локальном входе в систему, но вместо того, чтобы указывать имя пользователя и пароль для команды, он предоставляет имя пользователя и ответ на запрос).

Итак, я завершу эту ветку здесь, но я буду следить за этим, и он сообщит мне, если кто-то что-то опубликует. Если кто-то опубликует решение или оставит комментарии, я отвечу.

Решение

Разве вы не знаете, примерно через месяц после того, как мы отказались от этого подхода к использованию сервера RADIUS для управления доступом к SBC, мы находим возможное решение. Конечно, на данный момент мы слишком заняты другими проектами, чтобы вернуться и попробовать это решение, поэтому я не могу сказать на 100%, решит ли это проблему, но как только я объясню, вы, вероятно, согласитесь, что это ответ.

Один из моих коллег был на конференции Microsoft и вел различные дискуссии, когда его осенило, что MSCHAPv2 полагается на NTLM для генерации запросов и ответов на пароли. Теперь обычные старые MSCHAP и MSCHAPv2 (то есть не EAP-MSCHAPv2 или PEAP) при использовании в службах Windows RAS по умолчанию будут использовать NTLMv1.

Поскольку многие из вас уже начали это понимать, мы, как и многие администраторы, отключили NTLMv1 на наших контроллерах домена, и поэтому контроллеры домена будут принимать только запросы NTLMv2. Это объясняет, почему отказ, который я продолжал получать, был ошибкой «неверный пароль». Пароль, отправленный на контроллеры домена, был в формате NTLMv1 и игнорировался.

Как только мы это поняли, я смог провести дополнительное исследование и нашел следующую статью:

http://support.microsoft.com/kb/2811487

В этой статье описывается то же поведение, с которым я столкнулся, включая упомянутый мной код ошибки E = 691. В этой статье также предлагается обходной путь, чтобы заставить службы RAS использовать NTMLv2 при построении ответа MSCHAPv2. Забавно, как легко найти эти статьи, если вы точно знаете, в чем проблема.

Опять же, мне еще предстоит проверить, что это проблема, так как у меня не было времени восстановить серверы RADIUS, которые я уже списал, но я планирую попробовать это когда-нибудь, если у меня будет возможность. Я просто хотел опубликовать это возможное решение на случай, если кто-то еще наткнется на эту проблему. Если кто-нибудь может подтвердить это до меня, пожалуйста, дайте мне знать.

Изменить - подтверждено

Нас попросили взять на себя большую роль с этими SBC, и поэтому мы вернулись к этому проекту и снова подняли сервер Windows RADIUS. На этот раз мы применили ключ реестра, описанный по ссылке выше. После захвата пакета связи между сервером RADIUS и SBC я фактически теперь могу видеть сообщения «Access Accept», отправляемые обратно на SBC. Итак, теперь я могу подтвердить, по крайней мере, в нашем сценарии, что проблема, с которой мы столкнулись, описана выше.

TL; DR

NTLMv1 был отключен на контроллерах домена. Установка ключа реестра для принудительного использования RADIUS-сервера NTLMv2 устранила проблему.

К вашему сведению. После обновления работающей системы RADIUS + MSCHAP я получал ту же ошибку.

"\ 000E = 691 R = 1"

Оказывается, произошло какое-то изменение самбы, которое сбросило права на сокет winbind. Добавление freerad в группу winbindd_priv устранило проблему.

/ и т.д. / группа: winbindd_priv: x: 110: freerad

По моему опыту, MS NPS сообщает вам, если предварительный общий ключ RADIUS не совпадает. Что-то вроде этого:

Event 14: A RADIUS message was received from RADIUS client x.x.x.x with an invalid authenticator. This is typically caused by mismatched shared secrets. Verify the configuration of the shared secret for the RADIUS client in the Network Policy Server snap-in and the configuration of the network access server.

Вы получите это в журнале событий.

Тот факт, что вы видите Access-Reject в вашем захваченном трафике, также означает, что предварительный общий ключ совпадает с обеими сторонами, иначе NPS просто не ответит, и вы не увидите больше пакетов RADIUS после запроса доступа.

В предоставленных вами журналах также важно:

Sub Status:     0xC000006A

Это означает, что «имя пользователя правильное, а пароль неправильный». На мой взгляд, это довольно ясно.

Я знаю, что MS-CHAPv2 не требует хранения пароля с использованием обратимого шифрования, но просто чтобы проверить это предположение, не могли бы вы установить этот флажок для учетной записи пользователя, которую вы используете, после этого повторно установить ее пароль и повторить попытку.

У нас возникла такая же проблема с аутентификацией с наших серверов NPS после добавления новых контроллеров домена 2012R2 в существующую среду 2008R2. На новых контроллерах домена 2012R2 NTLMv1 был отключен, тогда как на контроллерах домена 2008R2 он был включен.

Серверы политики сети (под управлением 2008R2) случайным образом запрещают доступ пользователям.

На NPS-серверах было зарегистрировано следующее событие: Событие с кодом 6273 (журнал безопасности) Сервер сетевой политики отказал пользователю в доступе. Код причины: 16 Причина: ошибка аутентификации из-за несоответствия учетных данных пользователя. Либо предоставленное имя пользователя не соответствует существующей учетной записи пользователя, либо пароль был неверным.

Когда серверы NPS подключились к DC 2008R2, все работало как шарм. Но на 2012R2 доступ к dc был закрыт. Все потому, что NTLMv1 был отключен на новых контроллерах домена 2012R2.

Могу подтвердить, что решение в статье MS KB (http://support.microsoft.com/kb/2811487) работает отлично !.

Большое спасибо за эту прекрасную статью !!! Это сэкономило мне огромное количество времени на решение этой проблемы; -)