Udostępnij za pośrednictwem


Algorytmy weryfikacji dostępu do sieci i przykłady dla systemu Windows

W tym artykule wyjaśniono, jak sprawdzanie poprawności konta systemu Windows działa podczas dostępu do sieci przy użyciu protokołu NTLM.

Oryginalny numer KB: 103390

Podsumowanie

Poniżej przedstawiono uproszczony algorytm, który wyjaśnia sposób obserwowanego sprawdzania poprawności konta systemu Windows podczas dostępu do sieci przy użyciu protokołu NTLM. Używa on dostępu za pośrednictwem protokołu bloku komunikatów serwera (SMB), ale ma zastosowanie do wszystkich innych aplikacji serwera obsługujących uwierzytelnianie NTLM. Ta dyskusja nie obejmuje wewnętrznych prac tego procesu. Dzięki tym informacjom można przewidzieć zachowanie logowania do sieci systemu Windows w warunkach deterministycznych.

Gdy protokół Kerberos jest używany do uwierzytelniania użytkownika i uzyskiwania dostępu do zasobów serwera, proces różni się od tego, co robi NTLM.

Należy pamiętać, że lokalna baza danych jest bazą danych domeny i jedyną bazą danych na kontrolerach domeny. Jednak na innych serwerach i wszystkich komputerach lokalna baza danych różni się od kontrolera domeny.

Informacje podstawowe

Gdy dwa komputery z systemem Windows komunikują się za pośrednictwem sieci, używają protokołu wysokiego poziomu nazywanego blokiem komunikatów serwera (SMB). Polecenia SMB są osadzone w protokołach transportu, takich jak TCP/IP lub Szybkie połączenia internetowe UDP (QUIC). Na przykład gdy komputer kliencki wykonuje NET USE polecenie, zostanie wysłana ramka "Konfiguracja sesji SMB i X".

W systemie Windows w przypadku korzystania z protokołu NTLM protokół SMB "Konfiguracja sesji" zawiera konto użytkownika, funkcję skrótu zaszyfrowanego hasła i domeny logowania. Kontroler domeny zbada wszystkie te informacje, aby określić, czy klient ma uprawnienia do wykonania polecenia NET USE.

Algorytmy

Komputer kliencki z systemem Windows wysyła następujące polecenie do serwera:

NET USE x: \\server\share

Komputer kliencki z systemem Windows wysyła protokół SMB "Konfiguracja sesji", który zawiera domenę logowania, konto użytkownika i hasło.

Serwer sprawdza nazwę domeny lub nazwę komputera, która została określona przez protokół SMB. Jeśli nazwa jest własną nazwą serwera, zostanie uruchomiony następujący algorytm:

    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

Jeśli domena określona w SMB jest taka, że serwer ufa, zostanie uruchomiony następujący algorytm:

    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.

Jeśli bezpieczny kanał nie jest skonfigurowany, zostanie uruchomiony następujący algorytm:

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

Ważne

W poniższych przypadkach omówiono scenariusze, w których klient korzysta z innej domeny użytkownika niż serwer, którego serwer ma lub zna. Wystąpił problem podczas negocjowania protokołu uwierzytelniania NTLMv2. Protokół NTLM w wersji 2 używa soli haseł, a domena użytkownika jest używana w tej soli przez klienta.

Gdy serwer uzyskuje informacje i znajduje użytkownika w lokalnej bazie danych, serwer używa nazwy lokalnej bazy danych do obliczenia soli i skrótu. W związku z tym, jeśli "domena źródłowa" wysyłana przez klienta jest pusta lub jest nieznaną domeną, sól i dlatego skrót hasła nie będzie zgodny. W takich przypadkach próba uwierzytelnienia zakończy się niepowodzeniem z powodu błędu "nieznanej nazwy użytkownika lub nieprawidłowego hasła" (STATUS_LOGON_FAILURE). Zdarzenie inspekcji dla próby zgłosi "nieprawidłowe hasło", symbol STATUS_WRONG_PASSWORD.

Przykładowe zdarzenie:

Nazwa dziennika: Zabezpieczenia
Źródło: Microsoft-Windows-Security-Auditing
Identyfikator zdarzenia: 4625
Kategoria zadania: Logowanie
Poziom: Informacje
Słowa kluczowe: Niepowodzenie inspekcji
Komputer: serwer-komputer1
Opis rozwiązania:
Nie można zalogować się na koncie.

Subject:

Identyfikator zabezpieczeń: identyfikator SID o wartości NULL
Nazwa konta: -
Domena konta: -
Identyfikator logowania: 0x0

Typ logowania: 3

Konto, dla którego logowanie nie powiodło się:

Identyfikator zabezpieczeń: identyfikator SID o wartości NULL
Nazwa konta: ntadmin
Domena konta: klient-komputer1

Informacje o błędzie:

Przyczyna niepowodzenia: nieznana nazwa użytkownika lub nieprawidłowe hasło.
Stan: 0xc000006d
Stan podrzędny: 0xc000006a
...

Szczegółowe informacje o uwierzytelnianiu:

Proces logowania: NtLmSsp
Pakiet uwierzytelniania: NTLM
Usługi tranzytowe: -
Nazwa pakietu (tylko NTLM): -
Długość klucza: 0

Aby uniknąć tego problemu, należy jawnie dołączyć poprawną nazwę domeny na kliencie. W przypadku mapowania dysków w scenariuszu grupy roboczej byłoby to następujące:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *

Jeśli domena określona w SMB jest nieznana przez serwer, na przykład jeśli domena została określona, ale nie została rozpoznana przez serwer jako zaufana domena lub jego kontroler domeny, zostanie uruchomiony następujący algorytm:

    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

Jeśli domena określona w SMB ma wartość NULL, oznacza to, że żadna domena nie zostanie określona, zostanie uruchomiony następujący algorytm:

    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

Uwagi

  1. Jeśli konto gościa jest wyłączone i użytkownik nie ma konta, serwer będzie nadal żądać hasła. Mimo że żadne hasło nie spełnia wymagań, serwer będzie nadal żądać hasła jako środka zabezpieczającego. Ta miara zabezpieczeń zapewnia, że nieautoryzowany użytkownik nie może odróżnić przypadku, w którym istnieje konto i kiedy konto nie istnieje. Użytkownik będzie zawsze monitowany o podanie hasła niezależnie od tego, czy konto istnieje.

  2. W tym momencie następujące informacje są zwracane z domeny zaufanej w odpowiedzi: Identyfikator SID domeny, identyfikator użytkownika, członkostwa w grupach globalnych, Czas logowania, Czas wylogowania, KickOffTime, Pełna nazwa, Hasło LastSet, hasło może zmienić flagę, hasło musi zmienić flagę, skrypt użytkownika, ścieżka profilu, katalog główny i zły licznik haseł.

  3. Jeśli nie znaleziono konta w zaufanej domenie, system operacyjny musi używać lokalnego konta gościa, aby zagwarantować spójne zachowanie uwierzytelniania względem serwera.

  4. Aby uzyskać więcej informacji na temat ograniczania wyszukiwania i logowania izolowanych nazw w zaufanych domenach przy użyciu LsaLookupRestrictIsolatedNameLevel i NeverPing wpisy rejestru, zobacz Proces Lsass.exe może przestać odpowiadać, jeśli masz wiele zewnętrznych relacji zaufania na kontrolerze domeny usługi Active Directory. Ponadto dostępna jest poprawka rozszerzająca rejestrowanie w celu identyfikowania izolowanych żądań wyszukiwania nazw w systemie Windows Server 2008 z dodatkiem SP2.

    • Konta gości w zaufanych domenach nigdy nie będą dostępne.
    • Rzeczywisty proces wewnętrzny jest bardziej złożony niż algorytmy opisane tutaj.
    • Te algorytmy nie omawiają rzeczywistej mechaniki uwierzytelniania przekazywanego. Aby uzyskać więcej informacji, zobacz NtLM user authentication in Windows (Uwierzytelnianie użytkowników NTLM w systemie Windows).
    • Te algorytmy nie omawiają procesu szyfrowania haseł używanego w systemie Windows. Binarny duży obiekt (BLOB) pochodzący z jednokierunkowego skrótu hasła jest wysyłany w ramach żądania uwierzytelniania. Zawartość tego obiektu BLOB będzie zależeć od protokołu uwierzytelniania wybranego dla logowania.
    • W tym artykule nie omówiono wewnętrznych prac modułu uwierzytelniania firmy Microsoft.
    • Algorytmy te zakładają, że po włączeniu konta gościa nie ma hasła. Domyślnie konto gościa nie ma hasła w systemie Windows. Jeśli określono hasło konta gościa, hasło użytkownika wysyłane w usłudze SMB musi być zgodne z tym hasłem konta gościa.

Przykłady

Poniżej przedstawiono przykłady tych algorytmów w działaniu.

Przykład 1

Użytkownik jest zalogowany na komputerze przy użyciu tej samej nazwy konta i hasła, które znajduje się w bazie danych konta domeny CONTOSO-DOMAIN. Po uruchomieniu NET USE \\CONTOSO polecenia kontrolera domeny dla domeny CONTOSO-DOMAIN polecenie zostanie ukończone pomyślnie. Po uruchomieniu NET USE \\NET polecenia dla kontrolera domeny, który ufa domenie CONTOSO-DOMAIN, zostanie wyświetlony następujący komunikat o błędzie:

Wystąpił błąd systemu 1326. Błąd logowania: nieznana nazwa użytkownika lub niepoprawne hasło.

Konto \CONTOSO-DOMAIN\USER1 ma uprawnienia do \\NET.

Uwaga 16.

W tym przykładzie przyjęto założenie, że następujące konfiguracje.

Konfiguracje

Komputer z lokalnym urzędem zabezpieczeń:

  • Konto logowania: USER1
  • Hasło: PSW1
  • Domena logowania: LOCAL1

Kontroler domeny usługi Active Directory:

-Nazwa serwera: NET
-Domain: NET-DOMAIN
-Trust: NET-DOMAIN Trust CONTOSO-DOMAIN (W związku z tym,
konta w domenie CONTOSO mogą mieć uprawnienia
w domenie NET-DOMAIN).

Domena NET-DOMAIN:

  • Baza danych konta domeny dla domeny NET-DOMAIN nie zawiera konta użytkownika USER1.
  • Konto gościa jest wyłączone.

Domena CONTOSO-DOMAIN:

  • Nazwa serwera: CONTOSO
  • Domena: CONTOSO-DOMAIN
  • Baza danych domeny zawiera konto: USER1
  • Baza danych domeny zawiera hasło: PSW1

W tym przykładzie komputer jest zalogowany do domeny lokalnej, a nie domeny CONTOSO-DOMAIN, w której znajduje się konto domeny komputera.

Przykład 2

Po uruchomieniu NET USE x: \\NET\share polecenia są wykonywane następujące kroki:

  1. Komputer wysyła następujące informacje w trybie SMB "Konfiguracja sesji":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Serwer \\NET otrzymuje protokół SMB i spojrzał na nazwę konta.

  3. Serwer sprawdza swoją lokalną bazę danych konta domeny i nie znajduje dopasowania.

  4. Następnie serwer sprawdza nazwę domeny SMB.

  5. Serwer nie ufa "LOCAL1", dlatego serwer nie sprawdza zaufanych domen.

  6. Następnie serwer sprawdza swoje konto gościa.

  7. Konto gościa jest wyłączone, więc wystąpił błąd systemowy 1326. Niepowodzenie logowania: nieznana nazwa użytkownika lub nieprawidłowe hasło" — zostanie wygenerowany komunikat o błędzie.

Przykład 3

Po uruchomieniu NET USE x: \\CONTOSO\share polecenia są wykonywane następujące kroki:

  1. Komputer wysyła następujące informacje w trybie SMB "Konfiguracja sesji":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Serwer \\CONTOSO odbiera protokół SMB i sprawdza nazwę konta.

  3. Serwer sprawdza bazę danych konta domeny lokalnej i znajduje dopasowanie.

  4. Następnie serwer porównuje hasło protokołu SMB z hasłem konta domeny.

  5. Hasła są zgodne.

W związku z tym jest generowany komunikat "Polecenie kończy się pomyślnie". W przykładzie 2 i przykładzie 3 relacja zaufania jest niedostępna. Jeśli komputer został zalogowany do domeny CONTOSO-DOMAIN, NET USE x: \\NET\share polecenie zostałoby wykonane pomyślnie.

Idealnym rozwiązaniem jest zalogowanie się wszystkich komputerów do domeny. Aby się zalogować, użytkownik musi określić domenę, konto i hasło. Po wykonaniu tej czynności wszystkie polecenia NET USE będą przekazywać poprawne informacje o domenie, koncie i haśle. Administratorzy powinni starać się unikać duplikowania kont na komputerach i wielu domenach. System Windows pomaga uniknąć tej konfiguracji przy użyciu relacji zaufania między domenami i przy użyciu elementów członkowskich, które mogą używać baz danych domen.

Rozwiązanie

Istnieje jedno obejście, którego można użyć w tych przypadkach. Na komputerze można uruchomić następujące polecenie:

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

W tym poleceniu jest prawdziwe:

  • \\NET = nazwa komputera kontrolera domeny, do których uzyskuje się dostęp.
  • \SHARE = nazwa udziału.
  • /USER: parametr wiersza polecenia, który umożliwia określenie domeny, konta i hasła, które powinny być określone w "Konfiguracja sesji" SMB.
  • CONTOSO-DOMAIN = nazwa domeny, w której znajduje się konto użytkownika.
  • \USER1 = konto do zweryfikowania.
  • PSW1 = hasło zgodne z kontem w domenie.

Aby uzyskać więcej informacji na temat tego polecenia, wpisz następujące polecenie w wierszu polecenia:

NET USE /?  

Nazwy domen NULL

Klient SMB firmy Microsoft, który jest dołączony do systemu Windows, wysyła nazwy domen NULL w "Konfiguracja sesji SMB [x73]" SMB. Klient SMB firmy Microsoft obsługuje nazwę domeny, określając nazwę domeny logowania i wysyłając znak NULL, jeśli nazwa domeny nie jest określona w poleceniu NET USE. Klient SMB firmy Microsoft będzie również wykazywał zachowanie opisane w przykładzie 1.

Uwaga 16.

Zazwyczaj istnieją dwie reprezentacje "NULL" w SMB: nazwa domeny o zerowej długości i jednobajtowa nazwa domeny składająca się z znaku zapytania (?). Serwer SMB przechwytuje znak zapytania i tłumaczy go na wartość NULL przed przekazaniem go do lokalnego urzędu zabezpieczeń (LSA).

Rozwiązywanie problemów

Dobrym rozwiązaniem do rozwiązywania problemów z dostępem do sieci jest włączenie inspekcji, wykonując następujące czynności.

Kontrolery domeny systemu Windows

  1. Z poziomu narzędzi administracyjnych na kontrolerze domeny uruchom Użytkownicy i komputery usługi Active Directory.
  2. Kliknij prawym przyciskiem myszy kontrolery domeny jednostki organizacyjnej, a następnie kliknij polecenie Właściwości.
  3. Na karcie Zasady grupy kliknij dwukrotnie domyślne zasady kontrolera domeny.
  4. W Edytorze zasad kliknij pozycję Ustawienia komputera, kliknij pozycję Ustawienia systemu Windows, kliknij pozycję Ustawienia zabezpieczeń, kliknij pozycję Konfiguracja zaawansowanych zasad inspekcji, a następnie kliknij pozycję Logowanie do konta.
  5. Wybierz opcję Audit Credential Validation (Sprawdzanie poprawności poświadczeń inspekcji) i opcję Failure (Niepowodzenie).

Ustawienia domeny dla systemu Windows 2000

  1. Z poziomu narzędzi administracyjnych na kontrolerze domeny uruchom Użytkownicy i komputery usługi Active Directory.
  2. Kliknij prawym przyciskiem myszy nazwę domeny, a następnie kliknij polecenie Właściwości.
  3. Na karcie Zasady grupy kliknij dwukrotnie domyślne zasady domeny.
  4. W Edytorze zasad kliknij pozycję Ustawienia komputera, kliknij pozycję Ustawienia systemu Windows, kliknij pozycję Ustawienia zabezpieczeń, kliknij pozycję Konfiguracja zaawansowanych zasad inspekcji, a następnie kliknij pozycję Logowanie do konta.
  5. Wybierz opcję Audit Credential Validation (Sprawdzanie poprawności poświadczeń inspekcji) i opcję Failure (Niepowodzenie).

Ustawienia lokalne dla serwerów i członków systemu Windows 2000

  1. Z poziomu narzędzi administracyjnych uruchom zasady zabezpieczeń lokalnych.
  2. Otwórz okno Konfiguracja zaawansowanych zasad inspekcji — lokalny obiekt zasad grupy.
  3. Wybierz pozycję Logowanie do konta, a następnie opcję Przeprowadź inspekcję weryfikacji poświadczeń i opcję Niepowodzenie.
  4. Teraz, gdy użytkownik sieciowy uzyskuje zdalny dostęp do tego serwera, dziennik inspekcji zostanie zalogowany Podgląd zdarzeń. Aby wyświetlić te zdarzenia w Podgląd zdarzeń, kliknij pozycję Zabezpieczenia w menu Dziennik.

Aby uzyskać więcej informacji na temat relacji zaufania, uwierzytelniania przekazywanego, uprawnień użytkowników i identyfikatorów logowania do domeny, zobacz "Technical Overview of Windows Server 2003 Security Services" (Omówienie techniczne usług zabezpieczeń systemu Windows Server 2003).