🔍 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

🔍 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.

📌 Respuesta rápida: Activa la auditoría con 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


Monitorización de logins Windows

📌 ¿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)
⏱️ ¿Qué es el dwell time? El dwell time mide cuánto tarda un equipo defensivo en detectar a un atacante. Los informes de Mandiant M-Trends sitúan la mediana entre 11 y 21 días sin SIEM, pero asciende a meses en endpoints sin monitorización activa. Una correcta monitorización de logins Windows reduce el MTTD de meses a horas.

🔢 Los cuatro eventos clave

Event IDSignificadoQué indica un volumen anómaloMITRE
4624Login exitosoLogin en horario inhabitual o IP desconocidaT1078
4625Login fallidoDecenas de fallos seguidos = fuerza brutaT1110
4672Privilegios especiales asignadosCuenta normal con derechos sensibles = escalaciónT1078/T1068
4740Cuenta bloqueadaPolítica de bloqueo activadaT1110

🔐 Logon Types: qué significa cada tipo en el evento 4624

TypeNombreCuándo apareceRiesgo
2InteractiveLogin en consola física🟡 Acceso físico no autorizado
3NetworkSMB, recurso compartido🔴 Movimiento lateral, Pass-the-Hash
4BatchTareas programadas con credenciales🟠 Persistencia (T1053)
5ServiceInicio de servicios🟠 Servicios maliciosos (T1543.003)
7UnlockDesbloqueo de sesión🟡 Acceso físico tras ausencia
8NetworkCleartextCredenciales en claro (IIS Basic Auth)🔴 Credenciales expuestas
10RemoteInteractiveRDP, Terminal Services🔴 RDP brute force
11CachedInteractiveLogin con credenciales cacheadas🟡 Pass-the-Hash en cache
🚨 Los tres más sospechosos: Type 3 sin justificación = Pass-the-Hash; Type 8 = credenciales en claro; Type 10 desde IP externa = RDP no autorizado.

🚨 5 ataques que detecta la monitorización de logins Windows

AtaquePatrón en el logVentanaMITRE
Fuerza brutaDecenas de 4625 desde la misma IP en minutosInmediataT1110.001
Password sprayingPocos 4625 contra muchos usuarios distintosHora a díaT1110.003
Credential stuffing4624 exitoso desde IP nueva sin 4625 previosInmediataT1078.004
Escalación de privilegios4672 en cuenta sin derechos especiales habitualesInmediataT1068
Movimiento lateral4624 con LogonType 3 entre equipos sin justificaciónDía a semanaT1021

Script Monitor-Logins con 3 tareas programadas

⚙️ Script completo de monitorización de logins Windows con 3 tareas programadas

⚠️ Antes de ejecutar: No modifica contraseñas, cuentas, firewall ni servicios. Solo lee el registro de seguridad. Genera log en 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

TareaDisparadorFrecuenciaPropósito
Monitor-Logins-InicioAl iniciar WindowsCada arranqueVerifica que la auditoría sigue activa tras reinicio o actualización
Monitor-Logins-LogonAl iniciar sesiónCada loginAnaliza eventos inmediatamente tras el logon
Monitor-Logins-HorariaCada hora24 veces/díaVigilancia 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

⚠️ El script no muestra nada en pantalla al ejecutarse. Normal. Start-Transcript captura toda la salida al log. Verifica siempre con: Get-Content C:\Logs\monitor-logins.log -Tail 30
⚠️ Los contadores muestran 0. La auditoría estaba desactivada antes. El script la activa, pero solo registra eventos a partir de ese momento. Espera unas horas y vuelve a ejecutar.
⚠️ Errores 0x00000057 en auditpol. En Windows en español los nombres de las subcategorías difieren ligeramente. No afecta al funcionamiento. Si quieres activar todo sin errores usa: auditpol /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:209715200

Paso 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 30

Las 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.log sin errores críticos
  • ☑ CSV en C:\Logs\monitor-logins-historico.csv con 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🟢 NoNo toca cuentas ni contraseñas
Inicio de Windows🟢 NoLa tarea se ejecuta en background tras el arranque
Banca online y web🟢 NoNo 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🟡 AumentaAmpliar a 200 MB con wevtutil antes de ejecutar
Carga de CPU (3 tareas)🟡 MínimaMenos 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 SIEMTipoCosteIdeal para
Microsoft SentinelCloud (Azure)💰 Pago por consumoEntornos Microsoft 365 / Azure AD
Splunk Enterprise SecurityOn-prem / Cloud💰💰 ComercialGrandes empresas
Elastic Stack (ELK)Open source + Enterprise🟢 Free / 💰 PaidEquipos técnicos
WazuhOpen source HIDS+SIEM🟢 100% gratisPymes y autoalojamiento
Graylog OpenOpen source🟢 Free / 💰 EnterpriseCentralizació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ísticaSin monitorizaciónCon 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.

Autor

Entusiasta de la seguridad informática con años de experiencia en protección de sistemas Windows y defensa contra amenazas digitales. Apasionado por la tecnología y la privacidad, comparto en este blog consejos prácticos, análisis detallados y guías paso a paso para que cualquier usuario pueda fortalecer la seguridad de su PC y su vida digital

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir