Поделиться через


Алгоритмы проверки доступа к сети и примеры для Windows

В этой статье объясняется, как проверка учетной записи Windows выполняется во время сетевого доступа с помощью протокола NTLM.

Исходный номер базы знаний: 103390

Итоги

Ниже приведен упрощенный алгоритм, который объясняет, как проверка учетной записи Windows выполняется во время сетевого доступа с помощью протокола NTLM. Он использует доступ через протокол SMB в качестве примера, но применяется ко всем другим серверным приложениям, поддерживающим проверку подлинности NTLM. В этом обсуждении не рассматриваются внутренние действия этого процесса. С помощью этой информации можно прогнозировать поведение входа в сеть Windows в детерминированных условиях.

Если Kerberos используется для проверки подлинности пользователя и получения доступа к ресурсам сервера, процесс отличается от того, что делает NTLM.

Помните, что локальная база данных — это база данных домена и единственная база данных на контроллерах домена. Но на других серверах и всех компьютерах локальная база данных отличается от контроллера домена.

Справочная информация

Если два компьютера под управлением Windows взаимодействуют по сети, они используют высокоуровневый протокол, называемый блоком сообщений сервера (SMB). Команды SMB внедряются в транспортные протоколы, такие как TCP/IP или быстрые подключения к Интернету UDP (QUIC). Например, когда клиентский компьютер выполняет команду, отправляемый NET USE кадр "Настройка сеанса SMB и X".

В Windows при использовании NTLM 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
Домен учетной записи: client-computer1

Сведения о сбое:

Причина сбоя: неизвестное имя пользователя или неправильный пароль.
Состояние: 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.           
    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, полное имя, пароль LastSet, пароль может изменить флаг, пароль может изменить флаг, скрипт пользователя, путь профиля, домашний каталог и недопустимый счетчик паролей.

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

  4. Дополнительные сведения об ограничении поиска и входа в изолированные домены в доверенных доменах с помощью записей реестра LsaLookupRestrictIsolatedNameLevel и NeverPing см. в статье Lsass.exe процесс может перестать отвечать, если у вас есть много внешних доверий на контроллере домена Active Directory. Кроме того, исправление доступно для расширения ведения журнала для выявления запросов на поиск изолированных имен в Windows Server 2008 с пакетом обновления 2 (SP2).

    • Гостевые учетные записи в доверенных доменах никогда не будут доступны.
    • Фактический внутренний процесс более сложный, чем описанные здесь алгоритмы.
    • Эти алгоритмы не обсуждают фактическую механику сквозной проверки подлинности. Дополнительные сведения см. в разделе "Проверка подлинности пользователей NTLM" в Windows.
    • Эти алгоритмы не обсуждают процесс шифрования паролей, используемый в Windows. Двоичный большой объект (BLOB), производный от односторонного хэша паролей, отправляется в рамках запроса проверки подлинности. Содержимое этого BLOB-объекта зависит от протокола проверки подлинности, выбранного для входа.
    • В этой статье не рассматриваются внутренние действия модуля проверки подлинности Майкрософт.
    • Эти алгоритмы предполагают, что гостевая учетная запись, если включена, не имеет пароля. По умолчанию у гостевой учетной записи нет пароля в Windows. Если указан пароль гостевой учетной записи, пароль пользователя, отправляемый в SMB, должен совпадать с этим паролем гостевой учетной записи.

Примеры

Ниже приведены примеры этих алгоритмов в действии.

Пример 1

Вы вошли на компьютер с помощью того же имени учетной записи и пароля, что и в базе данных учетной записи домена CONTOSO-DOMAIN. При выполнении NET USE \\CONTOSO команды контроллера домена для домена CONTOSO-DOMAIN команда завершается успешно. При выполнении NET USE \\NET команды контроллера домена, доверяющего домену CONTOSO-DOMAIN, вы получите следующее сообщение об ошибке:

Произошла системная ошибка 1326. Вход в систему не произведен: имя пользователя или пароль не опознаны.

Учетная запись \CONTOSO-DOMAIN\USER1 имеет разрешения на \\NET.

Примечание.

В этом примере предполагается, что следующие конфигурации.

Конфигурации

Компьютер с локальным центром безопасности:

  • Учетная запись входа: USER1
  • Пароль: PSW1
  • Домен входа: LOCAL1

Контроллер домена Active Directory:

-Имя сервера: NET
-Domain: NET-DOMAIN
-Trust: NET-DOMAIN Trust CONTOSO-DOMAIN (Следовательно,
учетные записи в CONTOSO-DOMAIN могут предоставляться разрешения
в домене NET).

Домен NET-DOMAIN:

  • База данных учетной записи домена для домена NET-DOMAIN не содержит учетную запись USER1.
  • Учетная запись гостя отключена.

Домен CONTOSO-DOMAIN:

  • Имя сервера: CONTOSO
  • Домен: CONTOSO-DOMAIN
  • База данных домена содержит учетную запись: USER1
  • База данных домена содержит пароль: PSW1

В этом примере компьютер входит в свой локальный домен, а не домен CONTOSO-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: \\CONTOSO\share команды выполняются следующие действия:

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

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

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

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

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

Поэтому создается сообщение "Команда успешно завершена". В примере 2 и примере 3 связь доверия недоступна. Если компьютер был вошедший в домен CONTOSO-DOMAIN, NET USE x: \\NET\share команда будет успешно выполнена.

Идеальное решение заключается в том, чтобы все компьютеры входить в домен. Чтобы войти в систему, пользователь должен указать домен, учетную запись и пароль. После этого все команды NET USE -type передают правильные сведения о домене, учетной записи и пароле. Администраторы должны попытаться избежать дублирования учетных записей на компьютерах и нескольких доменах. Windows помогает избежать этой конфигурации с использованием доверия между доменами и с помощью членов, которые могут использовать базы данных домена.

Обходное решение

В этих случаях можно использовать одно решение. На компьютере можно выполнить следующую команду:

NET USE X: \\NET\SHARE /USER:CONTOSO-DOMAIN\USER1 PSW1

В этой команде следующая команда имеет значение true:

  • \\NET = имя компьютера доступного контроллера домена.
  • \SHARE = имя общей папки.
  • /USER: параметр командной строки, позволяющий указать домен, учетную запись и пароль, которые должны быть указаны в SMB "Настройка сеанса".
  • CONTOSO-DOMAIN = доменное имя домена, в котором находится учетная запись пользователя.
  • \USER1 = учетная запись для проверки.
  • PSW1 = пароль, соответствующий учетной записи в домене.

Дополнительные сведения об этой команде введите в командной строке:

NET USE /?  

Доменные имена NULL

Клиент Microsoft SMB, включенный в Windows, отправляет доменные имена NULL в SMB "Настройка сеанса SMB [x73]". Клиент Microsoft SMB обрабатывает доменное имя, указывая доменное имя входа и отправляя символ NULL, если доменное имя не указано в команде NET USE. Клиент Microsoft SMB также будет отображать поведение, описанное в примере 1.

Примечание.

Обычно в SMB имеется два представления значения NULL: доменное имя нулевой длины и однобайтовое доменное имя, состоящее из символа вопросительного знака (?). Сервер SMB перехватывает вопросительный знак и преобразует его в NULL перед передачей в локальный центр безопасности (LSA).

Устранение неполадок

Хорошим советом по устранению неполадок с доступом к сети является включение аудита, выполнив указанные ниже действия.

Контроллеры домена Windows

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

Параметры домена для Windows 2000

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

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

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

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