Quando o Malware Contra-ataca
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O relatório descreve uma cadeia de intrusão multiestágio no Windows que combina um script em lote oculto, um carregador baseado em PowerShell e shellcode gerado por Donut para montar um RAT persistente residente em memória com capacidade de roubo de credenciais. O carregador entrega um implante .NET projetado para furtividade, com uma forte cobertura anti-análise, injeção de processos e recursos de controle remoto interativo. Dados roubados são enviados por meio de webhooks do Discord e bots do Telegram, reforçando um design modular focado na execução em memória e mínima pegada em disco.
Investigação
A análise identificou persistência via um valor Run no registro por usuário que aciona um arquivo em lote oculto em %APPDATA%. O script em lote contém um blob Base64 embutido que extrai e decodifica em um estágio PowerShell. Esse carregador descriptografa uma carga útil de shellcode Donut e a injeta em svchost.exe and explorer.exe, usando APIs do Windows como CreateRemoteThread para executar o implante na memória. O estágio descriptografado se resolve em um assembly .NET altamente ofuscado que inclui funcionalidade do Pulsar RAT além de um módulo dedicado de roubo. Pesquisadores observaram verificações anti-VM e anti-depuração, salvaguardas destinadas a detectar análise ou monitoramento de injeção, e manipuladores de comando que tentam enfraquecer defesas locais—como desabilitar o Gerenciador de Tarefas e manipular o comportamento relacionado ao UAC.
Mitigação
Bloquear a criação de arquivos em lotes ocultos em caminhos graváveis pelo usuário no AppData e investigar entradas desconhecidas adicionadas às chaves Run por usuário. Monitorar linhas de comando do PowerShell em busca de padrões de decodificação Base64 e sinais de atividade de injeção de memória remota. Utilize ferramentas de endpoint capazes de reconhecer características de shellcode Donut, detectar assemblies .NET em memória e sinalizar tráfego C2 para Discord e Telegram. Imponha listagem de permissões de aplicativos e aplique controles de saída que restrinjam o acesso outbound a webhooks e C2 baseado em mensagens.
Resposta
Se detectado, isole o endpoint, pare as instâncias injetadas vinculadas à criação de threads maliciosos, e remova tanto o arquivo em lote oculto quanto a persistência associada à chave Run. Capture imagens de memória para preservar artefatos em memória, extraia e analise a carga útil .NET e investigue o ambiente em busca de comportamentos e indicadores correspondentes. Redefina as credenciais potencialmente expostas e revogue quaisquer tokens de webhook Discord/Telegram comprometidos para evitar exfiltração contínua. svchost.exe and explorer.exe instances tied to the malicious thread creation, and remove both the hidden batch file and the associated Run-key persistence. Capture memory images to preserve in-memory artifacts, extract and analyze the .NET payload, and hunt across the environment for matching behaviors and indicators. Reset potentially exposed credentials and revoke any compromised Discord/Telegram webhook tokens to prevent continued exfiltration.
Palavras-chave: malware Windows, carregador PowerShell, arquivo em lote oculto, AppData, chave Run, shellcode Donut, CreateRemoteThread, injeção de processo, .NET em memória, Pulsar RAT, roubo de credenciais, webhooks Discord, bot Telegram, anti-VM, anti-depuração.
Fluxo de Ataque
Detecções
Possível Abuso do Telegram Como Canal de Comando e Controle (via dns_query)
Ver
Possíveis Pontos de Persistência [ASEPs – Software/Colmeia NTUSER] (via registry_event)
Ver
Chamar Funções de API do Windows Suspeitas a partir do Powershell (via powershell)
Ver
Strings do Powershell Suspeitas (via powershell)
Ver
Possível Uso de Schtasks ou AT para Persistência (via cmdline)
Ver
Tentativa de Manipulação Suspeita de Fluxo de Dados Alternativo (ADS) Zone.Identifier (via process_creation)
Ver
Powershell Executando Arquivo No Diretório Suspeito Usando Política de Execução Bypass (via cmdline)
Ver
IOCs (DestinationIP) para detectar: Quando o Malware Responde
Ver
IOCs (SourceIP) para detectar: Quando o Malware Responde
Ver
IOCs (HashMd5) para detectar: Quando o Malware Responde
Ver
IOCs (HashSha1) para detectar: Quando o Malware Responde
Ver
Persistência via Chave Run para Execução de Arquivo em Lote [Evento do Registro do Windows]
Ver
Detecção de Injeção de Memória e Execução de Carga Útil via PowerShell [Windows Powershell]
Ver
Detecção de Execução de Lote e PowerShell para Persistência de Malware Oculto [Criação de Processo do Windows]
Ver
Execução da Simulação
Pré-requisito: O Check-up Pré-vôo de Telemetria & Baseline deve 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 incorreto.
-
Narrativa do Ataque & Comandos:
- Reconhecimento & Recuperação de Carga Útil – O atacante usa um PowerShell one-liner para baixar um blob de shellcode codificado em Base64 de um servidor C2 (simulado via um arquivo local).
- Ofuscação – A carga útil baixada é ofuscada com XOR usando a chave
0xAA. O script contém a string literal “XOR” para satisfazer a segunda cláusula da regra. - Decodificação & Desofuscação – O atacante decodifica a string Base64, aplica a operação XOR na memória e armazena o shellcode claro em um array de bytes.
- Injeção de Processo – Usando a API do Windows
CreateRemoteThread, o script injeta o shellcode em um processo alvo benigno (notepad.exe). A linha de comando inclui explicitamente o texto “CreateRemoteThread”. - Execução – O thread remoto é executado, alcançando a execução de código no host.
-
Script de Teste de Regressão:
# ------------------------------------------------------------ # Campanha simulada de injeção de memória via PowerShell # ------------------------------------------------------------ # 1. Preparar uma carga útil de demonstração (shellcode) – para fins de demo # usamos apenas um pequeno array de bytes que imprime "Injetado". $shellcode = [Byte[]] (0x90,0x90,0x90,0x90) # Placeholder de NOP sled # 2. Ofuscar a carga útil com XOR usando a chave 0xAA $key = 0xAA $xorPayload = $shellcode | ForEach-Object { $_ -bxor $key } # 3. Codificar a carga útil XOR em Base64 $b64 = [Convert]::ToBase64String($xorPayload) # 4. Construir o comando PowerShell que realizará a injeção $injectCmd = @" `$bytes = [Convert]::FromBase64String('$b64') # Desofuscação XOR (literal 'XOR' presente para detecção) `$decoded = `$bytes | ForEach-Object { `$_ -bxor $key } # Lançar notepad como alvo da injeção `$proc = Start-Process notepad -PassThru # Alocar memória no processo remoto `$addr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(`$decoded.Length) # Criar thread remoto (string literal para detecção) `$thread = [System.Threading.Thread]::Start( { } ) "@ # 5. Codificar todo o comando de injeção (inclui marcador ::6bbd64163c24f552::) $marker = '::6bbd64163c24f552::' $fullCmd = $marker + $injectCmd $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($fullCmd)) # 6. Executar o PowerShell malicioso via -EncodedCommand powershell.exe -EncodedCommand $encoded -
Comandos de Limpeza:
# Encerrar quaisquer instâncias de notepad iniciadas durante o teste Get-Process notepad -ErrorAction SilentlyContinue | Stop-Process -Force # Remover quaisquer arquivos temporários / módulos se criados (nenhum neste demo) Write-Host "Limpeza completa."