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: 0x0Tipo di accesso: 3
Account per il quale l'accesso non è riuscito:
ID di sicurezza: SID NULL
Nome account: ntadmin
Dominio account: client-computer1Informazioni 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
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.
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.
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.
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:
Il computer invia quanto segue nello SMB "Session Setup":
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Il server \\NET riceve lo SMB ed esamina il nome dell'account.
Il server esamina il database dell'account di dominio locale e non trova una corrispondenza.
Il server esamina quindi il nome di dominio SMB.
Il server non considera attendibile "LOCAL1", quindi il server non controlla i domini attendibili.
Il server controlla quindi l'account guest.
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:
Il computer invia quanto segue nello SMB "Session Setup":
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Il server \\SCRATCH riceve il SMB ed esamina il nome dell'account.
Il server esamina il database dell'account di dominio locale e trova una corrispondenza.
Il server confronta quindi la password SMB con la password dell'account di dominio.
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 ilNET 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
- Da Strumenti di amministrazione in un controller di dominio avviare Utenti e computer di Active Directory.
- Fare clic con il pulsante destro del mouse su Unità organizzativa controller di dominio, quindi scegliere Proprietà.
- Nella scheda Criteri di gruppo fare doppio clic su Criteri controller di dominio predefiniti.
- 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.
- Selezionare l'opzione Accesso e Accesso account completata e l'opzione Errore .
Impostazioni di dominio per i server e i membri di Windows 2000
- Da Strumenti di amministrazione in un controller di dominio avviare Utenti e computer di Active Directory.
- Fare clic con il pulsante destro del mouse sul nome di dominio, quindi scegliere Proprietà.
- Nella scheda Criteri di gruppo fare doppio clic su Criteri di dominio predefiniti.
- 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.
- Selezionare l'opzione Accesso e Accesso account completata e l'opzione Errore .
Impostazioni locali per i server e i membri di Windows 2000
- In Strumenti di amministrazione avviare i criteri di sicurezza locali.
- Aprire Criteri di controllo.
- 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