SOC Prime Bias: Médio

18 May 2026 18:43 UTC

PureLogs Entregue Através de Esteganografia do PawsRunner

Author Photo
SOC Prime Team linkedin icon Seguir
PureLogs Entregue Através de Esteganografia do PawsRunner
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

A campanha depende de um e-mail de phishing contendo um arquivo TXZ que entrega um carregador JavaScript, que define variáveis de ambiente e inicia conhost.exe em modo sem cabeça. O carregador então descriptografa uma montagem .NET conhecida como PawsRunner, que recupera imagens PNG contendo conteúdo criptografado oculto através de técnicas de esteganografia. Dessas imagens, o malware extrai a carga final: o infostealer PureLogs .NET. Uma vez ativo, o PureLogs conecta-se a um servidor remoto de comando e controle sobre HTTPS e exfiltra credenciais do navegador junto com informações do sistema.

Investigação

Análises mostraram que o carregador JavaScript obtém comandos de variáveis de ambiente de processo, inicia o PowerShell com uma janela oculta, e descriptografa uma carga criptografada com AES que é executada através de reflexão .NET. PawsRunner alterna entre três APIs de rede e três diferentes strings de agente de usuário enquanto busca arquivos PNG, então analisa iTXt and IEND blocos para localizar os dados ocultos e descriptografa a próxima fase com RC4. O PureLogs, por sua vez, usa TripleDES e Gzip para carregar uma DLL de downloader, faz solicitações HTTP protegidas por TLS para endpoints específicos e coleta um amplo conjunto de dados relacionados ao navegador do sistema da vítima.

Mitigação

Organizações devem bloquear anexos TXZ no gateway de e-mail, monitorar e conhost.exe instâncias rodando sem uma janela visível, e detectar PowerShell iniciado com a -w hidden flag. As equipes de segurança também devem implantar assinaturas para PawsRunner e PureLogs, restringir o tráfego de saída para o domínio e endereço IP de comando e controle identificados, e limitar a execução de montagens .NET não assinadas. Sempre que possível, a detecção de esteganografia deve ser aplicada a arquivos de imagem suspeitos de entrada.

Resposta

Se esta atividade for detectada, isole o endpoint afetado, termine processos suspeitos conhost.exe e PowerShell, e remova quaisquer binários .NET baixados do sistema. Credenciais comprometidas devem ser revogadas, a autenticação multifator implementada, e as senhas armazenadas no navegador redefinidas. Os investigadores também devem realizar análises forenses de rede para confirmar que nenhuma comunicação adicional de comando e controle ocorreu e aplicar etapas de remediação para evitar reinfecção.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ffdd99 classDef malware fill:#ff9999 %% Nodes initial_phishing["<b>Ação</b> – <b>T1566.001 Anexo de Spearphishing</b><br/>O atacante envia um e-mail de phishing com um anexo de arquivo TXZ que contém a carga maliciosa."] class initial_phishing action malicious_archive["<b>Malware</b> – <b>Nome</b>: Arquivo TXZ Malicioso<br/><b>Descrição</b>: Arquivo usado para entregar a carga inicial de JavaScript."] class malicious_archive malware user_execution["<b>Ação</b> – <b>T1204.004 Execução do Usuário</b><br/>A vítima extrai o arquivo, o JavaScript executa o PowerShell em modo oculto e lê comandos das variáveis de ambiente."] class user_execution action powershell_loader["<b>Processo</b> – <b>Nome</b>: Carregador PowerShell<br/><b>Descrição</b>: Executa a montagem .NET descriptografada via reflexão sem gravar no disco."] class powershell_loader process defense_compile["<b>Ação</b> – <b>T1027.004 Compilar Após Entrega</b><br/>A montagem .NET descriptografada é carregada na memória via reflexão."] class defense_compile action defense_compress["<b>Ação</b> – <b>T1027.015 Compressão</b><br/>A carga é descriptografada com AES‑256 e, em seguida, descomprimida usando Gzip."] class defense_compress action defense_stego["<b>Ação</b> – <b>T1027.003 Esteganografia</b><br/>O carregador baixa imagens PNG e extrai dados criptografados ocultos de blocos iTXt/IEND."] class defense_stego action masquerade_icon["<b>Ação</b> – <b>T1036.008 Mascaramento</b><br/>O binário usa imagens de gatos como seu ícone de aplicativo para parecer benigno."] class masquerade_icon action c2_encrypted["<b>Ação</b> – <b>T1573 Canal Criptografado</b><br/>Mais comunicação C2 ocorre sobre HTTPS com cargas criptografadas com AES‑256."] class c2_encrypted action credential_access["<b>Ação</b> – <b>T1555.003 Credenciais de Navegadores da Web</b><br/>PureLogs enumera navegadores e extrai senhas, cookies e arquivos de cripto-carteiras salvos."] class credential_access action purelogs_tool["<b>Ferramenta</b> – <b>Nome</b>: PureLogs<br/><b>Descrição</b>: Utilitário de dump de credenciais que coleta dados de navegadores."] class purelogs_tool tool collection_archive["<b>Ação</b> – <b>T1560.003 Arquivar Dados Coletados</b><br/>Os dados coletados são comprimidos com Gzip e criptografados com AES antes da exfiltração."] class collection_archive action exfiltration_http["<b>Ação</b> – <b>T1048.003 Exfiltração Sobre Protocolo Não C2 Descriptografado</b><br/>Os dados são enviados via requisições HTTP POST para múltiplos endpoints externos."] class exfiltration_http action %% Connections initial_phishing –>|entrega| malicious_archive malicious_archive –>|aciona| user_execution user_execution –>|executa| powershell_loader powershell_loader –>|realiza| defense_compile defense_compile –>|usa| defense_compress defense_compress –>|usa| defense_stego defense_stego –>|permite| masquerade_icon masquerade_icon –>|estabelece| c2_encrypted c2_encrypted –>|permite| credential_access credential_access –>|usa| purelogs_tool credential_access –>|coleta| collection_archive collection_archive –>|exfiltra via| exfiltration_http %% Class Assignments class initial_phishing action class malicious_archive malware class user_execution action class powershell_loader process class defense_compile action class defense_compress action class defense_stego action class masquerade_icon action class c2_encrypted action class credential_access action class purelogs_tool tool class collection_archive action class exfiltration_http action "

Fluxo de Ataque

Execução de Simulação

Pré-requisito: O Check de Pré-voo de Telemetria & Base deve ter passado.

  • Narrativa e Comandos de Ataque

    1. Etapa 1 – Preparar a carga criptografada
      • O atacante cria uma pequena carga de demonstração ("segredo"), criptografa com AES-256 usando uma chave conhecida, codifica em Base64, e armazena em uma variável de ambiente ENC_PAYLOAD.
    2. Etapa 2 – Executar o carregador de descriptografia do PowerShell
      • Um único comando lê ENC_PAYLOAD, decodifica a string Base64, constrói um .NET AesCryptoServiceProvider, deriva a chave/IV, descriptografa os dados e, opcionalmente, executa o texto sem formatação.
    3. Etapa 3 – Gerar telemetria de detecção
      • O comando PowerShell inclui a palavra literal “AES” (por exemplo, New-Object System.Security.Cryptography.AesCryptoServiceProvider) e é registrado como EventID 4104, satisfazendo a regra de detecção.
  • Script de Teste de Regressão

    # -------------------------------------------------
    # Simulação de Descriptografia AES do PowerShell (Aciona a detecção)
    # -------------------------------------------------
    # 1. Defina uma chave estática de 256 bits e IV (para propósitos de demonstração)
    $key = [byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,
                       0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20)
    $iv  = [byte[]](0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0)
    
    # 2. Carga de texto sem formatação (exemplo)
    $plain = [System.Text.Encoding]::UTF8.GetBytes("dados secretos")
    
    # 3. Criptografar a carga usando AES (CBC, PKCS7)
    $aes = [System.Security.Cryptography.AesCryptoServiceProvider]::new()
    $aes.Key = $key
    $aes.IV  = $iv
    $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC
    $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7
    $encryptor = $aes.CreateEncryptor()
    $cipherBytes = $encryptor.TransformFinalBlock($plain,0,$plain.Length)
    $cipherB64 = [Convert]::ToBase64String($cipherBytes)
    
    # 4. Armazenar texto cifrado em uma variável de ambiente
    
    # 5. Carregador de descriptografia – a linha exata que será registrada (contém "AES")
    $loader = @"
    `$enc = [System.Environment]::GetEnvironmentVariable('ENC_PAYLOAD')
    `$bytes = [Convert]::FromBase64String(`$enc)
    `$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider
    `$aes.Key = $($key -join ',')
    `$aes.IV  = $($iv -join ',')
    `$decryptor = `$aes.CreateDecryptor()
    `$plain = `$decryptor.TransformFinalBlock(`$bytes,0,`$bytes.Length)
    `$result = [System.Text.Encoding]::UTF8.GetString(`$plain)
    Write-Output `"Descriptografado: `$result`"
    "@
    
    # Execute o carregador (será capturado como EventID 4104)
    Invoke-Expression $loader
  • Comandos de Limpeza

    # Remover a variável de ambiente
    
    # Limpar quaisquer variáveis temporárias da sessão
    Remove-Variable -Name key,iv,plain,cipherBytes,cipherB64,loader -ErrorAction SilentlyContinue

Validação Pós-Simulação

  1. Execute a consulta de validação (exemplo de KQL acima) mas filtre para "ScriptBlockText contains 'AES'" para confirmar que a detecção disparou.
  2. Revise os detalhes do alerta no SIEM; verifique se o nome do alerta corresponde à regra (se definida) e se a severidade é reportada como Alta.

Considerações Finais

  • A regra detecta com sucesso o cenário de uso direto de “AES”.
  • Os adversários podem evitar dividindo a palavra (por exemplo, "AE"+"S"), carregando a classe .NET via reflexão, ou realizando a descriptografia dentro de binários compilados.
  • Melhorar a regra com indicadores comportamentais (uso de variáveis de ambiente para texto cifrado, strings de alta entropia, criação de AesCryptoServiceProvider objetos, e subsequentes TransformFinalBlock chamadas) melhorará a resiliência a ofuscação simples.