Arsenal da ESET Research FishMonger Atualizado: SprySOCKS para Windows
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Pesquisadores da ESET descobriram duas novas variantes do backdoor SprySOCKS para Windows, chamadas WIN_DRV e WIN_PLUS, que estão ligadas ao grupo de ameaças FishMonger. A versão WIN_DRV usa um driver de kernel para obter furtividade aprimorada, incluindo a capacidade de ocultar conexões de rede, processos e arquivos. Ambas as variantes suportam vários protocolos de comunicação e fornecem um amplo conjunto de comandos para controle do sistema e roubo de dados.
Investigação
A investigação baseou-se em amostras de malware descobertas através do VirusTotal e da telemetria da ESET, revelando atividades que se estendiam de 2023 a 2024. Os pesquisadores analisaram as cadeias completas de execução, incluindo o carregamento DLL sideloading, carregamento de driver do kernel através do DriverLoader e do RawWNPF, e injeção de processos usando técnicas de doppelgänging. O estudo também revelou padrões de comunicação de comando e controle e chaves de criptografia hardcoded compartilhadas entre vários componentes.
Mitigação
As organizações devem priorizar a correção de aplicativos voltados para a internet para reduzir o risco de comprometimento inicial através de vulnerabilidades do tipo N-day. A fiscalização rigorosa da assinatura de drivers e o monitoramento da instalação não autorizada de drivers de kernel são essenciais. Os defensores também devem monitorar tarefas agendadas suspeitas, alterações no registro sob Opções de Execução de Arquivos de Imagem, e registros de processadores de impressão incomuns.
Resposta
Se essas ameaças forem detectadas, os sistemas afetados devem ser isolados imediatamente para impedir movimentos laterais adicionais ou roubo de dados. Os investigadores devem realizar uma revisão forense detalhada para determinar o vetor de intrusão original e o escopo completo do comprometimento, com atenção especial para a persistência em nível de kernel. Os logs de rede também devem ser verificados para comunicação com infraestruturas conhecidas de comando e controle, enquanto mudanças no sistema como novos serviços ou chaves de registro alteradas devem ser auditadas.
graph TB %% Definição das classes classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef defense fill:#ffcc99 %% Acesso inicial action_exploit[“<b>Ação</b> – <b>T1190 Exploit Public-Facing Application</b><br/>Descrição: Exploração de vulnerabilidades N-day<br/>em servidores públicos para obter acesso inicial.”] class action_exploit action %% Ramificação de variantes op_variant((“AND”)) class op_variant tool %% Caminho da variante WIN_DRV action_win_drv_persist[“<b>Ação</b> – <b>T1546.012 Event Triggered Execution: IFEO</b><br/>Descrição: Registro de um depurador malicioso para vds.exe<br/>Ferramenta: script klelam00007.bat”] class action_win_drv_persist action action_win_drv_dll[“<b>Ação</b> – <b>T1574.001 Hijack Execution Flow: DLL</b><br/>Descrição: DLL side-loading usando executável legítimo assinado<br/>Ferramenta: ApphostRegistrationVerifier.exe carrega tpsvcloc.dll”] class action_win_drv_dll action malware_loader[“<b>Malware</b>: Loader<br/>Descrição: Utiliza Process Doppelgänging<br/>para realizar injeção.”] class malware_loader malware action_reflective[“<b>Ação</b> – <b>T1620 Reflective Code Loading</b><br/>Descrição: Injeção do shellcode do backdoor SprySOCKS<br/>via Process Doppelgänging.”] class action_reflective action process_svchost[“<b>Processo</b>: svchost.exe<br/>Descrição: Processo alvo para injeção<br/>de shellcode.”] class process_svchost process malware_sprysocks[“<b>Malware</b>: SprySOCKS Backdoor<br/>Descrição: Mantém C2 e realiza coleta<br/>de informações.”] class malware_sprysocks malware tool_driver_loader[“<b>Ferramenta</b>: DriverLoader<br/>Descrição: Implanta driver<br/>em nível de kernel.”] class tool_driver_loader tool malware_rootkit[“<b>Malware</b>: RawWNPF Kernel Driver<br/>Descrição: Atua como Rootkit (T1014)<br/>para ocultar processos, arquivos e chaves do registro.”] class malware_rootkit malware action_port_knocking[“<b>Ação</b> – <b>T1205.001 Traffic Signaling: Port Knocking</b><br/>Descrição: Desvio de tráfego TCP especialmente criado<br/>através da Windows Filtering Platform.”] class action_port_knocking action %% Caminho da variante WIN_PLUS action_win_plus_persist[“<b>Ação</b> – <b>T1547.012 Boot or Logon Autostart Execution: Print Processors</b><br/>Descrição: Instalação de VSPMsg.dll como processador<br/>de impressão para persistência.”] class action_win_plus_persist action %% Pós-exploração e coleta action_keylogging[“<b>Ação</b> – <b>T1056.001 Input Capture: Keylogging</b><br/>Descrição: Captura de teclas pressionadas,<br/>dados da área de transferência e títulos de janelas.”] class action_keylogging action action_c2[“<b>Ação</b> – <b>T1132.001 Command and Control: Protocol</b><br/>Descrição: Comunicação via TCP, UDP e WebSocket<br/>utilizando criptografia AES-128.”] class action_c2 action action_defense_impair[“<b>Ação</b> – <b>T1562.004 Defense Impairment: Disable or Modify Tools</b><br/>Descrição: Modificação das regras do Firewall do Windows<br/>usando netsh.exe para permitir tráfego.”] class action_defense_impair action %% Conexões action_exploit –>|leva_a| op_variant %% Fluxo WIN_DRV op_variant –>|caminho_da_variante| action_win_drv_persist action_win_drv_persist –>|leva_a| action_win_drv_dll action_win_drv_dll –>|carrega| malware_loader malware_loader –>|executa| action_reflective action_reflective –>|injeta_em| process_svchost process_svchost –>|executa| malware_sprysocks malware_sprysocks –>|implanta| tool_driver_loader tool_driver_loader –>|mapeia| malware_rootkit malware_rootkit –>|facilita| action_port_knocking %% Fluxo WIN_PLUS op_variant –>|caminho_da_variante| action_win_plus_persist action_win_plus_persist –>|utiliza| action_reflective %% Pós-exploração comum malware_sprysocks –>|realiza| action_keylogging malware_sprysocks –>|comunica-se_via| action_c2 malware_sprysocks –>|executa| action_defense_impair %% Conexões lógicas action_defense_impair –>|habilita| action_c2
Fluxo de Ataque
Detecções
Possível Uso de Schtasks ou AT para Persistência (via linha de comando)
Ver
Possível Uso de PING para Execução com Atraso (via linha de comando)
Ver
Modificações Suspeitas no Firewall via CLI (via linha de comando)
Ver
Atividade de Rede do Backdoor SprySOCKS FishMonger [Conexão de Rede Windows]
Ver
Detecção de Svchost.exe Suspeitos e Atividades Relacionadas [Criação de Processo no Windows]
Ver
## Execução da Simulação
Pré-requisito: O Check de Pré-voo de Telemetria e Base devem ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (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. Exemplos abstratos ou não relacionados levarão a um diagnóstico errado.
-
Narrativa do Ataque e Comandos: O adversário implantou com sucesso o backdoor SprySOCKS em um host Windows comprometido. Para estabelecer um canal de comando e controle, o malware abre um socket de escuta na porta 53781. Para garantir que a comunicação seja reconhecida pelo seu servidor C2 personalizado, o malware injeta o valor hex mágico
0xACACBCBCnos pacotes de handshake iniciais. Isso simula o comportamento específico do protocolo do grupo FishMonger para facilitar a comunicação confiável através de tráfego interceptado ou desviado. -
Script de Teste de Regressão:
# Script de Simulação: Geração de Artefato de Rede SprySOCKS # Este script imita o comportamento de rede do backdoor SprySOCKS. $TargetPort = 53781 $MagicValue = [byte[]] @(0xAC, 0xAC, 0xBC, 0xBC) $Listener = [System.Net.Sockets.TcpListener]$TargetPort try { Write-Host "[+] Iniciando ouvinte na porta $TargetPort..." -ForegroundColor Cyan $Listener.Start() $Client = $Listener.AcceptTcpClient() $Stream = $Client.GetStream() Write-Host "[+] Conexão estabelecida. Enviando valor mágico $MagicValue..." -ForegroundColor Yellow # Injetando o valor mágico no fluxo para acionar a lógica 'selection1' $Stream.Write($MagicValue, 0, $MagicValue.Length) Start-Sleep -Seconds 5 } catch { Write-Error "[-] Simulação falhou: $($_.Exception.Message)" } finally { Write-Host "[+] Limpando conexões..." -ForegroundColor Cyan $Stream.Close() $Client.Close() $Listener.Stop() } -
Comandos de Limpeza:
# Garantir que nenhum ouvinte desonesto permaneça ativo Get-NetTCPConnection -LocalPort 53781 -ErrorAction SilentlyContinue | Remove-NetTCPConnection Write-Host "[+] Limpeza completa." -ForegroundColor Green