Campanha TerminalFix Permite Pivot de Rede Através de Hosts Comprometidos
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
TerminalFix é uma variante da técnica ClickFix na qual os atacantes usam prompts falsos de verificação do Cloudflare para manipular os usuários a executar comandos maliciosos do PowerShell. O ataque combina carregamento lateral de DLL, entrega de payload baseada em esteganografia e um túnel reverso baseado em WebSocket. Isso permite que a estação de trabalho comprometida funcione como um pivô de rede para reconhecimento adicional e potencial implantação de ransomware.
Investigação
A investigação examinou o ciclo de vida do ataque desde a isca inicial baseada na web até a atividade pós-exploração. Os analistas identificaram o abuso do LockScreenContentServer.exe para carregamento lateral de DLL e arquivos PNG sendo usados para entrega de payload esteganográfica. A campanha foi ainda associada ao Vice Spider com base em reportagens da mídia alemã e avisos publicados pelo BSI.
Mitigação
Os defensores devem monitorar iframes baseados em navegador suspeitos seguidos pela execução do PowerShell ou do Terminal do Windows. As organizações devem detectar comportamentos anômalos de carregamento de DLL, particularmente binários legítimos carregando DLLs de locais inesperados, como C:ProgramData. Restringir as políticas de execução do PowerShell e monitorar tarefas agendadas não autorizadas e modificações na chave Run do registro podem ainda reduzir a exposição ao ataque.
Resposta
Quando atividade do TerminalFix é detectada, isolar a estação de trabalho afetada para impedir que opere como um pivô de rede. Analisar o tráfego de rede para conexões externas de WebSocket a domínios desconhecidos e atividade de reconhecimento interno, como consultas LDAP. Revisar a telemetria do endpoint para execução não autorizada de scripts Python e o uso de ferramentas incluindo Impacket e Certipy.
Fluxo de Ataque
Ainda estamos atualizando esta parte.
Detecções
Operações Suspeitas na Chave de Registro NoWarningNoElevationOnInstall (via registry_event)
Pontos Possíveis de Persistência [ASEPs – Software/NTUSER Hive] (via registry_event)
Padrões Possíveis de Linha de Comando do Impacket (via cmdline)
Execução Remota de Código Possível usando Impacket (via cmdline)
Execução de Python de Pastas Suspeitas (via cmdline)
Enumeração Possível de Conta de Administrador ou Grupo (via cmdline)
Descoberta Suspeita de Confiança em Domínios (via cmdline)
Possível Movimento Lateral via PsExec ou Similar (via system)
Possível Movimento Lateral via PsExec ou Similar (via audit)
Uso Possível de PsExec (via audit)
IOCs (SourceIP) para detectar: TerminalFix: Quando uma Estação de Trabalho se Torna um Pivô de Rede
IOCs (DestinationIP) para detectar: TerminalFix: Quando uma Estação de Trabalho se Torna um Pivô de Rede
Detecção de Pivô de Rede TerminalFix [Conexão de Rede do Windows]
Detectar Execução Maliciosa do TerminalFix [Criação de Processo do Windows]
Detecção de Comandos Maliciosos do PowerShell para Recuperação de ZIP e PNG [Powershell do Windows]
Execução de Simulação
-
Narrativa do Ataque & Comandos: O adversário ganhou acesso inicial e está tentando estabelecer um canal de C2 persistente para se mover através da estação de trabalho. Para se misturar com o tráfego web padrão, eles utilizam o protocolo WebSocket. O atacante executa um script PowerShell que inicia uma conexão para
gitnow.dev. Isso imita o comportamento do TerminalFix onde a estação de trabalho atua como um relé. O objetivo é acionar oselection_domainandselection_connectioncritério da regra de detecção. -
Script de Teste de Regressão:
# Simulação da conexão TerminalFix C2 WebSocket # Domínio Alvo: gitnow.dev $targetDomain = "gitnow.dev" $uri = "wss://$targetDomain/path/to/c2" Write-Host "Simulando conexão TerminalFix C2 para $targetDomain..." $ws = New-Object System.Net.WebSockets.ClientWebSocket $ct = New-Object System.Threading.CancellationTokenSource try { # Tentando a conexão para gerar telemetria de Conexão de Rede $connectTask = $ws.ConnectAsync($uri, $ct.Token) # Nós utilizamos um tempo limite porque o domínio provavelmente não existe/não responderá if ($connectTask.Wait(10000)) { Write-Host "Conectado com sucesso a $targetDomain" $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Closing", $ct.Token).Wait() } } catch { Write-Host "Tentativa de conexão realizada. A telemetria deve ser gerada nos logs do Sysmon/EDR." Write-Host "Detalhe do Erro: $($_.Exception.Message)" } finally { $ws.Dispose() } -
Comandos de Limpeza:
# Nenhuma persistência ou arquivos foram criados neste script de simulação específico. # Se quaisquer arquivos temporários foram usados, eles devem ser removidos aqui. Write-Host "Limpeza da simulação completa. Nenhum artefato deixado por este script."