Ataque à cadeia de suprimentos do Rust mira arrayref, internment, e append-only-vec
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Um ataque sofisticado à cadeia de suprimentos visou o ecossistema Rust comprometendo uma conta legítima de mantenedor e usando uma identidade de typosquatting para injetar dependências maliciosas em tempo de compilação. Os atacantes contaminaram três crates amplamente usados, arrayref, internment, e append-only-vec, para executar um dropper de execução remota de código durante o processo de construção do Cargo. Isso possibilitou a execução silenciosa de código em estações de trabalho de desenvolvedores e pipelines CI/CD durante a compilação rotineira.
Investigação
Pesquisadores analisaram o ataque usando o Harden-Runner, que capturou o script de construção malicioso tentando uma conexão de saída para um servidor de carga útil através da porta 9089. Revisão forense do Git history do crates.io-index revelou a inserção direcionada de dependências maliciosas e um artificio de yank-and-upgrade projetado para empurrar os desenvolvedores para versões comprometidas. Pesquisadores também identificaram mecanismos secundários de persistência e comportamento de C2 relatado por usuários afetados.
Mitigação
A mitigação imediata inclui fixar crates legítimos em versões seguras verificadas e auditar arquivos Cargo.lock para lançamentos de dependências comprometidas. As organizações devem limpar caches locais e CI/CD, incluindo ~/.cargo/registry/cache, para remover arquivos .crate maliciosos. A filtragem de saída para conexões incomuns de ambientes de compilação e a disciplina rigorosa de lockfile também são defesas críticas de longo prazo.
Resposta
Se versões afetadas forem encontradas em um lockfile, o ambiente de construção deve ser tratado como comprometido e todas as credenciais acessíveis, incluindo chaves SSH, tokens de nuvem e segredos de CI/CD, devem ser rotacionados. Os sistemas dos desenvolvedores devem ser examinados em busca de artefatos de persistência, como serviços systemd não autorizados ou arquivos suspeitos em diretórios de configuração. Todos os artefatos de software produzidos durante o período de exposição devem ser reconstruídos a partir de fontes limpas e verificadas.
Fluxo do Ataque
Detecções
Possíveis Pontos de Persistência [ASEPs – Software/NTUSER Hive] (via registry_event)
Possíveis Comunicações de C2 Sobre HTTP para IP Direto com Porta Incomum (via proxy)
Arquivo Oculto Criado em Host Linux (via file_event)
IOCs (HashSha256) para detectar: Ataque à Cadeia de Suprimentos Rust: arrayref, internment, e append-only-vec Envenenados pelo Dropper de Tempo de Construção proc-macro1
IOCs (SourceIP) para detectar: Ataque à Cadeia de Suprimentos Rust: arrayref, internment, e append-only-vec Envenenados pelo Dropper de Tempo de Construção proc-macro1
IOCs (DestinationIP) para detectar: Ataque à Cadeia de Suprimentos Rust: arrayref, internment, e append-only-vec Envenenados pelo Dropper de Tempo de Construção proc-macro1
Detecção de Conexão de Rede de Saída Anômala [Conexão de Rede do Windows]
Execução de PowerShell e VBScript Maliciosos em Ataque à Cadeia de Suprimentos Rust [Windows Powershell]
Execução de Processo de Construção Suspeito em Diretório Temporário Unix [Criação de Processos no Linux]
Execução da Simulação
Pré-requisito: O Check de Pré-vôo de Telemetria & Base foi aprovado.
Justificativa: 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 buscar gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a um diagnóstico incorreto.
-
Narrativa e Comandos do Ataque: O adversário injectou com sucesso um crate malicioso em um projeto Rust. Quando o processo de construção é iniciado, o
script build.rsexecuta um thread em segundo plano que tenta estabelecer uma conexão com um servidor de C2 remoto na porta 9089 para buscar uma carga útil. Isso simula a “Conexão de Rede de Saída Anômala” descrita na regra. O objetivo é acionar o alerta de log de firewall/rede ao atingir a porta específica9089. -
Script de Teste de Regressão:
# Simule um dropper em tempo de construção tentando se conectar a um servidor C2 na porta 9089 # Usamos um cliente TCP para simular a tentativa de conexão de rede. $C2_IP = "127.0.0.1" # Localhost para evitar tráfego externo real durante o teste $C2_PORT = 9089 Write-Host "Simulando atividade de rede do processo de construção..." -ForegroundColor Cyan try { $client = New-Object System.Net.Sockets.TcpClient $beginConnect = $client.BeginConnect($C2_IP, $C2_PORT, $null, $null) $success = $beginConnect.AsyncWaitHandle.WaitOne(1000, $false) if ($success) { Write-Host "Conexão bem-sucedida! A telemetria deve ser gerada." -ForegroundColor Green $client.EndConnect($beginConnect) } else { Write-Host "Conexão falhou (esperado se nenhum ouvinte estiver ativo), mas a telemetria ainda deve mostrar a tentativa." -ForegroundColor Yellow } $client.Close() } catch { Write-Host "Erro durante a simulação: $($_.Exception.Message)" -ForegroundColor Red } -
Comandos de Limpeza:
# Nenhuma alteração persistente feita pelo script; no entanto, certifique-se de que quaisquer ouvintes locais sejam parados. # Se um ouvinte foi iniciado para teste, use: Stop-Process -Name "nc" -ErrorAction SilentlyContinue Write-Host "Limpeza concluída." -ForegroundColor Green