🔍 Monitorización de logins Windows con PowerShell: detecta intrusiones antes de que sea tarde
hace 4 meses

🔍 Monitorización de logins Windows con PowerShell: detecta intrusiones antes de que sea tarde
El tiempo medio que un atacante permanece dentro de un sistema Windows comprometido sin ser detectado se mide en meses, no en horas, y la causa siempre es la misma: el registro de seguridad de Windows está activo pero nadie lo mira. La monitorización de logins Windows es la capa defensiva que convierte ese registro en una alarma activa.
En esta redacción técnica de ciberseguridad documentamos cómo implementar esta vigilancia con un único script de PowerShell que automatiza el análisis de los eventos 4624, 4625, 4672 y 4740 mediante tres tareas programadas. Estas tareas detectan fuerza bruta, password spraying, Pass-the-Hash y logins fuera de horario sin instalar herramientas externas. Según el informe Mandiant M-Trends sobre tiempo de permanencia de atacantes, la mediana de detección sin monitorización activa asciende a semanas o meses.
Encuentra la documentación completa, mapping a MITRE ATT&CK, integración con SIEM y Sysmon en nuestra central técnica de Windows seguro.
auditpol /set /subcategory:"Logon" /success:enable /failure:enable y analiza cuatro eventos clave: 4625 (login fallido), 4624 (login exitoso), 4672 (privilegios especiales) y 4740 (cuenta bloqueada). Un script con 3 tareas programadas automatiza la monitorización de logins Windows dejando constancia en un CSV histórico que detecta campañas lentas repartidas en semanas.💡 Resumen rápido
🔍 Monitorización de logins Windows: detecta intrusos con PowerShell
Sin esta vigilancia, un atacante con credenciales válidas puede pasar meses dentro del sistema sin dejar rastro visible.
- ✅ 4 eventos clave: 4624, 4625, 4672 y 4740
- ✅ 5 ataques detectables: fuerza bruta, password spraying, credential stuffing, escalación y movimiento lateral
- ✅ Script con 3 tareas programadas: inicio, logon y cada hora
- ✅ CSV histórico para detectar campañas lentas repartidas en semanas
- ✅ Solo lectura: no modifica cuentas, firewall ni servicios
- ✅ Instalación en un solo comando desde PowerShell
📅 2026 · 🕐 9 minutos de lectura

📌 ¿Qué es la monitorización de logins Windows?
La monitorización de logins Windows consiste en activar la política de auditoría y analizar de forma continua los eventos que el sistema registra cada vez que un usuario intenta autenticarse. Windows escribe esta información en el log Security, accesible desde PowerShell con Get-WinEvent.
- ✔ Detecta fuerza bruta y password spraying contra cuentas locales o de dominio
- ✔ Identifica accesos exitosos en horarios anómalos
- ✔ Registra escalaciones de privilegios mediante el evento 4672
- ✔ Captura cuentas bloqueadas (4740) tras superar el umbral de intentos
- ✔ Convierte análisis puntual en serie histórica con CSV
- ✔ Sienta la base para integración con SIEM (Splunk, Elastic, Wazuh, Sentinel)
🔢 Los cuatro eventos clave
| Event ID | Significado | Qué indica un volumen anómalo | MITRE |
|---|---|---|---|
| 4624 | Login exitoso | Login en horario inhabitual o IP desconocida | T1078 |
| 4625 | Login fallido | Decenas de fallos seguidos = fuerza bruta | T1110 |
| 4672 | Privilegios especiales asignados | Cuenta normal con derechos sensibles = escalación | T1078/T1068 |
| 4740 | Cuenta bloqueada | Política de bloqueo activada | T1110 |
🔐 Logon Types: qué significa cada tipo en el evento 4624
| Type | Nombre | Cuándo aparece | Riesgo |
|---|---|---|---|
| 2 | Interactive | Login en consola física | 🟡 Acceso físico no autorizado |
| 3 | Network | SMB, recurso compartido | 🔴 Movimiento lateral, Pass-the-Hash |
| 4 | Batch | Tareas programadas con credenciales | 🟠 Persistencia (T1053) |
| 5 | Service | Inicio de servicios | 🟠 Servicios maliciosos (T1543.003) |
| 7 | Unlock | Desbloqueo de sesión | 🟡 Acceso físico tras ausencia |
| 8 | NetworkCleartext | Credenciales en claro (IIS Basic Auth) | 🔴 Credenciales expuestas |
| 10 | RemoteInteractive | RDP, Terminal Services | 🔴 RDP brute force |
| 11 | CachedInteractive | Login con credenciales cacheadas | 🟡 Pass-the-Hash en cache |
🚨 5 ataques que detecta la monitorización de logins Windows
| Ataque | Patrón en el log | Ventana | MITRE |
|---|---|---|---|
| Fuerza bruta | Decenas de 4625 desde la misma IP en minutos | Inmediata | T1110.001 |
| Password spraying | Pocos 4625 contra muchos usuarios distintos | Hora a día | T1110.003 |
| Credential stuffing | 4624 exitoso desde IP nueva sin 4625 previos | Inmediata | T1078.004 |
| Escalación de privilegios | 4672 en cuenta sin derechos especiales habituales | Inmediata | T1068 |
| Movimiento lateral | 4624 con LogonType 3 entre equipos sin justificación | Día a semana | T1021 |

⚙️ Script completo de monitorización de logins Windows con 3 tareas programadas
C:\Logs\monitor-logins.log y CSV en C:\Logs\monitor-logins-historico.csv. Recomendamos ampliar el log Security a 200 MB antes: wevtutil sl Security /ms:209715200📅 Las 3 tareas programadas
| Tarea | Disparador | Frecuencia | Propósito |
|---|---|---|---|
Monitor-Logins-Inicio | Al iniciar Windows | Cada arranque | Verifica que la auditoría sigue activa tras reinicio o actualización |
Monitor-Logins-Logon | Al iniciar sesión | Cada login | Analiza eventos inmediatamente tras el logon |
Monitor-Logins-Horaria | Cada hora | 24 veces/día | Vigilancia continua; detecta campañas lentas |
📥 Cómo instalar el script — un solo comando
Amplía primero el log Security a 200 MB y luego pega el comando de instalación en PowerShell como administrador:
wevtutil sl Security /ms:209715200
⚙️ Pega este comando en PowerShell como administrador:
👉 Pulsa Windows → escribe PowerShell → clic derecho → Ejecutar como administrador
Invoke-WebRequest -Uri "https://seguridadenmipc.com/wp-content/uploads/2026/06/Monitor-Logins.txt" -OutFile "$HOME\monitor-logins.ps1" -UseBasicParsing; Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; & "$HOME\monitor-logins.ps1"
⚠️ Problemas conocidos y soluciones
Start-Transcript captura toda la salida al log. Verifica siempre con: Get-Content C:\Logs\monitor-logins.log -Tail 30auditpol /set /category:* /success:enable /failure:enable↩️ Script de reversión (elimina las 3 tareas)
Si necesitas detener la monitorización de logins Windows, ejecuta este script. Elimina primero las 3 tareas para que no se reactiven en el siguiente disparador.
# ============================================================
# Revertir monitorizacion de logins Windows
# ============================================================
$tareas = @("Monitor-Logins-Inicio", "Monitor-Logins-Logon", "Monitor-Logins-Horaria")
foreach ($t in $tareas) {
if (Get-ScheduledTask -TaskName $t -ErrorAction SilentlyContinue) {
Unregister-ScheduledTask -TaskName $t -Confirm:$false
Write-Host "[OK] Tarea $t eliminada." -ForegroundColor Green
}
}
# Auditoria mantenida activa por seguridad.
# Para desactivarla descomenta:
# auditpol /set /subcategory:"Logon" /success:disable /failure:disable | Out-Null
# auditpol /set /subcategory:"Special Logon" /success:disable /failure:disable | Out-Null
# auditpol /set /subcategory:"Account Lockout" /success:disable /failure:disable | Out-Null
Write-Host "[OK] Tareas eliminadas. Auditoria mantenida activa." -ForegroundColor Green
Write-Host " Logs en C:\Logs\monitor-logins.log" -ForegroundColor Cyan🔎 Cómo comprobar que la monitorización de logins Windows está activa
💡 Comandos de verificación (PowerShell como administrador):
Paso 1:
wevtutil sl Security /ms:209715200Paso 2:
Invoke-WebRequest -Uri "https://seguridadenmipc.com/wp-content/uploads/2026/06/Monitor-Logins.txt" -OutFile "$HOME\monitor-logins.ps1" -UseBasicParsing; Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; & "$HOME\monitor-logins.ps1"Después comprueba el log:
Get-Content C:\Logs\monitor-logins.log -Tail 30Las 3 tareas deben estar en Ready con LastTaskResult = 0. Si el CSV muestra AlertaFuerzaBruta = True, investiga inmediatamente.
✅ Checklist post-instalación:
- ☑ 3 tareas en estado Ready en taskschd.msc
- ☑
auditpol /get /subcategory:"Logon"muestra Success and Failure - ☑ Log Security con capacidad ≥ 200 MB
- ☑ Log en
C:\Logs\monitor-logins.logsin errores críticos - ☑ CSV en
C:\Logs\monitor-logins-historico.csvcon la primera fila - ☑ Revisas el CSV semanalmente
🚨 Protocolo de respuesta ante alerta
Si el CSV muestra AlertaFuerzaBruta = True o AlertaSpraying = True:
- ☑ Identifica la IP:
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} -MaxEvents 50 | Select TimeCreated, Message - ☑ Si IP externa: bloquea en firewall:
New-NetFirewallRule -DisplayName "Block IP" -Direction Inbound -RemoteAddress IP -Action Block - ☑ Si IP interna: aísla el equipo y comprueba si está comprometido
- ☑ Cambia la contraseña de la cuenta atacada desde un equipo limpio
- ☑ Comprueba si hay 4624 exitosos posteriores desde la misma IP
- ☑ Exporta evidencias:
wevtutil epl Security C:\Backup\security-$(Get-Date -f yyyyMMdd).evtx - ☑ Refuerza política de bloqueo:
net accounts /lockoutthreshold:5 /lockoutduration:30
⚠️ Riesgos y efectos del script
| Función | ¿Afectada? | Detalle |
|---|---|---|
| Inicio de sesión local | 🟢 No | No toca cuentas ni contraseñas |
| Inicio de Windows | 🟢 No | La tarea se ejecuta en background tras el arranque |
| Banca online y web | 🟢 No | No toca DNS, hosts ni la pila de red |
| Política de auditoría | 🟡 Sí (positivo) | Se activan tres subcategorías; más eventos en el log |
| Tamaño del log Security | 🟡 Aumenta | Ampliar a 200 MB con wevtutil antes de ejecutar |
| Carga de CPU (3 tareas) | 🟡 Mínima | Menos de 5 segundos por ejecución; menos de 2 min/día |
🛠️ Integración de la monitorización de logins Windows con SIEM y herramientas avanzadas
| Plataforma SIEM | Tipo | Coste | Ideal para |
|---|---|---|---|
| Microsoft Sentinel | Cloud (Azure) | 💰 Pago por consumo | Entornos Microsoft 365 / Azure AD |
| Splunk Enterprise Security | On-prem / Cloud | 💰💰 Comercial | Grandes empresas |
| Elastic Stack (ELK) | Open source + Enterprise | 🟢 Free / 💰 Paid | Equipos técnicos |
| Wazuh | Open source HIDS+SIEM | 🟢 100% gratis | Pymes y autoalojamiento |
| Graylog Open | Open source | 🟢 Free / 💰 Enterprise | Centralización de logs |
🛠️ Herramientas complementarias
- 🔬 Sysmon – Telemetría detallada: procesos, red y registro. Complemento esencial al log Security
- 📊 Chainsaw – Análisis rápido de .evtx con reglas Sigma preconfiguradas
- 🔍 DeepBlueCLI – PowerShell de SANS para análisis forense del log Security
- 📋 Hayabusa – Threat hunting sobre logs .evtx con reglas Sigma
- 📡 Windows Event Forwarding (WEF) – Centralización nativa sin agentes adicionales
- 🔐 Sigma Rules – Reglas de detección traducibles a cualquier SIEM
🆚 Sistema sin monitorización de logins Windows vs con monitorización activa
| Característica | Sin monitorización | Con monitorización |
|---|---|---|
| Política de auditoría | 🔴 Parcialmente activa | 🟢 Logon, Special Logon y Account Lockout activas |
| Detección de fuerza bruta | 🔴 Ninguna | 🟢 Alerta automática al superar 20 fallos en 24h |
| Detección de password spraying | 🔴 Ninguna | 🟢 Alerta al detectar 5+ cuentas distintas con fallos |
| Logins en horario anómalo | 🔴 Sin distinción | 🟢 Marcados entre 00:00 y 06:00 |
| Historia para análisis | 🔴 Solo el tamaño del log | 🟢 CSV histórico ilimitado |
| Dwell time del atacante | 🔴 Semanas a meses | 🟢 Horas a días |
| Persistencia tras actualizaciones | 🔴 auditpol puede resetearse | 🟢 3 tareas reactivan la auditoría automáticamente |
🏁 Conclusión
La diferencia entre un equipo que detecta a un atacante en 24 horas y otro que tarda meses no está en el antivirus ni en el firewall: está en si alguien ha implementado la monitorización de logins Windows o no. Activar tres subcategorías con auditpol, ampliar el log a 200 MB y dejar tres tareas programadas vigilando los cuatro Event IDs críticos cuesta diez minutos la primera vez y cero a partir de la segunda.
🔐 Resumen de acciones recomendadas
- ✅ Amplía el log Security a 200 MB:
wevtutil sl Security /ms:209715200 - ✅ Ejecuta el comando de instalación en PowerShell como administrador
- ✅ Verifica con
Get-Content C:\Logs\monitor-logins.log -Tail 30 - ✅ Confirma las 3 tareas con
Get-ScheduledTask -TaskName "Monitor-Logins-*" - ✅ Revisa el CSV histórico cada semana
- ✅ Investiga inmediatamente cualquier alerta de fuerza bruta o spraying
Comparte este artículo con quien administre Windows sin haber mirado nunca el log Security. La monitorización de logins Windows pasiva no protege; la activa marca la diferencia.
❓ Preguntas frecuentes
¿Qué diferencia hay entre 4624 y 4625?
👉 El 4624 registra un login exitoso; el 4625 registra un intento fallido. Ambos son necesarios para correlacionar fuerza bruta (muchos 4625) con compromiso exitoso (un 4624 tras los 4625).
¿Qué es el evento 4672 y por qué es crítico?
👉 Se dispara cuando Windows asigna privilegios especiales (SeDebugPrivilege, SeTakeOwnershipPrivilege) tras un login. Un 4672 inesperado en una cuenta normal es la firma típica de una escalación reciente.
¿Las 3 tareas ralentizan el equipo?
👉 No. Cada ejecución dura menos de 5 segundos en background como SYSTEM. La carga combinada suma menos de 2 minutos de CPU al día.
¿Cómo consulto las tareas programadas?
👉 PowerShell: Get-ScheduledTask -TaskName "Monitor-Logins-*" | Select TaskName, State, LastRunTime, LastTaskResult. GUI: Win+R → taskschd.msc → Biblioteca → Monitor-Logins-*.
¿Qué hago si veo una alerta de fuerza bruta?
👉 Identifica la IP con Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} -MaxEvents 50 | Select TimeCreated, Message. Bloquea si es externa, aísla si es interna, y cambia la contraseña de la cuenta atacada.
¿Este script sustituye a un EDR?
👉 No. Un EDR cubre telemetría de procesos, integridad de memoria y análisis de comportamiento. La monitorización de logins Windows con este script cubre la capa de autenticación, el punto ciego más común. Para un equipo doméstico es suficiente; para una empresa, es complementaria.
¿Cómo envío los eventos a un SIEM?
👉 La forma nativa es Windows Event Forwarding (WEF): ejecuta winrm quickconfig en el cliente y configura la suscripción con wecutil cs. Alternativamente usa agentes como Winlogbeat (Elastic), Wazuh Agent o Splunk Universal Forwarder.
¿Cómo desactivo solo la tarea horaria?
👉 Win+R → taskschd.msc → localiza Monitor-Logins-Horaria → pulsa Deshabilitar. Las otras dos seguirán funcionando. También puedes cambiar el intervalo de 1 hora a 4 o 6 horas editando el desencadenador.
Deja una respuesta