Análisis de Actividad Sospechosa con Sysmon y Registros de Eventos
🧩 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?
🧰 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:
-
🧱 Monitorea creación de procesos y carga de módulos (DLLs).
-
🌐 Registra conexiones de red salientes.
-
🧬 Detecta acceso entre procesos (p. ej.
lsass.exe). -
🔒 Permanece activo tras reinicios (servicio persistente).
-
⚡ Configurable mediante archivo XML de reglas.
📊 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

💾 Cargar una configuración XML personalizada (por ejemplo, la de SwiftOnSecurity):
sysmon.exe -c sysmonconfig-export.xml

🔗 Configuración recomendada:
👉 SwiftOnSecurity/sysmon-config
🔧 Este config reduce el ruido y prioriza eventos relevantes de seguridad.
🧪 Ejemplo 1 — Detección de DLL Hijacking
🧨 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
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:

📸 Configuración modificada (include → exclude):

💡 Actualizar Sysmon con la configuración modificada:
sysmon.exe -c sysmonconfig-export.xml
🧭 Ejecución del ataque
🧩 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

🪟 Aparece un mensaje emergente: “¡Hola desde DllMain!”, lo que confirma la ejecución de la DLL maliciosa.
🧩 Análisis en Sysmon
Abrimos el Visor de Eventos (Event Viewer) para analizar la carga de la DLL maliciosa.
🔍 Pasos de análisis
-
ABRIR:
Event Viewer -
NAVEGAR:
Applications and Services → Microsoft → Windows → Sysmon → Operational -
FILTRAR:
Event ID 7 (ImageLoad) -
BUSCAR:
"calc.exe"cargando"WININET.dll"
📸 Ejemplo del evento:

📊 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 |
La DLL aparece no firmada, a diferencia de la original en System32, que sí está firmada por Microsoft.
🕵️ Indicadores de Compromiso (IoCs)
🔍 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
-
🔗 Microsoft Sysmon Documentation
-
🔗 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#
🧠 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":
-
Usa .NET (C#, PowerShell)
-
Necesita "ayudantes" especiales:
clr.dllyclrjit.dll -
Ejemplo:
powershell.exe
🔴 PROCESO "NO ADMINISTRADO":
-
Usa código normal (C++)
-
NO necesita esos "ayudantes"
-
Ejemplo:
spoolsv.exe(servicio de impresión)
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:
-
Procesos:
Microsoft.Photos.exe,msedge.exe,powershell.exe,ProcessHacker.exe. -
powershell.exeaparece resaltado en verde → indica que es proceso administrado (.NET).

📋 Tooltip de PowerShell:
Ruta:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeVersión:
10.0.19041.546Firmado por: Microsoft
Host de consola:
conhost.exe
🔍 Verificación de módulos CLR
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:

⚠️ Si observas
clr.dlloclrjit.dllcargadas en procesos comospoolsv.exe,explorer.exeowinlogon.exe, algo anda mal — probablemente una inyección de PowerShell o .NET no administrada.
🧨 Simulación de ataque con PSInject
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:
-
spoolsv.exe→ proceso no administrado -
No contiene DLLs del CLR.
📸 Después de la inyección:
-
spoolsv.exe→ pasa a ser administrado (.NET) -
Carga las DLLs:
-
clr.dll -
clrjit.dll -
mscorwks.dll


-
🧭 Análisis con Sysmon
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:

🕵️ Indicadores de Compromiso (IoCs)
🔍 Indicadores que apuntan a una inyección no administrada:
-
⚠️
clr.dll/clrjit.dllcargadas 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
-
🧠 Process Hacker
-
🪟 Sysmon (Microsoft Sysinternals)
-
📘 Red Canary – Detecting .NET Assembly Injections
-
🎓 SANS DFIR – Threat Hunting con Sysmon
🧠💻 Detección de Credential Dumping — Mimikatz & LSASS Attack
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
-
El atacante ejecuta Mimikatz 🧑💻
-
Solicita privilegios elevados:
privilege::debug⚡ -
Usa el comando:
sekurlsa::logonpasswords🧾 -
LSASS (Local Security Authority Subsystem Service) 🧱 almacena credenciales activas y se convierte en un objetivo crítico 🎯.
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

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)
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:
-
🧾 Event ID: 10
-
🧍♂️ SourceUser: usuario que ejecuta el proceso
-
🖥️ SourceImage: ruta del ejecutable sospechoso
-
🔒 TargetImage:
C:\Windows\System32\lsass.exe -
⚙️ AccessMask: privilegios solicitados (VM_READ, QUERY_INFORMATION, etc.)

🧠 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)
index=windows Sysmon EventCode=10 TargetImage="*\\lsass.exe" | where SourceImage!="*\\services.exe" AND SourceImage!="*\\svchost.exe" | stats count by SourceImage, SourceUser, TargetImage, AccessMask, CommandLine
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
Filtra procesos firmados o ubicados en rutas seguras 🛡️
Prioriza aquellos en rutas temporales, Downloads, o sin firma digital.
🚨 Indicadores de Compromiso (IOCs)
-
🧩 Acceso a
lsass.exepor procesos no firmados. -
🧩 Solicitud de
SeDebugPrivilege. -
🧩 Binarios ejecutados desde rutas de usuario o temporales.
-
🧩 Presencia de comandos Mimikatz logonpasswords,
privilege::debug. -
🧩 Actividades del mismo usuario seguidas de conexiones RDP o SMB inusuales.
⚠️ Posibles falsos positivos
-
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:
-
✅ Revisar la firma digital del proceso.
-
✅ Correlacionar con actividades planificadas.
-
✅ Excluir rutas y procesos de EDR conocidos.
🧰 Plan de respuesta (Playbook rápido) 🧑🚒
-
🚫 Aislar el endpoint afectado.
-
🧾 Exportar eventos Sysmon y Security Logs.
-
🔍 Analizar el proceso origen (
SourceImage) y su hash. -
🗝️ Rotar contraseñas y revocar tokens activos.
-
🕵️ Revisar lateral movement (RDP, SMB, PsExec, etc.).
-
🧱 Implementar LSASS Protection o Credential Guard.
-
📄 Documentar, aprender y actualizar detecciones.
🔧 Medidas preventivas
-
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
-
👀 Monitorea
lsass.execon 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.