SOC Prime Bias: Médio

03 Fev 2026 20:06

Quando o Malware Contra-ataca

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
Quando o Malware Contra-ataca
shield icon

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.

graph TB %% Class Definitions classDef action fill:#99ccff classDef file fill:#ccffcc classDef process fill:#ffeb99 classDef malware fill:#ff9999 classDef operator fill:#ff9900 %% Nodes – Files and Registry logon_script_file[“<b>Arquivo</b>: 0a1a98b5f9fc7c62.bat<br/><b>Localização</b>: %APPDATA%\\Microsoft\\…”] class logon_script_file file run_key[“<b>Registro</b>: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\bada287ebf”] class run_key file %% Nodes – Techniques (Actions) persistence_run[“<b>Técnica</b> – T1037.001 Scripts de inicialização de boot ou logon<br/><b>Descrição</b>: Arquivo em lote oculto colocado em %APPDATA% e registrado na chave Run para persistência.”] class persistence_run action powershell_interpreter[“<b>Técnica</b> – T1059.001 Interpretador de comandos e scripts: PowerShell<br/><b>Descrição</b>: Executa script PowerShell decodificado com política de bypass.”] class powershell_interpreter action obfuscation[“<b>Técnica</b> – T1027 Arquivos ou informações ofuscadas<br/><b>Descrição</b>: Array de bytes criptografado com XOR e lógica de compilação após a entrega.”] class obfuscation action deobfuscate[“<b>Técnica</b> – T1140 Desofuscar/Decodificar arquivos ou informações<br/><b>Descrição</b>: Decodificação Base64 e XOR para produzir shellcode.”] class deobfuscate action reflective_loading[“<b>Técnica</b> – T1620 Carregamento reflexivo de código<br/><b>Descrição</b>: Aloca memória no processo alvo e grava o shellcode.”] class reflective_loading action process_injection[“<b>Técnica</b> – T1055.002 Injeção de processo: Injeção de executável portátil<br/><b>Descrição</b>: Injeta shellcode via CreateRemoteThread em svchost.exe e explorer.exe.”] class process_injection action sandbox_evasion[“<b>Técnica</b> – T1497 Evasão de virtualização ou sandbox<br/><b>Descrição</b>: Verifica ambientes de máquina virtual e sandbox antes de prosseguir.”] class sandbox_evasion action indirect_cmd[“<b>Técnica</b> – T1202 Execução indireta de comandos<br/><b>Descrição</b>: Habilita ou desabilita o Gerenciador de Tarefas e o Controle de Conta de Usuário via C2.”] class indirect_cmd action uac_bypass[“<b>Técnica</b> – T1548.002 Abuso do mecanismo de controle de elevação: Bypass do Controle de Conta de Usuário<br/><b>Descrição</b>: Desabilita o Controle de Conta de Usuário e a interface de segurança.”] class uac_bypass action scheduled_task[“<b>Técnica</b> – T1053 Tarefa agendada/Job<br/><b>Descrição</b>: Cria uma tarefa schtasks.exe para executar a carga útil no logon.”] class scheduled_task action autostart[“<b>Técnica</b> – T1547 Execução automática em boot ou logon<br/><b>Descrição</b>: Persistência dupla via chave Run e tarefa agendada.”] class autostart action cred_from_browser[“<b>Técnica</b> – T1555.003 Credenciais de navegadores web<br/><b>Descrição</b>: Coleta credenciais armazenadas.”] class cred_from_browser action alternate_auth[“<b>Técnica</b> – T1550.004 Uso de material alternativo de autenticação: Cookie de sessão web<br/><b>Descrição</b>: Extrai cookies de sessão e tokens.”] class alternate_auth action archive_data[“<b>Técnica</b> – T1560.002 Arquivar dados coletados: Arquivo via biblioteca<br/><b>Descrição</b>: Compacta credenciais coletadas em memória.”] class archive_data action compression[“<b>Técnica</b> – T1027.015 Compressão<br/><b>Descrição</b>: Compacta dados em ZIP antes da exfiltração.”] class compression action exfil_webhook[“<b>Técnica</b> – T1567.004 Exfiltração via webhook<br/><b>Descrição</b>: Envia o arquivo ZIP para webhook do Discord e Bot do Telegram.”] class exfil_webhook action web_service[“<b>Técnica</b> – T1102.003 Serviço web: Comunicação unidirecional<br/><b>Descrição</b>: Usa HTTPS para Discord e Telegram para exfiltração.”] class web_service action compile_after_delivery[“<b>Técnica</b> – T1027.004 Compilação após a entrega<br/><b>Descrição</b>: Compila código de interoperabilidade C# em tempo de execução para injeção.”] class compile_after_delivery action stripped_payload[“<b>Técnica</b> – T1027.008 Cargas úteis removidas<br/><b>Descrição</b>: Assembly .NET final sem metadados.”] class stripped_payload action embedded_payload[“<b>Técnica</b> – T1027.009 Cargas úteis incorporadas<br/><b>Descrição</b>: Shellcode Donut incorpora a carga útil .NET.”] class embedded_payload action %% Nodes – Files Produced ps_script_file[“<b>Arquivo</b>: ps_7b948266.ps1<br/><b>Conteúdo</b>: Decodifica a carga Base64 e executa.”] class ps_script_file file donut_shellcode[“<b>Arquivo</b>: decoded.bin<br/><b>Tipo</b>: Shellcode gerado pelo Donut”] class donut_shellcode file %% Nodes – Processes svchost_process[“<b>Processo</b>: svchost.exe”] class svchost_process process explorer_process[“<b>Processo</b>: explorer.exe”] class explorer_process process %% Nodes – Malware credential_stealer[“<b>Malware</b>: ladrão .NET<br/><b>Descrição</b>: Extrai senhas, cookies e tokens de navegadores.”] class credential_stealer malware %% Connections – Attack Flow logon_script_file –>|registrado em| run_key run_key –>|habilita| persistence_run persistence_run –>|executa| powershell_interpreter powershell_interpreter –>|executa| ps_script_file ps_script_file –>|contém| obfuscation obfuscation –>|requer| deobfuscate deobfuscate –>|produz| donut_shellcode donut_shellcode –>|carregado por| reflective_loading reflective_loading –>|grava em| svchost_process svchost_process –>|injeta via| process_injection process_injection –>|alvo| explorer_process process_injection –>|utiliza| compile_after_delivery process_injection –>|utiliza| embedded_payload explorer_process –>|executa| credential_stealer credential_stealer –>|extrai| cred_from_browser credential_stealer –>|extrai| alternate_auth cred_from_browser –>|dados coletados| archive_data archive_data –>|compactado por| compression compression –>|enviado via| exfil_webhook exfil_webhook –>|utiliza| web_service sandbox_evasion –>|verifica antes de| powershell_interpreter indirect_cmd –>|controla| uac_bypass scheduled_task –>|persistência alternativa| autostart autostart –>|garante| persistence_run

Fluxo de Ataque

Detecções

Possível Abuso do Telegram Como Canal de Comando e Controle (via dns_query)

Equipe SOC Prime
02 Fev 2026

Possíveis Pontos de Persistência [ASEPs – Software/Colmeia NTUSER] (via registry_event)

Equipe SOC Prime
02 Fev 2026

Chamar Funções de API do Windows Suspeitas a partir do Powershell (via powershell)

Equipe SOC Prime
02 Fev 2026

Strings do Powershell Suspeitas (via powershell)

Equipe SOC Prime
02 Fev 2026

Possível Uso de Schtasks ou AT para Persistência (via cmdline)

Equipe SOC Prime
02 Fev 2026

Tentativa de Manipulação Suspeita de Fluxo de Dados Alternativo (ADS) Zone.Identifier (via process_creation)

Equipe SOC Prime
02 Fev 2026

Powershell Executando Arquivo No Diretório Suspeito Usando Política de Execução Bypass (via cmdline)

Equipe SOC Prime
02 Fev 2026

IOCs (DestinationIP) para detectar: Quando o Malware Responde

Regras de IA SOC Prime
02 Fev 2026

IOCs (SourceIP) para detectar: Quando o Malware Responde

Regras de IA SOC Prime
02 Fev 2026

IOCs (HashMd5) para detectar: Quando o Malware Responde

Regras de IA SOC Prime
02 Fev 2026

IOCs (HashSha1) para detectar: Quando o Malware Responde

Regras de IA SOC Prime
02 Fev 2026

Persistência via Chave Run para Execução de Arquivo em Lote [Evento do Registro do Windows]

Regras de IA SOC Prime
02 Fev 2026

Detecção de Injeção de Memória e Execução de Carga Útil via PowerShell [Windows Powershell]

Regras de IA SOC Prime
02 Fev 2026

Detecção de Execução de Lote e PowerShell para Persistência de Malware Oculto [Criação de Processo do Windows]

Regras de IA SOC Prime
02 Fev 2026

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:

    1. 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).
    2. 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.
    3. 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.
    4. 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”.
    5. 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."