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: 0x0Tipo di accesso: 3
Account per cui l'accesso non è riuscito:
ID di sicurezza: SID NULL
Nome account: ntadmin
Dominio account: client-computer1Informazioni 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
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.
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.
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 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:
Il computer invia quanto segue nell'SMB "Configurazione sessione":
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Il server \\NET riceve l'SMB e esamina il nome dell'account.
Il server esamina il database dell'account di dominio locale e non trova alcuna 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 un messaggio di errore.
Esempio 3
Quando si esegue il NET USE x: \\SCRATCH\share
comando, si verificano i passaggi seguenti:
Il computer invia quanto segue nell'SMB "Configurazione sessione":
- account = "USER1"
- password = "PSW1"
- domain = "LOCAL1"
Il server \\SCRATCH riceve l'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". 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 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 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
- 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 e quindi scegliere Proprietà.
- Nella scheda Criteri di gruppo fare doppio clic su Criteri controller di dominio predefiniti.
- 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.
- Selezionare l'opzione Accesso e Accesso account completato e l'opzione Errore .
Impostazioni di dominio per server e 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 e quindi scegliere Proprietà.
- Nella scheda Criteri di gruppo fare doppio clic su Criteri di dominio predefiniti.
- 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.
- Selezionare l'opzione Accesso e Accesso account completato e l'opzione Errore .
Impostazioni locali per server e membri di Windows 2000
- In Strumenti di amministrazione avviare Criteri di sicurezza locali.
- Aprire Criteri di controllo.
- 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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per