Ejemplos y algoritmos de validación de acceso de red para Windows Server 2003, Windows XP y Windows 2000

En este artículo se explica cómo se observa que la validación de cuentas de Windows funciona durante el acceso a la red mediante el protocolo NTLM.

Se aplica a: Windows 10 (todas las ediciones), Windows Server 2012 R2
Número de KB original: 103390

Resumen

A continuación se muestra un algoritmo simplificado que explica cómo se observa que la validación de cuentas de Windows funciona durante el acceso a la red mediante el protocolo NTLM. Usa el acceso a través del protocolo de bloque de mensajes del servidor (SMB) como ejemplo, pero se aplica a todas las demás aplicaciones de servidor que admiten la autenticación NTLM. Esta discusión no cubre el funcionamiento interno de este proceso. Con esta información, puede predecir el comportamiento de inicio de sesión de red de Windows en condiciones deterministas.

Cuando se usa Kerberos para autenticar al usuario y obtener acceso a los recursos del servidor, el proceso es diferente de lo que hace NTLM.

Recuerde que la base de datos local es la base de datos de dominio y la única base de datos de los controladores de dominio. Pero en otros servidores y todos los equipos, la base de datos local difiere del controlador de dominio.

Información de contexto

Cuando dos equipos basados en Windows Server 2003, windows XP o Windows 2000 se comunican a través de una red, usan un protocolo de alto nivel denominado bloque de mensajes de servidor (SMB). Los comandos SMB se incrustan en los protocolos de transporte, como NetBIOS Enhanced User Interface (NetBEUI) o TCP/IP. Por ejemplo, cuando un equipo cliente realiza un NET USE comando, se envía una trama "SMB Session Setup and X" (Configuración de sesión SMB y X).

En Windows, el SMB "Configuración de sesión" incluye la cuenta de usuario, una función hash de la contraseña cifrada y el dominio de inicio de sesión. Un controlador de dominio examinará toda esta información para determinar si el cliente tiene permisos para completar el comando NET USE.

Algoritmos

Un equipo cliente de Windows envía el siguiente comando a un servidor:

NET USE x: \\server\share

El equipo cliente de Windows envía un SMB "Configuración de sesión" que contiene su dominio de inicio de sesión, cuenta de usuario y contraseña.

El servidor examina el nombre de dominio o nombre de equipo especificado por SMB. Si el nombre es el propio nombre del servidor, se ejecuta el siguiente algoritmo:

    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

Si el dominio especificado en SMB es el en el que confía el servidor, se ejecuta el algoritmo siguiente:

    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.

Si no se configura un canal seguro, se ejecuta el siguiente algoritmo:

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

En los casos siguientes se describen escenarios en los que el cliente usa un dominio de usuario diferente del que el servidor tiene o conoce. Hay un problema con esta discrepancia cuando se negocia el protocolo de autenticación NTLMv2. NTLM en v2 usa una sal de contraseña y el cliente usa el dominio de usuario en esta sal.

Cuando el servidor obtiene la información y encuentra al usuario en la base de datos local, el servidor usa el nombre de la base de datos LOCAL para calcular la sal y el hash. Por lo tanto, si el "dominio de origen" enviado por el cliente está vacío o es un dominio desconocido, la sal y, por tanto, el hash de contraseña no coincidirán. En estos casos, el intento de autenticación producirá un error de "nombre de usuario desconocido o contraseña incorrecta" (STATUS_LOGON_FAILURE). El evento de auditoría del intento notificará "contraseña incorrecta", símbolo STATUS_WRONG_PASSWORD.

Un evento de ejemplo:

Nombre del registro: Seguridad
Origen: Microsoft-Windows-Security-Auditing
Identificador de evento: 4625
Categoría de tarea: Inicio de sesión
Nivel: Información
Palabras clave: Error de auditoría
Equipo: servidor-equipo1
Descripción:
No se pudo iniciar sesión en una cuenta.

Asunto:

Id. de seguridad: SID NULL
Nombre de la cuenta: -
Dominio de la cuenta: -
Identificador de inicio de sesión: 0x0

Tipo de inicio de sesión: 3

Cuenta para la que se produjo un error de inicio de sesión:

Id. de seguridad: SID NULL
Nombre de cuenta: ntadmin
Dominio de cuenta: client-computer1

Información de error:

Motivo del error: nombre de usuario desconocido o contraseña incorrecta.
Estado: 0xc000006d
Subestado: 0xc000006a
...

Información detallada de autenticación:

Proceso de inicio de sesión: NtLmSsp
Paquete de autenticación: NTLM
Servicios transitados: -
Nombre del paquete (solo NTLM): -
Longitud de clave: 0

Para evitar este escenario, debe incluir el nombre de dominio correcto explícitamente en el cliente. Para una asignación de unidades en un escenario de grupo de trabajo, sería lo siguiente:
Net use x: \\server-computer1\data /u:server-computer1\ntadmin *

Si el servidor desconoce el dominio especificado en SMB, por ejemplo, si se especificó un dominio pero el servidor no lo reconoció como un dominio de confianza o su controlador de dominio, se ejecuta el algoritmo siguiente:

    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

Si el dominio especificado en SMB es NULL, es decir, no se especifica ningún dominio, se ejecuta el siguiente algoritmo:

    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

Notas

  1. Si la cuenta de invitado está deshabilitada y el usuario no tiene una cuenta, el servidor seguirá solicitando una contraseña. Aunque ninguna contraseña cumplirá sus requisitos, el servidor seguirá solicitando una contraseña como medida de seguridad. Esta medida de seguridad garantiza que un usuario no autorizado no puede indicar la diferencia entre un caso en el que existe una cuenta y cuando la cuenta no existe. Siempre se le pedirá al usuario una contraseña independientemente de si la cuenta existe.

  2. En este punto, se devuelve la siguiente información desde el dominio de confianza en la respuesta: SID de dominio, Id. de usuario, Pertenencias a grupos globales, Hora de inicio de sesión, Hora de cierre de sesión, KickOffTime, Nombre completo, LastSet de contraseña, Marca de cambio de contraseña, Marca de cambio de contraseña, Script de usuario, Ruta de acceso del perfil, Directorio principal y Recuento de contraseñas incorrectas.

  3. Si no se encuentra ninguna cuenta en el dominio de confianza, el sistema operativo debe usar la cuenta de invitado local para garantizar un comportamiento coherente para la autenticación en el servidor.

  4. Para obtener más información sobre cómo restringir la búsqueda y el inicio de sesión de nombres aislados en dominios de confianza mediante las entradas del Registro LsaLookupRestrictIsolatedNameLevel y NeverPing, vea El proceso de Lsass.exe puede dejar de responder si tiene muchas confianzas externas en un controlador de dominio de Active Directory.

    • Las cuentas de invitado en dominios de confianza nunca estarán disponibles.

    • El proceso interno real es más complejo que los algoritmos que se describen aquí.

    • Estos algoritmos no analizan la mecánica real de la autenticación de paso a través. Para obtener más información, vea Autenticación de usuarios NTLM en Windows.

    • Estos algoritmos no analizan el proceso de cifrado de contraseñas que se usa en Windows Server 2003, Windows XP y Windows 2000. Un objeto binario grande (BLOB) derivado de un hash de contraseña unidireccional se envía como parte de la solicitud de autenticación. El contenido de este BLOB dependerá del protocolo de autenticación elegido para el inicio de sesión.

    • En este artículo no se describe el funcionamiento interno del módulo de autenticación de Microsoft.

    • Estos algoritmos suponen que la cuenta de invitado, cuando está habilitada, no tiene contraseña. De forma predeterminada, la cuenta de invitado no tiene una contraseña en Windows Server 2003, Windows XP y Windows 2000. Si se especifica una contraseña de cuenta de invitado, la contraseña de usuario que se envía en SMB debe coincidir con la contraseña de la cuenta de invitado.

Ejemplos

A continuación se muestran ejemplos de estos algoritmos en acción.

Ejemplo 1

Ha iniciado sesión en el equipo con el mismo nombre de cuenta y contraseña que se encuentra en la base de datos de la cuenta de dominio SCRATCH-DOMAIN. Al ejecutar el NET USE \\SCRATCH comando para el controlador de dominio para el dominio SCRATCH-DOMAIN, el comando se completa correctamente. Al ejecutar el NET USE \\NET comando para el controlador de dominio que confía en el dominio SCRATCH-DOMAIN, recibirá el siguiente mensaje de error:

Error del sistema 1326. Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta.

La cuenta \SCRATCH-DOMAIN\USER1 tiene permisos en \\NET.

Nota:

En este ejemplo se asumen las siguientes configuraciones.

Configuraciones

Equipo que tiene una autoridad de seguridad local:

-Cuenta de inicio de sesión: USER1
-Contraseña: PSW1
-Login Domain: LOCAL1

Controlador de dominio de Active Directory:

-Nombre del servidor: NET</WWITEM>
-Domain: NET-DOMAIN</WWITEM>
-Confianza: NET-DOMAIN Trust SCRATCH-DOMAIN (Por lo tanto,
se pueden conceder permisos a las cuentas de SCRATCH-DOMAIN
en NET- DOMAIN).

El dominio NET-DOMAIN:

  • La base de datos de la cuenta de dominio del dominio NET-DOMAIN no contiene una cuenta para USER1.
  • La cuenta de invitado está deshabilitada.

Windows Server 2003:

-Nombre del servidor: SCRATCH
-Domain: SCRATCH-DOMAIN
-Domain Database contiene la cuenta: USER1
-Domain Database contiene contraseña: PSW1

En este ejemplo, el equipo ha iniciado sesión en su dominio local, no en el dominio SCRATCH-DOMAIN donde reside la cuenta de dominio del equipo.

Ejemplo 2

Al ejecutar el NET USE x: \\NET\share comando, se producen los pasos siguientes:

  1. El equipo envía lo siguiente en el SMB "Configuración de sesión":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. El servidor \\NET recibe el SMB y examina el nombre de la cuenta.

  3. El servidor examina su base de datos de cuenta de dominio local y no encuentra una coincidencia.

  4. A continuación, el servidor examina el nombre de dominio SMB.

  5. El servidor no confía en "LOCAL1", por lo que el servidor no comprueba sus dominios de confianza.

  6. A continuación, el servidor comprueba su cuenta de invitado.

  7. La cuenta de invitado está deshabilitada, por lo que se ha producido el error del sistema 1326. Error de inicio de sesión: nombre de usuario desconocido o contraseña incorrecta". Se genera el mensaje de error.

Ejemplo 3

Al ejecutar el NET USE x: \\SCRATCH\share comando, se producen los pasos siguientes:

  1. El equipo envía lo siguiente en el SMB "Configuración de sesión":

    • account = "USER1"
    • password = "PSW1"
    • domain = "LOCAL1"
  2. El servidor \\SCRATCH recibe el SMB y examina el nombre de la cuenta.

  3. El servidor examina su base de datos de cuenta de dominio local y busca una coincidencia.

  4. A continuación, el servidor compara la contraseña smb con la contraseña de la cuenta de dominio.

  5. Las contraseñas coinciden.

Por lo tanto, se genera el mensaje "El comando se completa correctamente". En el ejemplo 2 y el ejemplo 3, la relación de confianza no está disponible. Si el equipo hubiera iniciado sesión en el dominio SCRATCH-DOMAIN, el NET USE x: \\NET\share comando se habría realizado correctamente.

La solución ideal es hacer que todos los equipos inicien sesión en un dominio. Para iniciar sesión, el usuario debe especificar el dominio, la cuenta y la contraseña. Después de hacerlo, todos los comandos DE NET USE -type pasarán la información correcta de dominio, cuenta y contraseña. Los administradores deben intentar evitar cuentas duplicadas en equipos y varios dominios. Los equipos basados en Windows Server 2003, Windows XP y Windows 2000 ayudan a evitar esta configuración mediante el uso de confianzas entre dominios y miembros que pueden usar bases de datos de dominio.

Solución alternativa

Hay una solución alternativa que se puede usar en estos casos. Desde el equipo, puede ejecutar el siguiente comando:

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

En este comando, el siguiente es true:

  • \\NET = Nombre del equipo al que se accede al controlador de dominio.
  • \SHARE = el nombre del recurso compartido.
  • /USER: parámetro de línea de comandos que permite especificar el dominio, la cuenta y la contraseña que se deben especificar en el SMB "Configuración de sesión".
  • SCRATCH-DOMAIN = Nombre de dominio del dominio donde reside la cuenta de usuario.
  • \USER1 = cuenta con la que se va a validar.
  • PSW1 = contraseña que coincide con la cuenta del dominio.

Para obtener más información sobre este comando, escriba lo siguiente en el símbolo del sistema:

NET USE /?  

Nombres de dominio NULL

El cliente SMB de Microsoft que se incluye en Windows Server 2003, Windows XP y Windows 2000 envía nombres de dominio NULL en smb "Session Setup SMB [x73]". El cliente SMB de Microsoft controla el nombre de dominio especificando el nombre de dominio de inicio de sesión y enviando un carácter NULL si el nombre de dominio no se especifica en el comando NET USE. El cliente SMB de Microsoft también mostrará el comportamiento descrito en el ejemplo 1.

Nota:

  • El nombre de dominio predeterminado se especifica en el archivo LANMAN.INI de la línea "DOMAIN =". El modificador con el /DOMAIN:NET LOGON comando puede invalidar esto.
  • Normalmente hay dos representaciones de "NULL" en SMB: un nombre de dominio de longitud cero y un nombre de dominio de un byte que consta del carácter de signo de interrogación (?). El servidor SMB detecta el signo de interrogación y lo convierte en NULL antes de pasarlo a la entidad de seguridad local (LSA).

Solución de problemas

Una buena sugerencia para solucionar problemas de acceso a la red es habilitar la auditoría haciendo lo siguiente.

Windows 2000 y versiones posteriores de controladores de dominio basados en Windows 2000

  1. En Herramientas administrativas de un controlador de dominio, inicie Usuarios y equipos de Active Directory.
  2. Haga clic con el botón derecho en La unidad organizativa Controladores de dominio y, a continuación, haga clic en Propiedades.
  3. En la pestaña directiva de grupo, haga doble clic en Directiva de controlador de dominio predeterminada.
  4. En la Editor Directiva, haga clic en Configuración del equipo, en Configuración de Windows, en Configuración de seguridad, en Directivas localesy, a continuación, en Directiva de auditoría.
  5. Seleccione la opción Inicio de sesión y Inicio de sesión correcto de cuenta y la opción Error .

Configuración de dominio para servidores y miembros de Windows 2000

  1. En Herramientas administrativas de un controlador de dominio, inicie Usuarios y equipos de Active Directory.
  2. Haga clic con el botón derecho en el nombre de dominio y, a continuación, haga clic en Propiedades.
  3. En la pestaña directiva de grupo, haga doble clic en Directiva de dominio predeterminada.
  4. En la Editor Directiva, haga clic en Configuración del equipo, en Configuración de Windows, en Configuración de seguridad, en Directivas localesy, a continuación, en Directiva de auditoría.
  5. Seleccione la opción Inicio de sesión y Inicio de sesión correcto de cuenta y la opción Error .

Configuración local para servidores y miembros de Windows 2000

  1. En Herramientas administrativas, inicie Directiva de seguridad local.
  2. Abra Directiva de auditoría.
  3. Seleccione la opción Inicio de sesión y Inicio de sesión correcto de cuenta y la opción Error . Ahora, cada vez que un usuario de red acceda a este servidor de forma remota, se iniciará sesión en Visor de eventos una pista de auditoría. Para ver estos eventos en Visor de eventos, haga clic en Seguridad en el menú Registro.

Para obtener más información acerca de las relaciones de confianza, la autenticación de paso a través, los permisos de usuario y los inicios de sesión de dominio, vea la "Información técnica de Los servicios de seguridad de Windows Server 2003".

Más información

Básicamente, los mismos algoritmos de validación de acceso de red se aplican a Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2.

Estos sistemas operativos tienen varias características nuevas en SMB.

Windows Server 2008

Windows Server 2012