Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur Validering av Windows-konto observeras för att fungera under nätverksåtkomst med hjälp av NTLM-protokollet.
Ursprungligt KB-nummer: 103390
Sammanfattning
Följande är en förenklad algoritm som förklarar hur Validering av Windows-konto observeras för att fungera under nätverksåtkomst med hjälp av NTLM-protokollet. Det använder åtkomst via SMB-protokollet (Server Message Block) som exempel, men det gäller för alla andra serverprogram som stöder NTLM-autentisering. Den här diskussionen omfattar inte det interna arbetet i den här processen. Med den här informationen kan du förutsäga beteendet för Windows-nätverksinloggning under deterministiska förhållanden.
När Kerberos används för att autentisera användaren och få åtkomst till serverresurser skiljer sig processen från vad NTLM gör.
Kom ihåg att den lokala databasen är domändatabasen och den enda databasen på domänkontrollanterna. Men på andra servrar och alla datorer skiljer sig den lokala databasen från domänkontrollanten.
Bakgrundsinformation
När två Windows-baserade datorer kommunicerar via ett nätverk använder de ett protokoll på hög nivå som kallas SMB (Server Message Block). SMB-kommandon är inbäddade i transportprotokollen, till exempel TCP/IP eller Snabb UDP-internetanslutning (QUIC). När en klientdator till exempel utför ett NET USE kommando skickas en "SMB Session Setup and X"-ram ut.
I Windows, när du använder NTLM, innehåller "Sessionsinstallation" SMB användarkontot, en hash-funktion för det krypterade lösenordet och inloggningsdomänen. En domänkontrollant undersöker all den här informationen för att avgöra om klienten har behörighet att slutföra NET USE-kommandot.
Algoritmer
En Windows-klientdator skickar följande kommando till en server:
NET USE x: \\server\share
Windows-klientdatorn skickar en "Sessionsinstallation" SMB som innehåller dess inloggningsdomän, användarkonto och lösenord.
Servern undersöker domännamnet eller datornamnet som angavs av SMB. Om namnet är serverns eget namn körs följande algoritm:
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
Om domänen som anges i SMB är en som servern litar på körs följande algoritm:
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.
Om en säker kanal inte har konfigurerats körs följande algoritm:
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
Viktigt!
I följande fall diskuteras scenarier där klienten använder en annan användardomän än den som servern har eller känner till. Det finns ett problem med den här matchningen när NTLMv2-autentiseringsprotokollet förhandlas. NTLM på v2 använder lösenordssalt och användardomänen används i det här saltet av klienten.
När servern hämtar informationen och hittar användaren i den lokala databasen använder servern namnet på LOCAL-databasen för att beräkna saltet och hashen. Om "källdomänen" som skickas av klienten är tom eller är en okänd domän matchar därför inte saltet och därmed lösenordshash. I dessa fall misslyckas autentiseringsförsöket med felet "okänt användarnamn eller felaktigt lösenord" (STATUS_LOGON_FAILURE). Granskningshändelsen för försöket rapporterar "felaktigt lösenord", symbolen STATUS_WRONG_PASSWORD.
En exempelhändelse:
Loggnamn: Säkerhet
Källa: Microsoft-Windows-Security-Auditing
Händelse-ID: 4625
Aktivitetskategori: Inloggning
Nivå: Information
Nyckelord: Granskningsfel
Dator: server-computer1
Beskrivning:
Det gick inte att logga in på ett konto.Ämne:
Säkerhets-ID: NULL SID
Kontonamn: -
Kontodomän: -
Inloggnings-ID: 0x0Inloggningstyp: 3
Konto för vilket inloggningen misslyckades:
Säkerhets-ID: NULL SID
Kontonamn: ntadmin
Kontodomän: client-computer1Information om fel:
Felorsak: Okänt användarnamn eller felaktigt lösenord.
Status: 0xc000006d
Understatus: 0xc000006a
...Detaljerad autentiseringsinformation:
Inloggningsprocess: NtLmSsp
Autentiseringspaket: NTLM
Transiterade tjänster: -
Paketnamn (endast NTLM): -
Nyckellängd: 0
För att undvika det här problemet måste du uttryckligen inkludera rätt domännamn på klienten. För en enhetsmappning i ett arbetsgruppsscenario skulle det vara följande:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *
Om domänen som anges i SMB är okänd av servern, till exempel om en domän har angetts men inte kändes igen av servern som en betrodd domän eller dess domänkontrollant, körs följande algoritm:
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
Om domänen som anges i SMB är NULL, d.s.a. ingen domän har angetts, körs följande algoritm:
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
Kommentar
Om gästkontot är inaktiverat och användaren inte har något konto begär servern fortfarande ett lösenord. Även om inget lösenord uppfyller kraven begär servern fortfarande ett lösenord som en säkerhetsåtgärd. Det här säkerhetsmåttet försäkrar att en obehörig användare inte kan se skillnaden mellan ett fall där ett konto finns och när kontot inte finns. Användaren uppmanas alltid att ange ett lösenord oavsett om kontot finns.
I det här läget returneras följande information från den betrodda domänen i svaret: Domän-SID, Användar-ID, Globala gruppmedlemskap, Inloggningstid, Utloggningstid, KickOffTime, Fullständigt namn, Lösenordsslutuppsättning, Lösenord kan ändra flagga, Lösenord måste ändra flagga, Användarskript, Profilsökväg, Hemkatalog och Felaktigt antal lösenord.
Om inget konto hittas på den betrodda domänen måste operativsystemet använda det lokala gästkontot för att garantera konsekvent beteende för autentisering mot servern.
Mer information om hur du begränsar sökning och inloggning av isolerade namn i betrodda domäner med hjälp av registerposterna LsaLookupRestrictIsolatedNameLevel och NeverPing finns i Den Lsass.exe processen kan sluta svara om du har många externa förtroenden på en Active Directory-domänkontrollant. Dessutom är snabbkorrigeringar tillgängliga som breddar loggningen för att identifiera begäranden om isolerade namnsökningar i Windows Server 2008 SP2.
- Gästkonton på betrodda domäner kommer aldrig att vara tillgängliga.
- Den faktiska interna processen är mer komplex än de algoritmer som beskrivs här.
- Dessa algoritmer diskuterar inte den faktiska mekaniken för direktautentisering. Mer information finns i NTLM-användarautentisering i Windows.
- Dessa algoritmer diskuterar inte processen för lösenordskryptering som används i Windows. Ett binärt stort objekt (BLOB) som härletts från en enkelriktad lösenordshash skickas som en del av autentiseringsbegäran. Innehållet i den här BLOB:en beror på vilket autentiseringsprotokoll som valts för inloggningen.
- I den här artikeln beskrivs inte de interna funktionerna i Microsoft Authentication-modulen.
- Dessa algoritmer förutsätter att gästkontot, när det är aktiverat, inte har något lösenord. Gästkontot har som standard inget lösenord i Windows. Om ett gästkontolösenord har angetts måste användarlösenordet som skickas i SMB matcha lösenordet för gästkontot.
Exempel
Följande är exempel på dessa algoritmer i praktiken.
Exempel 1
Du är inloggad på datorn med samma kontonamn och lösenord som finns i domänkontodatabasen CONTOSO-DOMAIN. När du kör NET USE \\CONTOSO kommandot för domänkontrollanten för domänen CONTOSO-DOMAIN slutförs kommandot. När du kör NET USE \\NET kommandot för domänkontrollanten som litar på CONTOSO-DOMAIN-domänen får du följande felmeddelande:
Systemfel 1326 har inträffat. Inloggningsfel: okänt användarnamn eller felaktigt lösenord.
Kontot \CONTOSO-DOMAIN\USER1 har behörigheter för \\NET.
Kommentar
Det här exemplet förutsätter följande konfigurationer.
-konfigurationer
Dator som har en lokal säkerhetsutfärdare:
- Inloggningskonto: USER1
- Lösenord: PSW1
- Inloggningsdomän: LOCAL1
Active Directory-domänkontrollant:
-Servernamn: NET
-Domän: NET-DOMAIN
-Trust: NET-DOMAIN Trust CONTOSO-DOMAIN (därför
konton på CONTOSO-DOMAIN kan beviljas behörigheter
i NET- DOMAIN).
NET-DOMAIN-domänen:
- Domänkontodatabasen för NET-DOMAIN-domänen innehåller inte något konto för USER1.
- Gästkontot är inaktiverat.
CONTOSO-DOMAIN-domänen:
- Servernamn: CONTOSO
- Domän: CONTOSO-DOMAIN
- Domändatabas innehåller konto: USER1
- Domändatabasen innehåller lösenord: PSW1
I det här exemplet är datorn inloggad på sin lokala domän, inte contoso-DOMAIN-domänen där datorns domänkonto finns.
Exempel 2
När du kör NET USE x: \\NET\share kommandot utförs följande steg:
Datorn skickar ut följande i "Sessionsinstallation" SMB:
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
\\NET-servern tar emot SMB och tittade på kontonamnet.
Servern undersöker sin lokala domänkontodatabas och hittar ingen matchning.
Servern undersöker sedan SMB-domännamnet.
Servern litar inte på "LOCAL1", så servern kontrollerar inte sina betrodda domäner.
Servern kontrollerar sedan sitt gästkonto.
Gästkontot är inaktiverat så "Systemfel 1326 har inträffat. Inloggningsfel: okänt användarnamn eller felaktigt lösenord." Felmeddelande genereras.
Exempel 3
När du kör NET USE x: \\CONTOSO\share kommandot utförs följande steg:
Datorn skickar ut följande i "Sessionsinstallation" SMB:
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
\\CONTOSO-servern tar emot SMB och undersöker kontonamnet.
Servern undersöker sin lokala domänkontodatabas och hittar en matchning.
Servern jämför sedan SMB-lösenordet med domänkontots lösenord.
Lösenorden matchar.
Därför genereras meddelandet "Kommandot har slutförts". I exempel 2 och exempel 3 är förtroenderelationen inte tillgänglig. Om datorn hade loggats in på DOMÄNEN CONTOSO-DOMAIN NET USE x: \\NET\share hade kommandot lyckats.
Den perfekta lösningen är att alla datorer loggar in på en domän. För att kunna logga in måste användaren ange domänen, kontot och lösenordet. När du har slutfört detta skickas rätt domän-, konto- och lösenordsinformation för alla NET USE-typkommandon. Administratörer bör försöka undvika duplicerade konton på både datorer och flera domäner. Windows hjälper till att undvika den här konfigurationen med hjälp av förtroenden mellan domäner och med hjälp av medlemmar som kan använda domändatabaser.
Lösning
Det finns en lösning som kan användas i dessa fall. Från datorn kan du köra följande kommando:
NET USE X: \\NET\SHARE /USER:CONTOSO-DOMAIN\USER1 PSW1
I det här kommandot är följande sant:
- \\NET = Datornamnet på domänkontrollanten som används.
- \SHARE = Resursnamnet.
- /USER: kommandoradsparameter som gör att du kan ange den domän, det konto och det lösenord som ska anges i SMB:et "Sessionsinstallation".
- CONTOSO-DOMAIN = Domännamn för domänen där användarkontot finns.
- \USER1 = konto som ska verifieras mot.
- PSW1 = lösenord som matchar kontot på domänen.
Om du vill ha mer information om det här kommandot skriver du följande i kommandotolken:
NET USE /?
NULL-domännamn
Microsoft SMB-klienten som ingår i Windows skickar NULL-domännamn i SMB-filen "Sessionsinstallation [x73]". Microsoft SMB-klienten hanterar domännamnet genom att ange inloggningsdomännamnet och genom att skicka ett NULL-tecken om domännamnet inte anges i NET USE-kommandot. Microsoft SMB-klienten visar också det beteende som beskrivs i exempel 1.
Kommentar
Det finns vanligtvis två representationer för "NULL" i SMB: Ett domännamn med noll längd och ett domännamn med en byte som består av frågetecknet (?). SMB-servern fångar frågetecknet och översätter det till NULL innan det skickas till den lokala säkerhetsmyndigheten (LSA).
Felsökning
Ett bra tips för att felsöka problem med nätverksåtkomst är att aktivera granskning genom att göra följande.
Windows-domänkontrollanter
- Starta Active Directory - användare och datorer från Administrationsverktyg på en domänkontrollant.
- Högerklicka på OU för domänkontrollanter och klicka sedan på Egenskaper.
- Dubbelklicka på Standardprincip för domänkontrollant på fliken grupprincip.
- Klicka på Datorinställningar i principredigeraren, klicka på Windows-inställningar, klicka på Säkerhetsinställningar, klicka på Konfiguration av avancerad granskningsprincip och klicka sedan på Kontoinloggning.
- Välj alternativet Verifiering av granskningsautentiseringsuppgifter och alternativet Fel.
Domäninställningar för Windows 2000
- Starta Active Directory - användare och datorer från Administrationsverktyg på en domänkontrollant.
- Högerklicka på domännamnet och klicka sedan på Egenskaper.
- Dubbelklicka på Standarddomänprincip på fliken grupprincip.
- Klicka på Datorinställningar i principredigeraren, klicka på Windows-inställningar, klicka på Säkerhetsinställningar, klicka på Konfiguration av avancerad granskningsprincip och klicka sedan på Kontoinloggning.
- Välj alternativet Verifiering av granskningsautentiseringsuppgifter och alternativet Fel.
Lokala inställningar för Windows 2000-servrar och -medlemmar
- Starta Lokal säkerhetsprincip från administrationsverktygen.
- Öppna Konfiguration av avancerad granskningsprincip – lokalt grupprincip objekt.
- Välj Kontoinloggning och sedan alternativet Verifiering av granskningsautentiseringsuppgifter och alternativet Fel.
- När en nätverksanvändare ansluter till servern via fjärranslutning loggas nu en spårningslogg i Loggboken. Om du vill se dessa händelser i Loggboken klickar du på Säkerhet på loggmenyn.
Mer information om förtroenderelationer, direktautentisering, användarbehörigheter och domäninloggningar finns i "Teknisk översikt över Windows Server 2003 Security Services".