Compartir a través de


Algoritmos y ejemplos de validación de acceso de red para Windows

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

Número de KB original: 103390

Resumen

A continuación se muestra un algoritmo simplificado que explica cómo se observa la validación de la cuenta de Windows 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 los trabajos internos de este proceso. Con esta información, puede predecir el comportamiento del inicio de sesión de red de Windows en condiciones deterministas.

Cuando Kerberos se usa 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 en los controladores de dominio. Pero en otros servidores y todos los equipos, la base de datos local difiere del controlador de dominio.

Información adicional

Cuando dos equipos basados en Windows 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 insertan en los protocolos de transporte, como TCP/IP o Conexiones rápidas a Internet UDP (QUIC). Por ejemplo, cuando un equipo cliente realiza un NET USE comando, se envía un marco "Instalación de sesión SMB y X".

En Windows, cuando se usa NTLM, 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 de "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 el nombre de equipo especificado por el 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 el SMB es el que confía el servidor, se ejecuta el siguiente algoritmo:

    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 tiene o conoce el servidor. Hay un problema con esta falta de coincidencia cuando se negocia el protocolo de autenticación NTLMv2. NTLM at 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á. En estos casos, se producirá un error en el intento de autenticación con 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.

Evento de ejemplo:

Nombre de 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.

Tema:

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

Tipo de inicio de sesión: 3

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

Identificador 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
Estado secundario: 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 la clave: 0

Para evitar este problema, 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 el SMB, por ejemplo, si el servidor especificó un dominio pero no lo reconoció el servidor como un dominio de confianza o su controlador de dominio, se ejecuta el siguiente algoritmo:

    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.           
    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 pueda indicar la diferencia entre un caso en el que existe una cuenta y cuando la cuenta no existe. Siempre se pedirá al usuario una contraseña independientemente de si la cuenta existe.

  2. En este momento, se devuelve la siguiente información del dominio de confianza en la respuesta: SID de dominio, Identificador de usuario, Pertenencias a grupos globales, Hora de inicio de sesión, Hora de inicio de sesión, KickOffTime, Nombre completo, LastSet, Contraseña puede cambiar marca, Contraseña debe cambiar marca, Script de usuario, Ruta de acceso de 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, consulte El proceso de Lsass.exe puede dejar de responder si tiene muchas confianzas externas en un controlador de dominio de Active Directory. Además, la revisión está disponible que amplía el registro para identificar las solicitudes de búsqueda de nombres aisladas en Windows Server 2008 SP2.

    • 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 describen la mecánica real de la autenticación de paso a través. Para obtener más información, consulte Autenticación de usuarios NTLM en Windows.
    • Estos algoritmos no describen el proceso de cifrado de contraseñas que se usa en Windows. 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 describen los trabajos internos 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. Si se especifica una contraseña de cuenta de invitado, la contraseña de usuario que se envía en el SMB debe coincidir con esa contraseña de 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 CONTOSO-DOMAIN. Al ejecutar el NET USE \\CONTOSO comando para el controlador de dominio para el dominio CONTOSO-DOMAIN, el comando se completa correctamente. Al ejecutar el NET USE \\NET comando para el controlador de dominio que confía en el dominio CONTOSO-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 \CONTOSO-DOMAIN\USER1 tiene permisos en \\NET.

Nota:

En este ejemplo se presuponen las siguientes configuraciones.

Configurations

Equipo que tiene una entidad de seguridad local:

  • Cuenta de inicio de sesión: USER1
  • Contraseña: PSW1
  • Dominio de inicio de sesión: LOCAL1

Controlador de dominio de Active Directory:

-Nombre del servidor: NET
-Domain: NET-DOMAIN
-Trust: NET-DOMAIN Trust CONTOSO-DOMAIN (Por lo tanto,
se pueden conceder permisos a las cuentas en CONTOSO-DOMAIN
en NET- DOMAIN).

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.

Dominio CONTOSO-DOMAIN:

  • Nombre del servidor: CONTOSO
  • Dominio: CONTOSO-DOMAIN
  • La base de datos de dominio contiene la cuenta: USER1
  • La base de datos de dominio contiene contraseña: PSW1

En este ejemplo, el equipo ha iniciado sesión en su dominio local, no en el dominio CONTOSO-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 ninguna 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 para que se haya producido el error del sistema 1326. Error de inicio de sesión: se genera un nombre de usuario desconocido o una contraseña incorrecta". Se genera el mensaje de error.

Ejemplo 3

Al ejecutar el NET USE x: \\CONTOSO\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 \\CONTOSO 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 "Comando completado 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 CONTOSO-DOMAIN, el NET USE x: \\NET\share comando se habría realizado correctamente.

La solución ideal es 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 USE -type de NET pasarán la información correcta de dominio, cuenta y contraseña. Los administradores deben intentar evitar cuentas duplicadas en equipos y varios dominios. Windows ayuda a evitar esta configuración mediante el uso de confianzas entre dominios y mediante 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:CONTOSO-DOMAIN\USER1 PSW1

En este comando, el siguiente es true:

  • \\NET = Nombre de equipo del controlador de dominio al que se accede.
  • \SHARE = El nombre del recurso compartido.
  • /USER: parámetro de línea de comandos que le permite especificar el dominio, la cuenta y la contraseña que se deben especificar en el SMB "Configuración de sesión".
  • CONTOSO-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 en el 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 envía nombres de dominio NULL en el SMB de instalación de sesión [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:

Normalmente hay dos representaciones para "NULL" en el 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 captura el signo de interrogación y lo traduce en NULL antes de pasarlo a la autoridad 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.

Controladores de dominio de Windows

  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 unidad organizativa Controladores de dominioy, a continuación, haga clic en Propiedades.
  3. En la pestaña Directiva de grupo, haga doble clic en Directiva predeterminada del controlador de dominio.
  4. En el Editor de directivas, haga clic en Configuración del equipo, configuración de Windows, configuración de seguridad, configuración de directiva de auditoría avanzada y, a continuación, haga clic en Inicio de sesión de cuenta.
  5. Seleccione la opción Audit Credential Validation (Auditar validación de credenciales) y la opción Failure (Error).

Configuración de dominio para 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 el Editor de directivas, haga clic en Configuración del equipo, configuración de Windows,configuración de seguridad, configuración de directiva de auditoría avanzada y, a continuación, haga clic en Inicio de sesión de cuenta.
  5. Seleccione la opción Audit Credential Validation (Auditar validación de credenciales) y la opción Failure (Error).

Configuración local para servidores y miembros de Windows 2000

  1. En Herramientas administrativas, inicie la directiva de seguridad local.
  2. Abra Configuración avanzada de directiva de auditoría: objeto de directiva de grupo local.
  3. Seleccione Inicio de sesión de cuenta y, a continuación, la opción Audit Credential Validation (Auditar validación de credenciales) y la opción Failure (Error).
  4. Ahora, siempre que un usuario de red acceda a este servidor de forma remota, se registrará una pista de auditoría en Visor de eventos. Para ver estos eventos en Visor de eventos, haga clic en Seguridad en el menú Registro.

Para obtener más información sobre 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 general técnica de los servicios de seguridad de Windows Server 2003".