DLL Sideloading en Endpoint Corporativo: Hunting y Detección
Guía completa sobre DLL sideloading en entornos corporativos: qué es la técnica, aplicaciones legítimas abusadas, hunting con Sysmon, detección con reglas Sigma, caso de estudio real con timeline de investigación, IOCs y mapeo MITRE ATT&CK T1574.002.
Qué es DLL Sideloading
DLL sideloading (MITRE ATT&CK T1574.002) es una técnica de evasión de defensas en la que el atacante coloca una DLL maliciosa junto a una aplicación legítima firmada para que esta la cargue automáticamente al ejecutarse. La técnica explota el orden de búsqueda de DLLs de Windows: cuando una aplicación necesita una DLL, primero busca en su propio directorio antes de consultar las rutas del sistema.
Orden de búsqueda de DLLs en Windows
Cuando un proceso necesita cargar una DLL, Windows sigue este orden (con SafeDllSearchMode habilitado):
- El directorio desde el que se cargó la aplicación
- El directorio del sistema (
C:\Windows\System32) - El directorio del sistema de 16-bit (
C:\Windows\System) - El directorio de Windows (
C:\Windows) - El directorio de trabajo actual
- Los directorios listados en la variable PATH
El paso 1 es la clave: si el atacante coloca su DLL en el mismo directorio que el ejecutable legítimo, Windows la cargará antes que la DLL legítima del sistema.
Anatomía de un ataque de sideloading
Directorio del atacante:
C:\Users\Public\temp\
├── legitimate_app.exe (firmado por fabricante reconocido)
├── malicious.dll (DLL del atacante, renombrada)
└── (opcionalmente) payload.bin (shellcode cifrado)
Flujo de ejecución:
1. Atacante ejecuta legitimate_app.exe
2. La app intenta cargar dependency.dll (su dependencia normal)
3. Windows busca dependency.dll en el directorio de la app
4. Encuentra malicious.dll (renombrada como dependency.dll)
5. La carga en el contexto del proceso firmado
6. El código malicioso se ejecuta como parte del proceso legítimo
Aplicaciones legítimas comúnmente abusadas
Existen decenas de aplicaciones firmadas por fabricantes reconocidos que son vulnerables a DLL sideloading. Estas son algunas de las más utilizadas por grupos APT y malware:
Aplicaciones de productividad
| Aplicación | Fabricante | DLL vulnerable | Grupos que la usan |
|---|---|---|---|
| OneDriveStandaloneUpdater.exe | Microsoft | winhttp.dll | APT41, Mustang Panda |
| Teams.exe (versiones antiguas) | Microsoft | dbghelp.dll | Varios |
| WordPad.exe | Microsoft | propsys.dll | SideWinder |
| Notepad++ (versiones antiguas) | Don Ho | SciLexer.dll | APT10 |
Herramientas de seguridad y sistema
| Aplicación | Fabricante | DLL vulnerable | Grupos que la usan |
|---|---|---|---|
| MsMpEng.exe | Microsoft | mpclient.dll | REvil, varios |
| GoogleUpdate.exe | goopdate.dll | Lazarus | |
| vmnat.exe / vmnetdhcp.exe | VMware | libcrypto-1_1.dll | APT29 |
Utilidades de terceros
| Aplicación | Fabricante | DLL vulnerable | Grupos que la usan |
|---|---|---|---|
| BDReinit.exe | Bitdefender | log.dll | APT-C-36 |
| CiscoCollabHost.exe | Cisco | CiscoSparkLauncher.dll | UNC2452 |
| hTool.exe | Huawei | MSOUTL.dll | Mustang Panda |
Hunting con Sysmon
Sysmon es la herramienta fundamental para la detección de DLL sideloading. Los eventos clave son:
Sysmon Event ID 7: Image Loaded
Este evento registra cada DLL cargada por un proceso. Es la base de la detección.
<!-- Configuración Sysmon recomendada para DLL sideloading -->
<Sysmon schemaversion="4.90">
<EventFiltering>
<ImageLoad onmatch="include">
<!-- DLLs cargadas desde directorios inusuales -->
<ImageLoaded condition="contains any">
\Users\Public\;
\AppData\Local\Temp\;
\ProgramData\;
\Downloads\;
\Desktop\
</ImageLoaded>
</ImageLoad>
<!-- Opcional: monitorizar DLLs específicas conocidas por sideloading -->
<ImageLoad onmatch="include">
<ImageLoaded condition="end with">
\version.dll;
\winhttp.dll;
\dbghelp.dll;
\mpclient.dll;
\goopdate.dll;
\propsys.dll;
\log.dll
</ImageLoaded>
</ImageLoad>
</EventFiltering>
</Sysmon>
Sysmon Event ID 1: Process Create
Complementa el Event ID 7 al mostrar desde qué directorio se ejecuta el proceso padre:
<ProcessCreate onmatch="include">
<!-- Aplicaciones legítimas ejecutadas desde directorios inusuales -->
<Image condition="end with">
\OneDriveStandaloneUpdater.exe;
\MsMpEng.exe;
\GoogleUpdate.exe;
\vmnat.exe
</Image>
</ProcessCreate>
Queries de hunting
// KQL - Hunting en Sentinel/Defender
// DLLs sin firma cargadas por procesos firmados desde temp/user dirs
DeviceImageLoadEvents
| where InitiatingProcessFolderPath has_any (
@"\Users\Public\",
@"\AppData\Local\Temp\",
@"\ProgramData\"
)
| where InitiatingProcessVersionInfoCompanyName != "" // Proceso firmado
| where not(FileName has_any ("kernel32", "ntdll", "msvcrt"))
| where SHA256 !in (known_good_hashes)
| project Timestamp, DeviceName, InitiatingProcessFileName,
FileName, FolderPath, SHA256
| sort by Timestamp desc
// SPL - Hunting en Splunk
index=sysmon EventCode=7
| where match(ImageLoaded, "(?i)(\\\\Users\\\\Public\\\\|\\\\Temp\\\\|\\\\ProgramData\\\\)")
| where isnotnull(SignatureStatus) AND SignatureStatus!="Valid"
| stats count by Image, ImageLoaded, Hashes, Computer
| where count > 0
| sort -count
Patrones sospechosos a buscar
- Proceso firmado en directorio temporal: aplicación legítima ejecutándose desde
%TEMP%,%PUBLIC%oDownloads - DLL sin firma cargada por proceso firmado: la DLL maliciosa raramente está firmada
- Hash de DLL desconocido: la DLL no coincide con el hash conocido de la versión legítima
- Tamaño de DLL anómalo: la DLL maliciosa suele tener un tamaño diferente al de la legítima
- Timestamp de DLL inconsistente: la DLL tiene un timestamp de compilación diferente al del ejecutable
Detección con reglas Sigma
Regla genérica: proceso firmado en directorio inusual
title: Signed Binary Executed from Suspicious Directory (Potential Sideloading)
id: sideload-generic-001
status: stable
description: >
Detecta la ejecución de binarios firmados por fabricantes conocidos
desde directorios donde normalmente no residen, indicativo de
DLL sideloading staging
logsource:
category: process_creation
product: windows
detection:
selection_paths:
CurrentDirectory|contains:
- '\Users\Public\'
- '\AppData\Local\Temp\'
- '\ProgramData\'
- '\Users\*\Downloads\'
- '\Users\*\Desktop\'
selection_signed:
IntegrityLevel|contains:
- 'Medium'
- 'High'
Image|endswith:
- '\OneDriveStandaloneUpdater.exe'
- '\MsMpEng.exe'
- '\GoogleUpdate.exe'
- '\vmnat.exe'
- '\vmnetdhcp.exe'
- '\BDReinit.exe'
- '\WordPad.exe'
condition: selection_paths and selection_signed
level: high
tags:
- attack.defense_evasion
- attack.t1574.002
falsepositives:
- Legitimate software updates in temp directories
- IT admin tools deployed to non-standard paths
Regla específica: DLL sin firma cargada por proceso firmado
title: Unsigned DLL Loaded by Signed Process from Non-Standard Path
id: sideload-unsigned-dll-001
status: stable
description: >
Detecta la carga de DLLs sin firma digital válida por procesos
firmados que se ejecutan desde directorios no estándar
logsource:
category: image_load
product: windows
detection:
selection_process:
Image|contains:
- '\Users\Public\'
- '\AppData\Local\Temp\'
- '\ProgramData\'
selection_dll:
SignatureStatus:
- 'Unsigned'
- 'Invalid'
ImageLoaded|endswith:
- '.dll'
filter_known:
ImageLoaded|contains:
- '\Windows\System32\'
- '\Windows\SysWOW64\'
- '\Windows\WinSxS\'
condition: selection_process and selection_dll and not filter_known
level: high
tags:
- attack.defense_evasion
- attack.t1574.002
Regla para DLLs conocidas de sideloading
title: Known Sideloading DLL Name in Non-Standard Location
id: sideload-known-dll-001
status: stable
description: >
Detecta DLLs con nombres comúnmente usados en sideloading
cargadas desde ubicaciones que no son las legítimas
logsource:
category: image_load
product: windows
detection:
selection_dll_names:
ImageLoaded|endswith:
- '\version.dll'
- '\winhttp.dll'
- '\dbghelp.dll'
- '\mpclient.dll'
- '\goopdate.dll'
- '\propsys.dll'
- '\log.dll'
- '\SciLexer.dll'
- '\libcrypto-1_1.dll'
filter_legitimate:
ImageLoaded|startswith:
- 'C:\Windows\'
- 'C:\Program Files\'
- 'C:\Program Files (x86)\'
condition: selection_dll_names and not filter_legitimate
level: critical
tags:
- attack.defense_evasion
- attack.t1574.002
Caso de estudio: APT usando sideloading con OneDrive
Contexto
El equipo SOC de una empresa de servicios financieros detecta una alerta de Sysmon Event ID 7 indicando que OneDriveStandaloneUpdater.exe cargó una DLL winhttp.dll desde C:\Users\Public\Microsoft\.
Investigación inicial
# Alerta inicial
Timestamp: 2026-05-15 14:32:17 UTC
EventID: 7 (Image Loaded)
Image: C:\Users\Public\Microsoft\OneDriveStandaloneUpdater.exe
ImageLoaded: C:\Users\Public\Microsoft\winhttp.dll
Signed: Yes (Image) / No (ImageLoaded)
OriginalFileName: OneDriveStandaloneUpdater.exe
Company: Microsoft Corporation
Primer indicador sospechoso: OneDriveStandaloneUpdater.exe normalmente reside en %LOCALAPPDATA%\Microsoft\OneDrive, no en C:\Users\Public\Microsoft\.
Análisis del directorio
C:\Users\Public\Microsoft\
├── OneDriveStandaloneUpdater.exe (3.2 MB, firmado por Microsoft)
├── winhttp.dll (892 KB, sin firma)
└── config.dat (156 KB, cifrado)
OneDriveStandaloneUpdater.exe: hash coincide con la versión legítima de Microsoftwinhttp.dll: hash NO coincide con ninguna versión conocida de winhttp.dllconfig.dat: shellcode cifrado con XOR, descifrado y ejecutado por la DLL maliciosa
Comportamiento de la DLL maliciosa
El análisis de la DLL maliciosa reveló:
Funciones exportadas (coinciden con winhttp.dll legítima):
WinHttpOpen
WinHttpConnect
WinHttpOpenRequest
WinHttpSendRequest
WinHttpReceiveResponse
WinHttpReadData
...
DllMain:
1. Lee config.dat del mismo directorio
2. Descifra shellcode (XOR key: 0x5A)
3. Asigna memoria ejecutable (VirtualAlloc RWX)
4. Copia shellcode descifrado
5. Ejecuta shellcode en nuevo hilo (CreateThread)
6. Shellcode: Cobalt Strike stager
Timeline de investigación
| Hora | Evento | Hallazgo |
|---|---|---|
| 14:32 | Alerta Sysmon EID 7 | DLL sin firma cargada por OneDrive |
| 14:35 | Análisis del directorio | Tríada sideloading: exe + dll + dat |
| 14:40 | Hash check de la DLL | Hash no reconocido en VirusTotal |
| 14:45 | Análisis de red del proceso | Beacon HTTPS cada 60s a CDN sospechoso |
| 14:50 | Aislamiento del host | Contención del endpoint afectado |
| 15:00 | Búsqueda en toda la red | Misma tríada encontrada en 3 hosts más |
| 15:15 | Análisis de persistencia | Tarea programada creada para ejecución |
| 15:30 | Análisis de entrada | Spearphishing con ISO adjunto |
| 16:00 | Contención completa | 4 hosts aislados, cuentas reseteadas |
Mecanismo de persistencia
<!-- Tarea programada creada por el atacante -->
<Task version="1.2">
<RegistrationInfo>
<Description>Microsoft OneDrive Standalone Update</Description>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Actions>
<Exec>
<Command>C:\Users\Public\Microsoft\OneDriveStandaloneUpdater.exe</Command>
</Exec>
</Actions>
</Task>
IOCs del caso de estudio
Hashes (SHA256)
OneDriveStandaloneUpdater.exe [hash legítimo de Microsoft]
winhttp.dll (maliciosa) a1b2c3d4...e5f6a7b8
config.dat (shellcode cifrado) c9d0e1f2...a3b4c5d6
Red
cdn-update.microsoft-services[.]net C2 Cobalt Strike
185.174.101[.]x IP del C2
Artefactos
C:\Users\Public\Microsoft\ Directorio de staging
Tarea programada: Microsoft OneDrive Standalone Update
Named Pipe: \\.\pipe\MSSE-####-server
Mapeo MITRE ATT&CK
| Táctica | Técnica | ID | Detalle |
|---|---|---|---|
| Defense Evasion | Hijack Execution Flow: DLL Side-Loading | T1574.002 | winhttp.dll junto a OneDriveStandaloneUpdater.exe |
| Execution | User Execution: Malicious File | T1204.002 | ISO con contenido malicioso |
| Persistence | Scheduled Task/Job: Scheduled Task | T1053.005 | Tarea para ejecutar OneDrive al login |
| Defense Evasion | Masquerading: Match Legitimate Name | T1036.005 | Directorio y nombres simulan OneDrive |
| Command and Control | Application Layer Protocol: Web Protocols | T1071.001 | Cobalt Strike HTTPS Beacon |
Recomendaciones de prevención
Políticas de sistema
- WDAC/AppLocker: implementar reglas de publisher que verifiquen la firma tanto del ejecutable como de sus DLLs dependientes
- SafeDllSearchMode: verificar que está habilitado en todos los endpoints (
HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode = 1) - Directorios protegidos: instalar aplicaciones solo en
Program FilesyProgram Files (x86), donde los usuarios estándar no tienen permisos de escritura
Monitorización
- Sysmon Event ID 7: habilitar con filtros para directorios de usuario
- Sysmon Event ID 1: alertar cuando aplicaciones firmadas se ejecutan desde directorios temporales
- FIM (File Integrity Monitoring): monitorizar la creación de DLLs en directorios de usuario
- EDR: configurar reglas de detección específicas para los binarios conocidos de sideloading
Hunting periódico
- Buscar ejecutables firmados en directorios no estándar semanalmente
- Comparar hashes de DLLs cargadas contra baseline conocido
- Revisar tareas programadas que apunten a directorios de usuario
- Correlacionar creación de archivos ISO/IMG con ejecución posterior de binarios firmados
Preguntas frecuentes
Artículos relacionados
Detectar Cobalt Strike Beacon en Red: Guía de Threat Hunting
Threat Hunting: Movimiento Lateral con Sysmon y SIEM
Process Hollowing: Detección con Volatility y Análisis de Memoria
Persistencia WMI y Event Subscription: Hunting en el SOC
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.