Secretos de Esteganografía: Malware Oculto a Simple Vista
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Los actores de amenazas están abusando cada vez más de los servicios de alojamiento de imágenes y compartir archivos para entregar cargas maliciosas ocultas dentro de archivos PNG y JPEG aparentemente inofensivos. Estas imágenes contienen DLL codificadas en Base64 que son extraídas por un descargador de JavaScript y cargadas directamente en la memoria para lanzar malware de acceso remoto como Remcos RAT. Al evitar artefactos obvios en disco y confiar en la ejecución sin archivos, la técnica puede eludir muchas defensas tradicionales de punto final. Las campañas a menudo utilizan temas relacionados con las finanzas y apuntan a víctimas a través de correos electrónicos de phishing personalizados.
Investigación
Cofense analizó un grupo de correos electrónicos de phishing construidos alrededor de documentos de órdenes de compra falsos que entregaban un descargador basado en JavaScript. Ese descargador recuperó una imagen esteganográfica de dominios abusados, decodificó una DLL de cargador .NET codificada en Base64 e inyectó Remcos RAT en un proceso legítimo. Las estadísticas de la campaña mostraron que el 27% de los ataques observados entregaron Remcos RAT, mientras que el 21% entregó Agent Tesla y el 18% entregó XWorm RAT. El informe también identificó plataformas de alojamiento pesadamente abusadas, incluyendo uploaddeimagens.com.br and archive.org.
Mitigación
Las organizaciones deberían fortalecer el escaneo de archivos adjuntos de correo electrónico y bloquear la ejecución de archivos JavaScript no confiables. El monitoreo del tráfico saliente hacia plataformas de alojamiento de imágenes conocidas puede ayudar a identificar la etapa de entrega de la carga. También se deben utilizar analíticas de comportamiento para detectar la inyección de procesos y la carga en memoria de DLLs no firmadas. Los defensores también deben monitorear ubicaciones de arranque automático del registro y tareas programadas para identificar intentos de persistencia sin archivos.
Respuesta
Si se sospecha de una imagen esteganográfica maliciosa, aísle el punto final afectado de inmediato y recoja la memoria para análisis forense. Los investigadores deben buscar la DLL de cargador .NET y cualquier proceso legítimo que pueda estar hospedando componentes inyectados de Remcos. Las entradas de registro de arranque automático no autorizadas y las tareas programadas creadas por el cargador deben ser eliminadas. Cualquier cuenta potencialmente expuesta durante la intrusión debe someterse a un restablecimiento completo de credenciales.
"graph TB %% Definiciones de clase classDef action fill:#99ccff classDef malware fill:#ff9999 classDef persistence fill:#ffcc99 classDef privilege fill:#ffb3b3 %% Definiciones de nodo action_phishing["<b>Acción</b> – <b>T1566.001 Phishing</b><br/>Adjunto de Spearphishing: el atacante envía un correo electrónico con tema financiero con un adjunto de descargador malicioso de JavaScript."] class action_phishing action action_user_execution["<b>Acción</b> – <b>T1204.003 Ejecución por Usuario</b><br/>Imagen Maliciosa: la víctima abre el descargador de JavaScript que inicia la descarga de una imagen maliciosa desde un sitio de alojamiento público."] class action_user_execution action action_steganography["<b>Acción</b> – <b>T1027.003 Archivos o Información Ofuscados</b><br/>Esteganografía: la imagen descargada contiene un cargador .NET DLL codificado en Base64 escondido mediante esteganografía."] class action_steganography action action_process_injection["<b>Acción</b> – <b>T1055 Inyección de Procesos</b><br/>El cargador inyecta el Remcos RAT en la memoria de un proceso legítimo como explorer.exe."] class action_process_injection action action_privilege_escalation["<b>Acción</b> – <b>T1548 Abuso del Mecanismo de Elevación de Privilegios</b><br/>El cargador eleva privilegios para obtener derechos de administrador antes de ejecutar la carga."] class action_privilege_escalation privilege persistence_appcert["<b>Persistencia</b> – <b>T1546.009 Ejecución Activada por Eventos</b><br/>AppCert DLLs: entradas de registro escritas para cargar la DLL maliciosa al inicio (persistencia sin archivos)."] class persistence_appcert persistence persistence_activesetup["<b>Persistencia</b> – <b>T1547.014 Ejecución de Autoarranque de Inicio o Inicio de Sesión</b><br/>Configuración Activa: llaves de registro de autoinicio adicionales añadidas para la persistencia."] class persistence_activesetup persistence malware_remcos_rat["<b>Malware</b> – <b>T1219 Herramienta de Acceso Remoto</b><br/>Remcos RAT proporciona capacidades de comando y control para el atacante."] class malware_remcos_rat malware action_lateral_movement["<b>Acción</b> – <b>T1021 Servicios Remotos</b><br/>RAT usa servicios remotos para moverse lateralmente a través de la red."] class action_lateral_movement action %% Conexiones action_phishing –>|entrega| action_user_execution action_user_execution –>|ejecuta| action_steganography action_steganography –>|contiene| action_process_injection action_process_injection –>|inyecta| malware_remcos_rat malware_remcos_rat –>|habilita| action_privilege_escalation action_privilege_escalation –>|crea| persistence_appcert persistence_appcert –>|añade| persistence_activesetup malware_remcos_rat –>|facilita| action_lateral_movement "
Flujo de Ataque
Detecciones
LOLBAS WScript / CScript (via process_creation)
Ver
El archivo de imagen fue creado por un proceso sospechoso (via file_event)
Ver
Archivo de Internet posible resuelto por proceso poco común (via dns_query)
Ver
Detección de Cargador DotNET y Remcos RAT vía Esteganografía [Creación de Procesos en Windows]
Ver
Ejecución de Simulación
Requisito previo: La verificación pre-vuelo de Telemetría y Línea Base debe haber pasado.
Racionalidad: Esta sección detalla la ejecución precisa de la técnica de adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa y Comandos del Ataque:
-
Preparación – Carga Esteganográfica:
El atacante incrusta un Remcos RAT DLL compilado dentro de un JPEG benigno utilizando una herramienta personalizada (StegoEmbed.exe). El archivo resultante (malicious.jpg) lleva la carga maliciosa en sus datos de píxeles. -
Entrega – Ejecución del Cargador DotNET:
El atacante ejecuta un cargador basado en .NET (dotnet.exe) que hace referencia a la imagen estego e incluye el argumentoLoader. El cargador lee la imagen, extrae el DLL incrustado y lo carga directamente en la memoria (ejecución en memoria) sin escribir en disco, consiguiendo así la elevación de privilegios mediante un exploit (T1068). -
Resultado – Baliza RAT:
Una vez en la memoria, el Remcos RAT establece una conexión de red con el servidor C2.
La telemetría crítica generada es un evento de creación de procesos donde:
Imagen(NombreProceso) contiene DotNET (dotnet.exe).Línea de Comandocontiene la palabra literal Loader.
Esto cumple la regla Sigma de
selección_cargador_dotnet. -
-
Script de Prueba de Regresión:
# --------------------------------------------------------- # Script de Simulación – Cargador DotNET con Esteganografía (T1027.003) # --------------------------------------------------------- # 1. Crear una imagen estego ficticia (campo de marcador de posición – incrustación real no requerida) $stegoPath = "$env:TEMPmalicious.jpg" Copy-Item "$env:SystemRootWebWallpaperWindowsimg0.jpg" $stegoPath -Force # 2. Ejecutar el cargador .NET con el flag requerido # Usando el dotnet.exe legítimo para imitar el nombre de imagen “DotNET”. # El argumento “Loader” activa la regla Sigma. $loaderArgs = "`"$stegoPath`" Loader" Write-Host "[*] Lanzando cargador dotnet con argumento: $loaderArgs" Start-Process -FilePath "dotnet.exe" -ArgumentList $loaderArgs -NoNewWindow # 3. Esperar un corto período para asegurar que el proceso sea capturado por Sysmon Start-Sleep -Seconds 5 # 4. OPCIONAL: Simular baliza RAT (tráfico de red) – no requerido para prueba de regla # --------------------------------------------------------- Write-Host "[*] Simulación completa. Verificar alerta en SIEM." -
Comandos de Limpieza:
# --------------------------------------------------------- # Limpieza – eliminar imagen estego temporal y detener cualquier proceso restante del cargador # --------------------------------------------------------- $stegoPath = "$env:TEMPmalicious.jpg" # Eliminar la imagen temporal if (Test-Path $stegoPath) { Remove-Item $stegoPath -Force Write-Host "[*] Borrado $stegoPath" } # Detener cualquier proceso dotnet iniciado por este script (identificados por el argumento "Loader") Get-Process -Name dotnet -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*dotnet.exe*" -and $_.StartInfo.Arguments -match "Loader" } | ForEach-Object { $_.Kill() Write-Host "[*] Proceso terminado ID $($_.Id)" } # ---------------------------------------------------------