Skills Assessment - Análisis Forense con Windows Event Logs

Info

Objetivo: RDP al host objetivo, revisar C:\Logs\* (especialmente C:\Logs\DLLHijack) y determinar qué proceso realizó un secuestro de DLL. Respuesta esperada: nombre_proceso.exe (p. ej. calc.exe).


🖥️ Preparación — Conexión al laboratorio

Tip

Si usas xfreerdp (desde Pwnbox) o el cliente RDP de tu SO, pega la IP y credenciales. Asegúrate de tener permisos para leer C:\Logs\*.

🖥️ Laboratorio — DLL Hijacking

🎯 Objetivo

Determinar el proceso responsable de un ataque de DLL Hijacking examinando los logs en:

C:\Logs\DLLHijack

Características de un ataque real:

.\chainsaw_x86_64-pc-windows-msvc.exe hunt "C:\Logs\DLLHijack\DLLHijack.evtx" --sigma .\possible_windows_dll_hijacking.yml --mapping .\mappings\sigma-event-logs-all.yml

⚠️ Limitación de Chainsaw

Comando inicial:

.\chainsaw_x86_64-pc-windows-msvc.exe hunt "C:\Logs\DLLHijack\DLLHijack.evtx" --sigma .\possible_windows_dll_hijacking.yml --mapping .\mappings\sigma-event-logs-all.yml
Problema: la regla solo detecta DLLs comunes de Windows (~200 DLLs). No encuentra DLL personalizada (DismCore.dll).

Solución:

🔍 Metodología efectiva

1️⃣ Buscar eventos ID 7 (DLL cargada

Get-WinEvent -Path "C:\Logs\DLLHijack\DLLHijack.evtx" | Where-Object { $_.Id -eq 7 }

2️⃣ Filtrar DLLs sin firma

Get-WinEvent -FilterHashtable @{Path='C:\Logs\DLLHijack\DLLHijack.evtx'; ID=7} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Where-Object {$_.Message -match 'Signed: false'}
Observa especialmente procesos ejecutándose desde rutas no estándar.

Resultado:
Pasted image 20251019193814.png

📝 Indicadores de Compromiso (IOCs)

Tipo Nombre / Ruta Observación
🖥 Proceso C:\ProgramData\Dism.exe Ubicación incorrecta, carga DLL maliciosa
🧩 DLL C:\ProgramData\DismCore.dll Sin firma digital, metadatos falsos

💡 Tips extra

🧩 Laboratorio 2 — Detección de PowerShell No Administrado (.NET Injection)

🎯 Objetivo

Info

Determinar el proceso que ejecutó código PowerShell no administrado (.NET) en memoria.
Logs: C:\Logs\PowershellExec


🔬 Metodología

1️⃣ Analizar eventos de carga de DLL (clr.dll, clrjit.dll)

Tip

Estas DLLs son del Common Language Runtime (CLR).
Si un proceso inusual las carga, indica ejecución de código .NET o PowerShell embebido.

Pasted image 20251020173408.png

🧠 Análisis

  1. 🧮 Calculator.exe → aplicación UWP (Windows Store App)

  2. 🚫 Normalmente no carga clr.dll

  3. ⚔️ Indica inyección de código .NET/PowerShell dentro de la Calculadora


🧾 Conclusión

Check

Proceso que ejecutó código PowerShell no administrado:

🧪 Laboratorio 3 — Inyección que ejecutó PowerShell no gestionado

Info

Objetivo: Revisar los logs en C:\Logs\PowershellExec y determinar qué proceso inyectó en el proceso que finalmente ejecutó código PowerShell no gestionado (unmanaged).
Respuesta esperada: nombre del proceso en formato _.exe.


🔎 Método 1 — Filtrado con PowerShell (Sysmon Event ID 8)

Get-WinEvent -Path 'C:\Logs\PowershellExec\*' | Where-Object{$_.ID -like "8"} | Where-Object{$_.Message -like "*Calculator.exe*"} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message

Pasted image 20251020181954.png

Tip

Event ID 8 (CreateRemoteThread) en Sysmon indica que un proceso creó un hilo en otro proceso — técnica típica de inyección.

🔎 Método 2 — Filtrado visual / manual en el visor de eventos

  1. Abrir Event Viewer en la máquina donde se almacenan los logs (C:\Logs\PowershellExec\).

  2. Ir a Applications and Services Logs → Microsoft → Windows → Sysmon → Operational.

  3. Aplicar filtro por Event ID = 8 (CreateRemoteThread).

  4. Buscar visualmente en la columna Message procesos inusuales que creen hilos remotos hacia Calculator.exe.

Pasted image 20251020194448.png

Tip

CreateRemoteThread es una función de Windows API frecuentemente usada por actores maliciosos para inyectar código en otro proceso.
Event ID 8 captura detalles de este tipo de actividad: SourceImage (proceso que inyecta) y TargetImage (proceso objetivo).


🧾 Extracto relevante del log (resumen)

Warning

Calculator.exe es una app UWP que normalmente NO carga clr.dll, por lo que la carga de CLR indica ejecución de código .NET/PowerShell embebido (inyección).


🔍 Análisis clave


Proceso que INYECTÓ (respuesta final — formato requerido):

🧪 Laboratorio 4 — Dump de LSASS

Info

Objetivo: Analizar los logs en C:\Logs\Dump y determinar qué proceso realizó un volcado de LSASS (LSASS dump).
Respuesta esperada: nombre del proceso en formato _.exe.


🔎 Búsqueda recomendada (Sysmon Event ID 10 — ProcessAccess)

Usamos Sysmon Event 10 (ProcessAccess) para detectar procesos que intentaron acceder a lsass.exe.

Get-WinEvent -Path 'C:\Logs\Dump\*' | Where-Object{$_.ID -like "10"} | Where-Object{$_.Message -like "*TargetImage*lsass.exe*"} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message
Tip

Event ID 10 suele dejar claro SourceImage (proceso que accede) y TargetImage (proceso objetivo: lsass.exe). Busca además RequestedAccess o GrantedAccess que indiquen SeDebugPrivilege u acceso a memoria.

🧾 Extractos relevantes (tu salida)

🔍 Análisis


🧾 Indicadores / acciones sugeridas


🧩 Parte 2 — ¿Hubo logins sospechosos tras el LSASS dump?

Info

Tras un volcado de LSASS, un atacante puede intentar iniciar sesión usando las credenciales extraídas.
Vamos a correlacionar eventos de login (ID 4624) con el momento del volcado detectado 🔐


🧠 Tipos de inicio de sesión relevantes

Tipo de Logon 🔢 Descripción 💬
2 Interactive Logon (inicio local)
10 RemoteInteractive Logon (inicio remoto, como RDP)
Tip

Un atacante podría usar el tipo 10 (RDP) para reconectarse tras obtener credenciales del LSASS dump.


🧮 Script PowerShell de correlación

$suspiciousLogonTypes = @(2, 10)
$loginEvents = Get-WinEvent -FilterHashtable @{Path='C:\Logs\Dump\*'; Id=4624}
$lsassDumpEvents = Get-WinEvent -FilterHashtable @{Path='C:\Logs\Dump\*'; Id=10} |
  Where-Object { $_.Message -match 'TargetImage:\s+C:\\Windows\\system32\\lsass.exe' -and $_.Message -notmatch 'SourceImage:\s+C:\\Windows\\system32\\svchost.exe' }

foreach ($lsassEvent in $lsassDumpEvents) {
    $lsassTime = $lsassEvent.TimeCreated
    $suspiciousLogins = $loginEvents | Where-Object {
        $logonType = $_.Properties[8].Value
        $suspiciousLogonTypes -contains $logonType -and $_.TimeCreated -gt $lsassTime
    }
    if ($suspiciousLogins) {
        Write-Output "⚠️ LSASS dump detected at $($lsassTime)"
        $suspiciousLogins | Select-Object TimeCreated, Id, Message
    } else {
        Write-Output "✅ LSASS dump detected at $($lsassTime) — No suspicious logins after dump."
    }
}
Tip

Este script:

  • 🔍 Busca eventos 4624 (logons) posteriores al volcado LSASS

  • 📊 Filtra los tipos 2 (local) y 10 (RDP)

  • 🕒 Compara la hora del dump con los logins posteriores

📈 Resultado del análisis

📅 Hora del LSASS dump: 2022-04-28 01:59:42.176
📋 Proceso implicado: ProcessHacker.exe

Check

No se detectaron inicios de sesión sospechosos (tipos 2 o 10) después del volcado de LSASS.
Esto sugiere que el atacante extrajo las credenciales pero no las reutilizó inmediatamente en el sistema.


🛡️ Conclusiones


🧪 Laboratorio 5 — Proceso sospechoso que lanza cmd.exe

Info

Objetivo: Analizar eventos (Sysmon / Event Log) y determinar el proceso anómalo que ejecutó cmd.exe y corrió whoami.


🔎 Búsqueda inicial (Event ID 1 — Process Create)

Pasted image 20251020193219.png

Tip

En muchas instalaciones la propiedad exacta con la línea de comando aparece en Properties[...] — usa Get-WinEvent ... | Select -First 1 | Select -Expand Properties para descubrir el índice correcto.


✅ Hallazgo (resumen de tu salida)

Warning

WerFault.exe es un binario legítimo de Windows (Windows Error Reporting). Si lanza shells o comandos, puede ser: ejecución desde ruta no estándar, hijacking, parent PID spoofing o proceso reemplazado. Verifica ruta y firma digital.


🧩 Interpretación técnica

🧾 Indicadores de Compromiso (IOCs) — plantilla

Proceso sospechoso detectado (respuesta — formato solicitado):