Алгоритмы проверки доступа к сети и примеры для Windows Server 2003, Windows XP и Windows 2000
В этой статье объясняется, как выполняется проверка учетной записи Windows при доступе к сети по протоколу NTLM.
Область применения: Windows 10 — все выпуски, Windows Server 2012 R2
Оригинальный номер базы знаний: 103390
Сводка
Ниже приведен упрощенный алгоритм, который объясняет, как выполняется проверка учетной записи Windows при доступе к сети по протоколу NTLM. В качестве примера используется доступ по протоколу SMB, но он применяется ко всем другим серверным приложениям, поддерживающим проверку подлинности NTLM. В этом обсуждении не рассматриваются внутренние действия этого процесса. С помощью этих сведений можно спрогнозировать поведение входа в сеть Windows в детерминированных условиях.
Если kerberos используется для проверки подлинности пользователя и получения доступа к ресурсам сервера, процесс отличается от процесса NTLM.
Помните, что локальная база данных является базой данных домена и единственной базой данных на контроллерах домена. Но на других серверах и всех компьютерах локальная база данных отличается от контроллера домена.
Базовые сведения
Когда два компьютера под управлением Windows Server 2003, Windows XP или Windows 2000 взаимодействуют по сети, они используют высокоуровневый протокол, называемый серверным блоком сообщений (SMB). Команды SMB внедряются в транспортные протоколы, такие как Расширенный пользовательский интерфейс NetBIOS (NetBEUI) или TCP/IP. Например, когда клиентский компьютер выполняет NET USE
команду, отправляется кадр "Настройка сеанса SMB и X".
В Windows SMB "Настройка сеанса" включает учетную запись пользователя, хэш-функцию зашифрованного пароля и домена входа. Контроллер домена проверит все эти сведения, чтобы определить, есть ли у клиента разрешения на выполнение команды NET USE.
Алгоритмы
Клиентский компьютер Windows отправляет на сервер следующую команду:
NET USE x: \\server\share
Клиентский компьютер Windows отправляет SMB "Программа установки сеанса" с доменом входа, учетной записью пользователя и паролем.
Сервер проверяет доменное имя или имя компьютера, указанное SMB. Если имя является собственным именем сервера, выполняется следующий алгоритм:
It checks its own domain database or computer database for
a matching account.
If it finds a matching account then
The SMB password is compared to the domain database password or the computer database password.
If the password matches then
The command completed successfully.
If the password does NOT match then
The user is prompted for a password.
The password is retested as above.
System error 1326 has occurred. Logon failure: unknown
user name or bad password.
End
If it does NOT find the account in the domain Security Accounts Manager (SAM) database or computer SAM database then
Guest permissions are tested.
If the guest account is enabled
The command completed successfully.
If the guest account is disabled
(* See Note a).
The user is prompted for a password.
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
Если домен, указанный в SMB, является доменом, которому сервер доверяет, выполняется следующий алгоритм:
The server will do pass-through authentication. The
network logon request will be sent to a server that has a domain controller role in the
specified trusted domain.
Если безопасный канал не настроен, выполняется следующий алгоритм:
The trusted domain controller checks its own domain database
for a matching account.
If the trusted domain controller finds a matching account, then
NOT for Windows 2000 and later versions:
It determines whether the account is a local or global account.
If the account is local, then
Guest permissions on the original server are tested.
If the guest account is enabled
The command completed successfully.
If the guest account is disabled
(* See Note 1) The user is prompted for a password.
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
If the account is global (the only option for Active Directory)
The SMB password is compared to the domain database
password.
If the password matches, then
The command completed successfully.
(* See Note 2)
If the password does NOT match, then
The user is prompted for a password.
The password is retested as above.
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
If the trusted domain controller does NOT find the account in the trusted domain controller
database, then
Guest permissions are tested on the original server, not the trusted domain. (* See Note 3)
If the guest account is enabled
The user will have original server guest access.
The command completed successfully.
If the guest account is disabled
(* See Note 1) The user is prompted for a password.
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
Важно!
В следующих случаях рассматриваются сценарии, в которых клиент использует домен пользователя, отличный от домена, который имеет или знает сервер. При согласовании протокола проверки подлинности NTLMv2 возникает проблема с этим несоответствием. NTLM в версии 2 использует соль паролей, а домен пользователя используется в этой соли клиентом.
Когда сервер получает сведения и находит пользователя в локальной базе данных, сервер использует имя локальной базы данных для вычисления соли и хэша. Таким образом, если "исходный домен", отправляемый клиентом, пуст или является неизвестным доменом, соль и, следовательно, хэш пароля не будут совпадать. В таких случаях попытка проверки подлинности завершится ошибкой "неизвестное имя пользователя или неверный пароль" (STATUS_LOGON_FAILURE). Событие аудита для попытки сообщит о "неправильном пароле", символ STATUS_WRONG_PASSWORD.
Пример события:
Имя журнала: безопасность
Источник: Microsoft-Windows-Security-Auditing
Идентификатор события: 4625
Категория задачи: Вход в систему
Уровень: сведения
Ключевые слова: сбой аудита
Компьютер: server-computer1
Описание:
Не удалось войти в учетную запись.Тема:
Идентификатор безопасности: NULL SID
Имя учетной записи: -
Домен учетной записи: -
Идентификатор входа: 0x0Тип входа: 3
Учетная запись, для которой произошел сбой входа:
Идентификатор безопасности: NULL SID
Имя учетной записи: ntadmin
Домен учетной записи: клиент-компьютер1Сведения о сбое:
Причина сбоя: неизвестное имя пользователя или неверный пароль.
Состояние: 0xc000006d
Вложенное состояние: 0xc000006a
...Подробные сведения о проверке подлинности:
Процесс входа: NtLmSsp
Пакет проверки подлинности: NTLM
Передаваемые службы: -
Имя пакета (только NTLM): -
Длина ключа: 0
Чтобы избежать этого сценария, необходимо явно указать правильное доменное имя в клиенте. Для сценария сопоставления дисков в рабочей группе это будет следующее:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *
Если домен, указанный в SMB, неизвестен сервером, например, если домен был указан, но не распознался сервером как доверенный домен или его контроллер домена, выполняется следующий алгоритм:
It will check its own account database for
a matching account
If the server finds a matching account, then
The SMB password is compared to the domain database password or the computer database password.
If the password matches, then
The command completed successfully.
If the password does NOT match, then
The user is prompted for a password.
The password is retested as above.
System error 1326 has occurred. Logon failure: unknown
user name or bad password.
End
If it does NOT find the account in the domain database then
guest permissions are tested.
If the guest account is enabled
The command completed successfully.
If the guest account is disabled
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
Если домен, указанный в SMB, имеет значение NULL, то есть домен не указан, выполняется следующий алгоритм:
The server will treat this as a local network logon. The server
will test for a matching account in its own database.
If it finds a matching account, then
The SMB password is compared to the SAM database password.
If the password matches, then
The command completed successfully.
If the password does NOT match, then
The user is prompted for a password.
The password is retested as above.
System error 1326 has occurred. Logon failure: unknown
user name or bad password.
End
If it does NOT find the account in the local SAM database AND
LsaLookupRestrictIsolatedNameLevel=0 AND NeverPing=0, then (* See Note 4)
The server will simultaneously ask each domain that it trusts whether it has account that
matches the SMB account.
The first trusted domain to reply is sent a request to
perform pass-through authentication of the client
information.
The trusted domain will look in its own database.
If an account that matches the SMB account is found, then
The trusted domain determines whether the account is a local or global
account.
Not for Windows 2000 and later versions:
If the account is local then
Guest permissions on the original server are tested.
If the guest account is enabled
The command completed successfully.
If the guest account is disabled
The user will be prompted for a password.
Regardless of what password is entered, the user will receive
"Error 5: Access has been denied."
End
If the account is global (the only option for Active Directory)
The password that was specified in the SMB is compared
to the SAM database password.
If the password matches, then
The command completed successfully.
If the password does NOT match, then
The user is prompted for a password.
The password is retested as above.
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
If no trusted domains respond to the request to identify the
account, then
Guest permissions are tested on the original server,
not the trusted server.
If the guest account is enabled
The command completed successfully.
If the guest account is disabled
System error 1326 has occurred. Logon failure:
unknown user name or bad password.
End
Заметки
Если учетная запись гостя отключена, а у пользователя нет учетной записи, сервер по-прежнему запрашивает пароль. Хотя пароль не будет соответствовать его требованиям, сервер по-прежнему будет запрашивать пароль в качестве меры безопасности. Эта мера безопасности гарантирует, что неавторизованный пользователь не может определить разницу между случаем, в котором существует учетная запись, и тем, когда учетная запись не существует. Пользователю всегда будет предложено ввести пароль независимо от того, существует ли учетная запись.
На этом этапе из доверенного домена в ответе возвращаются следующие сведения: идентификатор домена, идентификатор пользователя, членство в глобальных группах, время входа, время выхода, kickOffTime, полное имя, пароль последний набор, пароль может изменить флаг, пароль должен изменить флаг, сценарий пользователя, путь к профилю, домашний каталог и число недопустимых паролей.
Если учетная запись не найдена в доверенном домене, операционная система должна использовать локальную гостевую учетную запись, чтобы гарантировать согласованное поведение для проверки подлинности на сервере.
Дополнительные сведения о том, как ограничить поиск и вход изолированных имен в доверенных доменах с помощью записей реестра LsaLookupRestrictIsolatedNameLevel и NeverPing, см. в статье Процесс Lsass.exe может перестать отвечать на запросы при наличии большого количества внешних доверительных отношений на контроллере домена Active Directory.
Гостевые учетные записи в доверенных доменах никогда не будут доступны.
Фактический внутренний процесс сложнее, чем алгоритмы, описанные здесь.
В этих алгоритмах не рассматривается фактическая механика сквозной проверки подлинности. Дополнительные сведения см. в статье Проверка подлинности пользователей NTLM в Windows.
Эти алгоритмы не обсуждают процесс шифрования паролей, используемый в Windows Server 2003, Windows XP и Windows 2000. Двоичный большой объект (BLOB), производный от односторонного хэша пароля, отправляется в рамках запроса на проверку подлинности. Содержимое этого большого двоичного объекта будет зависеть от протокола проверки подлинности, выбранного для входа.
В этой статье не рассматривается внутренняя работа модуля проверки подлинности Майкрософт.
Эти алгоритмы предполагают, что гостевая учетная запись, если она включена, не имеет пароля. По умолчанию учетная запись гостя не имеет пароля в Windows Server 2003, Windows XP и Windows 2000. Если указан пароль гостевой учетной записи, пароль пользователя, отправляемый в SMB, должен соответствовать паролю гостевой учетной записи.
Примеры
Ниже приведены примеры этих алгоритмов в действии.
Пример 1
Вы войдете на компьютер, используя то же имя учетной записи и пароль, что и в базе данных учетной записи домена SCRATCH-DOMAIN. При выполнении NET USE \\SCRATCH
команды контроллера домена для домена SCRATCH-DOMAIN команда завершается успешно. При выполнении NET USE \\NET
команды для контроллера домена, который доверяет домену SCRATCH-DOMAIN, появляется следующее сообщение об ошибке:
Произошла системная ошибка 1326. Вход в систему не произведен: имя пользователя или пароль не опознаны.
Учетная запись \SCRATCH-DOMAIN\USER1 имеет разрешения на \\NET.
Примечание.
В этом примере предполагается, что используются следующие конфигурации.
Конфигурация
Компьютер с локальным центром безопасности:
Учетная запись -Login: USER1
-Password: PSW1
-Login Domain: LOCAL1
Контроллер домена Active Directory:
-Имя сервера: NET</WWITEM>
-Domain: NET-DOMAIN</WWITEM>
-Trust: NET-DOMAIN Trust SCRATCH-DOMAIN (Следовательно,
учетным записям в SCRATCH-DOMAIN могут быть предоставлены разрешения
в net- DOMAIN).
Домен NET-DOMAIN:
- База данных учетной записи домена для домена NET-DOMAIN не содержит учетную запись для USER1.
- Учетная запись гостя отключена.
Windows Server 2003:
-Имя сервера: SCRATCH
-Domain: SCRATCH-DOMAIN
-База данных домена содержит учетную запись: USER1
-База данных домена содержит пароль: PSW1
В этом примере компьютер входит в локальный домен, а не в домен SCRATCH-DOMAIN, где находится учетная запись домена компьютера.
Пример 2
При выполнении NET USE x: \\NET\share
команды выполняются следующие действия.
В SMB "Настройка сеанса" компьютер отправляет следующее:
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Сервер \\NET получает SMB и просматривает имя учетной записи.
Сервер проверяет базу данных учетной записи локального домена и не находит совпадение.
Затем сервер проверяет доменное имя SMB.
Сервер не доверяет local1, поэтому сервер не проверка своих доверенных доменов.
Затем сервер проверяет свою гостевую учетную запись.
Учетная запись гостя отключена, поэтому возникла системная ошибка 1326. Сбой входа: неизвестное имя пользователя или неверный пароль". Появляется сообщение об ошибке.
Пример 3
При выполнении NET USE x: \\SCRATCH\share
команды выполняются следующие действия.
В SMB "Настройка сеанса" компьютер отправляет следующее:
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Сервер \\SCRATCH получает SMB и проверяет имя учетной записи.
Сервер проверяет базу данных учетной записи локального домена и находит совпадение.
Затем сервер сравнивает пароль SMB с паролем учетной записи домена.
Пароли совпадают.
Таким образом, создается сообщение "Команда успешно завершена". В примерах 2 и 3 отношение доверия недоступно. Если бы компьютер вошел в домен SCRATCH-DOMAIN, команда была бы выполнена NET USE x: \\NET\share
успешно.
Идеальное решение заключается в том, чтобы все компьютеры входить в домен. Чтобы войти в систему, пользователь должен указать домен, учетную запись и пароль. После этого все команды NET USE -type будут передавать правильные сведения о домене, учетной записи и пароле. Администраторы должны стараться избегать дублирования учетных записей как на компьютерах, так и в нескольких доменах. Компьютеры под управлением Windows Server 2003, Windows XP и Windows 2000 помогают избежать этой конфигурации, используя отношения доверия между доменами и используя члены, которые могут использовать доменные базы данных.
Обходной путь
В таких случаях можно использовать одно обходное решение. На компьютере можно выполнить следующую команду:
NET USE X: \\NET\SHARE /USER:SCRATCH-DOMAIN\USER1 PSW1
В этой команде выполняется следующее:
- \\NET = имя компьютера контроллера домена, к которой осуществляется доступ.
- \SHARE = имя общей папки.
- /USER: параметр командной строки, позволяющий указать домен, учетную запись и пароль, которые должны быть указаны в SMB "Настройка сеанса".
- SCRATCH-DOMAIN = доменное имя домена, в котором находится учетная запись пользователя.
- \USER1 = учетная запись для проверки.
- PSW1 = пароль, соответствующий учетной записи в домене.
Для получения дополнительных сведений об этой команде введите в командной строке следующую команду:
NET USE /?
Доменные имена NULL
Клиент Microsoft SMB, включенный в Windows Server 2003, Windows XP и Windows 2000, отправляет доменные имена NULL в SMB "Настройка сеанса [x73]". Клиент Microsoft SMB обрабатывает доменное имя, указывая доменное имя входа и отправляя символ NULL, если доменное имя не указано в команде NET USE. Клиент Microsoft SMB также будет демонстрировать поведение, описанное в примере 1.
Примечание.
- Доменное имя по умолчанию указывается в файле LANMAN.INI в строке DOMAIN =. Это может быть переопределено параметром
/DOMAIN:
сNET LOGON
помощью команды . - Обычно в SMB есть два представления null: доменное имя нулевой длины и однобайтовое доменное имя, состоящее из символа вопросительного знака (?). Сервер SMB перехватывает вопросительный знак и преобразует его в NULL перед передачей в локальный центр безопасности (LSA).
Устранение неполадок
Хорошим советом для устранения проблем с доступом к сети является включение аудита, выполнив следующие действия.
Windows 2000 и более поздних версий контроллеров домена под управлением Windows 2000
- В разделе Администрирование на контроллере домена запустите Пользователи и компьютеры Active Directory.
- Щелкните правой кнопкой мыши подразделение контроллеров домена и выберите пункт Свойства.
- На вкладке групповая политика дважды щелкните Политику контроллера домена по умолчанию.
- В Редактор политики выберите Параметры компьютера, Параметры Windows, Параметры безопасности, Локальные политики, а затем — Политика аудита.
- Выберите варианты Вход и учетная запись Успешное выполнение и Сбой .
Параметры домена для серверов и участников Windows 2000
- В разделе Администрирование на контроллере домена запустите Пользователи и компьютеры Active Directory.
- Щелкните правой кнопкой мыши доменное имя и выберите пункт Свойства.
- На вкладке групповая политика дважды щелкните Политика домена по умолчанию.
- В Редактор политики выберите Параметры компьютера, Параметры Windows,Параметры безопасности, Локальные политики, а затем — Политика аудита.
- Выберите варианты Вход и учетная запись Успешное выполнение и Сбой .
Локальные параметры для серверов и участников Windows 2000
- В разделе Администрирование запустите локальную политику безопасности.
- Откройте Раздел Политика аудита.
- Выберите варианты Вход и учетная запись Успешное выполнение и Сбой . Теперь каждый раз, когда сетевой пользователь обращается к этому серверу удаленно, журнал аудита будет в журнале Просмотр событий. Чтобы просмотреть эти события в Просмотр событий, щелкните Безопасность в меню Журнал.
Дополнительные сведения о отношениях доверия, сквозной проверке подлинности, разрешениях пользователей и именах входа в домен см. в разделе Технический обзор служб безопасности Windows Server 2003.
Дополнительная информация
В основном те же алгоритмы проверки сетевого доступа применяются к Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 Windows Server 2012 R2.
В этой ОС есть несколько новых функций В SMB.
Windows Server 2008
Windows Server 2012
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по