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

Encuentra la documentación completa, mapping a MITRE ATT&CK, integración con SIEM y Sysmon para esta vigilancia en nuestra central técnica de Windows seguro.

💡 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: 4624 (login exitoso), 4625 (login fallido), 4672 (privilegios especiales), 4740 (cuenta bloqueada)
  • 5 ataques detectables: 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. 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 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 complementa el compendio técnico de hardening de cuentas Windows con PowerShell, 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, formando el pilar de defense in depth sobre el endpoint.


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, que es la base de cualquier monitorización de logins Windows seria.

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 vigilancia que aplicarás en esta guía.

  • ✔ 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
  • ✔ Sienta la base para integraciones posteriores con SIEM (Splunk, Elastic, Wazuh, Microsoft Sentinel) y SOAR

💡 ¿Por qué la monitorización de logins Windows 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.

⏱️ ¿Qué es el dwell time y por qué importa en la monitorización de logins Windows? El dwell time (tiempo de permanencia) es la métrica que mide cuánto tarda un equipo defensivo en detectar a un atacante una vez que ya está dentro del sistema. Los informes de Mandiant M-Trends y Verizon DBIR sitúan la mediana del dwell time global entre 11 y 21 días en organizaciones sin SIEM, pero asciende a meses en endpoints sin monitorización activa. Esta vigilancia reduce el MTTD (Mean Time to Detect) de meses a horas activando la auditoría correcta y analizando los Event IDs críticos en bucle continuo.

🔢 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 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 vigilancia 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.

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

🔐 ¿Qué son los Logon Types en la monitorización de logins Windows? El Logon Type es un campo del evento 4624 que indica cómo se inició la sesión: localmente, por red, por RDP, por servicio, etc. Es el dato más importante para clasificar un evento de autenticación porque revela el vector de acceso. Un 4624 con Logon Type 10 (RDP) desde una IP externa es muy distinto a un Logon Type 2 (consola local) del mismo usuario: el primero exige investigación inmediata; el segundo es el escenario normal del día a día. Existen 11 tipos definidos por Microsoft.
Logon TypeNombre técnicoCuándo apareceRiesgo si es anómalo
2InteractiveLogin en consola física🟡 Físico: acceso no autorizado al equipo
3NetworkAcceso por SMB, IPC$, recurso compartido🔴 Movimiento lateral, Pass-the-Hash
4BatchTareas programadas con credenciales🟠 Persistencia (T1053)
5ServiceInicio de servicios Windows🟠 Servicios maliciosos (T1543.003)
7UnlockDesbloqueo de sesión existente🟡 Acceso físico tras ausencia
8NetworkCleartextLogin de red con contraseña en claro (IIS Basic Auth)🔴 Credenciales expuestas en red
9NewCredentialsRunAs con credenciales alternativas🟠 Token impersonation
10RemoteInteractiveRDP, Terminal Services🔴 RDP brute force, acceso remoto no autorizado
11CachedInteractiveLogin con credenciales cacheadas (sin DC accesible)🟡 Detección de Pass-the-Hash en cache
12CachedRemoteInteractiveRDP con credenciales cacheadas🔴 RDP offline sospechoso
13CachedUnlockDesbloqueo con credenciales cacheadas🟡 Bypass de cambio reciente de password
🚨 Los tres Logon Types más sospechosos: Type 3 (Network) sin justificación operativa es indicador clásico de Pass-the-Hash y movimiento lateral; Type 8 (NetworkCleartext) revela credenciales transmitidas sin cifrar (IIS Basic Auth, FTP, telnet); Type 10 (RemoteInteractive) desde IP externa señala intento de acceso por RDP que debería estar bloqueado por firewall en cualquier endpoint expuesto a internet.

🚨 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 de logins Windows 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 vigilancia 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 digital con alias por contextoInmediata 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

📊 Eventos secundarios complementarios para monitorización de logins Windows avanzada

  • 📋 Evento 4634 / 4647 – Cierre de sesión (correlacionar con 4624 para identificar sesiones de duración anómala)
  • 📋 Evento 4648 – Inicio de sesión con credenciales explícitas (uso de runas, indicador típico de movimiento lateral)
  • 📋 Evento 4768 – Solicitud de ticket Kerberos TGT (autenticación inicial en dominio AD)
  • 📋 Evento 4769 – Solicitud de ticket de servicio Kerberos TGS (acceso a recursos; clave en detección de Kerberoasting)
  • 📋 Evento 4771 – Pre-autenticación Kerberos fallida (detección de AS-REP Roasting)
  • 📋 Evento 4776 – Validación de credenciales NTLM (uso de protocolo legado, posible Pass-the-Hash)
  • 📋 Evento 4778 / 4779 – Reconexión / desconexión de sesión RDP
  • 📋 Evento 4964 – Grupos especiales asignados a nuevo logon (detección de cuentas privilegiadas)
  • 📋 Evento 5379 – Lectura de credenciales en Credential Manager (Mimikatz signature)
  • 📋 Evento 5140 / 5145 – Acceso a recursos compartidos en red (correlación con Type 3)

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 vigilancia 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, y marca logins exitosos en horarios anómalos.

Además, 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.

📋 Checklist previo a la ejecución de la monitorización de logins Windows

Antes de pegar el script, verifica estos 8 puntos:

  • Versión del sistema operativo: Windows 10, Windows 11 o Windows Server 2019+
  • Privilegios de administrador en la sesión actual
  • Ampliar el log Security a 200 MB: wevtutil sl Security /ms:209715200
  • Activar Audit Subcategory Settings en Group Policy (override de la categoría legacy)
  • Sin GPO corporativas activas que conflictúen con auditpol local
  • Espacio en disco en C:\Logs suficiente (al menos 100 MB para el CSV histórico)
  • Horario "anómalo" definido según tu patrón de uso real (00-06h por defecto)
  • Umbrales personalizados: ajusta los valores 20/5/100 del script a tu volumen normal

📅 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 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 esta vigilancia (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 esta vigilancia. 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:

  • ☑ 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

🚨 Checklist de respuesta ante alerta de fuerza bruta o spraying

Si el CSV muestra AlertaFuerzaBruta = True o AlertaSpraying = True, ejecuta este protocolo:

  • Identifica la IP origen: Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} -MaxEvents 50 | Select TimeCreated, @{N='IP';E={($_.Message -split "Source Network Address:")[1].Split("`n")[0].Trim()}}
  • Identifica la cuenta atacada y los Logon Types implicados
  • Si la IP es externa: bloquéala en el firewall inmediatamente con New-NetFirewallRule -DisplayName "Block IP" -Direction Inbound -RemoteAddress IP_AQUI -Action Block
  • Si la IP es interna: aísla el equipo de origen y revisa si está comprometido
  • Cambia la contraseña de la cuenta atacada desde otro equipo limpio
  • Comprueba si hay 4624 exitosos posteriores desde la misma IP (compromiso confirmado)
  • Si hay 4624 exitoso: revoca todas las sesiones activas, refresca tokens de aplicaciones OAuth, audita cambios recientes
  • Refuerza política de bloqueo: net accounts /lockoutthreshold:5 /lockoutduration:30
  • Considera migrar a passkeys / FIDO2 en cuentas críticas tras el incidente
  • Conserva evidencias: exporta el log Security con wevtutil epl Security C:\Backup\security-$(Get-Date -f yyyyMMdd).evtx
  • Si la cuenta es corporativa: avisa a IT/CISO según procedimiento interno; preserva el dispositivo
  • Denuncia ante Policía / Guardia Civil si ha habido robo económico documentado

🛠️ Integración de la monitorización de logins Windows con SIEM y herramientas avanzadas

📊 ¿Qué es un SIEM y cómo se integra con la monitorización de logins Windows? Un SIEM (Security Information and Event Management) es la plataforma central que recolecta, normaliza y correlaciona eventos de seguridad de múltiples fuentes (endpoints, firewalls, IDS, aplicaciones). Para una pyme o entorno doméstico avanzado, el script PowerShell de este artículo cubre el endpoint individual; en entornos profesionales se complementa con un SIEM que recibe los eventos vía Windows Event Forwarding (WEF) y permite consultas con lenguajes como KQL (Kusto Query Language) en Microsoft Sentinel o SPL en Splunk. La idea base es la misma: los Event IDs 4624/4625/4672/4740 son la materia prima de cualquier detección de credenciales comprometidas, escalada hacia un sistema centralizado.
Plataforma SIEMTipoCosteIdeal para
Microsoft SentinelCloud SIEM (Azure)💰 Pago por consumoEntornos Microsoft 365 / Azure AD
Splunk Enterprise SecurityOn-prem / Cloud💰💰 ComercialGrandes empresas, alta capacidad
Elastic Stack (ELK + Beats)Open source + Enterprise🟢 Free / 💰 Paid tiersEquipos técnicos, personalización
WazuhOpen source HIDS+SIEM🟢 100% gratisPymes y autoalojamiento
Graylog OpenOpen source🟢 Free / 💰 EnterpriseCentralización de logs
IBM QRadarOn-prem / Cloud💰💰 ComercialGrandes empresas, sector regulado
AlienVault OSSIMOpen source🟢 Free / 💰 USM AnywherePymes con presupuesto limitado

🛠️ Herramientas complementarias para análisis del log Security

  • 🔬 Sysmon (System Monitor) – Telemetría detallada de procesos, conexiones de red y modificaciones del registro, complemento esencial al log Security nativo
  • 📊 Chainsaw – Análisis rápido de archivos .evtx con reglas Sigma preconfiguradas para detectar TTPs adversarias
  • 🔍 DeepBlueCLI – PowerShell de SANS para análisis forense del log Security; detecta pass-the-hash, password spraying y obfuscation
  • 📋 Hayabusa – Herramienta moderna de threat hunting sobre logs .evtx con reglas Sigma
  • 📡 Windows Event Forwarding (WEF) – Centralización nativa de eventos en un colector sin agentes adicionales
  • 🦠 EvtxECmd (Eric Zimmerman) – Parser forense de .evtx que produce CSV/JSON listos para SIEM
  • 🔐 Sigma Rules – Estándar de reglas de detección vendor-agnostic, traducibles a Splunk/Elastic/Sentinel
  • 📦 EventLog Explorer – Visor avanzado del log Security con filtros, búsquedas SQL-like y alertas
  • 🌍 LogParser Studio – Análisis SQL sobre logs de Windows (legacy pero potente para investigaciones puntuales)
  • 🦊 Velociraptor – Plataforma de DFIR endpoint que orquesta caza de amenazas con VQL
🔬 ¿Qué es Sysmon y cómo complementa la monitorización de logins Windows? Sysmon (System Monitor) es una herramienta gratuita de la suite Sysinternals de Microsoft que añade capacidades de telemetría avanzada que el log Security nativo no proporciona: hash SHA256 de cada ejecutable, ParentProcessName en cada proceso (clave para detectar Living Off the Land Binaries), conexiones de red por proceso, modificaciones de claves de registro y carga de DLLs. Combinado con esta vigilancia, Sysmon permite responder no solo a "quién entró" sino a "qué ejecutó después de entrar", la clave para detectar la cadena completa de un ataque post-compromiso.

🧠 Buenas prácticas adicionales para sacarle partido a la monitorización de logins Windows

La detección sin respuesta no protege. Combina esta vigilancia 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, 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 los vectores técnicos de escalación de privilegios Windows con UAC bypass 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 la autenticación en dos factores con app TOTP y FIDO2/WebAuthn en cuentas online críticas, esta vigilancia local solo cubre el endpoint; las credenciales que se usan en banca o correo necesitan capa adicional — paso a paso en nuestra referencia técnica de 2FA con app TOTP y FIDO2/WebAuthn
  • 🌐 Si tienes RDP expuesto, sigue la guía técnica completa de acceso remoto Windows seguro con Network Level Authentication para cerrar el puerto 3389 y mitigar la fuente más común de eventos 4625 con Logon Type 10
  • 🕵️ Vigila filtraciones de credenciales con Dark Web Monitoring, si tu contraseña aparece en una brecha, el atacante puede entrar con un 4624 limpio sin disparar nunca un 4625 previo — explicado en nuestro compendio técnico de Dark Web Monitoring para alertas tempranas

🆚 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 esta vigilancia 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 sobre la monitorización de logins Windows

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, y deja la detección en piloto automático.

Lo más valioso del enfoque de este script 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 de logins Windows forma una pareja completa, prevención y detección, las dos mitades que cualquier sistema crítico necesita.

  • 🔍 Actívala 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 aparece un 4672 inesperado en el log Security, asume compromiso y revisa la cadena de eventos completa
  • 🔍 En entornos profesionales, escala a un SIEM (Wazuh gratis, Sentinel/Splunk para empresas) usando Windows Event Forwarding
  • 🔍 Complementa con Sysmon para visibilidad post-logon: procesos, red y registro

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 vigilancia 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 vigilancia que aplica este script funciona idéntica en todas las versiones soportadas.

¿Qué es el evento 4672 y por qué es tan crítico en la monitorización de logins Windows?

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

¿Qué son los Logon Types y cuál es el más sospechoso?

👉 El Logon Type es el campo del evento 4624 que indica cómo se inició la sesión. Existen 11 tipos (2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13).

El más sospechoso depende del contexto: Type 10 (RemoteInteractive/RDP) desde IP externa es alerta máxima en cualquier endpoint no expuesto deliberadamente; Type 3 (Network) sin justificación operativa indica posible Pass-the-Hash o movimiento lateral; Type 8 (NetworkCleartext) revela credenciales transmitidas sin cifrar, casi siempre síntoma de aplicación legacy o ataque de captura.

En equipos domésticos, los Types 2, 7 y 11 son los normales del día a día; cualquier otro merece revisión.

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

¿Cómo envío los eventos de la monitorización de logins Windows a un SIEM centralizado?

👉 La forma nativa es Windows Event Forwarding (WEF), que reenvía eventos seleccionados a un servidor colector sin instalar agentes adicionales. Configuración: en el cliente, ejecuta winrm quickconfig y configura la suscripción al colector con wecutil cs.

Alternativamente, agentes ligeros como Winlogbeat (Elastic Stack), Splunk Universal Forwarder, Wazuh Agent o Microsoft Monitoring Agent (MMA) envían los eventos en tiempo real al SIEM.

Para Microsoft Sentinel basta con conectar el data connector "Security Events" desde Defender for Endpoint o instalar el agente Azure Monitor. Una vez en el SIEM, las queries en KQL/SPL/Lucene reemplazan al CSV local.

¿Cómo correlacionar 4624 con eventos Kerberos 4768/4769?

👉 En entornos con Active Directory, los eventos Kerberos son anteriores al 4624: 4768 (TGT solicitado) y 4769 (TGS solicitado) ocurren en el Domain Controller, mientras que 4624 aparece en el equipo destino. Una autenticación exitosa típica genera 4768 → 4769 → 4624 en ese orden.

La correlación clave: si ves 4769 contra cuentas de servicio (SPN) sin actividad legítima, es indicio de Kerberoasting; si ves muchos 4771 (preauth fail), es indicio de AS-REP Roasting.

Un 4624 sin 4768 previo en el DC sugiere autenticación NTLM legacy (evento 4776), peor que Kerberos por ser vulnerable a Pass-the-Hash.

¿Cuánto historial necesito guardar para la monitorización de logins Windows?

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

¿Funciona este script en entornos Active Directory?

👉 Sí, pero en AD recomendamos ejecutar este script también en los Domain Controllers, no solo en los workstations. Los DC concentran los eventos Kerberos (4768, 4769, 4771) y son el blanco preferido de ataques avanzados como Kerberoasting, Golden Ticket y DCSync.

Además, considera complementar con: GPO para auditoría avanzada centralizada (Advanced Audit Policy Configuration), Sysmon en clientes y DC, y un SIEM con reglas Sigma para correlación cross-machine.

Para entornos AD el script cubre el endpoint individual pero queda como pieza de un mosaico mayor que incluye PingCastle, BloodHound y la integración con Microsoft Defender for Identity.

¿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