Udostępnij przez


Rozwiązywanie problemów z uwierzytelnianiem Kerberos przy użyciu scenariusza testu analizy dzienników

W tym artykule przedstawiono metody rozwiązywania problemów z uwierzytelnianiem kerberos przy użyciu hipotetycznego wdrożenia klienta i serwera.

Środowisko i konfiguracja

  • Użytkownik "Jan" należy do contoso.com domeny.

  • Wszystkie serwery systemu nazw domen (DNS) domeny są kontrolerami domeny.

  • Jan jest zalogowany na komputerze klienckim skonfigurowanym w następujący sposób:

    • Nazwa i domena: Client1.contoso.com

    • System operacyjny: Windows 11

    • Przeglądarka: Microsoft Edge

    • Aplikacja do monitorowania: Monitor sieci (zainstalowany z usługi Microsoft Network Monitor)

    • Konfiguracja opcji internetowych: wszystkie contoso.com witryny należą do lokalnej strefy intranetu

      Zrzut ekranu przedstawiający właściwości internetowe pokazujące, że wszystkie witryny internetowe

  • Na komputerze klienckim Jan nawiązuje połączenie z serwerem docelowym skonfigurowanym w następujący sposób:

    • Nazwa i domena: IISServer.contoso.com

    • System operacyjny: Windows Server 2019

    • Usługa docelowa: witryna sieci Web działająca w usługach Internet Information Services (IIS)

    • Docelowe konto usługi: konto komputera (usługa działa w kontekście IISServer.contoso.com)

    • Port usługi docelowej: port TCP 80

    • Konfiguracja uwierzytelniania (skonfigurowana w Programie Internet Information Services Manager):

      • Uwierzytelnianie systemu Windows jest włączone.

        Zrzut ekranu przedstawiający okno Internet Information Services Manager z włączonym uwierzytelnianiem systemu Windows.

      • Lista dostawców uwierzytelniania obejmuje Negotiate z włączoną obsługą, jak pokazano na poniższym zrzucie ekranu:

        Zrzut ekranu przedstawiający okno Dostawców z włączonymi dostawcami, w tym Negotiate.

    • Konfiguracja inspekcji logowania: inspekcja powodzenia logowania i inspekcja niepowodzenia logowania są włączone.

      Uwaga / Notatka

      Domyślnie wszystkie systemy operacyjne Windows Server mają włączoną inspekcję powodzenia i niepowodzenia logowania. Aby sprawdzić to ustawienie, otwórz okno wiersza polecenia administracyjnego, a następnie uruchom następujące polecenie:

      auditpol /get /Subcategory:"logon"
      

      Jeśli ustawienie jest włączone, to polecenie generuje następujące dane wyjściowe:

      System audit policy
      Category/Subcategory                    Setting
      Logon/Logoff
        Logon                                 Success and Failure
      

      Jeśli nie widzisz tego wyniku, wykonaj poniższe polecenie, aby włączyć rejestrowanie wyników powodzenia i niepowodzenia:

      auditpol /set /subcategory:"Logon" /Success:enable /Failure:enable
      

Oczekiwany przepływ uwierzytelniania

Na poniższym diagramie przedstawiono sekwencję komunikatów żądań i odpowiedzi protokołu Kerberos oraz ścieżki tych komunikatów w środowisku opisanym w poprzedniej sekcji.

Zrzut ekranu przedstawiający przepływ uwierzytelniania.

Proces rozpoczyna się, gdy użytkownik Jan, który jest zalogowany na komputerze Client1.contoso.comklienckim , otwiera przeglądarkę Microsoft Edge i nawiązuje połączenie z IISServer.contoso.comusługą .

Krok 1 występuje na komputerze klienckim i obejmuje następujące kroki:

  1. Usługa rozpoznawania nazw DNS buforuje IISServer.contoso.com dane w celu sprawdzenia, czy te informacje są już buforowane.
  2. Usługa rozpoznawania nazw DNS sprawdza plik HOSTS (C:\Windows\System32\drivers\etc\Hosts) w celu wykrycia dowolnego mapowania IISServer.contoso.com.
  3. Usługa klienta DNS wysyła zapytanie DNS do preferowanego serwera DNS (zgodnie z konfiguracją ustawień konfiguracji adresu IP).

Krok 2 występuje na serwerze DNS (kontrolerze domeny) i obejmuje następujące kroki:

  1. Usługa serwera DNS sprawdza skonfigurowane strefy, lokalizuje rekord "A" hosta i rozpoznaje IISServer.contoso.com adres 192.168.2.104IP .
  2. Serwer DNS zwraca adres IP na komputer kliencki.

Krok 3 występuje na komputerze klienckim i obejmuje następujące kroki:

  1. Komputer klienta wykonuje trójfazowe uzgadnianie TCP z IISServer.contoso.com przy użyciu portu TCP 80.
  2. Komputer kliencki wysyła anonimowe żądanie HTTP do IISServer.contoso.com.

Krok 4 występuje na serwerze docelowym i obejmuje następujące kroki:

  1. Usługa internetowa (uruchomiona jako IISServer.contoso.com) odbiera żądanie od Client1.contoso.com.
  2. Usługa internetowa wysyła do Client1.contoso.com komunikat z odpowiedzią, który zawiera wyzwanie "HTTP 401". komunikat określa Negotiate jako preferowany dostawca uwierzytelniania i NTLM jako dostawcę uwierzytelniania pomocniczego.

Krok 5 występuje na komputerze klienckim i obejmuje następujące kroki:

  1. Komputer klient otrzymuje komunikat odpowiedzi na żądanie z IISServer.contoso.com.
  2. Proces przeglądarki Microsoft Edge sprawdza, czy IISServer.contoso.com należy do lokalnej strefy intranetu. W związku z tym proces uwierzytelniania powinien używać protokołu Kerberos zamiast NTLM.
  3. Proces przeglądarki Microsoft Edge wywołuje LSASS.exe, aby wyszukać bilet serwisowy dla elementu IISServer.contoso.com.
  4. W takim przypadku komputer kliencki nie ma odpowiedniego biletu usługi. Proces przeglądarki Microsoft Edge wysyła żądanie do Centrum dystrybucji Protokołu Kerberos (KDC) dla biletu.

Krok 6 występuje na kontrolerze domeny i obejmuje następujące kroki:

  1. Kontroler domeny (usługa KDC) odbiera żądanie od Client1.contoso.com i wyszukuje usługę korzystającą z nazwy SPN HTTP\IISServer.contoso.com (lub HOST\IISServer.contoso.com).
  2. Kontroler domeny identyfikuje żądaną usługę jako usługę internetową działającą w kontekście IISServer.contoso.com.
  3. Kontroler domeny wysyła komputerowi klienta odpowiedź, która zawiera bilet serwisowy dla IISServer.contoso.com usługi internetowej.

Krok 7 występuje na kontrolerze domeny i obejmuje następujące kroki:

  1. Proces przeglądarki Microsoft Edge tworzy komunikat protokołu Kerberos Application Protocol (AP), który zawiera bilet usługi.
  2. Proces przeglądarki Microsoft Edge wysyła komunikat AP do IISServer.contoso.com w odpowiedzi na wyzwanie "HTTP 401".

Krok 8 występuje na serwerze internetowym i obejmuje następujące kroki:

  1. Proces usług IIS wykonuje zapytania dotyczące lokalnego procesu LSASS.exe .
  2. Proces LSASS.exe odszyfrowuje bilet, a następnie tworzy token dla użytkownika, który obejmuje SessionID i członkostwo Johna w grupach.
  3. Proces LSASS.exe zwraca uchwyt dla tokenu związanego z procesem IIS.
  4. Proces usług IIS sprawdza informacje o grupie w tokenie, aby upewnić się, że Jan ma uprawnienia dostępu do żądanej strony.
  5. Proces usług IIS wysyła żądaną stronę do przeglądarki.

Używanie monitora sieciowego do rejestrowania testu uwierzytelniania

Wykonaj poniższe kroki, aby zebrać dane śledzenia w środowisku podobnym do tego, który został opisany w sekcji Środowisko i konfiguracja . Podczas tego testu składniki systemowe powinny wchodzić w interakcje w sposób opisany w sekcji Oczekiwany przepływ uwierzytelniania .

Uwaga / Notatka

Aby użyć procedur w tej sekcji, musisz należeć do lokalnej grupy Administratorzy:

  1. Na komputerze klienckim otwórz okno wiersza polecenia administracyjnego, a następnie uruchom polecenie ipconfig /flushdns.
  2. Otwórz monitor sieci i rozpocznij nagrywanie.
  3. Otwórz przeglądarkę Microsoft Edge. Na pasku adresu wprowadź .http://iisserver.contoso.com
  4. Po zakończeniu operacji przeglądarki Microsoft Edge zatrzymaj rejestrowanie w monitorze sieciowym.

Przeglądanie danych generowanych przez test uwierzytelniania

Test uwierzytelniania generuje następujące informacje:

  • Dane śledzenia monitora sieci
  • Dane biletu
  • Dane zdarzeń powodzenia i niepowodzenia audytu dla zdarzeń uwierzytelniania

Pozostała część tej sekcji zawiera szczegóły dotyczące danych generowanych przez przepływ uwierzytelniania.

Przeglądanie danych śledzenia pod kątem znaczących zdarzeń

W danych z logów śledzenia poszukaj informacji przypominających następujące fragmenty logów.

  • Zapytanie DNS do kontrolera domeny dla rekordu "A" hosta dlaIISServer.contoso.com:

    3005    00:59:30.0738430    Client1.contoso.com    DCA.contoso.com    DNS    DNS:QueryId = 0x666A, QUERY (Standard query), Query  for iisserver.contoso.com of type Host Addr on class Internet
    
  • Odpowiedź DNS z usługi DNS na kontrolerze domeny:

    3006    00:59:30.0743438    DCA.contoso.com    Client1.contoso.com    DNS    DNS:QueryId = 0x666A, QUERY (Standard query), Response - Success, 192.168.2.104
    
  • Żądanie anonimowe z procesu przeglądarki Microsoft Edge na Client1.contoso.comIISServer.contoso.com serwerze sieci Web usług IIS:

    3027    00:59:30.1609409    Client1.contoso.com    iisserver.contoso.com    HTTP    HTTP:Request, GET /
    Host:  iisserver.contoso.com
    
  • Komunikat odpowiedzi wyzwania HTTP 401 z IISServer.contoso.com do Client1.contoso.com:

    3028    00:59:30.1633647    iisserver.contoso.com    Client1.contoso.com    HTTP    HTTP:Response, HTTP/1.1, Status: Unauthorized, URL: /favicon.ico Using Multiple Authetication Methods, see frame details
    
    WWWAuthenticate: Negotiate
    WWWAuthenticate: NTLM
    
  • Żądanie biletu usługi z Client1.contoso.com do kontrolera domeny DCA.contoso.com dla usługi, która używa HTTP/iisserver.contoso.com jako SPN (znanego również jako komunikat żądania TGS):

    3034    00:59:30.1834048    Client1.contoso.com    DCA.contoso.com    KerberosV5    KerberosV5:TGS Request Realm: CONTOSO.COM Sname: HTTP/iisserver.contoso.com
    
  • Odpowiedź na zgłoszenie serwisowe z DCA.contoso.com, która zawiera bilet serwisowy dla IISServer.contoso.com (znany również jako komunikat odpowiedzi TGS):

    3036    00:59:30.1848687    DCA.contoso.com    Client1.contoso.com    KerberosV5    KerberosV5:TGS Response Cname: John 
    Ticket: Realm: CONTOSO.COM, Sname: HTTP/iisserver.contoso.com
    Sname: HTTP/iisserver.contoso.com
    
  • Drugie żądanie z procesu Microsoft Edge na Client1.contoso.com do IISServer.contoso.com. Ten komunikat zawiera bilet usługi:

    3040    00:59:30.1853262    Client1.contoso.com    iisserver.contoso.com    HTTP    HTTP:Request, GET /favicon.ico , Using GSS-API Authorization
    Authorization: Negotiate
    Authorization:  Negotiate YIIHGwYGKwYBBQUCoIIHDzCCBwugMDAuBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHgYKKwYBBAGCNwICCqKCBtUEggbRYIIGzQYJKoZIhvcSAQICAQBugga8MIIGuKADAgEFoQMCAQ6iBwMFACAAAACjggTvYYIE6zCCBOegAwIBBaENGwtDT05UT1NPLkNPTaIoMCagAwIBAqEfMB0bBEhUVFAbF
    SpnegoToken: 0x1
    NegTokenInit: 
    ApReq: KRB_AP_REQ (14)
    Ticket: Realm: CONTOSO.COM, Sname: HTTP/iisserver.contoso.com
    
  • Komunikat z serwera IIS do Client1.contoso.com. Ten komunikat wskazuje, że użytkownik jest uwierzytelniony i autoryzowany:

    3044    00:59:30.1875763    iisserver.contoso.com    Client1.contoso.com    HTTP    HTTP:Response, HTTP/1.1, Status: Not found, URL: / , Using GSS-API Authentication
    WWWAuthenticate: Negotiate oYG2MIGzoAMKAQChCwYJKoZIgvcSAQICooGeBIGbYIGYBgkqhkiG9xIBAgICAG+BiDCBhaADAgEFoQMCAQ+ieTB3oAMCARKicARuIF62dHj2/qKDRV5XjGKmyFl2/z6b9OHTCTKigAatXS1vZTVC1dMvtNniSN8GpXJspqNvEfbETSinF0ee7KLaprxNgTYwTrMVMnd95SoqBkm/FuY7WbTAuPvyRmUuBY3EKZEy
    NegotiateAuthorization: 
    GssAPI: 0x1
    NegTokenResp: 
    ApRep: KRB_AP_REP (15)
    

Przejrzyj informacje o biletach na komputerze klienckim

W wierszu polecenia na komputerze klienckim uruchom polecenie klist tickets. Dane wyjściowe powinny przypominać następujący fragment:

Client: John @ CONTOSO.COM
Server: HTTP/iisserver.contoso.com @ CONTOSO.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
Start Time: 11/28/2022 0:59:30 (local)
End Time:   11/28/2022 10:58:56 (local)
Renew Time: 12/5/2022 0:58:56 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: DCA.contoso.com

Przejrzenie zdarzeń audytu na serwerze docelowym

W Podglądzie zdarzeń w systemie IISServer.contoso.com przejdź do dziennika Dzienniki systemu Windows>Bezpieczeństwo, aby przejrzeć zdarzenia logowania. Poszukaj wystąpień zdarzenia o identyfikatorze 4624 lub 4625 i sprawdź następujące pola:

  • Słowa kluczowe: Audyt zakończony sukcesem lub Audyt nieudany
  • Typ logowania: 3 (logowanie do sieci)
  • Identyfikator zabezpieczeń w polu Nowe logowanie : Contoso\John
  • Źródłowy adres sieciowy: adres IP komputera klienckiego
  • Proces logowania i pakiet uwierzytelniania: Kerberos

Pełny tekst rekordu zdarzenia przypomina następujący fragment:

Log Name:      Security
Source:        Microsoft-Windows-Security-Auditing
Date:          11/28/2022 12:59:30 AM
Event ID:      4624
Task Category: Logon
Level:         Information
Keywords:      Audit Success
User:          N/A
Computer:      IISServer.contoso.com
Description:
An account was successfully logged on.

Subject:
    Security ID:        NULL SID
    Account Name:        -
    Account Domain:        -
    Logon ID:        0x0

Logon Information:
    Logon Type:        3
    Restricted Admin Mode:    -
    Virtual Account:        No
    Elevated Token:        No

Impersonation Level:        Impersonation

New Logon:
    Security ID:        CONTOSO\John
    Account Name:        John
    Account Domain:        CONTOSO.COM
    Logon ID:        0x1B64449
    Linked Logon ID:        0x0
    Network Account Name:    -
    Network Account Domain:    -
    Logon GUID:        {<GUID>}

Process Information:
    Process ID:        0x0
    Process Name:        -

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

Detailed Authentication Information:
    Logon Process:        Kerberos
    Authentication Package:    Kerberos

Rozwiąż problemy z przepływem pracy uwierzytelniania

Przejrzyj ślady sieci, aby sprawdzić, który krok kończy się niepowodzeniem, aby można było zawęzić lokalizację w procesie, w którym występuje problem. Skorzystaj z tych informacji, aby określić, które metody rozwiązywania problemów mogą pomóc w rozwiązaniu problemu.

Weryfikowanie łączności sieciowej

Jeśli wydaje się, że problem występuje w komunikacji DNS lub TCP, sprawdź następujące interakcje:

  • Sprawdź, czy możesz rozpoznać nazwę serwera docelowego (IISServer.contoso.com) z komputera klienckiego (Client1.contoso.com).

  • Sprawdź, czy serwer DNS prawidłowo rozpoznaje adres IP serwera docelowego. W tym celu otwórz okno programu PowerShell, a następnie uruchom następujące polecenie cmdlet:

    Resolve-DnsName -Name IISServer.contoso.com
    

    Dane wyjściowe tego polecenia cmdlet powinny przypominać następujący fragment:

    Name                                       Type   TTL   Section    IPAddress
    ----                                       ----   ---   -------    ---------
    IISServer.contoso.com                      A      1200  Answer     192.168.2.104
    
  • Sprawdź, czy wymagane porty sieciowe są otwarte między komputerem klienckim a serwerem docelowym. W tym celu uruchom następujące polecenie cmdlet:

    Test-NetConnection -Port 80 IISServer.contoso.com 
    

    Dane wyjściowe tego polecenia cmdlet powinny przypominać następujący fragment:

    ComputerName     : IISServer.contoso.com
    RemoteAddress    : 192.168.2.104
    RemotePort       : 80
    InterfaceAlias   : Ethernet 2
    SourceAddress    : 192.168.2.101
    TcpTestSucceeded : True
    

Weryfikowanie informacji o bilecie na komputerze klienckim

  1. Otwórz standardowe okno wiersza polecenia (zamiast administracyjnego okna wiersza polecenia) w kontekście użytkownika, który próbuje uzyskać dostęp do witryny internetowej.

  2. Uruchom następujące polecenia w podanej kolejności:

    klist purge
    klist get http/iisserver.contoso.com
    

    Dane wyjściowe tych poleceń powinny przypominać następujący fragment:

    Current LogonId is 0:0xa8a98b
    A ticket to http/iisserver.contoso.com has been retrieved successfully.
    
    Cached Tickets: (2)
    
    #0>     Client: John @ CONTOSO.COM
            Server: krbtgt/CONTOSO.COM @ CONTOSO.COM
            KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
            Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
            Start Time: 11/28/2022 1:28:11 (local)
            End Time:   11/28/2022 11:28:11 (local)
            Renew Time: 12/5/2022 1:28:11 (local)
            Session Key Type: AES-256-CTS-HMAC-SHA1-96
            Cache Flags: 0x1 -> PRIMARY
            Kdc Called: DCA.contoso.com
    
    #1>     Client: John @ CONTOSO.COM
            Server: http/iisserver.contoso.com @ CONTOSO.COM
            KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
            Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
            Start Time: 11/28/2022 1:28:11 (local)
            End Time:   11/28/2022 11:28:11 (local)
            Renew Time: 12/5/2022 1:28:11 (local)
            Session Key Type: AES-256-CTS-HMAC-SHA1-96
            Cache Flags: 0
            Kdc Called: DCA.contoso.com
    

    Ten fragment tekstu wskazuje, że bilet został pomyślnie odzyskany. Szczegóły biletu są oznaczone etykietą "#1>" w sekcji Buforowane bilety .

Sprawdź, czy usługa sieci Web IIS działa na serwerze IIS przy użyciu domyślnych poświadczeń.

Otwórz standardowe okno monitu programu PowerShell (zamiast administracyjnego okna monitu programu PowerShell) w kontekście użytkownika, który próbuje uzyskać dostęp do witryny internetowej:

invoke-webrequest -Uri http://IIsserver.contoso.com -UseDefaultCredentials

Dane wyjściowe tych poleceń powinny przypominać następujący fragment:

StatusCode        : 200
StatusDescription : OK
Content           : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml">
                    <head>
                    <meta http-equiv="Content-Type" cont...
RawContent        : HTTP/1.1 200 OK
                    Persistent-Auth: true
                    Accept-Ranges: bytes
                    Content-Length: 703
                    Content-Type: text/html
                    Date: Mon, 28 Nov 2022 09:31:40 GMT
                    ETag: "3275ea8a1d91:0"
                    Last-Modified: Fri, 25 Nov 2022...

Przejrzyj dziennik zdarzeń zabezpieczeń na serwerze docelowym

W Podglądzie zdarzeń na serwerze docelowym przejdź do dziennika Dzienniki systemu Windows>Zabezpieczenia. Poszukaj wystąpień zdarzenia o identyfikatorze 4624 (Powodzenie inspekcji) lub 4625 (Niepowodzenie inspekcji).

Sprawdź, czy inne usługi działają poprawnie

Aby sprawdzić, czy inne usługi na serwerze docelowym mogą przetwarzać uwierzytelnianie Kerberos, wykonaj następujące kroki:

  1. Na serwerze docelowym utwórz udział plików lub zidentyfikuj istniejący udział plików do użycia na potrzeby testowania. Upewnij się, że użytkownik (w roli "John") ma uprawnienie Odczyt w folderze.

  2. Na komputerze klienckim zaloguj się (jako użytkownik "Jan"), a następnie otwórz Eksploratora Windows.

  3. Na pasku adresu wprowadź \\IISServer.contoso.com \Software$.

  4. Na serwerze docelowym otwórz Podgląd zdarzeń, a następnie przejrzyj zdarzenia zabezpieczeń. Sprawdź, czy istnieją nowe zdarzenia o identyfikatorze 4624 lub zdarzenia o identyfikatorze zdarzenia 4625.

  5. Na komputerze klienckim uruchom polecenie klist tickets w wierszu polecenia. Dane wyjściowe polecenia powinny zawierać bilet serwisowy dla elementu CIFS/IISServer.contoso.com, jak pokazano na poniższym fragmencie.

    #1>     Client: John @ CONTOSO.COM
            Server: cifs/iisserver.contoso.com @ CONTOSO.COM
            KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
            Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
            Start Time: 11/28/2022 1:40:22 (local)
            End Time:   11/28/2022 11:28:11 (local)
            Renew Time: 12/5/2022 1:28:11 (local)
            Session Key Type: AES-256-CTS-HMAC-SHA1-96
            Cache Flags: 0
            Kdc Called: DCA.contoso.com