Algoritmi di convalida dell'accesso alla rete ed esempi per Windows Server 2003, Windows XP e Windows 2000

Questo articolo illustra come viene osservata la convalida dell'account di Windows durante l'accesso alla rete tramite il protocollo NTLM.

Numero KB originale: 103390

Riepilogo

Di seguito è riportato un algoritmo semplificato che spiega come viene osservata la convalida dell'account di Windows durante l'accesso alla rete tramite il protocollo NTLM. Usa l'accesso tramite il protocollo SMB (Server Message Block) come esempio, ma si applica a tutte le altre applicazioni server che supportano l'autenticazione NTLM. Questa discussione non riguarda i lavori interni di questo processo. Con queste informazioni, è possibile prevedere il comportamento di accesso alla rete Windows in condizioni deterministiche.

Quando Kerberos viene usato per autenticare l'utente e ottenere l'accesso alle risorse del server, il processo è diverso da quello che fa NTLM.

Tenere presente che il database locale è il database di dominio e l'unico database nei controller di dominio. Ma in altri server e tutti i computer, il database locale è diverso dal controller di dominio.

Informazioni generali

Quando due computer basati su Windows Server 2003, basati su Windows XP o Windows 2000 comunicano tramite una rete, usano un protocollo di alto livello denominato SMB (Server Message Block). I comandi SMB sono incorporati nei protocolli di trasporto, ad esempio NetBIOS Enhanced User Interface (NetBEUI) o TCP/IP. Ad esempio, quando un computer client esegue un comando, viene inviato un NET USE frame "Installazione sessione SMB e X".

In Windows, lo SMB "Configurazione sessione" include l'account utente, una funzione hash della password crittografata e del dominio di accesso. Un controller di dominio esaminerà tutte queste informazioni per determinare se il client dispone delle autorizzazioni per completare il comando NET USE.

Algoritmi

Un computer client Windows invia il comando seguente a un server:

NET USE x: \\server\share

Il computer client Windows invia un SMB "Configurazione sessione" che contiene il dominio di accesso, l'account utente e la password.

Il server esamina il nome di dominio o il nome computer specificato da SMB. Se il nome è il nome del server, viene eseguito l'algoritmo seguente:

    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

Se il dominio specificato in SMB è uno che considera attendibile il server, viene eseguito l'algoritmo seguente:

    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.

Se non è configurato un canale sicuro, viene eseguito l'algoritmo seguente:

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

Importante

I casi seguenti illustrano gli scenari in cui il client usa un dominio utente diverso da quello di cui il server ha o sa. Si è verificato un problema con questa mancata corrispondenza quando viene negoziato il protocollo di autenticazione NTLMv2. NTLM nella versione 2 usa un salt della password e il dominio utente viene usato in questo salt dal client.

Quando il server ottiene le informazioni e trova l'utente nel database locale, il server usa il nome del database LOCAL per calcolare il salt e l'hash. Pertanto, se il "dominio di origine" inviato dal client è vuoto o è un dominio sconosciuto, il salt e pertanto l'hash della password non corrisponderà. In questi casi, il tentativo di autenticazione avrà esito negativo con un errore "nome utente sconosciuto o password non valida" (STATUS_LOGON_FAILURE). L'evento di controllo per il tentativo segnala il simbolo "password non corretta", STATUS_WRONG_PASSWORD.

Evento di esempio:

Nome log: Sicurezza
Origine: Microsoft-Windows-Security-Auditing
ID evento: 4625
Categoria attività: Accesso
Livello: Informazioni
Parole chiave: Errore di controllo
Computer: server-computer1
Descrizione:
L'accesso a un account non è riuscito.

Oggetto:

ID di sicurezza: SID NULL
Nome account: -
Dominio account: -
ID accesso: 0x0

Tipo di accesso: 3

Account per il quale l'accesso non è riuscito:

ID di sicurezza: SID NULL
Nome account: ntadmin
Dominio account: client-computer1

Informazioni sugli errori:

Motivo errore: nome utente sconosciuto o password non valida.
Stato: 0xc000006d
Stato secondario: 0xc000006a
...

Informazioni dettagliate sull'autenticazione:

Processo di accesso: NtLmSsp
Pacchetto di autenticazione: NTLM
Servizi transitati: -
Nome pacchetto (solo NTLM): -
Lunghezza chiave: 0

Per evitare questo scenario, è necessario includere il nome di dominio corretto in modo esplicito nel client. Per un mapping di unità in uno scenario di gruppo di lavoro, si tratta dei seguenti:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *

Se il dominio specificato in SMB è sconosciuto dal server, ad esempio se un dominio è stato specificato ma non è stato riconosciuto dal server come dominio attendibile o come controller di dominio, viene eseguito l'algoritmo seguente:

    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

Se il dominio specificato in SMB è NULL, ovvero non viene specificato alcun dominio, viene eseguito l'algoritmo seguente:

    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.
           Not for Windows 2000 and later versions:
            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
                The user will be prompted for a password.
                Regardless of what password is entered, the user will receive
                    "Error 5: Access has been denied."
            End
            If  the account is global (the only option for Active Directory)
                The password that was specified in the SMB 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  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

Note

  1. Se l'account guest è disabilitato e l'utente non dispone di un account, il server richiederà comunque una password. Anche se nessuna password soddisfa i requisiti, il server richiederà comunque una password come misura di sicurezza. Questa misura di sicurezza garantisce che un utente non autorizzato non possa indicare la differenza tra un caso in cui esiste un account e quando l'account non esiste. All'utente verrà sempre richiesta una password indipendentemente dal fatto che l'account esista.

  2. A questo punto, le informazioni seguenti vengono restituite dal dominio attendibile nella risposta: DOMAIN SID, User ID, Global Groups Memberships, Logon Time, Logoff Time, KickOffTime, Full Name, Password LastSet, Password Can Change Flag, Password Must Change Flag, User Script, Profile Path, Profile Directory, And Bad Password Count.

  3. Se non viene trovato alcun account nel dominio attendibile, il sistema operativo deve usare l'account guest locale per garantire un comportamento coerente per l'autenticazione sul server.

  4. Per altre informazioni su come limitare la ricerca e l'accesso dei nomi isolati nei domini attendibili usando le voci LsaLookupRestrictIsolatedNameLevel e NeverPing del Registro di sistema, vedere Il processo di Lsass.exe potrebbe smettere di rispondere se si dispone di molti trust esterni in un controller di dominio Di Active Directory.

    • Gli account guest nei domini attendibili non saranno mai disponibili.

    • Il processo interno effettivo è più complesso degli algoritmi descritti qui.

    • Questi algoritmi non illustrano i meccanismi effettivi dell'autenticazione pass-through. Per altre informazioni, vedere Autenticazione utente NTLM in Windows

    • Questi algoritmi non illustrano il processo di crittografia delle password usato in Windows Server 2003, Windows XP e Windows 2000. Un oggetto binario di grandi dimensioni (BLOB) derivato da un hash delle password unidirezionale viene inviato come parte della richiesta di autenticazione. Il contenuto di questo BLOB dipenderà dal protocollo di autenticazione scelto per l'accesso.

    • Questo articolo non illustra le operazioni interne del modulo di autenticazione Microsoft.

    • Questi algoritmi presuppongono che l'account guest, se abilitato, non abbia password. Per impostazione predefinita, l'account guest non dispone di una password in Windows Server 2003, Windows XP e Windows 2000. Se viene specificata una password dell'account guest, la password utente inviata in SMB deve corrispondere alla password dell'account guest.

Esempi

Di seguito sono riportati esempi di questi algoritmi in azione.

Esempio 1

Si è connessi al computer usando lo stesso nome account e la stessa password presenti nel database dell'account di dominio SCRATCH-DOMAIN. Quando si esegue il NET USE \\SCRATCH comando per il controller di dominio per il dominio SCRATCH-DOMAIN, il comando viene completato correttamente. Quando si esegue il NET USE \\NET comando per il controller di dominio che considera attendibile il dominio SCRATCH-DOMAIN, viene visualizzato il messaggio di errore seguente:

Si è verificato l'errore di sistema 1326. Errore di accesso: nome utente sconosciuto o password non valida.

L'account \SCRATCH-DOMAIN\USER1 dispone delle autorizzazioni per \\NET.

Nota

Questo esempio presuppone le configurazioni seguenti.

Configurazioni

Computer con un'autorità di sicurezza locale:

-Account di accesso: USER1
-Password: PSW1
-Login Domain: LOCAL1

Controller di dominio Active Directory:

-Nome server: NET</WWITEM>
-Domain: NET-DOMAIN</WWITEM>
-Trust: NET-DOMAIN Trust SCRATCH-DOMAIN (pertanto,
agli account in SCRATCH-DOMAIN possono essere concesse autorizzazioni
in NET- DOMAIN).

Dominio NET:The NET-DOMAIN domain domain:

  • Il database dell'account di dominio per il dominio NET-DOMAIN non contiene un account per USER1.
  • L'account guest è disabilitato.

Windows Server 2003:

-Nome server: SCRATCH
-Domain: SCRATCH-DOMAIN
-Domain Database contiene account: USER1
-Domain Database contiene la password: PSW1

In questo esempio, il computer viene connesso al dominio locale, non al dominio SCRATCH-DOMAIN in cui risiede l'account di dominio del computer.

Esempio 2

Quando si esegue il NET USE x: \\NET\share comando, vengono eseguiti i passaggi seguenti:

  1. Il computer invia quanto segue nello SMB "Session Setup":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Il server \\NET riceve lo SMB ed esamina il nome dell'account.

  3. Il server esamina il database dell'account di dominio locale e non trova una corrispondenza.

  4. Il server esamina quindi il nome di dominio SMB.

  5. Il server non considera attendibile "LOCAL1", quindi il server non controlla i domini attendibili.

  6. Il server controlla quindi l'account guest.

  7. L'account guest è disabilitato in modo che si sia verificato l'errore di sistema 1326. Errore di accesso: nome utente sconosciuto o password non valida". Viene generato il messaggio di errore.

Esempio 3

Quando si esegue il NET USE x: \\SCRATCH\share comando, vengono eseguiti i passaggi seguenti:

  1. Il computer invia quanto segue nello SMB "Session Setup":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Il server \\SCRATCH riceve il SMB ed esamina il nome dell'account.

  3. Il server esamina il database dell'account di dominio locale e trova una corrispondenza.

  4. Il server confronta quindi la password SMB con la password dell'account di dominio.

  5. Le password corrispondono.

Di conseguenza, viene generato il messaggio "Comando completato correttamente". Nell'esempio 2 e nell'esempio 3 la relazione di trust non è disponibile. Se il computer fosse stato connesso al dominio SCRATCH-DOMAIN, il NET USE x: \\NET\share comando avrebbe avuto esito positivo.

La soluzione ideale consiste nell'avere tutti i computer che accedono a un dominio. Per accedere, l'utente deve specificare il dominio, l'account e la password. A questo scopo, tutti i comandi NET USE -type passeranno le informazioni corrette su dominio, account e password. Gli amministratori devono provare a evitare account duplicati in entrambi i computer e in più domini. I computer basati su Windows Server 2003, basati su Windows XP e Windows 2000 consentono di evitare questa configurazione usando trust tra domini e utilizzando membri che possono usare database di dominio.

Soluzione alternativa

In questi casi è possibile usare una soluzione alternativa. Dal computer è possibile eseguire il comando seguente:

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

In questo comando, il comando seguente è true:

  • \\NET = Nome computer del controller di dominio a cui si accede.
  • \SHARE = Nome condivisione.
  • /USER: parametro della riga di comando che consente di specificare il dominio, l'account e la password che devono essere specificati nello SMB "Configurazione sessione".
  • SCRATCH-DOMAIN = Nome di dominio del dominio in cui risiede l'account utente.
  • \USER1 = account per cui eseguire la convalida.
  • PSW1 = password corrispondente all'account nel dominio.

Per altre informazioni su questo comando, digitare quanto segue al prompt dei comandi:

NET USE /?  

Nomi di dominio NULL

Il client Microsoft SMB incluso in Windows Server 2003, Windows XP e Windows 2000 invia nomi di dominio NULL in "SMB installazione sessione [x73]" SMB. Il client Microsoft SMB gestisce il nome di dominio specificando il nome di dominio di accesso e inviando un carattere NULL se il nome di dominio non è specificato nel comando NET USE. Il client Microsoft SMB mostrerà anche il comportamento descritto nell'esempio 1.

Nota

  • Il nome di dominio predefinito è specificato in LANMAN. File INI nella riga "DOMAIN =". Questa operazione può essere sostituita dall'opzione /DOMAIN: con il NET LOGON comando .
  • Esistono in genere due rappresentazioni per "NULL" in SMB: un nome di dominio di lunghezza zero e un nome di dominio a un byte costituito dal carattere punto interrogativo (?). Il server SMB intercetta il punto interrogativo e lo converte in NULL prima di passarlo all'autorità di sicurezza locale .LSA.

Risoluzione dei problemi

Un buon suggerimento per la risoluzione dei problemi di accesso alla rete consiste nell'abilitare il controllo eseguendo le operazioni seguenti.

Windows 2000 e versioni successive dei controller di dominio basati su Windows 2000

  1. Da Strumenti di amministrazione in un controller di dominio avviare Utenti e computer di Active Directory.
  2. Fare clic con il pulsante destro del mouse su Unità organizzativa controller di dominio, quindi scegliere Proprietà.
  3. Nella scheda Criteri di gruppo fare doppio clic su Criteri controller di dominio predefiniti.
  4. Nell'Editor criteri fare clic su Impostazioni computer, su Impostazioni di Windows, su Impostazioni di sicurezza, su Criteri locali e quindi su Criteri di controllo.
  5. Selezionare l'opzione Accesso e Accesso account completata e l'opzione Errore .

Impostazioni di dominio per i server e i membri di Windows 2000

  1. Da Strumenti di amministrazione in un controller di dominio avviare Utenti e computer di Active Directory.
  2. Fare clic con il pulsante destro del mouse sul nome di dominio, quindi scegliere Proprietà.
  3. Nella scheda Criteri di gruppo fare doppio clic su Criteri di dominio predefiniti.
  4. Nell'Editor criteri fare clic su Impostazioni computer, su Impostazioni di Windows, su Impostazioni di sicurezza, su Criteri locali e quindi su Criteri di controllo.
  5. Selezionare l'opzione Accesso e Accesso account completata e l'opzione Errore .

Impostazioni locali per i server e i membri di Windows 2000

  1. In Strumenti di amministrazione avviare i criteri di sicurezza locali.
  2. Aprire Criteri di controllo.
  3. Selezionare l'opzione Accesso e Accesso account completata e l'opzione Errore . A questo punto, ogni volta che un utente di rete accede a questo server in modalità remota, verrà registrato un audit trail Visualizzatore eventi. Per visualizzare questi eventi in Visualizzatore eventi, fare clic su Sicurezza nel menu Log.

Per altre informazioni sulle relazioni di trust, l'autenticazione pass-through, le autorizzazioni utente e gli account di accesso al dominio, vedere la "Panoramica tecnica dei servizi di sicurezza di Windows Server 2003".

Ulteriori informazioni

Fondamentalmente, gli stessi algoritmi di convalida dell'accesso di rete vengono applicati a Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2.

Questi sistemi operativi hanno diverse nuove funzionalità in SMB.

Windows Server 2008

Windows Server 2012