Алгоритмы проверки доступа к сети и примеры для 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

Заметки

  1. Если учетная запись гостя отключена, а у пользователя нет учетной записи, сервер по-прежнему запрашивает пароль. Хотя пароль не будет соответствовать его требованиям, сервер по-прежнему будет запрашивать пароль в качестве меры безопасности. Эта мера безопасности гарантирует, что неавторизованный пользователь не может определить разницу между случаем, в котором существует учетная запись, и тем, когда учетная запись не существует. Пользователю всегда будет предложено ввести пароль независимо от того, существует ли учетная запись.

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

  3. Если учетная запись не найдена в доверенном домене, операционная система должна использовать локальную гостевую учетную запись, чтобы гарантировать согласованное поведение для проверки подлинности на сервере.

  4. Дополнительные сведения о том, как ограничить поиск и вход изолированных имен в доверенных доменах с помощью записей реестра 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 команды выполняются следующие действия.

  1. В SMB "Настройка сеанса" компьютер отправляет следующее:

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Сервер \\NET получает SMB и просматривает имя учетной записи.

  3. Сервер проверяет базу данных учетной записи локального домена и не находит совпадение.

  4. Затем сервер проверяет доменное имя SMB.

  5. Сервер не доверяет local1, поэтому сервер не проверка своих доверенных доменов.

  6. Затем сервер проверяет свою гостевую учетную запись.

  7. Учетная запись гостя отключена, поэтому возникла системная ошибка 1326. Сбой входа: неизвестное имя пользователя или неверный пароль". Появляется сообщение об ошибке.

Пример 3

При выполнении NET USE x: \\SCRATCH\share команды выполняются следующие действия.

  1. В SMB "Настройка сеанса" компьютер отправляет следующее:

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Сервер \\SCRATCH получает SMB и проверяет имя учетной записи.

  3. Сервер проверяет базу данных учетной записи локального домена и находит совпадение.

  4. Затем сервер сравнивает пароль SMB с паролем учетной записи домена.

  5. Пароли совпадают.

Таким образом, создается сообщение "Команда успешно завершена". В примерах 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

  1. В разделе Администрирование на контроллере домена запустите Пользователи и компьютеры Active Directory.
  2. Щелкните правой кнопкой мыши подразделение контроллеров домена и выберите пункт Свойства.
  3. На вкладке групповая политика дважды щелкните Политику контроллера домена по умолчанию.
  4. В Редактор политики выберите Параметры компьютера, Параметры Windows, Параметры безопасности, Локальные политики, а затем — Политика аудита.
  5. Выберите варианты Вход и учетная запись Успешное выполнение и Сбой .

Параметры домена для серверов и участников Windows 2000

  1. В разделе Администрирование на контроллере домена запустите Пользователи и компьютеры Active Directory.
  2. Щелкните правой кнопкой мыши доменное имя и выберите пункт Свойства.
  3. На вкладке групповая политика дважды щелкните Политика домена по умолчанию.
  4. В Редактор политики выберите Параметры компьютера, Параметры Windows,Параметры безопасности, Локальные политики, а затем — Политика аудита.
  5. Выберите варианты Вход и учетная запись Успешное выполнение и Сбой .

Локальные параметры для серверов и участников Windows 2000

  1. В разделе Администрирование запустите локальную политику безопасности.
  2. Откройте Раздел Политика аудита.
  3. Выберите варианты Вход и учетная запись Успешное выполнение и Сбой . Теперь каждый раз, когда сетевой пользователь обращается к этому серверу удаленно, журнал аудита будет в журнале Просмотр событий. Чтобы просмотреть эти события в Просмотр событий, щелкните Безопасность в меню Журнал.

Дополнительные сведения о отношениях доверия, сквозной проверке подлинности, разрешениях пользователей и именах входа в домен см. в разделе Технический обзор служб безопасности Windows Server 2003.

Дополнительная информация

В основном те же алгоритмы проверки сетевого доступа применяются к Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 Windows Server 2012 R2.

В этой ОС есть несколько новых функций В SMB.

Windows Server 2008

Windows Server 2012