SOC Prime Bias: Medium

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.

Fluxo de Ataque

Detecções

A Possibilidade de Execução Através de Linhas de Comando PowerShell Ocultas (via cmdline)

Equipe SOC Prime
18 de Maio de 2026

LOLBAS WScript / CScript (via process_creation)

Equipe SOC Prime
18 de Maio de 2026

Chamar Métodos .NET Suspeitos do Powershell (via powershell)

Equipe SOC Prime
18 de Maio de 2026

Possíveis Indicadores de Ofuscação do Powershell (via powershell)

Equipe SOC Prime
18 de Maio de 2026

LOLBAS Conhost (via cmdline)

Equipe SOC Prime
18 de Maio de 2026

IOCs (HashSha256) para detectar: PureLogs: Entrega via Esteganografia PawsRunner

Regras AI do SOC Prime
18 de Maio de 2026

IOCs (SourceIP) para detectar: PureLogs: Entrega via Esteganografia PawsRunner

Regras AI do SOC Prime
18 de Maio de 2026

IOCs (DestinationIP) para detectar: PureLogs: Entrega via Esteganografia PawsRunner

Regras AI do SOC Prime
18 de Maio de 2026

Descriptografia AES do PowerShell a partir de Variáveis de Ambiente [Windows PowerShell]

Regras AI do SOC Prime
18 de Maio de 2026

Detecção de Execução de Processo Malicioso via Conhost e PowerShell Ocultos [Criação de Processos do Windows]

Regras AI do SOC Prime
18 de Maio de 2026

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.