Logs de eventos de Windows:
los Event ID que un analista debe conocer de memoria
Serie Blue Team | unfantasmaenelsistema.com
Antes de instalar Sysmon, antes de montar un SIEM y antes de pagar por un EDR, todo equipo Windows ya está escribiendo un diario de lo que ocurre dentro de él. El registro de eventos de Windows lleva décadas ahí, viene activado de serie y no cuesta nada. El problema no es que falte información: es que hay demasiada, mal repartida entre canales, con nombres crípticos y con la mitad de lo interesante apagado por defecto.
Este artículo es un mapa práctico de ese registro nativo: qué canales existen, qué auditoría hay que encender para que aparezcan los eventos que importan, y un catálogo comentado de los Event ID que un analista de SOC acaba reconociendo de memoria. Es el complemento natural del artículo de Sysmon —que añade telemetría por encima— y el paso previo a centralizarlo todo en Wazuh u otro SIEM.
Qué aprenderás en este artículo
Cómo se organiza el registro de eventos por canales y para qué sirve cada uno · Qué auditoría avanzada hay que habilitar por GPO (y por qué muchos Event ID no salen de fábrica) · El catálogo de Event ID imprescindibles: logon, cuentas, grupos, Kerberos, servicios, PowerShell · Los Logon Type del 4624/4625 y qué significa cada número · Cómo priorizar entre el ruido y cómo consultar el log con wevtutil y Get-WinEvent
1. Cómo se organiza el registro de eventos
El registro de eventos de Windows no es un fichero único, sino un conjunto de canales independientes. Los clásicos —los que existen desde Windows NT— son tres: Security (auditoría de seguridad: inicios de sesión, uso de privilegios, acceso a objetos), System (arranque, servicios, controladores, hardware) y Application (lo que registran los programas). A partir de Windows Vista se añadieron cientos de canales operativos específicos bajo Registros de aplicaciones y servicios > Microsoft > Windows.
El canal Security es especial: solo la Autoridad de seguridad local (LSA) puede escribir en él, cada entrada lleva un identificador de tarea de auditoría y su tamaño y retención suelen estar infradimensionados de fábrica. En un servidor ocupado, un canal Security de 20 MB puede rotar en minutos y borrar la evidencia antes de que nadie la mire.
| Canal | Ruta / nombre | Qué contiene |
|---|---|---|
| Security | Security | Logon/logoff, gestión de cuentas y grupos, Kerberos/NTLM, uso de privilegios, acceso a objetos, cambios de política de auditoría |
| System | System | Inicio y parada de servicios (7034/7036/7045), controladores, errores de hardware, apagados |
| Application | Application | Errores y avisos de aplicaciones, Windows Error Reporting, instaladores |
| PowerShell | Microsoft-Windows-PowerShell/Operational | Script Block Logging (4104), inicio de módulos (4103), transcripción |
| WMI | Microsoft-Windows-WMI-Activity/Operational | Consultas y suscripciones permanentes de WMI (persistencia y ejecución) |
| Task Scheduler | Microsoft-Windows-TaskScheduler/Operational | Registro, borrado, activación y ejecución de tareas programadas |
| WinRM | Microsoft-Windows-WinRM/Operational | Sesiones de administración remota (WinRM/PSRemoting) |
| Windows Defender | Microsoft-Windows-Windows Defender/Operational | Detecciones (1116/1117), exclusiones añadidas (5007), protección desactivada |
| Sysmon | Microsoft-Windows-Sysmon/Operational | Telemetría de Sysmon si está instalado (ver artículo dedicado) |
Sube el tamaño de los canales antes de necesitarlos
Security: 512 MB – 1 GB en servidores y controladores de dominio; 128-256 MB en puestos · PowerShell/Operational, TaskScheduler/Operational y WinRM/Operational: al menos 64-128 MB · Se ajusta por GPO en Configuración del equipo > Directivas > Plantillas administrativas > Componentes de Windows > Servicio de registro de eventos, o con wevtutil sl <canal> /ms:<bytes>
2. Habilitar la auditoría: sin esto, el catálogo no aparece
La instalación por defecto de Windows audita muy poco. Para que los Event ID interesantes empiecen a generarse hay que activar la directiva de auditoría avanzada (Advanced Audit Policy Configuration), disponible por GPO en Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Configuración de directiva de auditoría avanzada. Es preferible a la directiva de auditoría básica y no conviene mezclarlas.
| Subcategoría de auditoría | Habilita eventos como | Recomendación |
|---|---|---|
| Inicio de sesión / Logon | 4624, 4625, 4648 | Correcto y erróneo |
| Cierre de sesión / Logoff | 4634, 4647 | Correcto |
| Otros eventos de inicio de sesión | 4778, 4779 (RDP reconexión) | Correcto |
| Administración de cuentas de usuario | 4720, 4722, 4723, 4724, 4725, 4726, 4738 | Correcto y erróneo |
| Administración de grupos de seguridad | 4728, 4732, 4756, 4735 | Correcto |
| Servicio de autenticación Kerberos | 4768, 4771 | Correcto y erróneo |
| Operaciones de vale de servicio Kerberos | 4769 | Correcto y erróneo |
| Creación de procesos | 4688 | Correcto (+ activar línea de comandos, ver 2.1) |
| Cambios de la directiva de auditoría | 4719, 1102 | Correcto y erróneo |
| Recurso compartido de archivos / recurso compartido detallado | 5140, 5142, 5144, 5145 | Correcto (ojo al volumen) |
| Otros eventos del sistema | 7045 (System), instalación de servicios | Correcto |
2.1 Dos ajustes que casi todo el mundo olvida
El Event ID 4688 (creación de proceso) por sí solo dice qué se ejecutó, pero no con qué argumentos. La línea de comandos es donde vive la mitad de la actividad maliciosa (parámetros de PowerShell codificados, rutas de scripts, IP de destino). Hay que activarla aparte:
REM GPO: Config. del equipo > Plantillas administrativas > Sistema >
REM Auditar creacion de procesos > Incluir linea de comandos en...
REM Equivale a esta clave:
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" ^
/v ProcessCreationIncludeCmdLine_Enabled /t REG_DWORD /d 1 /f
REM PowerShell Script Block Logging (genera Event ID 4104):
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" ^
/v EnableScriptBlockLogging /t REG_DWORD /d 1 /fComprueba lo que realmente se está auditando
auditpol /get /category:* muestra la configuración efectiva en el equipo, que no siempre coincide con la GPO que crees haber aplicado · Un GPO de auditoría avanzada mal combinado con auditoría básica puede dejar subcategorías sin efecto: activa ‘Forzar la configuración de subcategorías…’ en la directiva · Tras cambiar la política, genera un evento de prueba (un logon fallido a propósito) y verifica que aparece
3. El catálogo: Event ID que hay que conocer de memoria
3.1 Autenticación y sesiones
| Event ID | Canal | Significado y por qué importa |
|---|---|---|
| 4624 | Security | Inicio de sesión correcto. El campo clave es el Logon Type (ver 3.2) y el ‘New Logon’ con el usuario y el SID |
| 4625 | Security | Inicio de sesión fallido. Picos = fuerza bruta o password spraying; el Substatus indica el motivo exacto |
| 4634 / 4647 | Security | Cierre de sesión (4647 es el logoff iniciado por el usuario). Sirve para calcular duración de sesión |
| 4648 | Security | Inicio de sesión con credenciales explícitas (runas, ‘ejecutar como otro usuario’): frecuente en movimiento lateral |
| 4672 | Security | Se asignan privilegios especiales (SeDebugPrivilege, SeTcbPrivilege…) a un inicio de sesión: cuenta administrativa o con poder |
| 4776 | Security | El DC valida credenciales por NTLM. Uso de NTLM donde debería haber solo Kerberos = señal a investigar |
| 4778 / 4779 | Security | Sesión RDP reconectada / desconectada, con nombre de equipo y dirección de origen |
3.2 Logon Type: el número que lo cambia todo
En el 4624 y el 4625, el Logon Type indica cómo se autenticó la sesión. Interpretar mal este campo es el error más común al empezar. Los valores que aparecen a diario:
| Type | Nombre | Cuándo se ve |
|---|---|---|
| 2 | Interactive | Sesión local en el teclado del equipo (o KVM). Un Type 2 remoto es anómalo |
| 3 | Network | Acceso a recursos compartidos, sesiones SMB, autenticación a IIS. El más frecuente en servidores |
| 4 | Batch | Tareas programadas ejecutándose con credenciales almacenadas |
| 5 | Service | Arranque de un servicio con su cuenta configurada |
| 7 | Unlock | Desbloqueo de una estación ya iniciada |
| 8 | NetworkCleartext | Credenciales enviadas en claro por la red (IIS Basic Auth): revisar siempre |
| 9 | NewCredentials | runas /netonly: la sesión usa otras credenciales solo para la red. Habitual en herramientas de pentest |
| 10 | RemoteInteractive | RDP / Terminal Services. El origen debería estar en tu rango de administración |
| 11 | CachedInteractive | Logon con credenciales en caché (portátil sin línea con el DC) |
Combinaciones que merecen una alerta
Type 10 (RDP) hacia un controlador de dominio desde una IP que no es la de los saltos de administración · Type 3 de una cuenta de servicio o de equipo hacia muchos hosts en poco tiempo (barrido lateral) · Type 9 (NewCredentials) en un puesto de usuario normal: casi nadie usa runas /netonly de forma legítima · 4625 con Substatus 0xC0000064 (usuario no existe) en ráfaga = enumeración de cuentas
3.3 Gestión de cuentas y grupos
| Event ID | Acción | Nota para el analista |
|---|---|---|
| 4720 | Cuenta de usuario creada | Fuera de la ventana de altas de RRHH o de IT = sospechoso |
| 4722 / 4725 / 4726 | Cuenta habilitada / deshabilitada / borrada | El borrado rápido tras un alta puede indicar limpieza de una cuenta de puerta trasera |
| 4723 / 4724 | Cambio de contraseña (propio) / restablecimiento (por un admin) | 4724 sobre cuentas privilegiadas hay que correlacionarlo con un ticket |
| 4738 | Cuenta de usuario modificada | Cambios en UAC flags: p. ej. ‘no requiere preautenticación Kerberos’ habilita AS-REP roasting |
| 4728 / 4732 / 4756 | Miembro añadido a grupo global / local / universal de seguridad | 4732 a Administradores locales y 4728/4756 a Domain/Enterprise Admins son eventos de máxima prioridad |
| 4735 / 4737 / 4755 | Grupo de seguridad modificado | Cambios en el alcance o en los permisos del propio grupo |
| 4740 | Cuenta bloqueada | El ‘Caller Computer Name’ dice desde dónde vinieron los intentos fallidos |
3.4 Kerberos (en los controladores de dominio)
| Event ID | Momento del flujo | Señal de interés |
|---|---|---|
| 4768 | Se emite un TGT (AS-REQ/AS-REP) | Ticket Encryption Type 0x17 (RC4) donde se espera 0x12 (AES); avalancha desde un host = posible AS-REP roasting |
| 4769 | Se emite un vale de servicio (TGS) | Type 0x17 + muchos SPN distintos pedidos por una sola cuenta en segundos = Kerberoasting |
| 4771 | Fallo de preautenticación Kerberos | Equivalente Kerberos del 4625: fuerza bruta contra el DC; el Failure Code precisa el motivo |
| 4770 | Vale de servicio renovado | Contexto de sesiones largas |
El detalle de estos eventos y su detección se desarrolla en el artículo dedicado a Kerberoasting y AS-REP roasting. Aquí basta con saber que el 4769 con cifrado RC4 es la firma que se vigila.
3.5 Persistencia, ejecución y recursos compartidos
| Event ID | Canal | Qué detecta |
|---|---|---|
| 4688 | Security | Creación de proceso. Con la línea de comandos activada, la base para cazar LOLBins y scripts codificados |
| 4697 | Security | Un servicio se instala vía SCM (con auditoría de ‘Cambios de sistema de seguridad’) |
| 7045 | System | Un servicio nuevo se instala en el sistema. PsExec, muchos C2 y el movimiento lateral dejan este rastro |
| 4698 / 4699 / 4702 | Security | Tarea programada creada / borrada / actualizada, con el XML de la acción en el propio evento |
| 4104 | PowerShell/Operational | Bloque de script de PowerShell registrado entero: incluso ofuscado, se queda grabado. Nivel Warning = sospechoso para Windows |
| 4103 | PowerShell/Operational | Registro de canalización y de módulos de PowerShell |
| 5140 / 5145 | Security | Acceso a un recurso compartido de red / comprobación detallada de permisos por fichero. 5145 sobre C$ o ADMIN$ = admin remoto |
| 5140 a IPC$ | Security | Conexiones a IPC$ desde muchos orígenes: enumeración remota (sesiones nulas, consultas SAMR/LSARPC) |
3.6 Antiforense: cuando alguien borra el rastro
| Event ID | Canal | Significado |
|---|---|---|
| 1102 | Security | El log de seguridad se ha borrado. Casi nunca es legítimo: alerta inmediata y de máxima prioridad |
| 104 | System | Un log (System, Application u otro) se ha borrado |
| 4719 | Security | La directiva de auditoría del sistema se ha cambiado: alguien puede estar apagando la vigilancia |
| 1100 | Security | El servicio de registro de eventos se ha detenido (también ocurre en un apagado normal: contexto) |
| 7036 (Event Log) | System | Cambios de estado del servicio de registro fuera de un reinicio |
Estos cuatro deberían despertarte de noche
1102 (borrado del log de seguridad) y 104 (borrado de otros logs) · 4719 (cambio de la política de auditoría) sin ticket de cambio asociado · 4728 / 4732 / 4756 hacia grupos de administración de dominio · 4720 seguido en minutos de 4732 y de un 4726: alta, elevación y borrado de una cuenta efímera
4. Ruido, prioridad y cómo no ahogarse
Un controlador de dominio genera millones de 4624/4634/4769 al día que son puro funcionamiento normal. Intentar mirarlos todos es imposible y contraproducente. La estrategia que funciona:
- Filtra por identidad y por contexto, no por Event ID a secas. Un 4624 Type 3 no dice nada; un 4624 Type 10 de una cuenta de Domain Admin a las 3 de la madrugada, sí
- Listas de lo raro, no listas de lo malo. Define qué cuentas usan RDP, desde qué hosts salta la administración, qué procesos padre son normales; alerta sobre lo que se sale de ahí
- Correlación temporal. 4625 x50 seguido de un 4624 correcto desde la misma IP = fuerza bruta con éxito. Los eventos sueltos engañan; las secuencias no
- Cuentas de equipo y de servicio son el punto ciego. Se ignoran por ruidosas y es justo donde se esconde el movimiento lateral: trátalas como identidades de primera
- Prioriza retención larga para 4624/4625, 4688, 4720-4756, 4768/4769, 7045, 4104 y 1102; el resto puede caducar antes
Reenvía los eventos fuera del equipo (WEF)
Windows Event Forwarding es nativo, sin agente: los equipos (source) envían por WinRM a un colector · Suscripciones ‘iniciadas por el origen’ (source-initiated) + una GPO que apunte al colector escalan a miles de endpoints · Ventaja de seguridad: lo reenviado en tiempo casi real ya está a salvo aunque luego alguien lance un 1102 en el equipo de origen · El colector se convierte después en la fuente que consume el SIEM (Wazuh, Splunk, Sentinel…)
5. Consultar el log desde la línea de comandos
El Visor de eventos vale para mirar un equipo puntual. Para cazar en serio se usan wevtutil (nativo, rápido, ideal para scripts y equipos remotos) y Get-WinEvent de PowerShell (más potente para filtrar y dar formato). La clave del rendimiento en Get-WinEvent es -FilterHashtable: filtra en el motor del log, no en memoria después.
REM --- wevtutil --- REM Ultimos 20 logon fallidos, formato texto wevtutil qe Security /q:"*[System[(EventID=4625)]]" /c:20 /rd:true /f:text REM Exportar el canal Security de un equipo remoto a un .evtx wevtutil epl Security C:\ir\dc01-security.evtx /r:DC01 REM Ver tamano y configuracion de retencion de un canal wevtutil gl Security
# --- PowerShell / Get-WinEvent ---
# Logon interactivos y RDP (Type 2 y 10) de las ultimas 24 h
$f = @{ LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-1) }
Get-WinEvent -FilterHashtable $f |
Where-Object { $_.Properties[8].Value -in 2,10 } |
Select-Object TimeCreated,
@{n='User'; e={$_.Properties[5].Value}},
@{n='LogonType'; e={$_.Properties[8].Value}},
@{n='Source'; e={$_.Properties[18].Value}}
# Caza: creacion de servicios (7045) en toda una lista de equipos
$f = @{ LogName='System'; Id=7045; StartTime=(Get-Date).AddDays(-7) }
Get-WinEvent -FilterHashtable $f -ComputerName (Get-Content .\hosts.txt) |
Select-Object MachineName, TimeCreated,
@{n='Service'; e={$_.Properties[0].Value}},
@{n='ImagePath'; e={$_.Properties[1].Value}}
# PowerShell Script Block sospechoso (4104 con nivel Warning)
Get-WinEvent -FilterHashtable @{
LogName='Microsoft-Windows-PowerShell/Operational'; Id=4104; Level=3 } |
Select-Object TimeCreated, @{n='Script'; e={$_.Properties[2].Value}}El índice de Properties depende del evento
Los ejemplos usan Properties[n] por rapidez, pero ese índice cambia según el Event ID y a veces entre versiones de Windows · Para scripts que van a durar, usa $_.ToXml() y navega el XML por nombre de campo (Data Name=…) en lugar de por posición · Comprueba siempre contra un evento real de tu entorno antes de confiar en un parser
6. Buenas prácticas
- Despliega la directiva de auditoría avanzada por GPO desde una plantilla contrastada (la baseline de seguridad de Microsoft, o la guía de auditoría de Malware Archaeology) y ajústala a tu entorno
- Activa la línea de comandos en el 4688 y el Script Block Logging de PowerShell el primer día
- Sube el tamaño de los canales Security, PowerShell/Operational, TaskScheduler/Operational y WinRM/Operational antes de que un incidente los haga rotar
- Reenvía todo con WEF a un colector y desde ahí al SIEM; no dependas de que el .evtx siga en el equipo
- Documenta tu línea base: quién usa RDP, desde dónde, qué relaciones padre-hijo son normales
- Combina el log nativo con Sysmon: el nativo te da identidad y política; Sysmon te da hashes, red por proceso e inyección. Se complementan
- Prueba tus reglas con emulación de adversario (Atomic Red Team) en un laboratorio aislado
Uso responsable de la auditoría de Windows
Habilita la auditoría solo en sistemas de tu organización o de tu laboratorio, con la cobertura legal y la política interna correspondientes · La monitorización de la actividad del personal está sujeta a normativa laboral y de protección de datos: informa según exija tu jurisdicción y limita la recogida a fines de seguridad · Las pruebas de emulación (Atomic Red Team, Caldera) deben ejecutarse en máquinas aisladas, nunca contra sistemas de terceros
Referencias
learn.microsoft.com/windows/security/threat-protection/auditing/advanced-security-auditing — Auditoría avanzada · learn.microsoft.com/windows-server/identity/ad-ds/plan/appendix-l-events-to-monitor — Lista oficial de eventos a vigilar · ultimatewindowssecurity.com/securitylog/encyclopedia — Enciclopedia del Security Log (referencia de cada Event ID) · github.com/Yamato-Security/EnableWindowsLogSettings — Scripts para activar la auditoría recomendada · malwarearchaeology.com — ‘Windows Logging Cheat Sheet’, guía práctica de qué auditar · github.com/redcanaryco/atomic-red-team — Pruebas de detección en laboratorio
Conclusión
El registro de eventos de Windows es la fuente de detección más barata que existe: ya está instalada y solo hay que encenderla bien. Con la auditoría avanzada configurada, la línea de comandos en el 4688 y el Script Block Logging de PowerShell, un equipo pasa de contar poco a contar casi todo lo que un analista necesita para reconstruir un incidente.
El trabajo no es memorizar cientos de números, sino un puñado: los logon y sus Type, la gestión de cuentas y grupos privilegiados, Kerberos en el DC, la instalación de servicios y tareas, y el borrado del propio log. Con ese catálogo en la cabeza, wevtutil y Get-WinEvent en las manos, y todo reenviado por WEF a un sitio seguro, ya tienes el 80% de un SOC funcionando sin gastar un euro en licencias.
unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

