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

Questo articolo illustra il funzionamento della convalida dell'account Windows durante l'accesso alla rete tramite il protocollo NTLM.

Si applica a: Windows 10: tutte le edizioni, Windows Server 2012 R2
Numero KB originale: 103390

Riepilogo

Di seguito è riportato un algoritmo semplificato che illustra il funzionamento della convalida dell'account Windows durante l'accesso alla rete tramite il protocollo NTLM. Viene usato 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 illustra i meccanismi interni di questo processo. Con queste informazioni, è possibile prevedere il comportamento di accesso alla rete Windows in condizioni deterministiche.

Quando si usa Kerberos per autenticare l'utente e ottenere l'accesso alle risorse del server, il processo è diverso da quello di NTLM.

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

Informazioni complementari

Quando due computer basati su Windows Server 2003, basati su Windows XP o Windows 2000 comunicano in 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 NET USE comando, viene inviato un frame "SMB Session Setup and X".

In Windows, il 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 del 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 nell'SMB è considerato attendibile dal 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 un canale sicuro non è configurato, 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 dispone o è a conoscenza. 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 quindi l'hash della password non corrisponderanno. 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 segnalerà "password non corretta", simbolo STATUS_WRONG_PASSWORD.

Un 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:
Un account non è riuscito ad accedere.

Oggetto:

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

Tipo di accesso: 3

Account per cui l'accesso non è riuscito:

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

Informazioni sugli errori:

Motivo dell'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, questo sarebbe il seguente:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *

Se il dominio specificato nell'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 ha 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 o meno.

  2. A questo punto, vengono restituite le informazioni seguenti dal dominio attendibile nella risposta: SID di dominio, ID utente, appartenenze a gruppi globali, ora di accesso, ora di disconnessione, KickOffTime, nome completo, lastset password, flag di modifica password, flag di modifica della password, script utente, percorso del profilo, home directory e conteggio password non valido.

  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 di nomi isolati nei domini attendibili usando le voci del Registro di sistema LsaLookupRestrictIsolatedNameLevel e NeverPing, vedere Il processo di Lsass.exe potrebbe smettere di rispondere se sono presenti molti trust esterni in un controller di dominio 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 BLOB (Binary Large Object) derivato da un hash di 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 il funzionamento interno del modulo di autenticazione Microsoft.

    • Questi algoritmi presuppongono che l'account guest, se abilitato, non disponga di password. Per impostazione predefinita, l'account guest non ha 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 alcuni esempi di questi algoritmi in azione.

Esempio 1

L'accesso al computer viene eseguito 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:

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 le autorizzazioni
in NET- DOMAIN).

Il dominio NET-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 contains account: USER1
-Il database di dominio 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, si verificano i passaggi seguenti:

  1. Il computer invia quanto segue nell'SMB "Configurazione sessione":

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

  3. Il server esamina il database dell'account di dominio locale e non trova alcuna 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 un messaggio di errore.

Esempio 3

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

  1. Il computer invia quanto segue nell'SMB "Configurazione sessione":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. Il server \\SCRATCH riceve l'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". Negli esempi 2 e 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. Dopo questa operazione, tutti i comandi di tipo NET USE passeranno le informazioni corrette su dominio, account e password. Gli amministratori devono cercare di evitare account duplicati sia in computer che in più domini. I computer basati su Windows Server 2003, Windows XP e Windows 2000 consentono di evitare questa configurazione usando trust tra domini e 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 seguente è true:

  • \\NET = Nome computer del controller di dominio a cui si accede.
  • \SHARE = Nome della condivisione.
  • /USER: parametro della riga di comando che consente di specificare il dominio, l'account e la password da specificare nell'SMB "Configurazione sessione".
  • SCRATCH-DOMAIN = Nome di dominio del dominio in cui risiede l'account utente.
  • \USER1 = account da convalidare.
  • PSW1 = password che corrisponde 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 nell'SMB "Configurazione sessione SMB [x73]". 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 viene specificato nel file LANMAN.INI nella riga "DOMAIN =". Questa operazione può essere sottoposta a override 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 rileva 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 e quindi scegliere Proprietà.
  3. Nella scheda Criteri di gruppo fare doppio clic su Criteri controller di dominio predefiniti.
  4. Nella 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 completato e l'opzione Errore .

Impostazioni di dominio per server e 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 e quindi scegliere Proprietà.
  3. Nella scheda Criteri di gruppo fare doppio clic su Criteri di dominio predefiniti.
  4. Nella 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 completato e l'opzione Errore .

Impostazioni locali per server e membri di Windows 2000

  1. In Strumenti di amministrazione avviare Criteri di sicurezza locali.
  2. Aprire Criteri di controllo.
  3. Selezionare l'opzione Accesso e Accesso account completato e l'opzione Errore . A questo punto, ogni volta che un utente di rete accede a questo server in remoto, verrà eseguito l'accesso a 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 "Panoramica tecnica dei servizi di sicurezza di Windows Server 2003".

Ulteriori informazioni

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

Il sistema operativo include diverse nuove funzionalità in SMB.

Windows Server 2008

Windows Server 2012