Valideringsalgoritmer för nätverksåtkomst och exempel för Windows

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: 0x0

Inloggningstyp: 3

Konto för vilket inloggningen misslyckades:

Säkerhets-ID: NULL SID
Kontonamn: ntadmin
Kontodomän: client-computer1

Information 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

  1. 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.

  2. 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.

  3. 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.

  4. 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:

  1. Datorn skickar ut följande i "Sessionsinstallation" SMB:

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. \\NET-servern tar emot SMB och tittade på kontonamnet.

  3. Servern undersöker sin lokala domänkontodatabas och hittar ingen matchning.

  4. Servern undersöker sedan SMB-domännamnet.

  5. Servern litar inte på "LOCAL1", så servern kontrollerar inte sina betrodda domäner.

  6. Servern kontrollerar sedan sitt gästkonto.

  7. 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:

  1. Datorn skickar ut följande i "Sessionsinstallation" SMB:

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. \\CONTOSO-servern tar emot SMB och undersöker kontonamnet.

  3. Servern undersöker sin lokala domänkontodatabas och hittar en matchning.

  4. Servern jämför sedan SMB-lösenordet med domänkontots lösenord.

  5. 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

  1. Starta Active Directory - användare och datorer från Administrationsverktyg på en domänkontrollant.
  2. Högerklicka på OU för domänkontrollanter och klicka sedan på Egenskaper.
  3. Dubbelklicka på Standardprincip för domänkontrollant på fliken grupprincip.
  4. 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.
  5. Välj alternativet Verifiering av granskningsautentiseringsuppgifter och alternativet Fel.

Domäninställningar för Windows 2000

  1. Starta Active Directory - användare och datorer från Administrationsverktyg på en domänkontrollant.
  2. Högerklicka på domännamnet och klicka sedan på Egenskaper.
  3. Dubbelklicka på Standarddomänprincip på fliken grupprincip.
  4. 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.
  5. Välj alternativet Verifiering av granskningsautentiseringsuppgifter och alternativet Fel.

Lokala inställningar för Windows 2000-servrar och -medlemmar

  1. Starta Lokal säkerhetsprincip från administrationsverktygen.
  2. Öppna Konfiguration av avancerad granskningsprincip – lokalt grupprincip objekt.
  3. Välj Kontoinloggning och sedan alternativet Verifiering av granskningsautentiseringsuppgifter och alternativet Fel.
  4. 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äkerhetloggmenyn.

Mer information om förtroenderelationer, direktautentisering, användarbehörigheter och domäninloggningar finns i "Teknisk översikt över Windows Server 2003 Security Services".