Auditar y restringir NTLM en Active Directory
Plan paso a paso para reducir NTLM: auditar con los eventos 8001-8004, corregir las causas, crear una lista de excepciones, retirar NTLMv1 y fijar LmCompatibilityLevel 5.
Cada autenticación NTLM en su dominio es un posible relay, un posible hash que descifrar sin conexión y una credencial que puede reutilizarse sin conocer la contraseña. La firma LDAP y SMB cierran destinos de relay concretos, pero la solución real es dejar de usar NTLM donde Kerberos funciona y rechazarlo donde nada legítimo lo necesita. Microsoft declaró NTLM obsoleto en 2024, y Windows 11 24H2 y Windows Server 2025 ya no incluyen NTLMv1, lo que hace de este el momento adecuado para medir y reducir lo que queda.
Esta guía amplía la breve sección «Restrict NTLM» del pilar de NTLM y protocolos heredados hasta convertirla en un programa completo: activar las configuraciones de auditoría adecuadas, interpretar los eventos 8001 a 8004, corregir las causas comunes, crear una lista de excepciones que se mantenga pequeña y eliminar NTLMv1 definitivamente.
Las directivas Restrict NTLM
Todas las configuraciones Restrict NTLM son opciones de seguridad (Security Options), no plantillas administrativas:
Computer Configuration > Policies > Windows Settings > Security Settings >
Local Policies > Security Options > Network security: Restrict NTLM: ...| Configuración | Se aplica en | Valor de auditoría | Valor de aplicación |
|---|---|---|---|
| Audit NTLM authentication in this domain | Controladores de dominio | Enable all | n/a |
| NTLM authentication in this domain | Controladores de dominio | n/a | Deny all (o una denegación más acotada) |
| Add server exceptions in this domain | Controladores de dominio | n/a | Servidores autorizados a usar NTLM |
| Audit Incoming NTLM Traffic | Servidores miembros y clientes | Enable auditing for all accounts | n/a |
| Incoming NTLM traffic | Servidores miembros y clientes | n/a | Deny all accounts |
| Outgoing NTLM traffic to remote servers | Clientes y servidores | Audit all | Deny all |
| Add remote server exceptions for NTLM authentication | Clientes y servidores | n/a | Servidores con los que el cliente aún puede usar NTLM |
Los eventos se registran en Applications and Services Logs > Microsoft > Windows > NTLM > Operational:
| Evento | Se registra en | Significado |
|---|---|---|
| 8001 | Cliente | NTLM saliente que la directiva de salida bloquearía |
| 8002 | Servidor | NTLM entrante (incluidas las cuentas locales) que la directiva de entrada bloquearía |
| 8003 | Servidor miembro | NTLM entrante con una cuenta de dominio que la directiva de dominio bloquearía |
| 8004 | Controlador de dominio | Autenticación NTLM transferida a este DC: usuario, estación de trabajo y el servidor (nombre del canal seguro) que la solicitó |
Cuando pasa una configuración de auditoría a denegación, el mismo canal registra los eventos de bloqueo correspondientes.
Paso 1: medir el volumen
Active la auditoría en todas partes mediante una GPO que solo contenga valores de auditoría. El modo auditoría no cambia nada funcionalmente.
- En la OU Domain Controllers: Audit NTLM authentication in this domain = Enable all, Audit Incoming NTLM Traffic = Enable auditing for all accounts.
- En todos los demás equipos: Audit Incoming NTLM Traffic = Enable auditing for all accounts, Outgoing NTLM traffic to remote servers = Audit all.
Aumente el tamaño del registro NTLM/Operational (el 8004 es muy verboso en controladores de dominio con mucha carga) y reenvíelo de forma centralizada con Windows Event Forwarding. Recopile también los eventos de seguridad 4776 (validación de credenciales) en los controladores de dominio y 4624 en todas partes: el 4624 registra el campo LmPackageName, que indica si un inicio de sesión usó NTLM V1, NTLM V2 o LM.
Paso 2: localizar primero NTLMv1
Las respuestas NTLMv1 pueden descifrarse rápidamente hasta obtener el hash NT de la cuenta, así que van antes que nada. Búsquelas en controladores de dominio y servidores:
$xpath = "*[System[EventID=4624] and EventData[Data[@Name='AuthenticationPackageName']='NTLM'] and EventData[Data[@Name='LmPackageName']!='NTLM V2']]"
$dcs = (Get-ADDomainController -Filter *).HostName
foreach ($dc in $dcs) {
Get-WinEvent -ComputerName $dc -LogName Security -FilterXPath $xpath -MaxEvents 2000 -ErrorAction SilentlyContinue |
ForEach-Object {
$x = [xml]$_.ToXml(); $d = @{}
$x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[PSCustomObject]@{
DC = $dc; User = "$($d.TargetDomainName)\$($d.TargetUserName)"
Workstation = $d.WorkstationName; IP = $d.IpAddress; Package = $d.LmPackageName
}
}
} | Group-Object Workstation, User, Package | Sort-Object Count -Descending | Select-Object Count, NameFiltre los inicios de sesión anónimos (LmPackageName = -) al revisar. El NTLMv1 real suele proceder de dispositivos no Windows antiguos, sistemas Windows muy antiguos o equipos con una directiva local que fija LmCompatibilityLevel por debajo de 3.
Paso 3: clasificar el NTLM que observa
Resuma los eventos 8004 de los controladores de dominio por el servidor que solicitó la autenticación y la estación de trabajo cliente:
foreach ($dc in $dcs) {
Get-WinEvent -ComputerName $dc -LogName 'Microsoft-Windows-NTLM/Operational' `
-FilterXPath '*[System[EventID=8004]]' -MaxEvents 20000 -ErrorAction SilentlyContinue |
ForEach-Object {
$x = [xml]$_.ToXml(); $d = @{}
$x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[PSCustomObject]@{ Server = $d.SChannelName; User = $d.UserName; Client = $d.WorkstationName }
}
} | Group-Object Server | Sort-Object Count -Descending | Select-Object Count, Name -First 50Los nombres de campo del XML del evento pueden variar ligeramente entre versiones de Windows; revise un evento con $_.ToXml() y ajústelos. Después asigne una causa a cada par servidor/cliente:
- Acceso por dirección IP. Kerberos necesita un SPN, y los clientes no prueban SPN basados en IP de forma predeterminada. Cambie la ruta, la asignación o la configuración de la aplicación para usar el nombre DNS. Cuando una IP sea inevitable, Windows 10 y Server 2016 en adelante pueden usar Kerberos con un SPN de IP registrado en la cuenta de destino y el valor de registro
TryIPSPNhabilitado en el cliente bajoHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters. - SPN ausentes o duplicados, CNAME y nombres de balanceadores de carga. Registre el alias como SPN en la cuenta de servicio (
setspn -S) y usesetspn -Xpara encontrar duplicados que hacen fallar al KDC y provocan que el cliente recurra a NTLM. - Cuentas locales. El uso remoto de cuentas locales siempre es NTLM. Con Windows LAPS implementado, la mayor parte de esto son administradores o herramientas que usan credenciales locales en remoto; páselos a cuentas de dominio del tier adecuado.
- Dispositivos fuera del dominio y de grupo de trabajo, incluidos los appliances. Decida dispositivo por dispositivo: unirlo al dominio, pasarlo a Kerberos (muchas pilas Linux y de appliances lo admiten con un keytab) o aceptarlo como excepción.
- Aplicaciones que llaman explícitamente a NTLM en lugar de a Negotiate. Necesitan una corrección del fabricante o una excepción.
- Acceso entre bosques sin confianza, o a través de una confianza con el enrutamiento de sufijos de nombre roto. Corrija el enrutamiento o acepte una excepción.
Paso 4: aplicar por anillos
Reforzar el NTLM que queda
Antes de bloquear, suba el listón del NTLM que todavía permite. Estas configuraciones pueden aplicarse a todo el dominio una vez eliminado NTLMv1:
Network security: LAN Manager authentication level
= Send NTLMv2 response only. Refuse LM & NTLM (LmCompatibilityLevel = 5)
Network security: Minimum session security for NTLM SSP based (including secure RPC) clients
= Require NTLMv2 session security, Require 128-bit encryption
Network security: Minimum session security for NTLM SSP based (including secure RPC) servers
= Require NTLMv2 session security, Require 128-bit encryption
Network security: Do not store LAN Manager hash value on next password change = EnabledLmCompatibilityLevel se encuentra en HKLM\SYSTEM\CurrentControlSet\Control\Lsa; los dos valores de seguridad mínima de sesión son NTLMMinClientSec y NTLMMinServerSec (537395200 para ambas opciones) bajo Lsa\MSV1_0. Aplique el nivel 5 primero a los controladores de dominio, ya que son los que validan las cuentas de dominio, y después a todo lo demás.
Bloquear NTLM para las identidades y equipos más sensibles
- Añada las cuentas de Tier 0 a Protected Users; sus miembros no pueden autenticarse con NTLM en absoluto.
- Deniegue Outgoing NTLM traffic to remote servers en las estaciones de trabajo de acceso privilegiado, para que las credenciales de administrador nunca salgan de ellas como NTLM.
- Deniegue Incoming NTLM traffic en los servidores de Tier 0 que no muestren NTLM legítimo en los datos de auditoría.
Denegar NTLM en el dominio con excepciones
Cuando el volumen de 8004 se haya reducido a orígenes conocidos y aceptados, establezca NTLM authentication in this domain en los controladores de dominio en un valor de denegación y enumere los servidores restantes en Add server exceptions in this domain (un nombre de servidor por línea, se admiten comodines). Empiece por "Deny for domain accounts to domain servers", que no afecta al NTLM de servidores fuera del dominio, y después endurezca. Cada excepción necesita un responsable y una fecha de revisión; una lista de excepciones que solo crece no es un control.
Verificar
- El volumen de 8004 en los controladores de dominio tiende a cero fuera de los servidores de excepción; los eventos de bloqueo solo aparecen para los orígenes que pretendía bloquear.
- La consulta de NTLMv1 sobre el 4624 del paso 2 no devuelve nada.
- Comprobaciones del registro en una muestra de equipos:
Invoke-Command -ComputerName $dcs -ScriptBlock {
[PSCustomObject]@{
Host = $env:COMPUTERNAME
LmCompat = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa').LmCompatibilityLevel
MinSrvSec = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0').NTLMMinServerSec
}
}- Una prueba con una cuenta de Protected Users contra una ruta con dirección IP debe fallar, mientras que la misma ruta por nombre DNS funciona con Kerberos (
klistmuestra un ticket para el servicio).
Qué se rompe
- LmCompatibilityLevel 5 en los controladores de dominio rompe todo lo que siga enviando respuestas LM o NTLMv1: fotocopiadoras y NAS antiguos, clientes SMB Unix heredados y sistemas con un nivel bajo codificado de forma fija.
- La seguridad mínima de sesión rompe clientes y appliances antiguos que no pueden negociar la seguridad de sesión NTLMv2 o el cifrado de 128 bits.
- Denegar NTLM en el dominio rompe el acceso por IP, la administración remota con cuentas locales, los dispositivos de grupo de trabajo, algunas configuraciones de VPN y Wi-Fi que validan usuarios mediante protocolos basados en NTLM, y las aplicaciones con NTLM codificado de forma fija, salvo que estén en la lista de excepciones.
- Denegar el NTLM saliente en las PAW rompe las herramientas de administración que se conectan a dispositivos por IP o a appliances fuera del dominio; los administradores necesitan una vía separada para ellos.
- Los miembros de Protected Users pierden NTLM por completo, así que cualquier servicio que solo usen mediante NTLM deja de funcionar para ellos.
Lecturas relacionadas: el tema NTLM y protocolos heredados, NTLM relay y pass-the-hash para entender lo que permite la exposición de NTLM, y hardening de Kerberos, porque cada flujo NTLM que elimina se convierte en un flujo Kerberos que debería usar AES.
Preguntas frecuentes
¿Por qué los clientes usan NTLM cuando Kerberos está disponible?
Las razones más comunes son conectarse por dirección IP en lugar de por nombre, un SPN ausente o duplicado, un nombre que se resuelve mediante un CNAME o un balanceador de carga sin SPN correspondiente, cuentas locales, dispositivos de grupo de trabajo o fuera del dominio, acceso entre bosques sin confianza y aplicaciones que llaman directamente al paquete NTLM. Cada causa tiene una corrección distinta, así que clasifique sus eventos 8004 por causa antes de decidir qué entra en la lista de excepciones.
¿Basta con LmCompatibilityLevel 5 en los clientes para deshabilitar NTLMv1?
No. La configuración del cliente controla lo que envía un equipo. La configuración que rechaza las respuestas NTLMv1 y LM es la del servidor que realiza la validación, que para las cuentas de dominio son los controladores de dominio. Establezca el nivel 5 en los controladores de dominio para rechazar NTLMv1 en las cuentas de dominio, y en los servidores miembros para rechazarlo en sus cuentas locales. Lo más sencillo es configurarlo en todas partes mediante una sola GPO.
¿Es realista bloquear NTLM por completo?
Para la mayoría de las organizaciones, no en todo el dominio de una sola vez. Sí es realista bloquear NTLM para las cuentas y sistemas de Tier 0, denegar el NTLM saliente desde las estaciones de trabajo de acceso privilegiado y denegar NTLM en el dominio con una lista de excepciones corta y revisada. Microsoft ha declarado NTLM obsoleto y está añadiendo funciones a Kerberos para cerrar las carencias restantes, así que reducir su uso ahora facilita mucho la desactivación definitiva.
Auditar y restringir NTLM en Active Directory