A medida que más organizaciones refuerzan su seguridad frente a los ataques de fuerza bruta, los registros de esos intentos suelen pasar desapercibidos… hasta que se compromete una credencial o se bloquea una cuenta.
Los administradores de IT pueden recurrir a PowerShell para obtener y analizar los registros de eventos de seguridad y así reforzar las defensas de su organización. Esta guía te explica paso a paso cómo detectar ataques de fuerza bruta y crear listas negras con PowerShell.
Configura los registros de eventos de seguridad con PowerShell
Antes de empezar, asegúrate de cumplir con los siguientes requisitos:
📌 Requisitos previos:
- Acceso administrativo a sistemas locales o remotos
- PowerShell 5.1+
- Registro de auditoría de seguridad de Windows habilitado mediante GPO
- Acceso al Registro de Windows para marcar el estado de detección
- Plataforma RMM (por ejemplo, NinjaOne) para desplegar scripts y alertas
- Opcional: reenvío de eventos a un SIEM o a un sistema de registro centralizado
Paso 1: habilita la auditoría de inicios de sesión fallidos mediante directiva de grupo
Lo primero es comprobar que la auditoría está activa en todos los endpoints. Puedes habilitarla mediante directiva de grupo. Una vez activada, se registran tanto los inicios de sesión correctos como los fallidos, con ID de evento como 4625 (inicio de sesión fallido) y 4624 (inicio de sesión correcto).
Para habilitar la auditoría de inicios de sesión fallidos:
- Pulsa Win + R, escribe gpmc.msc y pulsa Intro para abrir la configuración de directiva de grupo.
- Ve a Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Configuración avanzada de la directiva de auditoría > Directivas de auditoría > Inicio y cierre de sesión.
- Modifica el valor de Auditar inicio de sesión: Correcto, Error.
⚠️ Importante: una configuración incorrecta de la auditoría de inicio de sesión puede causar problemas. Tienes más información en la sección Aspectos a tener en cuenta.
Paso 2: analiza los eventos de inicio de sesión fallidos con PowerShell
- Abre PowerShell como administrador.
- Utiliza los siguientes comandos:
- Analizar el ID de evento 4625 de las últimas 24 horas:
$events = Get-WinEvent -FilterHashtable @{LogName = 'Security'Id = 4625StartTime = (Get-Date).AddHours(-24)} | Select-Object TimeCreated, Message
Nota: si no se encuentra ningún evento coincidente, el comando devolverá un conjunto de resultados vacío.
- Extraer los orígenes y los nombres de usuario de los inicios de sesión fallidos:
$failedLogons = $events | ForEach-Object {
if ($_.Message -match "(?s)Account For Which Logon Failed:.*Account Name:\s+(\S+).*Source Network Address:\s+(\S+)") {
[PSCustomObject]@{
Time = $_.TimeCreated
Username = $matches[1]
SourceIP = $matches[2]
}
}
}
- Exportar a CSV:
$failedLogons | Export-Csv "C:\Reports\FailedLogons.csv" -NoTypeInformation
Paso 3: identifica patrones de fuerza bruta según umbrales
Cuando ya puedas analizar los registros de eventos, podrás detectar patrones y aplicar umbrales de fuerza bruta para reforzar tu seguridad. Para hacerlo con PowerShell, aplica los siguientes comandos:
Agrupar y contar por IP de origen o nombre de usuario:
$grouped = $failedLogons | Group-Object SourceIP | Where-Object { $_.Count -ge 10 }$grouped | ForEach-Object {Write-Output "Potential brute-force from $($_.Name) with $($_.Count) attempts"}
Este script analiza los eventos de inicio de sesión fallidos de un único equipo, los agrupa por IP de origen e informa de cualquier IP con 10 o más intentos fallidos como posible ataque de fuerza bruta.
Nota: el umbral de esta línea es ajustable. Puedes cambiar el número que aparece después de Count -ge para definir cuántos intentos fallidos activan una alerta de fuerza bruta.
💡 Consejo: también puedes agrupar por nombre de usuario para detectar ataques de fuerza bruta dirigidos a una cuenta concreta:
$groupedUsers = $failedLogons | Group-Object Username | Where-Object { $_.Count -ge 10 }
Los umbrales se pueden ajustar según tu tolerancia al riesgo (por ejemplo, 5 o más en 10 minutos).
Paso 4: escribe la detección en el Registro y en registros accesibles desde CMD
El paso 4 consiste en conectar los eventos analizados con el RMM y con registros accesibles desde CMD para ganar visibilidad y facilitar la remediación. Con las siguientes claves puedes activar alertas en NinjaOne o deshabilitar el acceso a la red de forma automática:
Etiquetado en el Registro para el RMM o para inspección manual:
New-Item -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -ForceSet-ItemProperty -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Name "LastBruteForceDetected" -Value (Get-Date).ToString("u")Set-ItemProperty -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Name "OffendingIP" -Value $grouped[0].Name
Comprobación del estado de detección desde CMD:
reg query HKLM\SOFTWARE\Org\SecurityAlerts
⚠️ Aspectos a tener en cuenta
| Riesgos | Posibles consecuencias | Cómo revertirlo |
| Configuración incorrecta de la GPO para los eventos de auditoría de inicio de sesión | PowerShell no devuelve ningún registro al intentar analizar los eventos. | Revisa la configuración de la GPO para los eventos de auditoría de inicio de sesión y comprueba que el registro de seguridad no se esté sobrescribiendo por tener un tamaño demasiado pequeño. |
Siguientes pasos: bloquear la IP o generar alertas
El bloqueo de direcciones IP, las alertas y otras medidas de mitigación suelen aplicarse una vez analizados los registros de eventos de seguridad. En esta sección verás qué acciones puedes ejecutar con PowerShell cuando se producen varios intentos de inicio de sesión fallidos o se detecta un ataque de fuerza bruta.
Escribir el evento en el registro de eventos:
Write-EventLog -LogName Application -Source "BruteForceDetector" -EventId 1010 -EntryType Warning -Message "Brute-force detected from $($grouped[0].Name)"
Nota: si el origen del evento no existe, puedes crearlo una sola vez (como administrador) con:
New-EventLog -LogName Application -Source ‘BruteForceDetector’
Además, los administradores de IT pueden optar por bloquear la IP en local (si el origen es externo):
New-NetFirewallRule -DisplayName "Block Brute IP" -Direction Inbound -RemoteAddress $grouped[0].Name -Action Block
💡 Nota: documenta en tu RMM todos los bloqueos de IP y las políticas de limpieza para mantener la coherencia en todos tus dispositivos.
Otros aspectos a considerar al aplicar la detección de ataques de fuerza bruta y las listas negras con PowerShell
Ataques locales frente a ataques por RDP
Los registros de intentos de fuerza bruta tienen un aspecto distinto según el origen. Los intentos de fuerza bruta a través de Remote Desktop Protocol (RDP) suelen mostrar una dirección IP externa en el campo Dirección de red de origen, mientras que un ataque de fuerza bruta local solo muestra 127.0.0.1. Revisar el tipo de inicio de sesión puede aportar más contexto.
Controladores de dominio
En entornos de Active Directory (AD), los intentos de inicio de sesión fallidos se registran normalmente en los controladores de dominio (DC), no solo en la estación de trabajo donde se intentó iniciar sesión. Lo recomendable es ejecutar los scripts de PowerShell de forma centralizada o mediante reenvío de eventos.
Falsos positivos
No todos los fallos repetidos de inicio de sesión provienen de ataques de fuerza bruta. Las cuentas de servicio o las herramientas de sincronización pueden generar inicios de sesión fallidos de vez en cuando. Para no perder eficiencia, excluye las cuentas seguras conocidas de las reglas de detección de fuerza bruta (puedes hacerlo añadiendo una lista blanca en tu script para que esas cuentas se omitan automáticamente)
Integraciones con SIEM
En las organizaciones que cuentan con un sistema de gestión de eventos e información de seguridad (SIEM), integrar los datos de detección de fuerza bruta mejora notablemente la visibilidad. Si es posible, envía los datos a un recolector central de registros para detectar ataques en todo tu entorno.
Solución de problemas habituales
Las reglas de firewall no se aplican
Si tu script intenta bloquear una IP sospechosa con una regla de firewall de PowerShell y no funciona, el problema puede estar en los perfiles del firewall o en los permisos del script. Los firewalls de Windows tienen perfiles independientes (Dominio, Privado, Público) y la regla debe aplicarse al correcto. Además, las directivas de ejecución de PowerShell o la falta de privilegios pueden impedir que el comando se ejecute. Ejecuta siempre el script con permisos administrativos y comprueba que el firewall del sistema esté activo y bien configurado.
Las entradas del Registro no se actualizan
Escribir los resultados de la detección en el Registro requiere los permisos adecuados, sobre todo cuando se trabaja con HKLM:\SOFTWARE. Si el script lo ejecuta un usuario estándar, las escrituras en el Registro fallarán de forma silenciosa o devolverán un error de acceso. Para evitarlo, asegúrate de que el script se ejecute en contexto de administrador o SYSTEM, algo que puedes imponer al desplegarlo con herramientas como NinjaOne. También conviene comprobar que la clave del Registro existe y que no está restringida por una directiva de grupo o por el software de seguridad de endpoints.
Mejora la detección de fuerza bruta con los servicios de NinjaOne
Con NinjaOne, los administradores de IT y los MSP pueden aplicar una detección de fuerza bruta escalable e integrar la respuesta a incidentes mediante:
- El despliegue de scripts de detección de PowerShell en dispositivos o grupos de clientes
- La monitorización de valores del Registro o de archivos de salida para marcar detecciones
- La activación de flujos de remediación automatizados (alertas, bloqueo de IP, notificaciones a usuarios)
- La generación de informes multicliente con los intentos de fuerza bruta y las IP de origen
- Alertas ante detecciones repetidas o cuentas atacadas
Usa PowerShell para obtener el registro de eventos de seguridad
Usar PowerShell para analizar los registros de eventos de seguridad en busca de intentos de fuerza bruta da a los MSP un método potente y escalable para detectar y responder a los ataques contra credenciales. Esta guía ofrece a los administradores de IT instrucciones paso a paso y ayuda para resolver los problemas más habituales.
Temas relacionados:
- Cómo leer los registros de eventos de Windows: apagado y reinicio
- Cómo borrar el historial de protección de Seguridad de Windows en Windows 11
- Entender los logs de Linux: visión general con ejemplos
- ¿Qué es un ataque de fuerza bruta?
- Detectar y prevenir ataques de fuerza bruta con PowerShell
Guía de inicio rápido
PowerShell y detección de fuerza bruta en NinjaOne
NinjaOne incluye un script nativo diseñado específicamente para ayudarte a detectar intentos de inicio de sesión por fuerza bruta. Se trata de una herramienta basada en condiciones que facilita la identificación de posibles amenazas de seguridad relacionadas con los inicios de sesión.
Enfoque recomendado:
1. Usa el script integrado «Check for Brute Force login attempts» de la biblioteca de scripts de NinjaOne.
2. Para un análisis más avanzado, puedes crear un script personalizado de PowerShell que:
– Busque en los registros de eventos de seguridad (ID de evento 4625 para inicios de sesión fallidos)
– Haga seguimiento de los inicios de sesión fallidos en un periodo concreto
– Establezca un umbral para posibles ataques de fuerza bruta
Ejemplo de lógica en PowerShell:
powershell
$failedAttempts = Get-WinEvent -FilterHashtable @{
LogName = ‘Security’
ID = 4625 # Failed Login Attempts
} | Where-Object { $_.TimeCreated -gt (Get-Date).AddHours(-1) }
$uniqueIPs = $failedAttempts | Group-Object { $_.Properties[19].Value } |
Where-Object { $_.Count -gt 10 } # Adjust threshold as needed
if ($uniqueIPs) {
# Alert or take action for potential brute force
Write-Output “Potential Brute Force Detected”
}
Buenas prácticas:
– Configura los umbrales de alerta según las políticas de seguridad concretas de tu organización
– Intégralo con los mecanismos de alerta de NinjaOne
– Revisa y ajusta los parámetros de detección periódicamente

