Análisis de Actividad Sospechosa con Sysmon y Registros de Eventos

Info

🧩 Objetivo: Comprender cómo detectar comportamientos maliciosos mediante el análisis de eventos del sistema Windows y los registros detallados de Sysmon.
🔍 En este módulo exploramos cómo Sysmon amplía la visibilidad del sistema operativo, permitiendo identificar técnicas como inyecciones, cargas de DLL maliciosas y robo de credenciales.


⚙️ ¿Qué es Sysmon?

Tip

🧰 Sysmon (System Monitor) es una herramienta gratuita de Microsoft Sysinternals que monitoriza y registra actividad del sistema a nivel profundo.
Guarda sus eventos en el Event Viewer bajo el registro:
Applications and Services Logs → Microsoft → Windows → Sysmon → Operational

🔎 Funciones principales:

📊 Eventos más relevantes:

🆔 ID 📄 Evento 💡 Descripción
1 ProcessCreate Creación de un proceso
3 NetworkConnect Conexión de red saliente
7 ImageLoad Carga de módulo o DLL
10 ProcessAccess Acceso de un proceso a otro (útil para detección de Mimikatz)
11 FileCreate Creación de archivo

📘 Documentación oficial Sysmon (Microsoft Learn)


Instalación y configuración básica

Para instalar https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon

sysmon.exe -i -accepteula -h md5,sha256,imphash -l -n

Pasted image 20251014172645.png
💾 Cargar una configuración XML personalizada (por ejemplo, la de SwiftOnSecurity):

sysmon.exe -c sysmonconfig-export.xml

Pasted image 20251014172748.png

Info

🔗 Configuración recomendada:
👉 SwiftOnSecurity/sysmon-config
🔧 Este config reduce el ruido y prioriza eventos relevantes de seguridad.


🧪 Ejemplo 1 — Detección de DLL Hijacking

Danger

🧨 Ataque simulado: Se reemplaza una DLL legítima por una maliciosa con el mismo nombre, y se coloca junto a un ejecutable confiable para que la cargue.

⚙️ Configuración de Sysmon

Info

Al examinar la configuración XML de Sysmon, el comentario "include" indica qué eventos deben incluirse.
Para capturar todos los eventos de carga de módulos, debemos cambiar "include" por "exclude", lo que asegura que no se excluya nada y se registre toda la actividad de carga de DLLs.

📸 Ejemplo de configuración:
Pasted image 20251014173933.png

📸 Configuración modificada (include → exclude):
Pasted image 20251014173943.png

Tip

💡 Actualizar Sysmon con la configuración modificada:

sysmon.exe -c sysmonconfig-export.xml

🧭 Ejecución del ataque

Example

🧩 Vamos a preparar un entorno controlado para simular un secuestro de DLL con calc.exe.
📂 Preparación

cd C:\Tools\Reflective DLLInjection
copy reflective_dll.x64.dll WININET.dll
copy C:\Windows\System32\calc.exe C:\Users\Administrator\Desktop\
copy WININET.dll C:\Users\Administrator\Desktop\

▶️ Ejecución
Pasted image 20251014175915.png

🪟 Aparece un mensaje emergente: “¡Hola desde DllMain!”, lo que confirma la ejecución de la DLL maliciosa.

🧩 Análisis en Sysmon

Note

Abrimos el Visor de Eventos (Event Viewer) para analizar la carga de la DLL maliciosa.

🔍 Pasos de análisis

  1. ABRIR: Event Viewer

  2. NAVEGAR: Applications and Services → Microsoft → Windows → Sysmon → Operational

  3. FILTRAR: Event ID 7 (ImageLoad)

  4. BUSCAR: "calc.exe" cargando "WININET.dll"

📸 Ejemplo del evento:
Pasted image 20251014175404.png

📊 Resultado esperado (Sysmon Event ID 7)

🧩 Campo 📘 Valor esperado
Image C:\Users\<User>\Desktop\calc.exe
ImageLoaded C:\Users\<User>\Desktop\WININET.dll
Signed false
User Usuario actual
Warning

La DLL aparece no firmada, a diferencia de la original en System32, que sí está firmada por Microsoft.

🕵️ Indicadores de Compromiso (IoCs)

Important

🔍 Indicadores detectados:

  • 🧱 DLL cargada fuera de C:\Windows\System32.

  • Firma digital ausente o inválida.

  • 📂 Ejecutable legítimo (calc.exe) ubicado en una carpeta de usuario (p. ej. Escritorio).

  • 🔢 Event ID 7 mostrando módulo sospechoso en Sysmon.


📘 Referencia y recursos

Cite

  • 🔗 Microsoft Sysmon Documentation

  • 🔗 SwiftOnSecurity Sysmon Config

  • 🔗 Red Canary — Detecting DLL Hijacking

  • 📗 SANS DFIR Blog: Hunting DLL Hijacks with Sysmon


🧬 Ejemplo 2 — Detección de inyección no administrada en PowerShell / C#

Info

🧠 Concepto clave:
C# es un lenguaje administrado que necesita el CLR (Common Language Runtime) para ejecutarse.
Esto significa que un proceso con código C# cargará las DLLs:

  • clr.dll

  • clrjit.dll

👉 Si observamos estas DLLs cargadas en procesos que normalmente no deberían usar C#, puede indicar inyección o ejecución inusual (unmanaged injection).


⚙️ Contexto y preparación

📌 CONCEPTOS BÁSICOS:

🟢 PROCESO "ADMINISTRADO":

🔴 PROCESO "NO ADMINISTRADO":

Tip

Para investigar comportamientos sospechosos de procesos .NET, usaremos Process Hacker, una herramienta que nos permite observar módulos cargados, memoria, e información interna del proceso.

📸 Vista general de Process Hacker:

📋 Tooltip de PowerShell:


🔍 Verificación de módulos CLR

Example

En Process Hacker → Propiedades → Módulos, encontramos las DLLs:

  • clr.dll

  • clrjit.dll

  • mscorlib.dll

Estas DLLs pertenecen a Microsoft .NET Runtime y se cargan solo si el proceso ejecuta código C#.

📸 Ejemplo:
Pasted image 20251014182757.png

⚠️ Si observas clr.dll o clrjit.dll cargadas en procesos como spoolsv.exe, explorer.exe o winlogon.exe, algo anda mal — probablemente una inyección de PowerShell o .NET no administrada.


🧨 Simulación de ataque con PSInject

Danger

Vamos a inyectar un script PowerShell en un proceso legítimo (por ejemplo, spoolsv.exe) usando PSInject.

Como vemos no tiene mangment y si podemos código malicioso

📜 Ejemplo de ejecución:

# 1. Cambiar directorio
cd C:\Tools\PSInject

# 2. Cargar el módulo de inyección
Import-Module .\Invoke-PSInject.ps1

# 3. Buscar el ID de spoolsv.exe
Get-Process spoolsv* | Format-Table Id, ProcessName

# 4. Anotar el ID (ejemplo: 2792)
# 5. Inyectar código (cambia 2792 por tu ID)
Invoke-PSInject -ProcId 2792 -PoshCode "V3JpdGUtSG9zdCAiSGVsbG8sIEd1cnU5OSEi"

📸 Antes de la inyección:

📸 Después de la inyección:


🧭 Análisis con Sysmon

Note

Sysmon Event ID 7 (ImageLoad) permite detectar qué módulos DLL fueron cargados por cada proceso.
Esto es esencial para confirmar inyecciones o cargas de CLR anómalas.

📋 Ejemplo de evento (Sysmon ID 7):

Campo Valor
Event ID 7 (ImageLoaded)
ProcessID 2792
Image C:\Windows\System32\spoolsv.exe
ImageLoaded C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Description Microsoft .NET Runtime
Signed True
User NT AUTHORITY\SYSTEM

📸 Vista del evento en Sysmon:
Pasted image 20251015180621.png


🕵️ Indicadores de Compromiso (IoCs)

Warning

🔍 Indicadores que apuntan a una inyección no administrada:

  • ⚠️ clr.dll / clrjit.dll cargadas en procesos que no deberían usar .NET.

  • 🧩 Proceso legítimo (spoolsv.exe) mostrando comportamiento administrado.

  • 📊 Event ID 7 con módulo CLR en proceso inesperado.

  • 💥 PSInject u otras herramientas similares cargando código PowerShell embebido.


🧰 Herramientas recomendadas

Cite

  • 🧠 Process Hacker

  • 🪟 Sysmon (Microsoft Sysinternals)

  • 🧩 Invoke-PSInject (PowerSploit)

  • 📘 Red Canary – Detecting .NET Assembly Injections

  • 🎓 SANS DFIR – Threat Hunting con Sysmon


🧠💻 Detección de Credential Dumping — Mimikatz & LSASS Attack

Resumen general 🔍

El credential dumping consiste en extraer contraseñas o hashes almacenados en memoria, principalmente desde el proceso LSASS.exe 🧱.
Una herramienta clásica para esto es Mimikatz 🧰, que permite acceder a credenciales mediante comandos como sekurlsa::logonpasswords.
Detectar estos comportamientos es esencial para evitar movimientos laterales 🔒 y robo de credenciales administrativas 👮‍♂️.


⚙️💣 Descripción del ataque

  1. El atacante ejecuta Mimikatz 🧑‍💻

  2. Solicita privilegios elevados: privilege::debug

  3. Usa el comando: sekurlsa::logonpasswords 🧾

  4. LSASS (Local Security Authority Subsystem Service) 🧱 almacena credenciales activas y se convierte en un objetivo crítico 🎯.

Atención ⚠️

LSASS gestiona tokens de autenticación, hashes NTLM y contraseñas temporales. Si un atacante accede a él, puede obtener control total sobre cuentas locales o de dominio 🕵️‍♂️.


🧰📜 Ejemplo de ejecución

Fragmento real del ataque con Mimikatz 💀

Pasted image 20251015182848.png

Salida 💡

El comando revela información sensible como usuarios, hashes NTLM o contraseñas (si están en memoria).
Incluso si no aparecen contraseñas, los hashes permiten ataques pass-the-hash 🧩.


🕵️‍♀️🔎 Detección con Sysmon Event ID 10 (ProcessAccess)

Clave de detección 🧭

El evento ID 10 de Sysmon muestra cuándo un proceso intenta acceder a otro.
Cualquier proceso extraño que acceda a lsass.exe es una señal de alerta roja 🚨.

🧩 Campos relevantes:

Ejemplo de evento sospechoso 💡

Pasted image 20251015185247.png

🧠 Interpretación:
Un proceso aleatorio (AgentEXE.exe) intenta acceder a LSASS desde una carpeta como Downloads 📁.
El SourceUser es distinto al TargetUser, lo que refuerza la sospecha 👀.


🧮📊 Detecciones sugeridas (SIEM / EDR)

Splunk query 🐍

index=windows Sysmon EventCode=10 TargetImage="*\\lsass.exe" | where SourceImage!="*\\services.exe" AND SourceImage!="*\\svchost.exe" | stats count by SourceImage, SourceUser, TargetImage, AccessMask, CommandLine

KQL (Defender / Sentinel) 🧾

SysmonEvent | where EventID == 10 and TargetImage endswith @"\lsass.exe" | where not(SourceImage has_any ("\\services.exe","\\svchost.exe","\\winlogon.exe")) | project TimeGenerated, Computer, SourceImage, SourceUser, TargetImage, AccessMask, CommandLine

Consejo 🧙‍♂️

Filtra procesos firmados o ubicados en rutas seguras 🛡️
Prioriza aquellos en rutas temporales, Downloads, o sin firma digital.


🚨 Indicadores de Compromiso (IOCs)


⚠️ Posibles falsos positivos

Ten cuidado 👀

  • Algunos programas legítimos (antivirus, EDR, backup agents) acceden a LSASS.

  • Herramientas de administración o depuración pueden generar falsos positivos.

🧭 Cómo filtrar:


🧰 Plan de respuesta (Playbook rápido) 🧑‍🚒

  1. 🚫 Aislar el endpoint afectado.

  2. 🧾 Exportar eventos Sysmon y Security Logs.

  3. 🔍 Analizar el proceso origen (SourceImage) y su hash.

  4. 🗝️ Rotar contraseñas y revocar tokens activos.

  5. 🕵️ Revisar lateral movement (RDP, SMB, PsExec, etc.).

  6. 🧱 Implementar LSASS Protection o Credential Guard.

  7. 📄 Documentar, aprender y actualizar detecciones.


🔧 Medidas preventivas

Hardening recomendado 🧱

  • Activar LSA Protection / PPL 🔐

  • Habilitar Windows Defender Credential Guard 🧩

  • Deshabilitar caché de credenciales locales innecesarias 🧹

  • Minimizar cuentas con privilegios altos 🧍‍♂️

  • Revisar periódicamente los Sysmon Event ID 10 📈

  • Aplicar MFA y rotación frecuente de contraseñas 🔑


🧾 Resumen final

Recordatorio 💬

  • 👀 Monitorea lsass.exe con Sysmon Event ID 10.

  • 🧠 Prioriza procesos no firmados o fuera de ruta del sistema.

  • 🧩 Correlaciona con solicitudes de SeDebugPrivilege.

  • 🧱 Usa herramientas EDR que bloqueen lecturas de memoria.