SOC Prime Bias: Crítico

18 Jun 2026 14:32 UTC

ESET Investiga actualización en el arsenal de FishMonger: SprySOCKS para Windows

Author Photo
SOC Prime Team linkedin icon Seguir
ESET Investiga actualización en el arsenal de FishMonger: SprySOCKS para Windows
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Los investigadores de ESET descubrieron dos nuevas variantes de Windows del backdoor SprySOCKS, llamadas WIN_DRV y WIN_PLUS, que están vinculadas al grupo de amenazas FishMonger. La versión WIN_DRV utiliza un controlador de kernel para lograr un sigilo mejorado, incluida la capacidad de ocultar conexiones de red, procesos y archivos. Ambas variantes soportan varios protocolos de comunicación y proporcionan un amplio conjunto de comandos para el control del sistema y el robo de datos.

Investigación

La investigación se basó en muestras de malware descubiertas a través de VirusTotal y la telemetría de ESET, revelando actividad que abarca desde 2023 hasta 2024. Los investigadores analizaron las cadenas de ejecución completas, incluida la carga de DLL, la carga de controladores de kernel a través de DriverLoader y RawWNPF, y la inyección de procesos utilizando técnicas de doppelgänging. El estudio también desveló patrones de comunicación de comando y control y claves de encriptación codificadas compartidas entre múltiples componentes.

Mitigación

Las organizaciones deberían priorizar parches para aplicaciones expuestas a Internet para reducir el riesgo de compromiso inicial a través de vulnerabilidades N-day. La aplicación estricta de firmas de controladores y la monitorización de instalaciones no autorizadas de controladores de kernel son esenciales. Los defensores también deberían monitorear tareas programadas sospechosas, cambios en el registro bajo Image File Execution Options y registros de procesadores de impresión inusuales.

Respuesta

Si se detectan estas amenazas, los sistemas afectados deberían ser aislados inmediatamente para detener movimientos laterales adicionales o robo de datos. Los investigadores deberían realizar una revisión forense detallada para determinar el vector de intrusión original y el alcance completo del compromiso, prestando especial atención a la persistencia a nivel de kernel. Los registros de red también deberían revisarse en busca de comunicación con infraestructuras de comando y control conocidas, mientras que los cambios en el sistema, como nuevos servicios o claves de registro alteradas, deberían ser auditados.

graph TB %% Definición de clases classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef defense fill:#ffcc99 %% Acceso inicial action_exploit[«<b>Acción</b> – <b>T1190 Exploit Public-Facing Application</b><br/>Descripción: Aprovechamiento de vulnerabilidades N-day<br/>en servidores expuestos públicamente para obtener acceso inicial.»] class action_exploit action %% Ramificación de variantes op_variant((«AND»)) class op_variant tool %% Ruta de variante WIN_DRV action_win_drv_persist[«<b>Acción</b> – <b>T1546.012 Event Triggered Execution: IFEO</b><br/>Descripción: Registro de un depurador malicioso para vds.exe<br/>Herramienta: script klelam00007.bat»] class action_win_drv_persist action action_win_drv_dll[«<b>Acción</b> – <b>T1574.001 Hijack Execution Flow: DLL</b><br/>Descripción: Carga lateral de DLL mediante ejecutable firmado legítimo<br/>Herramienta: ApphostRegistrationVerifier.exe carga tpsvcloc.dll»] class action_win_drv_dll action malware_loader[«<b>Malware</b>: Loader<br/>Descripción: Utiliza Process Doppelgänging<br/>para realizar inyección.»] class malware_loader malware action_reflective[«<b>Acción</b> – <b>T1620 Reflective Code Loading</b><br/>Descripción: Inyección del shellcode backdoor SprySOCKS<br/>mediante Process Doppelgänging.»] class action_reflective action process_svchost[«<b>Proceso</b>: svchost.exe<br/>Descripción: Proceso objetivo para la inyección<br/>del shellcode.»] class process_svchost process malware_sprysocks[«<b>Malware</b>: SprySOCKS Backdoor<br/>Descripción: Mantiene C2 y realiza recopilación<br/>de información.»] class malware_sprysocks malware tool_driver_loader[«<b>Herramienta</b>: DriverLoader<br/>Descripción: Implementa un controlador<br/>a nivel de kernel.»] class tool_driver_loader tool malware_rootkit[«<b>Malware</b>: RawWNPF Kernel Driver<br/>Descripción: Funciona como Rootkit (T1014)<br/>para ocultar procesos, archivos y claves del registro.»] class malware_rootkit malware action_port_knocking[«<b>Acción</b> – <b>T1205.001 Traffic Signaling: Port Knocking</b><br/>Descripción: Desvío de tráfico TCP especialmente creado<br/>mediante Windows Filtering Platform.»] class action_port_knocking action %% Ruta de variante WIN_PLUS action_win_plus_persist[«<b>Acción</b> – <b>T1547.012 Boot or Logon Autostart Execution: Print Processors</b><br/>Descripción: Instalación de VSPMsg.dll como procesador<br/>de impresión para persistencia.»] class action_win_plus_persist action %% Post explotación y recopilación action_keylogging[«<b>Acción</b> – <b>T1056.001 Input Capture: Keylogging</b><br/>Descripción: Captura de pulsaciones de teclado,<br/>datos del portapapeles y títulos de ventanas.»] class action_keylogging action action_c2[«<b>Acción</b> – <b>T1132.001 Command and Control: Protocol</b><br/>Descripción: Comunicación mediante TCP, UDP y WebSocket<br/>usando cifrado AES-128.»] class action_c2 action action_defense_impair[«<b>Acción</b> – <b>T1562.004 Defense Impairment: Disable or Modify Tools</b><br/>Descripción: Modificación de reglas del Firewall de Windows<br/>mediante netsh.exe para permitir tráfico.»] class action_defense_impair action %% Conexiones action_exploit –>|conduce_a| op_variant %% Flujo WIN_DRV op_variant –>|ruta_de_variante| action_win_drv_persist action_win_drv_persist –>|conduce_a| action_win_drv_dll action_win_drv_dll –>|carga| malware_loader malware_loader –>|realiza| action_reflective action_reflective –>|inyecta_en| process_svchost process_svchost –>|ejecuta| malware_sprysocks malware_sprysocks –>|despliega| tool_driver_loader tool_driver_loader –>|mapea| malware_rootkit malware_rootkit –>|facilita| action_port_knocking %% Flujo WIN_PLUS op_variant –>|ruta_de_variante| action_win_plus_persist action_win_plus_persist –>|utiliza| action_reflective %% Post explotación común malware_sprysocks –>|realiza| action_keylogging malware_sprysocks –>|se_comunica_mediante| action_c2 malware_sprysocks –>|ejecuta| action_defense_impair %% Conexiones lógicas action_defense_impair –>|habilita| action_c2

Flujo de Ataque

## Ejecución de Simulación

Requisito previo: La Verificación Pre-vuelo de Telemetría y Línea de Base debe haber sido aprobada.

Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.

  • Narrativa de Ataque & Comandos: El adversario ha desplegado con éxito el backdoor SprySOCKS en un host comprometido de Windows. Para establecer un canal de comando y control, el malware abre un socket de escucha en el puerto 53781. Para asegurar que la comunicación sea reconocida por su servidor C2 personalizado, el malware inyecta el valor mágico hex 0xACACBCBC en los paquetes de inicio de sesión iniciales. Esto imita el comportamiento específico del protocolo del grupo FishMonger para facilitar la comunicación confiable a través de tráfico interceptado o desviado.

  • Guion de Prueba de Regresión:

    # Guion de Simulación: Generación de Artefactos de Red de SprySOCKS
    # Este guion imita el comportamiento de red del backdoor SprySOCKS.
    
    $TargetPort = 53781
    $MagicValue = [byte[]] @(0xAC, 0xAC, 0xBC, 0xBC)
    $Listener = [System.Net.Sockets.TcpListener]$TargetPort
    
    try {
        Write-Host "[+] Iniciando escucha en puerto $TargetPort..." -ForegroundColor Cyan
        $Listener.Start()
        $Client = $Listener.AcceptTcpClient()
        $Stream = $Client.GetStream()
    
        Write-Host "[+] Conexión establecida. Enviando valor mágico $MagicValue..." -ForegroundColor Yellow
        # Inyectando el valor mágico en el flujo para activar la lógica 'selection1'
        $Stream.Write($MagicValue, 0, $MagicValue.Length)
    
        Start-Sleep -Seconds 5
    }
    catch {
        Write-Error "[-] Simulación fallida: $($_.Exception.Message)"
    }
    finally {
        Write-Host "[+] Limpiando conexiones..." -ForegroundColor Cyan
        $Stream.Close()
        $Client.Close()
        $Listener.Stop()
    }
  • Comandos de Limpieza:

    # Asegúrese de que no queden escuchadores deshonestos activos
    Get-NetTCPConnection -LocalPort 53781 -ErrorAction SilentlyContinue | Remove-NetTCPConnection
    Write-Host "[+] Limpieza completa." -ForegroundColor Green