🔍 Monitorización de logins Windows con PowerShell: detecta intrusiones antes de que sea tarde
hace 3 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. En Seguridad en mi PC documentamos cómo aplicar una monitorización de logins Windows efectiva con un único script de PowerShell que automatiza el análisis de los eventos 4624, 4625, 4672 y 4740 mediante tres tareas programadas que detectan fuerza bruta, password spraying y logins fuera de horario sin instalar herramientas externas. Encuentra la documentación completa en nuestra sección de recursos de protección y endurecimiento Windows.
💡 Resumen rápido
🔍 Monitorización de logins Windows: detecta intrusos con PowerShell
La monitorización de logins Windows analiza el registro de seguridad para detectar accesos no autorizados, fuerza bruta, password spraying y escalación de privilegios. Sin esta vigilancia, un atacante con credenciales válidas puede pasar meses dentro del sistema sin dejar rastro visible.
- ✅ 4 eventos clave de la monitorización de logins Windows: 4624 (login exitoso), 4625 (login fallido), 4672 (privilegios especiales), 4740 (cuenta bloqueada)
- ✅ 5 ataques detectables por la monitorización de logins Windows: fuerza bruta, password spraying, credential stuffing, escalación de privilegios y movimiento lateral
- ✅ Script PowerShell con 3 tareas programadas: vigilancia continua en inicio, logon y cada hora
- ✅ CSV histórico para detectar campañas lentas repartidas en semanas
- ✅ Auditoría completa con auditpol, sin software adicional
- ✅ Reversible y no destructivo: solo lee el registro, no modifica cuentas ni firewall
📅 2026 · 🕐 9 minutos de lectura
La monitorización de logins Windows es la disciplina de leer y correlacionar los eventos del registro de seguridad para identificar quién intenta entrar al sistema, cuándo, desde dónde y con qué éxito. En esta guía aplicarás un script PowerShell de monitorización de logins Windows que activa la auditoría completa, analiza los cuatro eventos críticos y crea tres tareas programadas que vigilan el sistema 24/7 sin intervención manual.
Esta guía de monitorización de logins Windows complementa el hardening de cuentas Windows, que cierra los vectores de entrada antes de que el atacante intente autenticarse. La detección llega cuando la prevención falla: por eso ambas piezas son necesarias y se refuerzan mutuamente.

📌 ¿Qué es la monitorización de logins Windows?
La monitorización de logins Windows consiste en activar la política de auditoría del subsistema de seguridad y analizar de forma continua los eventos que el sistema operativo registra cada vez que un usuario intenta autenticarse. Windows escribe esta información en el log Security, accesible desde el Visor de eventos o desde PowerShell con Get-WinEvent. Cada intento de inicio de sesión, exitoso o fallido, queda asociado a un Event ID concreto que indica qué pasó, desde qué tipo de sesión (local, remota, red), con qué cuenta y en qué momento exacto. Sobre esa serie de Event IDs se construye toda la monitorización de logins Windows que aplicarás en esta guía.
- ✔ La monitorización de logins Windows detecta intentos de fuerza bruta y password spraying contra cuentas locales o de dominio
- ✔ Identifica accesos exitosos en horarios anómalos, indicio típico de credenciales comprometidas
- ✔ Registra escalaciones de privilegios mediante el evento 4672 cuando una cuenta obtiene derechos especiales
- ✔ Captura cuentas bloqueadas (4740) tras superar el umbral de intentos fallidos configurado
- ✔ Convierte un análisis puntual en una serie histórica si los resultados se vuelcan a un CSV
💡 ¿Por qué la monitorización es la pieza que falta en la mayoría de equipos?
El registro de eventos de Windows existe desde Windows NT y es potente, pero llega capado de fábrica. La política de auditoría avanzada está parcialmente desactivada, el tamaño del log Security es de pocos MB y los eventos importantes se sobrescriben en horas. Activar la auditoría completa con auditpol y ampliar el log a 200 MB son dos comandos que tardan diez segundos y que separan detectar un ataque en 24 horas de no detectarlo nunca. La vigilancia que propone esta guía cierra precisamente ese hueco.
🔢 Los cuatro eventos clave de la monitorización de logins Windows
Aunque el log Security puede generar centenares de Event IDs distintos, en la práctica solo cuatro merecen vigilancia diaria. Cada uno cubre una fase concreta del ataque dentro de la monitorización de logins Windows y, en conjunto, dibujan el patrón completo de cualquier compromiso por credenciales.
| Event ID | Significado | Qué indica un volumen anómalo | Técnica MITRE |
|---|---|---|---|
| 4624 | Inicio de sesión exitoso | Login en horario inhabitual o desde IP desconocida, posible credencial robada | T1078 Valid Accounts |
| 4625 | Inicio de sesión fallido | Decenas o cientos de fallos seguidos, fuerza bruta o password spraying | T1110 Brute Force |
| 4672 | Privilegios especiales asignados al iniciar sesión | Cuenta normal que de repente obtiene derechos sensibles, posible escalación | T1078 / T1068 |
| 4740 | Cuenta de usuario bloqueada | Política de bloqueo activándose, alguien superó los intentos máximos | T1110 Brute Force |
🚨 Cinco ataques que detecta la monitorización de logins Windows
Estos son los cinco patrones que toda monitorización de logins Windows bien configurada debe detectar de forma sistemática:
| Ataque | Patrón en el log | Ventana de detección | MITRE |
|---|---|---|---|
| Fuerza bruta | Decenas de 4625 desde la misma IP en pocos minutos | Inmediata | T1110.001 |
| Password spraying | Pocos 4625 contra muchos usuarios distintos en ventanas de minutos a horas | Hora a día | T1110.003 |
| Credential stuffing | 4624 exitoso desde IP nueva sin 4625 previos, indica credencial filtrada en brecha que compromete los 3 niveles de identidad digital | Inmediata si se vigila la IP | T1078.004 |
| Escalación de privilegios | 4672 en cuenta que normalmente no obtiene derechos especiales | Inmediata | T1068 |
| Movimiento lateral | 4624 con LogonType 3 (red) entre equipos sin justificación operativa | Día a semana | T1021 |

⚙️ Script completo de monitorización de logins Windows con 3 tareas programadas
El análisis manual ocasional sirve como inspección puntual, pero el riesgo real de los ataques de credenciales es justamente su persistencia silenciosa: un atacante que prueba 3 contraseñas al día durante un mes nunca dispara los umbrales de un análisis manual ocasional. La monitorización de logins Windows efectiva exige una monitorización de logins Windows automática y continua que correlacione los eventos 4624, 4625, 4672 y 4740 a lo largo del tiempo y deje constancia histórica de cada anomalía.
A continuación encontrarás un script PowerShell completo y unificado (Monitor-Logins.ps1) que automatiza el análisis del registro de seguridad de Windows en un solo paso: activa la política de auditoría con auditpol, analiza los eventos 4625, 4624, 4672 y 4740 de las últimas 24 horas, detecta automáticamente patrones de fuerza bruta y password spraying, marca logins exitosos en horarios anómalos y crea tres tareas programadas que reaplican y vigilan la monitorización de logins Windows en cada arranque del equipo, en cada inicio de sesión y cada hora. Cada ejecución añade una línea al CSV histórico con los contadores del periodo, lo que convierte el análisis puntual en una serie temporal que puedes revisar para detectar campañas lentas de fuerza bruta repartidas a lo largo de semanas.
auditpol y crea tres tareas programadas persistentes en el Programador de tareas. No modifica contraseñas, cuentas, firewall ni servicios del sistema: solo lee el registro de seguridad y registra resúmenes. Es completamente reversible mediante el script de reversión. Genera log en C:\Logs\monitor-logins.log y CSV histórico en C:\Logs\monitor-logins-historico.csv. Lee siempre el código antes de pegarlo en PowerShell.📅 Tareas programadas de la monitorización de logins Windows
| Nombre de la tarea | Disparador | Frecuencia | Propósito |
|---|---|---|---|
Monitor-Logins-Inicio | Al iniciar Windows (-AtStartup) | Cada arranque del equipo | Verifica que la política de auditoría sigue activa tras un reinicio o actualización y deja constancia en el CSV histórico del estado del registro de seguridad nada más arrancar |
Monitor-Logins-Logon | Al iniciar sesión (-AtLogOn) | Cada login (incluye reinicios) | Analiza los eventos 4624 y 4625 inmediatamente después del logon, si alguien estuvo intentando entrar con tu cuenta en las horas previas, lo detecta antes de que termines de ver el escritorio |
Monitor-Logins-Horaria | Cada hora (-RepetitionInterval 1h) | 24 veces al día | Vigilancia continua, detecta fuerza bruta, password spraying y logins fuera de horario en ventanas de una hora; alerta en el CSV en cuanto los contadores superan los umbrales configurados |
SYSTEM con privilegios elevados y en modo oculto (sin ventana visible). El script de monitorización de logins Windows es idempotente: solo activa auditpol si detecta que la política está desactivada. La carga sobre el equipo es mínima, cada ejecución consume unos pocos segundos de CPU. El CSV histórico registra cada ejecución con disparador, contadores de eventos y anomalías detectadas.📥 Pasos para activar la monitorización de logins Windows
- Abre PowerShell como administrador: pulsa Windows, escribe
PowerShell, clic derecho sobre Windows PowerShell → Ejecutar como administrador. - Permite la ejecución de scripts en la sesión actual:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass - Crea la carpeta de scripts del sistema:
New-Item -ItemType Directory -Path "C:\Scripts" -Force - Crea el archivo del script: abre el Bloc de notas, pega el código de la siguiente sección y guárdalo como
Monitor-Logins.ps1enC:\Scripts\(Tipo: Todos los archivos, no .txt). - Ejecuta el script por primera vez desde PowerShell (esto activará la auditoría, hará la primera detección Y creará las tres tareas programadas):
C:\Scripts\Monitor-Logins.ps1 - Verifica que las tres tareas programadas se crearon correctamente:
Get-ScheduledTask -TaskName "Monitor-Logins-*" - Revisa el log y el CSV histórico:
C:\Logs\monitor-logins.logcontiene los resultados detallados yC:\Logs\monitor-logins-historico.csvel resumen de cada ejecución. - Reinicia el equipo: la tarea de inicio se ejecutará automáticamente y comprobarás que el sistema queda monitorizado 24/7.
💻 Script de monitorización de logins Windows (copia y pega)
# ============================================================
# Script: Monitorizacion de logins Windows + 3 tareas programadas
# Autor: seguridadenmipc.com
# Compat: Windows 10 / 11 / Server 2019+
# Uso: Ejecutar como administrador (1a vez)
# Despues se ejecuta solo en inicio, logon y cada hora
# Ruta: C:\Scripts\Monitor-Logins.ps1
# Idempotente: solo activa auditpol si esta desactivado
# ============================================================
# 1. Verificar privilegios de administrador
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "[X] Ejecuta este script como Administrador." -ForegroundColor Red
exit
}
# 2. Preparar log y CSV historico
$logDir = "C:\Logs"
if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir | Out-Null }
$log = "$logDir\monitor-logins.log"
$csv = "$logDir\monitor-logins-historico.csv"
Start-Transcript -Path $log -Append | Out-Null
$disparador = if ($args[0]) { $args[0] } else { "Manual" }
Write-Host "=== Monitorizacion de logins Windows ===" -ForegroundColor Cyan
Write-Host "Fecha: $(Get-Date) | Disparador: $disparador" -ForegroundColor Gray
# 3. Activar politica de auditoria
try {
auditpol /set /subcategory:"Logon" /success:enable /failure:enable | Out-Null
auditpol /set /subcategory:"Special Logon" /success:enable /failure:enable | Out-Null
auditpol /set /subcategory:"Account Lockout" /success:enable /failure:enable | Out-Null
Write-Host "[OK] Politica de auditoria activa." -ForegroundColor Green
} catch { Write-Host "[X] Error en auditpol: $_" -ForegroundColor Red }
# 4. Analizar eventos de las ultimas 24h
$inicio = (Get-Date).AddHours(-24)
$fallidos = @(Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625;StartTime=$inicio} -ErrorAction SilentlyContinue)
$exitosos = @(Get-WinEvent -FilterHashtable @{LogName='Security';Id=4624;StartTime=$inicio} -ErrorAction SilentlyContinue)
$privilegs = @(Get-WinEvent -FilterHashtable @{LogName='Security';Id=4672;StartTime=$inicio} -ErrorAction SilentlyContinue)
$bloqueos = @(Get-WinEvent -FilterHashtable @{LogName='Security';Id=4740;StartTime=$inicio} -ErrorAction SilentlyContinue)
Write-Host "`n--- Resumen ultimas 24h ---" -ForegroundColor Yellow
Write-Host "Logins fallidos (4625): $($fallidos.Count)" -ForegroundColor Gray
Write-Host "Logins exitosos (4624): $($exitosos.Count)" -ForegroundColor Gray
Write-Host "Privilegios espec.(4672): $($privilegs.Count)" -ForegroundColor Gray
Write-Host "Cuentas bloqueadas(4740): $($bloqueos.Count)" -ForegroundColor Gray
# 5. Detectar fuerza bruta (umbral configurable)
$alertaFuerzaBruta = $false
if ($fallidos.Count -gt 20) {
Write-Host "[!] ALERTA: $($fallidos.Count) logins fallidos en 24h, posible fuerza bruta." -ForegroundColor Red
$alertaFuerzaBruta = $true
}
# 6. Detectar password spraying (varios usuarios con pocos fallos)
$alertaSpraying = $false
$usuariosFallidos = $fallidos | ForEach-Object {
($_.Message -split "`n" | Select-String "Account Name" | Select -Last 1).ToString().Trim()
} | Sort-Object -Unique
if ($usuariosFallidos.Count -gt 5 -and $fallidos.Count -lt 50) {
Write-Host "[!] ALERTA: $($usuariosFallidos.Count) cuentas distintas con fallos, posible password spraying." -ForegroundColor Red
$alertaSpraying = $true
}
# 7. Detectar logins exitosos en horario anomalo (00:00-06:00)
$loginsNocturnos = $exitosos | Where-Object { $_.TimeCreated.Hour -lt 6 }
if ($loginsNocturnos.Count -gt 0) {
Write-Host "[!] $($loginsNocturnos.Count) logins exitosos en horario nocturno (00-06h)." -ForegroundColor Yellow
}
# 8. Detectar volumen anomalo de privilegios (4672)
if ($privilegs.Count -gt 100) {
Write-Host "[!] ALERTA: $($privilegs.Count) eventos 4672, posible escalacion de privilegios." -ForegroundColor Red
}
# 9. Anadir resumen al CSV historico
$resumen = [PSCustomObject]@{
Fecha = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
Disparador = $disparador
Fallidos4625 = $fallidos.Count
Exitosos4624 = $exitosos.Count
Privilegios4672 = $privilegs.Count
Bloqueos4740 = $bloqueos.Count
LoginsNocturnos = $loginsNocturnos.Count
AlertaFuerzaBruta = $alertaFuerzaBruta
AlertaSpraying = $alertaSpraying
}
$resumen | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
Write-Host "[OK] Resumen anadido al CSV historico." -ForegroundColor Green
# 10. CREAR LAS 3 TAREAS PROGRAMADAS (solo si no existen)
$scriptPath = "C:\Scripts\Monitor-Logins.ps1"
function Crear-Tarea {
param([string]$Nombre, [string]$Disparador, $Trigger, [string]$Descripcion)
try {
if (-not (Get-ScheduledTask -TaskName $Nombre -ErrorAction SilentlyContinue)) {
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" $Disparador"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
-LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries -StartWhenAvailable `
-ExecutionTimeLimit (New-TimeSpan -Minutes 5)
Register-ScheduledTask -TaskName $Nombre -Action $action -Trigger $Trigger `
-Principal $principal -Settings $settings -Description $Descripcion | Out-Null
Write-Host "[OK] Tarea '$Nombre' creada." -ForegroundColor Green
} else { Write-Host "[i] Tarea '$Nombre' ya existe." -ForegroundColor Cyan }
} catch { Write-Host "[X] Error en $Nombre : $_" -ForegroundColor Red }
}
# 10a. Al iniciar Windows
Crear-Tarea -Nombre "Monitor-Logins-Inicio" -Disparador "Inicio" `
-Trigger (New-ScheduledTaskTrigger -AtStartup) `
-Descripcion "Monitorizacion de logins al arranque - seguridadenmipc.com"
# 10b. Al iniciar sesion
Crear-Tarea -Nombre "Monitor-Logins-Logon" -Disparador "Logon" `
-Trigger (New-ScheduledTaskTrigger -AtLogOn) `
-Descripcion "Monitorizacion de logins al iniciar sesion - seguridadenmipc.com"
# 10c. Cada hora
Crear-Tarea -Nombre "Monitor-Logins-Horaria" -Disparador "Horaria" `
-Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(10) `
-RepetitionInterval (New-TimeSpan -Hours 1)) `
-Descripcion "Monitorizacion de logins cada hora - seguridadenmipc.com"
Write-Host "`n[OK] Monitorizacion activa. Disparador: $disparador" -ForegroundColor Green
Write-Host " Log: $log" -ForegroundColor Gray
Write-Host " CSV: $csv" -ForegroundColor Gray
Stop-Transcript | Out-Null↩️ Script de reversión (elimina las 3 tareas)
Si necesitas detener la monitorización de logins Windows (por ejemplo, para diagnosticar un problema o aplicar una política corporativa distinta), ejecuta este script. Elimina primero las tres tareas programadas, porque si no, la monitorización volverá a activarse en el siguiente disparador.
# ============================================================
# Revertir monitorizacion de logins Windows
# ============================================================
# 1. ELIMINAR PRIMERO las 3 tareas programadas
$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
}
}
# 2. Desactivar politica de auditoria (NO recomendado)
# 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
# NOTA: dejamos la politica de auditoria ACTIVA por defecto.
# Aunque desinstales la monitorizacion, los eventos seguiran registrandose.
Write-Host ""
Write-Host "[OK] Tareas eliminadas. Auditoria mantenida activa por seguridad." -ForegroundColor Green
Write-Host " Logs preservados en C:\Logs\monitor-logins.log" -ForegroundColor Cyan⚠️ Riesgos y efectos reales del script de monitorización de logins Windows
La monitorización de logins Windows tiene un perfil de riesgo muy distinto al del hardening tradicional. A diferencia de los scripts de hardening que modifican política de cuentas o servicios, este script es de solo lectura sobre el sistema. La única intervención activa es la activación de tres subcategorías de auditoría con auditpol y la creación de las tres tareas programadas. No toca contraseñas, ni firewall, ni el registro de Windows fuera del subsistema de auditoría.
| Función del sistema | ¿Se ve afectada? | Detalle técnico |
|---|---|---|
| Inicio de sesión local | 🟢 No | El script no toca cuentas, contraseñas ni provisión de logon |
| Inicio de Windows | 🟢 No | La tarea de inicio se ejecuta en background tras el arranque |
| Reinicio / apagado | 🟢 No | No modifica el subsistema de apagado ni BCD |
| UEFI / arranque seguro | 🟢 No | No afecta BCD, Secure Boot ni particiones EFI |
| Banca online y plataformas web | 🟢 No | El script no toca DNS, hosts, proxy ni la pila de red |
| Política de auditoría | 🟡 Sí (positivo) | Se activan tres subcategorías; el log Security registrará más eventos |
| Tamaño del log Security | 🟡 Aumenta moderadamente | Más eventos = más entradas; recomendable ampliar el log a 200 MB |
| Carga de CPU (3 tareas) | 🟡 Mínima | Cada ejecución < 5 segundos; total < 2 min/día de CPU |
| Espacio en disco (logs y CSV) | 🟡 Mínimo | El CSV crece pocos KB al día; el log de transcript se reescribe en cada ejecución |
wevtutil sl Security /ms:209715200 deja el log en 200 MB, que es el mínimo razonable para conservar al menos una semana de historia en un equipo doméstico.🔎 ¿Cómo verificar que la monitorización de logins Windows está activa?
💡 Comandos de verificación de la monitorización de logins Windows (PowerShell admin)
# Las 3 tareas programadas
Get-ScheduledTask -TaskName "Monitor-Logins-*" | `
Select TaskName, State, LastRunTime, LastTaskResult
# Politica de auditoria activa
auditpol /get /subcategory:"Logon","Special Logon","Account Lockout"
# Ultimos eventos de los 4 IDs
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4624,4625,4672,4740;StartTime=(Get-Date).AddDays(-1)} | `
Select-Object TimeCreated, Id | Group-Object Id | Select Count, Name
# Tamano actual del log Security
wevtutil gl Security | Select-String "maxSize"
# CSV historico (ultimas 30 ejecuciones)
Import-Csv C:\Logs\monitor-logins-historico.csv | Select -Last 30Las tres tareas deben aparecer en estado Ready con LastTaskResult = 0. auditpol debe mostrar "Success and Failure" en las tres subcategorías. Si en el CSV ves filas con AlertaFuerzaBruta = True o AlertaSpraying = True, investiga inmediatamente.
✅ Checklist de verificación de la monitorización de logins Windows
Confirma cada punto tras ejecutar el script de monitorización de logins Windows:
- ☑ Las tres tareas
Monitor-Logins-*aparecen en estado Ready - ☑
auditpol /get /subcategory:"Logon"muestra "Success and Failure" - ☑
auditpol /get /subcategory:"Special Logon"muestra "Success and Failure" - ☑
auditpol /get /subcategory:"Account Lockout"muestra "Success and Failure" - ☑ El log Security tiene capacidad ampliada (
wevtutil gl Security,maxSize≥ 200 MB) - ☑ El log
C:\Logs\monitor-logins.logexiste y registra la ejecución - ☑ El CSV
C:\Logs\monitor-logins-historico.csvcontiene la línea de instalación inicial - ☑ Los contadores 4624, 4625, 4672 y 4740 reflejan actividad reciente del sistema
- ☑ Revisas el CSV semanalmente para detectar campañas lentas no triviales
🧠 Buenas prácticas adicionales para sacarle partido a la monitorización de logins Windows
- 📊 Revisa el CSV histórico semanalmente, el verdadero valor de la monitorización de logins Windows está en detectar tendencias lentas (3 fallos al día durante un mes) que ningún umbral instantáneo dispara
- 🕐 Define horarios "anómalos" para tu caso, el script marca de 00:00 a 06:00; si trabajas de noche, ajusta el bloque del paso 7 a tu ventana real
- 🔁 Correlaciona con el firewall, un 4625 sin entrada correspondiente en el log de conexiones del firewall indica intento local; con entrada, intento remoto
- 📌 Investiga cada evento 4672 fuera de patrón en la monitorización de logins Windows, es la firma de un atacante que acaba de elevar permisos. Si aparece en una cuenta que no usa privilegios habitualmente, asume compromiso hasta demostrar lo contrario; consulta escalación de privilegios en Windows para entender el mecanismo y cerrar la siguiente puerta
- 🚨 Cuentas bloqueadas (4740) no son ruido, son el indicador más fiable de fuerza bruta activa contra una cuenta concreta; si recibes uno, cambia la contraseña y revisa los 4625 anteriores para ver desde dónde venían
- 🔐 Activa 2FA en cuentas online críticas, la monitorización local solo cubre el endpoint Windows; las credenciales que se usan en banca o correo necesitan capa adicional
🆚 Sistema sin monitorización vs con monitorización de logins Windows
La diferencia entre un sistema con la auditoría capada por defecto y uno con monitorización de logins Windows correctamente aplicada se mide en superficie de visibilidad y en tiempo de detección de un atacante:
| Característica | Sin monitorización (configuración por defecto) | Con monitorización de logins Windows |
|---|---|---|
| Política de auditoría | 🔴 Parcialmente activa, eventos críticos no se registran | 🟢 Logon, Special Logon y Account Lockout activas |
| Detección de fuerza bruta | 🔴 Ninguna; los 4625 se sobrescriben en horas | 🟢 Alerta automática al superar 20 fallos en 24h |
| Detección de password spraying | 🔴 Ninguna; los fallos contra cuentas distintas pasan desapercibidos | 🟢 Alerta al detectar 5+ cuentas distintas con fallos |
| Detección de escalación de privilegios | 🔴 Los eventos 4672 quedan en el log sin revisar | 🟢 Alerta al superar 100 eventos 4672 en 24h |
| Logins en horario anómalo | 🔴 Sin distinción horaria; un 4624 nocturno parece normal | 🟢 Marcados específicamente entre 00:00 y 06:00 |
| Historia para análisis a posteriori | 🔴 Limitada al tamaño del log (horas en logs por defecto) | 🟢 CSV histórico ilimitado con resumen por ejecución |
| Persistencia tras actualizaciones | 🔴 Las feature updates pueden resetear auditpol | 🟢 Tres tareas programadas reactivan la auditoría automáticamente |
| Dwell time típico de un atacante | 🔴 Semanas a meses | 🟢 Horas a días |
| Recomendado | ❌ | ✅ |
🏁 Conclusión
La monitorización de logins Windows es la pieza menos visible y más decisiva de cualquier defensa razonable de un endpoint. La diferencia entre un equipo que detecta a un atacante en 24 horas y otro que tarda meses en hacerlo no está en el antivirus ni en el firewall, está en si alguien lee el registro de seguridad 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 minutos a partir de la segunda.
Lo más valioso del enfoque del script de monitorización de logins Windows es la persistencia: las tres tareas garantizan que la política de auditoría se mantenga activa pase lo que pase, y el CSV histórico convierte el análisis instantáneo en una serie temporal que detecta campañas lentas que ningún umbral aislado dispararía. Combinada con el hardening de cuentas, la monitorización forma una pareja completa, prevención y detección, las dos mitades que cualquier sistema crítico necesita.
- 🔍 Activa la monitorización de logins Windows hoy mismo, son tres comandos
auditpol - 🔍 Amplía el log Security a 200 MB para tener al menos una semana de historia
- 🔍 Despliega las tres tareas programadas para vigilancia 24/7
- 🔍 Revisa el CSV histórico cada lunes durante diez minutos
- 🔍 Investiga inmediatamente cualquier alerta de fuerza bruta o spraying
- 🔍 Si en la monitorización de logins Windows aparece un 4672 inesperado, asume compromiso y revisa la cadena de eventos completa
Comparte este artículo sobre monitorización de logins Windows con quien administre Windows sin haber mirado nunca el log Security. La monitorización pasiva no protege, la activa marca la diferencia entre detectar y descubrir tarde.
❓ Preguntas frecuentes sobre la monitorización de logins Windows
¿Qué diferencia hay entre 4624 y 4625?
👉 El 4624 registra un inicio de sesión exitoso: alguien acertó la contraseña y entró. El 4625 registra un intento fallido: contraseña incorrecta, cuenta deshabilitada, fuera de horario permitido o cualquier otra causa de rechazo. Vigilar solo uno deja la mitad del cuadro fuera; ambos son necesarios para correlacionar fuerza bruta (muchos 4625) con compromisos exitosos (un 4624 tras los 4625) en cualquier monitorización de logins Windows efectiva del registro de seguridad.
¿Funciona el script de monitorización de logins Windows en Windows 10 y 11?
👉 Sí. auditpol, Get-WinEvent y el módulo ScheduledTasks son herramientas nativas en ambas versiones, y también en Windows Server 2019, 2022 y 2025. El subsistema de auditoría que usa estos Event IDs no ha cambiado entre versiones desde Windows Vista, así que la monitorización de logins Windows que aplica este script funciona idéntica en todas las versiones soportadas.
¿Qué es el evento 4672 y por qué es tan crítico?
👉 El 4672 se dispara cuando, justo después de un inicio de sesión, Windows asigna a esa sesión privilegios especiales como SeDebugPrivilege, SeTakeOwnershipPrivilege o SeImpersonatePrivilege. Estos privilegios son los que un atacante necesita para volcar memoria del proceso LSASS, suplantar tokens o reasignar permisos del sistema, así que un 4672 inesperado en una cuenta que no debería tener esos derechos es la firma típica de una escalación reciente y una de las alertas más graves del sistema de auditoría.
¿Las 3 tareas de la monitorización de logins Windows ralentizan el equipo?
👉 No de forma perceptible. Cada ejecución dura menos de 5 segundos en background como SYSTEM, modo oculto. La carga combinada (inicio + logon + 24 ejecuciones horarias) suma menos de 2 minutos de CPU al día. La parte más exigente es la consulta a Get-WinEvent, que se completa en milisegundos incluso con logs grandes.
¿Qué hago si veo una alerta de fuerza bruta?
👉 Identifica el origen: Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} -MaxEvents 50 | Select TimeCreated, Message mostrará desde qué IP y contra qué cuenta. Si es una IP externa, bloquéala en el firewall. Si es interna, comprueba si el equipo de origen está comprometido. En cualquier caso: cambia la contraseña de la cuenta atacada, revisa si hay 4624 exitosos de la misma IP y considera reforzar la política de bloqueo de cuentas.
¿La monitorización de logins Windows sustituye a un EDR comercial?
👉 No. Un EDR (CrowdStrike, SentinelOne, Defender for Endpoint) cubre mucho más: telemetría de procesos, integridad de memoria, análisis de comportamiento basado en machine learning. Lo que cubre este script es la capa de autenticación, que es justo el punto ciego de muchos endpoints domésticos y de oficina pequeña sin EDR. Para un equipo doméstico es suficiente; para una empresa, es complementaria, no sustitutiva.
¿Cuánto historial necesito guardar?
👉 Para un equipo doméstico, 30 días es razonable. Para una pyme, 90 días alineado con muchas regulaciones del sector. El log Security a 200 MB suele cubrir entre 7 y 14 días en un equipo activo; el CSV histórico no tiene límite práctico (un año entero ocupa unos pocos MB). Si necesitas más, exporta el log Security periódicamente con wevtutil epl Security C:\Backup\security-$(date).evtx.
¿Cómo desactivo solo la tarea horaria si me parece excesiva?
👉 Abre el Programador de tareas (Win+R → taskschd.msc), localiza Monitor-Logins-Horaria y pulsa Deshabilitar. Las otras dos (Inicio y Logon) seguirán funcionando. También puedes editar el desencadenador y cambiar el intervalo de 1 hora a 4 horas o el que prefieras: cada hora es el equilibrio recomendado, pero hasta 6 horas sigue siendo razonable para un equipo doméstico.
Deja una respuesta