Pesquisa ESET GopherWhisper: Um túnel cheio de malware
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
A ESET identificou um grupo APT anteriormente desconhecido, alinhado à China e rastreado como GopherWhisper, visando uma organização governamental na Mongólia. O agente de ameaça opera um ecossistema de malware personalizado construído em torno de backdoors Go e C++, carregadores e injetores, abusando fortemente de plataformas de nuvem legítimas para atividades de comando e controle. Seu conjunto de ferramentas, incluindo LaxGopher, RatGopher e BoxOfFriends, se comunica através de serviços como Discord, Slack, Microsoft Outlook e file.io. Os pesquisadores observaram a campanha pela primeira vez em janeiro de 2025.
Investigação
A análise da ESET descobriu o conjunto de ferramentas do grupo, documentou seus métodos de injeção e identificou tokens de API do Slack e Discord usados na operação. Os pesquisadores também extraíram milhares de mensagens de comando e controle e rascunhos de e-mails do Outlook vinculados à campanha. Sua investigação mapeou a infraestrutura de suporte e mostrou como os atacantes confiavam em serviços online confiáveis para ocultar comunicações e exfiltrar dados.
Mitigação
Os defensores devem monitorar atividades não autorizadas de API no Slack, Discord e Outlook, bloquear uploads suspeitos para file.io, e aplicar controles rígidos sobre o comportamento de carregamento de DLL. As equipes de segurança também devem detectar atividades anômalas de injeção svchost.exe e investigar binários desconhecidos baseados em Go em execução no ambiente.
Resposta
Se a atividade do GopherWhisper for detectada, isolar o sistema afetado imediatamente, terminar processos maliciosos, remover DLLs injetadas, redefinir contas de serviço comprometidas e revogar quaisquer tokens de API expostos. Uma investigação forense completa deve seguir, junto com hunting de ameaças na rede para identificar artefatos relacionados ou hosts adicionais comprometidos.
"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 "
Fluxo de Ataque
Detecções
Nome Curto do Arquivo (via linha de comando)
Ver
Desativar Monitoramento em Tempo Real do Windows Defender e Outras Alterações de Preferências (via linha de comando)
Ver
Possível Uso do WebBrowserPassView (via linha de comando)
Ver
Possível Infiltração/Exfiltração de Dados/C2 via Serviços/Terceiros (via proxy)
Ver
Detecção de C&C do GopherWhisper via Slack, Discord e Microsoft Graph API [Conexão de Rede Windows]
Ver
Injeção de Processo Suspeita pelo GopherWhisper [Criação de Processo Windows]
Ver
Execução de Simulação
Pré-requisito: O Check de Pré-voo de Telemetria & Base de Referência deve ter passado.
Racional: Esta seção detalha a execução precisa da técnica adversária (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa do Ataque & Comandos:
O atacante primeiro gera um novosvchost.exeprocesso (o host escolhido para injeção). Usando um injetor de DLL reflexivo, oLaxGopher.dllmalicioso é carregado na memória desse processo, atingindo Injeção de Biblioteca Dinâmica de Vínculo (T1055.001). Uma vez que o backdoor está residente, ele abre umcmd.exeoculto para executar comandos recebidos de seu servidor C2, cumprindo o Windows Command Shell (T1059.003). Essa cadeia espelha o comportamento descrito na pesquisa do GopherWhisper e gera os dois eventos de criação de processo que a regra Sigma procura. -
Script de Teste de Regressão:
# ------------------------------------------------------------- # Simulação de Injeção de Processo Estilo GopherWhisper # ------------------------------------------------------------- $svcHost = "$env:SystemRootSystem32svchost.exe" $dllPath = "C:TempLaxGopher.dll" # Presume-se que um DLL de teste benigno exista aqui $cmdPath = "$env:SystemRootSystem32cmd.exe" # 1. Inicie uma nova instância do svchost.exe (suspensa) para ser o alvo da injeção $svchost = Start-Process -FilePath $svcHost -ArgumentList "-k", "netsvcs" ` -PassThru -WindowStyle Hidden # 2. Realize uma injeção reflexiva simplista (placeholder) # Em um teste real, você chamaria um injetor adequado; aqui apenas registramos a intenção. Write-Host "[*] Injetando $dllPath no PID $($svchost.Id) (simulado)" # Comando de injeção simulado: # .Invoke-ReflectiveDLLInjection.ps1 -Pid $svchost.Id -Path $dllPath # 3. Lançar cmd.exe do contexto do processo injetado (simulado) Write-Host "[*] Lançando cmd.exe do svchost injetado (simulado)" Start-Process -FilePath $cmdPath -ArgumentList "/c echo Comprometido > C:Temppwned.txt" ` -WindowStyle Hidden # 4. Dormir brevemente para permitir que o Sysmon registre eventos Start-Sleep -Seconds 5 -
Comandos de Limpeza:
# Termine os processos simulados svchost.exe e cmd.exe Get-Process -Name svchost -ErrorAction SilentlyContinue | Stop-Process -Force Get-Process -Name cmd -ErrorAction SilentlyContinue | Stop-Process -Force # Remover o DLL de teste (opcional) Remove-Item -Path "C:TempLaxGopher.dll" -Force -ErrorAction SilentlyContinue