Überprüfungsalgorithmen für Netzwerkzugriff und Beispiele für Windows
In diesem Artikel wird erläutert, wie die Windows-Kontoüberprüfung während des Netzwerkzugriffs mithilfe des NTLM-Protokolls beobachtet wird.
Ursprüngliche KB-Nummer: 103390
Zusammenfassung
Es folgt ein vereinfachter Algorithmus, der erläutert, wie die Windows-Kontoüberprüfung während des Netzwerkzugriffs mithilfe des NTLM-Protokolls beobachtet wird. Es wird der Zugriff über das SMB-Protokoll (Server Message Block) verwendet, gilt jedoch für alle anderen Serveranwendungen, die die NTLM-Authentifizierung unterstützen. In dieser Diskussion werden die internen Arbeiten dieses Prozesses nicht behandelt. Mit diesen Informationen können Sie das Verhalten der Windows-Netzwerkanmeldung unter deterministischen Bedingungen vorhersagen.
Wenn Kerberos verwendet wird, um den Benutzer zu authentifizieren und Zugriff auf Serverressourcen zu erhalten, unterscheidet sich der Prozess von dem, was NTLM tut.
Denken Sie daran, dass die lokale Datenbank die Domänendatenbank und die einzige Datenbank auf den Domänencontrollern ist. Auf anderen Servern und allen Computern unterscheidet sich die lokale Datenbank jedoch vom Domänencontroller.
Hintergrundinformationen
Wenn zwei Windows-basierte Computer über ein Netzwerk kommunizieren, verwenden sie ein allgemeines Protokoll, das als Servernachrichtenblock (Server Message Block, SMB) bezeichnet wird. SMB-Befehle sind in die Transportprotokolle eingebettet, z. B. TCP/IP oder Quick UDP Internet Connections (QUIC). Wenn beispielsweise ein Clientcomputer einen NET USE
Befehl ausführt, wird ein Frame "SMB Session Setup and X" gesendet.
In Windows umfasst das SMB "Sitzungssetup" in Windows das Benutzerkonto, eine Hashfunktion des verschlüsselten Kennworts und der Anmeldedomäne. Ein Domänencontroller überprüft alle diese Informationen, um zu bestimmen, ob der Client über Berechtigungen zum Abschließen des NET USE-Befehls verfügt.
Algorithmen
Ein Windows-Clientcomputer sendet den folgenden Befehl an einen Server:
NET USE x: \\server\share
Der Windows-Clientcomputer sendet ein SMB "Sitzungssetup", das seine Anmeldedomäne, das Benutzerkonto und das Kennwort enthält.
Der Server untersucht den Domänennamen oder den Computernamen, der vom SMB angegeben wurde. Wenn der Name der eigene Name des Servers ist, wird der folgende Algorithmus ausgeführt:
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
Wenn die im SMB angegebene Domäne einer ist, dem der Server vertraut, wird der folgende Algorithmus ausgeführt:
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.
Wenn kein sicherer Kanal eingerichtet ist, wird der folgende Algorithmus ausgeführt:
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
Wichtig
In den folgenden Fällen werden Szenarien erläutert, in denen der Client eine andere Benutzerdomäne verwendet, von der der Server verfügt oder kennt. Es besteht ein Problem mit diesem Konflikt, wenn das NTLMv2-Authentifizierungsprotokoll ausgehandelt wird. NTLM bei v2 verwendet ein Kennwortsalz, und die Benutzerdomäne wird in diesem Salt vom Client verwendet.
Wenn der Server die Informationen abruft und den Benutzer in der lokalen Datenbank findet, verwendet der Server den Namen der LOKALEN Datenbank, um das Salz und den Hash zu berechnen. Wenn die vom Client gesendete "Quelldomäne" leer ist oder eine unbekannte Domäne ist, stimmt das Salt und daher der Kennworthash nicht überein. In diesen Fällen schlägt der Authentifizierungsversuch mit einem Fehler "Unbekannter Benutzername oder ungültiges Kennwort" (STATUS_LOGON_FAILURE) fehl. Das Überwachungsereignis für den Versuch meldet "falsches Kennwort", symbol STATUS_WRONG_PASSWORD.
Beispielereignis:
Protokollname: Sicherheit
Quelle: Microsoft-Windows-Sicherheitsüberwachung
Ereignis-ID: 4625
Aufgabenkategorie: Anmelden
Ebene: Information
Schlüsselwörter: Überwachungsfehler
Computer: Servercomputer1
Beschreibung:
Fehler beim Anmelden eines Kontos.Antragsteller:
Sicherheits-ID: NULL SID
Kontenbezeichnung:-
Kontodomäne: -
Anmelde-ID: 0x0Anmeldetyp: 3
Konto, für das die Anmeldung fehlgeschlagen ist:
Sicherheits-ID: NULL SID
Kontoname: ntadmin
Kontodomäne: Clientcomputer1Fehlerinformationen:
Fehlerursache: Unbekannter Benutzername oder ungültiges Kennwort.
Status: 0xc000006d
Unterstatus: 0xc000006a
...Detaillierte Authentifizierungsinformationen:
Anmeldeprozess: NtLmSsp
Authentifizierungspaket: NTLM
Transitierte Dienste: -
Paketname (nur NTLM): -
Schlüssellänge: 0
Um dieses Problem zu vermeiden, müssen Sie den richtigen Domänennamen explizit auf den Client einschließen. Für eine Laufwerkzuordnung in einem Arbeitsgruppenszenario wäre dies die folgende:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *
Wenn die im SMB angegebene Domäne vom Server unbekannt ist, beispielsweise, wenn eine Domäne angegeben, aber vom Server nicht als vertrauenswürdige Domäne erkannt wurde oder ihr Domänencontroller ausgeführt wird, wird der folgende Algorithmus ausgeführt:
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
Wenn die im SMB angegebene Domäne NULL ist, d. r. keine Domäne angegeben wird, wird der folgende Algorithmus ausgeführt:
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
Hinweise
Wenn das Gastkonto deaktiviert ist und der Benutzer kein Konto besitzt, fordert der Server weiterhin ein Kennwort an. Obwohl kein Kennwort seine Anforderungen erfüllt, fordert der Server weiterhin ein Kennwort als Sicherheitsmaßnahme an. Diese Sicherheitsmaßnahme stellt sicher, dass ein nicht autorisierter Benutzer den Unterschied zwischen einem Fall nicht erkennen kann, in dem ein Konto vorhanden ist und wann das Konto nicht vorhanden ist. Der Benutzer wird immer zur Eingabe eines Kennworts aufgefordert, unabhängig davon, ob das Konto vorhanden ist.
Zu diesem Zeitpunkt werden die folgenden Informationen von der vertrauenswürdigen Domäne in der Antwort zurückgegeben: Domänen-SID, Benutzer-ID, globale Gruppenmitgliedschaften, Anmeldezeit, Abmeldungszeit, KickOffTime, Vollständiger Name, Kennwort lastSet, Kennwort kann Flag ändern, Kennwort muss Attribut ändern, Benutzerskript, Profilpfad, Startverzeichnis und ungültige Kennwortanzahl.
Wenn kein Konto in der vertrauenswürdigen Domäne gefunden wird, muss das Betriebssystem das lokale Gastkonto verwenden, um ein konsistentes Verhalten für die Authentifizierung für den Server zu gewährleisten.
Weitere Informationen zum Einschränken der Suche und Anmeldung von isolierten Namen in vertrauenswürdigen Domänen mithilfe der Registrierungseinträge "LsaLookupRestrictIsolatedNameLevel" und "NeverPing" finden Sie unter "Der prozess Lsass.exe reagiert möglicherweise nicht mehr, wenn Sie viele externe Vertrauensstellungen auf einem Active Directory-Domänencontroller haben. Darüber hinaus steht Hotfix zur Verfügung, mit dem die Protokollierung erweitert wird, um Isolierte Namenssuchanforderungen in Windows Server 2008 SP2 zu identifizieren.
- Gastkonten in vertrauenswürdigen Domänen sind nie verfügbar.
- Der eigentliche interne Prozess ist komplexer als die hier beschriebenen Algorithmen.
- Diese Algorithmen besprechen nicht die tatsächliche Mechanik der Pass-Through-Authentifizierung. Weitere Informationen finden Sie unter NTLM-Benutzerauthentifizierung in Windows.
- Diese Algorithmen besprechen nicht den kennwortverschlüsselungsprozess, der in Windows verwendet wird. Ein binäres großes Objekt (BLOB), das von einem unidirektionalem Kennworthash abgeleitet wird, wird als Teil der Authentifizierungsanforderung gesendet. Der Inhalt dieses BLOB hängt vom für die Anmeldung ausgewählten Authentifizierungsprotokoll ab.
- In diesem Artikel werden die internen Arbeiten des Microsoft-Authentifizierungsmoduls nicht behandelt.
- Bei diesen Algorithmen wird davon ausgegangen, dass das Gastkonto, wenn aktiviert, kein Kennwort aufweist. Standardmäßig verfügt das Gastkonto nicht über ein Kennwort in Windows. Wenn ein Gastkontokennwort angegeben ist, muss das Benutzerkennwort, das im SMB gesendet wird, mit diesem Gastkontokennwort übereinstimmen.
Beispiele
Im Folgenden sind Beispiele für diese Algorithmen in Aktion aufgeführt.
Beispiel 1
Sie sind auf dem Computer angemeldet, indem Sie denselben Kontonamen und dasselbe Kennwort verwenden, das sich in der Contoso-DOMAIN-Domänenkontodatenbank befindet. Wenn Sie den NET USE \\CONTOSO
Befehl für den Domänencontroller für die DOMÄNE CONTOSO-DOMAIN ausführen, wird der Befehl erfolgreich abgeschlossen. Wenn Sie den NET USE \\NET
Befehl für den Domänencontroller ausführen, der der CONTOSO-DOMAIN-Domäne vertraut, wird die folgende Fehlermeldung angezeigt:
Systemfehler 1326 ist aufgetreten. Anmelden gescheitert: Unbekannter Benutzername oder ungültiges Kennwort.
Das Konto \CONTOSO-DOMAIN\USER1 verfügt über Berechtigungen für \\NET.
Notiz
In diesem Beispiel wird davon ausgegangen, dass die folgenden Konfigurationen ausgeführt werden.
Configurations
Computer mit einer lokalen Sicherheitsautorität:
- Anmeldekonto: USER1
- Kennwort: PSW1
- Anmeldedomäne: LOCAL1
Active Directory-Domänencontroller:
-Servername: NET
-Domain: NET-DOMAIN
-Trust: NET-DOMAIN Trust CONTOSO-DOMAIN (Daher:
Konten unter CONTOSO-DOMAIN können Berechtigungen erteilt werden.
in der NET-DOMÄNE).
Die NET-DOMAIN-Domäne:
- Die Domänenkontodatenbank für die NET-DOMAIN-Domäne enthält kein Konto für USER1.
- Das Gastkonto ist deaktiviert.
Die DOMÄNE CONTOSO-DOMAIN:
- Servername: CONTOSO
- Domäne: CONTOSO-DOMAIN
- Domänendatenbank enthält Konto: USER1
- Domänendatenbank enthält Kennwort: PSW1
In diesem Beispiel ist der Computer bei seiner lokalen Domäne angemeldet, nicht bei der DOMÄNE CONTOSO-DOMÄNE, in der sich das Domänenkonto des Computers befindet.
Beispiel 2
Wenn Sie den NET USE x: \\NET\share
Befehl ausführen, treten die folgenden Schritte auf:
Der Computer sendet Folgendes im SMB "Sitzungssetup":
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Der \\NET-Server empfängt die SMB und untersucht den Kontonamen.
Der Server überprüft seine lokale Domänenkontodatenbank und findet keine Übereinstimmung.
Der Server untersucht dann den SMB-Domänennamen.
Der Server vertraut nicht "LOCAL1", sodass der Server seine vertrauenswürdigen Domänen nicht überprüft.
Der Server überprüft dann sein Gastkonto.
Das Gastkonto ist deaktiviert, sodass der "Systemfehler 1326" aufgetreten ist. Anmeldefehler: Unbekannter Benutzername oder ungültiges Kennwort." Fehlermeldung wird generiert.
Beispiel 3
Wenn Sie den NET USE x: \\CONTOSO\share
Befehl ausführen, treten die folgenden Schritte auf:
Der Computer sendet Folgendes im SMB "Sitzungssetup":
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Der \\CONTOSO-Server empfängt die SMB und überprüft den Kontonamen.
Der Server überprüft seine lokale Domänenkontodatenbank und findet eine Übereinstimmung.
Anschließend vergleicht der Server das SMB-Kennwort mit dem Kennwort für das Domänenkonto.
Die Kennwörter stimmen überein.
Daher wird die Meldung "Befehl erfolgreich abgeschlossen" generiert. In Beispiel 2 und Beispiel 3 ist die Vertrauensstellung nicht verfügbar. Wenn der Computer bei der DOMÄNE CONTOSO-DOMAIN angemeldet war, wäre der NET USE x: \\NET\share
Befehl erfolgreich gewesen.
Die ideale Lösung besteht darin, dass sich alle Computer bei einer Domäne anmelden. Um sich anzumelden, muss der Benutzer die Domäne, das Konto und das Kennwort angeben. Danach übergeben alle NET USE -type-Befehle die richtigen Domänen-, Konto- und Kennwortinformationen. Administratoren sollten versuchen, doppelte Konten auf Computern und mehreren Domänen zu vermeiden. Windows hilft dabei, diese Konfiguration zu vermeiden, indem sie Vertrauensstellungen zwischen Domänen und mithilfe von Mitgliedern verwendet, die Domänendatenbanken verwenden können.
Problemumgehung
Es gibt eine Problemumgehung, die in diesen Fällen verwendet werden kann. Auf dem Computer können Sie den folgenden Befehl ausführen:
NET USE X: \\NET\SHARE /USER:CONTOSO-DOMAIN\USER1 PSW1
In diesem Befehl gilt Folgendes:
- \\NET = Der Computername des Domänencontrollers, auf den zugegriffen wird.
- \SHARE = Der Freigabename.
- /USER: Befehlszeilenparameter, mit dem Sie die Domäne, das Konto und das Kennwort angeben können, die im SMB "Sitzungssetup" angegeben werden sollen.
- CONTOSO-DOMAIN = Domänenname der Domäne, in der sich das Benutzerkonto befindet.
- \USER1 = Konto, das überprüft werden soll.
- PSW1 = Kennwort, das mit dem Konto in der Domäne übereinstimmt.
Wenn Sie weitere Informationen zu diesem Befehl wünschen, geben Sie folgendes an der Eingabeaufforderung ein:
NET USE /?
NULL-Domänennamen
Der Microsoft SMB-Client, der in Windows enthalten ist, sendet NULL-Domänennamen im SMB "Session Setup SMB [x73]". Der Microsoft SMB-Client verarbeitet den Domänennamen, indem er den Anmeldedomänennamen angibt und ein NULL-Zeichen sendet, wenn der Domänenname nicht im NET USE-Befehl angegeben ist. Der Microsoft SMB-Client zeigt auch das verhalten an, das in Beispiel 1 beschrieben wird.
Notiz
In der Regel gibt es zwei Darstellungen für "NULL" im SMB: Ein Domänenname der Länge null und ein 1-Byte-Domänenname, der aus dem Fragezeichenzeichen (?) besteht. Der SMB-Server fängt das Fragezeichen ab und übersetzt es in NULL, bevor er an die lokale Sicherheitsautorität (LSA) übergeben wird.
Problembehandlung
Ein guter Tipp für die Problembehandlung bei Netzwerkzugriffsproblemen besteht darin, die Überwachung mithilfe der folgenden Schritte zu aktivieren.
Windows-Domänencontroller
- Starten Sie von den Verwaltungstools auf einem Domänencontroller Active Directory-Benutzer und -Computer.
- Klicken Sie mit der rechten Maustaste auf Domänencontroller-OU, und klicken Sie dann auf "Eigenschaften".
- Doppelklicken Sie auf der Registerkarte "Gruppenrichtlinie" auf "Standarddomänencontrollerrichtlinie".
- Klicken Sie im Richtlinien-Editor auf "Computereinstellungen", auf "Windows-Einstellungen", auf "Sicherheitseinstellungen", auf " Erweiterte Überwachungsrichtlinienkonfiguration" und dann auf "Kontoanmeldung".
- Wählen Sie die Option "Überprüfung der Anmeldeinformationen überwachen" und die Option "Fehler " aus.
Domäneneinstellungen für Windows 2000
- Starten Sie von den Verwaltungstools auf einem Domänencontroller Active Directory-Benutzer und -Computer.
- Klicken Sie mit der rechten Maustaste auf den Domänennamen, und klicken Sie dann auf "Eigenschaften".
- Doppelklicken Sie auf der Registerkarte "Gruppenrichtlinie" auf "Standarddomänenrichtlinie".
- Klicken Sie im Richtlinien-Editor auf "Computereinstellungen", auf "Windows-Einstellungen", auf "Sicherheitseinstellungen", auf " Erweiterte Überwachungsrichtlinienkonfiguration" und dann auf "Kontoanmeldung".
- Wählen Sie die Option "Überprüfung der Anmeldeinformationen überwachen" und die Option "Fehler " aus.
Lokale Einstellungen für Windows 2000-Server und -Mitglieder
- Starten Sie in den Verwaltungstools die lokale Sicherheitsrichtlinie.
- Öffnen Sie die Erweiterte Überwachungsrichtlinienkonfiguration – Lokale Gruppenrichtlinienobjekt.
- Wählen Sie "Kontoanmeldung " und dann die Option "Überprüfung der Anmeldeinformationen überwachen" und dann die Option "Fehler " aus.
- Wenn ein Netzwerkbenutzer remote auf diesen Server zugreift, wird nun ein Überwachungspfad Ereignisanzeige protokolliert. Um diese Ereignisse in Ereignisanzeige anzuzeigen, klicken Sie im Menü "Protokoll" auf "Sicherheit".
Weitere Informationen zu Vertrauensbeziehungen, Pass-Through-Authentifizierung, Benutzerberechtigungen und Domänenanmeldungen finden Sie unter "Technical Overview of Windows Server 2003 Security Services".