🔍 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

Table of Contents

🔍 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

💡 Definición rápida Monitorización de logins Windows: Práctica de analizar de forma sistemática los eventos de inicio de sesión registrados por el subsistema de auditoría de Windows para detectar accesos no autorizados, ataques de fuerza bruta y escalación de privilegios. La monitorización de logins Windows se implementa con la herramienta nativa auditpol y consultas PowerShell sobre el log Security, sin necesidad de soluciones EDR de pago.

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.


Monitorización de logins Windows con PowerShell: detecta intrusiones antes de que sea tarde

📌 ¿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 IDSignificadoQué indica un volumen anómaloTécnica MITRE
4624Inicio de sesión exitosoLogin en horario inhabitual o desde IP desconocida, posible credencial robadaT1078 Valid Accounts
4625Inicio de sesión fallidoDecenas o cientos de fallos seguidos, fuerza bruta o password sprayingT1110 Brute Force
4672Privilegios especiales asignados al iniciar sesiónCuenta normal que de repente obtiene derechos sensibles, posible escalaciónT1078 / T1068
4740Cuenta de usuario bloqueadaPolítica de bloqueo activándose, alguien superó los intentos máximosT1110 Brute Force
Referencias oficiales: El comportamiento exacto de cada Event ID está documentado por Microsoft en la página oficial del evento 4624 en Microsoft Learn, y las técnicas de ataque correspondientes (fuerza bruta, password spraying, credential stuffing) están catalogadas en la ficha T1110 Brute Force del marco MITRE ATT&CK, la referencia mundial sobre tácticas y técnicas adversarias usada por todos los equipos blue team.
Cómo se correlacionan los cuatro eventos: en una monitorización de logins Windows bien afinada, un patrón típico de fuerza bruta produce decenas de eventos 4625 seguidos, culmina en uno o varios 4740 cuando la política de bloqueo se activa, y a veces termina con un 4624 si el atacante adivina la contraseña. Si tras ese 4624 aparece un 4672, significa que la cuenta comprometida tenía privilegios elevados y el atacante ya tiene control administrativo.

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

🚨 Dato crítico: los informes anuales de Mandiant y Verizon DBIR coinciden en que la mediana del tiempo de permanencia (dwell time) de un atacante en sistemas sin monitorización activa supera holgadamente las semanas. La razón es simple, una vez dentro con credenciales válidas, todo lo que hace queda registrado como tráfico legítimo del usuario suplantado, y sin vigilancia activa nadie revisa ese registro a tiempo.

Estos son los cinco patrones que toda monitorización de logins Windows bien configurada debe detectar de forma sistemática:

AtaquePatrón en el logVentana de detecciónMITRE
Fuerza brutaDecenas de 4625 desde la misma IP en pocos minutosInmediataT1110.001
Password sprayingPocos 4625 contra muchos usuarios distintos en ventanas de minutos a horasHora a díaT1110.003
Credential stuffing4624 exitoso desde IP nueva sin 4625 previos, indica credencial filtrada en brecha que compromete los 3 niveles de identidad digitalInmediata si se vigila la IPT1078.004
Escalación de privilegios4672 en cuenta que normalmente no obtiene derechos especialesInmediataT1068
Movimiento lateral4624 con LogonType 3 (red) entre equipos sin justificación operativaDía a semanaT1021

Script completo Monitor-Logins con 3 tareas programadas

⚙️ 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.

⚠️ Antes de ejecutar: Este script activa la política de auditoría con 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 tareaDisparadorFrecuenciaPropósito
Monitor-Logins-InicioAl iniciar Windows (-AtStartup)Cada arranque del equipoVerifica 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-LogonAl 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-HorariaCada hora (-RepetitionInterval 1h)24 veces al díaVigilancia 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
Cómo funcionan las tareas programadas: Las tres tareas se ejecutan como 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

  1. Abre PowerShell como administrador: pulsa Windows, escribe PowerShell, clic derecho sobre Windows PowerShellEjecutar como administrador.
  2. Permite la ejecución de scripts en la sesión actual:
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  3. Crea la carpeta de scripts del sistema:
    New-Item -ItemType Directory -Path "C:\Scripts" -Force
  4. 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.ps1 en C:\Scripts\ (Tipo: Todos los archivos, no .txt).
  5. 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
  6. Verifica que las tres tareas programadas se crearon correctamente:
    Get-ScheduledTask -TaskName "Monitor-Logins-*"
  7. Revisa el log y el CSV histórico: C:\Logs\monitor-logins.log contiene los resultados detallados y C:\Logs\monitor-logins-historico.csv el resumen de cada ejecución.
  8. 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🟢 NoEl script no toca cuentas, contraseñas ni provisión de logon
Inicio de Windows🟢 NoLa tarea de inicio se ejecuta en background tras el arranque
Reinicio / apagado🟢 NoNo modifica el subsistema de apagado ni BCD
UEFI / arranque seguro🟢 NoNo afecta BCD, Secure Boot ni particiones EFI
Banca online y plataformas web🟢 NoEl 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 moderadamenteMás eventos = más entradas; recomendable ampliar el log a 200 MB
Carga de CPU (3 tareas)🟡 MínimaCada ejecución < 5 segundos; total < 2 min/día de CPU
Espacio en disco (logs y CSV)🟡 MínimoEl CSV crece pocos KB al día; el log de transcript se reescribe en cada ejecución
⚠️ Recomendación: amplía el tamaño del log Security antes de poner en marcha la monitorización de logins Windows. El valor por defecto (20 MB en muchas instalaciones) se llena en horas si la auditoría está completa, y los eventos antiguos se sobrescriben. Comando: 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 30

Las 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.log existe y registra la ejecución
  • ☑ El CSV C:\Logs\monitor-logins-historico.csv contiene 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

La detección sin respuesta no protege. Combina la monitorización de logins Windows con hardening de cuentas (política de bloqueo, contraseñas robustas), acceso remoto seguro (cierra el RDP expuesto), 2FA y vigilancia de filtraciones con Dark Web Monitoring.
  • 📊 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ísticaSin 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.

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