IntermedioDLL sideloadinghuntingSysmonSigmaT1574.002defense evasionMITRE ATT&CKendpoint

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.

MalwareIntel Research··9 min lectura
Serie: Casos de Uso — Parte 14

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):

  1. El directorio desde el que se cargó la aplicación
  2. El directorio del sistema (C:\Windows\System32)
  3. El directorio del sistema de 16-bit (C:\Windows\System)
  4. El directorio de Windows (C:\Windows)
  5. El directorio de trabajo actual
  6. 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ónFabricanteDLL vulnerableGrupos que la usan
OneDriveStandaloneUpdater.exeMicrosoftwinhttp.dllAPT41, Mustang Panda
Teams.exe (versiones antiguas)Microsoftdbghelp.dllVarios
WordPad.exeMicrosoftpropsys.dllSideWinder
Notepad++ (versiones antiguas)Don HoSciLexer.dllAPT10

Herramientas de seguridad y sistema

AplicaciónFabricanteDLL vulnerableGrupos que la usan
MsMpEng.exeMicrosoftmpclient.dllREvil, varios
GoogleUpdate.exeGooglegoopdate.dllLazarus
vmnat.exe / vmnetdhcp.exeVMwarelibcrypto-1_1.dllAPT29

Utilidades de terceros

AplicaciónFabricanteDLL vulnerableGrupos que la usan
BDReinit.exeBitdefenderlog.dllAPT-C-36
CiscoCollabHost.exeCiscoCiscoSparkLauncher.dllUNC2452
hTool.exeHuaweiMSOUTL.dllMustang 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

  1. Proceso firmado en directorio temporal: aplicación legítima ejecutándose desde %TEMP%, %PUBLIC% o Downloads
  2. DLL sin firma cargada por proceso firmado: la DLL maliciosa raramente está firmada
  3. Hash de DLL desconocido: la DLL no coincide con el hash conocido de la versión legítima
  4. Tamaño de DLL anómalo: la DLL maliciosa suele tener un tamaño diferente al de la legítima
  5. 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 Microsoft
  • winhttp.dll: hash NO coincide con ninguna versión conocida de winhttp.dll
  • config.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

HoraEventoHallazgo
14:32Alerta Sysmon EID 7DLL sin firma cargada por OneDrive
14:35Análisis del directorioTríada sideloading: exe + dll + dat
14:40Hash check de la DLLHash no reconocido en VirusTotal
14:45Análisis de red del procesoBeacon HTTPS cada 60s a CDN sospechoso
14:50Aislamiento del hostContención del endpoint afectado
15:00Búsqueda en toda la redMisma tríada encontrada en 3 hosts más
15:15Análisis de persistenciaTarea programada creada para ejecución
15:30Análisis de entradaSpearphishing con ISO adjunto
16:00Contención completa4 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ácticaTécnicaIDDetalle
Defense EvasionHijack Execution Flow: DLL Side-LoadingT1574.002winhttp.dll junto a OneDriveStandaloneUpdater.exe
ExecutionUser Execution: Malicious FileT1204.002ISO con contenido malicioso
PersistenceScheduled Task/Job: Scheduled TaskT1053.005Tarea para ejecutar OneDrive al login
Defense EvasionMasquerading: Match Legitimate NameT1036.005Directorio y nombres simulan OneDrive
Command and ControlApplication Layer Protocol: Web ProtocolsT1071.001Cobalt Strike HTTPS Beacon

Recomendaciones de prevención

Políticas de sistema

  1. WDAC/AppLocker: implementar reglas de publisher que verifiquen la firma tanto del ejecutable como de sus DLLs dependientes
  2. SafeDllSearchMode: verificar que está habilitado en todos los endpoints (HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode = 1)
  3. Directorios protegidos: instalar aplicaciones solo en Program Files y Program Files (x86), donde los usuarios estándar no tienen permisos de escritura

Monitorización

  1. Sysmon Event ID 7: habilitar con filtros para directorios de usuario
  2. Sysmon Event ID 1: alertar cuando aplicaciones firmadas se ejecutan desde directorios temporales
  3. FIM (File Integrity Monitoring): monitorizar la creación de DLLs en directorios de usuario
  4. EDR: configurar reglas de detección específicas para los binarios conocidos de sideloading

Hunting periódico

  1. Buscar ejecutables firmados en directorios no estándar semanalmente
  2. Comparar hashes de DLLs cargadas contra baseline conocido
  3. Revisar tareas programadas que apunten a directorios de usuario
  4. Correlacionar creación de archivos ISO/IMG con ejecución posterior de binarios firmados

Preguntas frecuentes

Artículos relacionados

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.