Análisis de logs de seguridad en Windows Event Viewer


El Visor de eventos de Windows (Event Viewer) es la primera herramienta a abrir cuando investigas un incidente de seguridad en Windows. Contiene un registro detallado de cada inicio de sesión, cambio de privilegios, modificación de políticas y acceso a recursos. Saber dónde mirar y qué significa cada evento marca la diferencia en una investigación.

Los registros más importantes para seguridad

Registro Descripción
Security Inicios de sesión, cambios de cuenta, acceso a objetos, uso de privilegios
System Eventos del SO: servicios iniciados/detenidos, errores de drivers
Application Eventos de aplicaciones instaladas
Microsoft-Windows-PowerShell/OperationalComandos PowerShell ejecutados
Microsoft-Windows-Sysmon/Operational Telemetría avanzada (requiere instalar Sysmon)

Event IDs críticos de seguridad

Inicio de sesión (canal Security)

IDEvento Prioridad
4624 Inicio de sesión correctoMedia
4625 Inicio de sesión fallidoAlta
4648 Inicio de sesión con credenciales explícitasAlta
4672 Privilegios especiales asignados (sesión admin)Alta
4720 Cuenta de usuario creadaCrítica
4722Cuenta de usuario habilitadaAlta
4724 Intento de restablecer contraseñaAlta
4728 Miembro añadido a grupo global de seguridad Crítica
4732Miembro añadido a grupo local de seguridadCrítica
4756 Miembro añadido a grupo universal de seguridadCrítica
4776 Validación de credenciales (NTLM)Media
7045 Nuevo servicio instaladoCrítica

Consultar eventos con PowerShell

function Get-SecurityEvents {
    param(
        [int[]]$EventIds,
        [datetime]$From = (Get-Date).AddDays(-1),
        [int]$MaxEvents = 100
    )
    Get-WinEvent -FilterHashtable @{
        LogName   = "Security"
        Id        = $EventIds
        StartTime = $From
    } -MaxEvents $MaxEvents -ErrorAction SilentlyContinue
}


function Get-EventField {
    param($Event, [string]$FieldName)
    $xml = [xml]$Event.ToXml()
    ($xml.Event.EventData.Data | Where-Object Name -eq $FieldName).'#text'
}

Detectar creaciones de cuentas (ID 4720)

Get-SecurityEvents -EventIds 4720 -From (Get-Date).AddDays(-7) | ForEach-Object {
    [PSCustomObject]@{
        Fecha          = $_.TimeCreated
        NuevaCuenta    = Get-EventField $_ "TargetUserName"
        CreadaPor      = Get-EventField $_ "SubjectUserName"
        Dominio        = Get-EventField $_ "TargetDomainName"
    }
} | Format-Table -AutoSize

Detectar adiciones a grupos privilegiados

Get-SecurityEvents -EventIds 4728,4732,4756 -From (Get-Date).AddDays(-30) | ForEach-Object {
    [PSCustomObject]@{
        Fecha    = $_.TimeCreated
        Usuario  = Get-EventField $_ "MemberName"
        Grupo    = Get-EventField $_ "TargetUserName"
        Por      = Get-EventField $_ "SubjectUserName"
        EventoID = $_.Id
    }
} | Sort-Object Fecha -Descending | Format-Table -AutoSize

Detectar nuevos servicios instalados (ID 7045)

Get-WinEvent -FilterHashtable @{
    LogName   = "System"
    Id        = 7045
    StartTime = (Get-Date).AddDays(-7)
} -ErrorAction SilentlyContinue | ForEach-Object {
    $xml = [xml]$_.ToXml()
    $datos = $xml.Event.EventData.Data
    [PSCustomObject]@{
        Fecha       = $_.TimeCreated
        Servicio    = ($datos | Where-Object Name -eq "ServiceName").'#text'
        RutaBinario = ($datos | Where-Object Name -eq "ImagePath").'#text'
        TipoInicio  = ($datos | Where-Object Name -eq "StartType").'#text'
    }
} | Format-Table -AutoSize

Investigar actividad de PowerShell (forensics)

Get-WinEvent -FilterHashtable @{
    LogName = "Microsoft-Windows-PowerShell/Operational"
    Id      = 4104   # ScriptBlock logging
} -MaxEvents 50 | ForEach-Object {
    $xml = [xml]$_.ToXml()
    [PSCustomObject]@{
        Fecha    = $_.TimeCreated
        Usuario  = $_.UserId
        Comando  = $xml.Event.EventData.Data.'#text' | Select-Object -First 1
    }
} | Format-List

Instalar Sysmon para telemetría avanzada

Sysmon registra eventos que el Event Viewer nativo no captura: creación de procesos con hash, conexiones de red por proceso, carga de DLLs…

winget install Microsoft.Sysinternals.Sysmon

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/SwiftOnSecurity/sysmon-config/master/sysmonconfig-export.xml" -OutFile sysmon-config.xml
sysmon64.exe -accepteula -i sysmon-config.xml



Crear vistas personalizadas en Event Viewer

En la GUI: clic derecho en «Custom Views» → «Create Custom View»:

        *[System[(EventID=4720 or EventID=4728 or EventID=4732 or EventID=7045)
      and TimeCreated[timediff(@SystemTime) <= 604800000]]]
    

El Event Viewer con PowerShell es una herramienta forense poderosa. La clave es saber qué IDs buscar y automatizar la extracción de datos para no tener que revisar manualmente miles de eventos. Para entornos serios, complementa el Event Viewer con una solución SIEM que centralice y correlacione los logs de todos los sistemas.

Deja una respuesta

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