Investigación de ESET GopherWhisper: Una madriguera llena de malware
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
ESET identificó un grupo APT previamente desconocido, alineado con China y rastreado como GopherWhisper, que apunta a una organización gubernamental en Mongolia. El actor de la amenaza opera un ecosistema de malware personalizado construido alrededor de puertas traseras, cargadores e inyectores en Go y C++, mientras abusa en gran medida de plataformas en la nube legítimas para actividades de comando y control. Su conjunto de herramientas, incluyendo LaxGopher, RatGopher y BoxOfFriends, se comunica a través de servicios como Discord, Slack, Microsoft Outlook y file.io. Los investigadores observaron por primera vez la campaña en enero de 2025.
Investigación
El análisis de ESET descubrió el conjunto de herramientas más amplio del grupo, documentó sus métodos de inyección e identificó los tokens de la API de Slack y Discord utilizados en la operación. Los investigadores también extrajeron miles de mensajes de comando y control y borradores de correos electrónicos de Outlook vinculados a la campaña. Su investigación mapeó la infraestructura de apoyo y mostró cómo los atacantes confiaron en servicios en línea de confianza para ocultar comunicaciones y exfiltrar datos.
Mitigación
Los defensores deben monitorear la actividad no autorizada de la API de Slack, Discord y Outlook, bloquear cargas sospechosas a file.io, y hacer cumplir controles estrictos sobre el comportamiento de carga de DLL. Los equipos de seguridad también deben detectar actividades anómalas svchost.exe y investigar binarios desconocidos basados en Go que se ejecutan en el entorno.
Respuesta
Si se detecta actividad de GopherWhisper, aísle inmediatamente el sistema afectado, termine los procesos maliciosos, elimine las DLL inyectadas, restablezca las cuentas de servicio comprometidas y revoque cualquier token de API expuesto. Debe seguir una investigación forense completa, junto con la búsqueda de amenazas en toda la red para identificar artefactos relacionados o hosts comprometidos adicionales.
"graph TB %% Class definitions classDef malware fill:#ffcccc classDef process fill:#c2f0c2 classDef file fill:#ffd9b3 classDef technique fill:#e6e6ff classDef service fill:#ffffcc classDef network fill:#d9d9d9 %% Nodes node_initial_loader["<b>Malware</b> – <b>JabGopher Loader</b><br/><b>Action</b>: Create svchost.exe and inject LaxGopher backdoor"] class node_initial_loader malware node_svc_host["<b>Process</b> – svchost.exe"] class node_svc_host process node_laxgopher["<b>Malware</b> – <b>LaxGopher</b> backdoor (DLL)"] class node_laxgopher malware node_whisper_dll["<b>File</b> – whisper.dll (masquerading)"] class node_whisper_dll file node_process_injection["<b>Technique</b> – T1055 Process Injection<br/><b>Description</b>: Inject malicious code into a running process"] class node_process_injection technique node_reflective_loading["<b>Technique</b> – T1620 Reflective Code Loading<br/><b>Description</b>: Load code in memory without using the standard OS loader"] class node_reflective_loading technique node_masquerading["<b>Technique</b> – T1036 Masquerading<br/><b>Description</b>: Rename files to appear legitimate"] class node_masquerading technique node_frienddelivery["<b>Malware</b> – <b>FriendDelivery DLL</b>"] class node_frienddelivery malware node_boxoffriends["<b>Malware</b> – <b>BoxOfFriends</b> backdoor"] class node_boxoffriends malware node_go_backdoor["<b>Malware</b> – Go based backdoors (RatGopher, LaxGopher)"] class node_go_backdoor malware node_c2_slack["<b>Service</b> – Slack (Web Service)"] class node_c2_slack service node_c2_discord["<b>Service</b> – Discord (Web Service)"] class node_c2_discord service node_c2_outlook["<b>Service</b> – Microsoft 365 Outlook Mail REST API"] class node_c2_outlook service node_tech_c2_web["<b>Technique</b> – T1102.002 Web Service Bidirectional Communication<br/><b>Description</b>: Use legitimate web services for C2"] class node_tech_c2_web technique node_tech_mail["<b>Technique</b> – T1071.003 Mail Protocols<br/><b>Description</b>: Use mail protocols for C2"] class node_tech_mail technique node_remote_access["<b>Technique</b> – T1219 Remote Access Tools<br/><b>Description</b>: Provide remote command execution"] class node_remote_access technique node_compactgopher["<b>Malware</b> – CompactGopher"] class node_compactgopher malware node_archive["<b>Technique</b> – T1560.001 Archive Collected Data via Utility<br/><b>Description</b>: Compress data before exfiltration"] class node_archive technique node_data_limit["<b>Technique</b> – T1030 Data Transfer Size Limits<br/><b>Description</b>: Handle size limits by compressing or splitting data"] class node_data_limit technique node_exfil_fileio["<b>Service</b> – file.io cloud storage"] class node_exfil_fileio service node_exfil_tech["<b>Technique</b> – T1567.002 Exfiltration Over Web Service to Cloud Storage<br/><b>Description</b>: Use cloud storage as exfiltration channel"] class node_exfil_tech technique node_transfer_to_cloud["<b>Technique</b> – T1537 Transfer Data to Cloud Account<br/><b>Description</b>: Move data to attackeru2011controlled cloud account"] class node_transfer_to_cloud technique node_sslordoor["<b>Malware</b> – SSLORDoor"] class node_sslordoor malware node_raw_socket["<b>Technique</b> – Raw Socket Communication"] class node_raw_socket technique node_port_443["<b>Network</b> – Port 443"] class node_port_443 network %% Connections node_initial_loader –>|creates| node_svc_host node_initial_loader –>|injects| node_laxgopher node_laxgopher –>|uses| node_process_injection node_laxgopher –>|uses| node_reflective_loading node_laxgopher –>|file name| node_whisper_dll node_whisper_dll –>|masquerades as| node_masquerading node_frienddelivery –>|loads| node_boxoffriends node_boxoffriends –>|uses| node_process_injection node_boxoffriends –>|uses| node_reflective_loading node_laxgopher –>|C2 via| node_c2_slack node_go_backdoor –>|C2 via| node_c2_discord node_go_backdoor –>|C2 via| node_c2_slack node_c2_slack –>|uses technique| node_tech_c2_web node_c2_discord –>|uses technique| node_tech_c2_web node_boxoffriends –>|creates drafts via| node_c2_outlook node_c2_outlook –>|uses technique| node_tech_mail node_go_backdoor –>|provides| node_remote_access node_sslordoor –>|provides| node_remote_access node_compactgopher –>|compresses data with| node_archive node_compactgopher –>|handles size limits via| node_data_limit node_archive –>|uploaded to| node_exfil_fileio node_exfil_fileio –>|uses technique| node_exfil_tech node_exfil_fileio –>|uses technique| node_transfer_to_cloud node_sslordoor –>|uses raw sockets on| node_port_443 node_sslordoor –>|uses| node_raw_socket "
Flujo de Ataque
Detecciones
Nombre de Archivo Corto (vía línea de comandos)
Ver
Deshabilitar la Monitorización Realtime de Windows Defender y Otros Cambios de Preferencias (vía línea de comandos)
Ver
Posible Uso de WebBrowserPassView (vía línea de comandos)
Ver
Posible Infiltración / Exfiltración de Datos / C2 a través de Servicios / Herramientas de Terceros (vía proxy)
Ver
Detección de C&C de GopherWhisper a través de Slack, Discord y Microsoft Graph API [Conexión de Red de Windows]
Ver
Inyección de Proceso Sospechosa por GopherWhisper [Creación de Proceso de Windows]
Ver
Ejecución de Simulación
Requisito Previo: El Chequeo Previo de Telemetría y Línea Base debe haberse pasado.
Razonamiento: 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 TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa de Ataque y Comandos:
El atacante primero genera un nuevosvchost.exeproceso (el anfitrión elegido para la inyección). Usando un inyector DLL reflectivo, laLaxGopher.dllmaliciosa se carga en la memoria de ese proceso, logrando Inyección de Librería de Enlace Dinámico (T1055.001). Una vez que la puerta trasera está residente, abre unainstancia oculta para ejecutar comandos recibidos de su servidor C2, satisfaciendoinstancia oculta para ejecutar comandos recibidos de su servidor C2, satisfaciendo Comando Shell de Windows (T1059.003). Esta cadena refleja el comportamiento descrito en la investigación de GopherWhisper y genera los dos eventos de creación de procesos que busca la regla Sigma. -
Script de Prueba de Regresión:
# ------------------------------------------------------------- # Simulación de inyección de proceso estilo GopherWhisper # ------------------------------------------------------------- $svcHost = "$env:SystemRootSystem32svchost.exe" $dllPath = "C:TempLaxGopher.dll" # Asumir que un DLL de prueba benigno existe aquí $cmdPath = "$env:SystemRootSystem32cmd.exe" # 1. Iniciar una nueva instancia de svchost.exe (suspendida) como el objetivo de inyección $svchost = Start-Process -FilePath $svcHost -ArgumentList "-k", "netsvcs" ` -PassThru -WindowStyle Hidden # 2. Realizar una inyección reflectiva simplista (marco de posición) # En una prueba real, llamarías a un inyector adecuado; aquí solo registramos la intención. Write-Host "[*] Injecting $dllPath into PID $($svchost.Id) (simulated)" # Comando de inyección simulado: # .Invoke-ReflectiveDLLInjection.ps1 -Pid $svchost.Id -Path $dllPath # 3. Lanzar cmd.exe desde el contexto del proceso inyectado (simulado) Write-Host "[*] Launching cmd.exe from injected svchost (simulated)" Start-Process -FilePath $cmdPath -ArgumentList "/c echo Compromised > C:Temppwned.txt" ` -WindowStyle Hidden # 4. Dormir brevemente para permitir que Sysmon registre eventos Start-Sleep -Seconds 5 -
Comandos de Limpieza:
# Terminar los procesos simulados de svchost.exe y cmd.exe Get-Process -Name svchost -ErrorAction SilentlyContinue | Stop-Process -Force Get-Process -Name cmd -ErrorAction SilentlyContinue | Stop-Process -Force # Eliminar el DLL de prueba (opcional) Remove-Item -Path "C:TempLaxGopher.dll" -Force -ErrorAction SilentlyContinue