Execuções do PowerShell Armazenadas no Registro Iniciam Mineração de Criptomoeda em Memória
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Uma cadeia de infecção em várias etapas utiliza técnicas sofisticadas de ofuscação para implantar um minerador de criptomoeda. O ataque armazena cargas úteis no Registro e utiliza registros DNS TXT juntamente com esteganografia em arquivos PNG e WAV para entregar as etapas subsequentes. A carga útil final carrega um assembly .NET diretamente na memória para realizar a mineração de criptomoedas por meio do ecossistema XMRig.
Investigação
Os analistas investigaram alertas repetidos de execução de PowerShell e descobriram uma estratégia de ocultação de carga útil em camadas. A cadeia de infecção reconstrói conteúdo malicioso a partir de contêineres não convencionais, incluindo dados de pixels de imagem e nibbles de arquivos de áudio. A execução progride de scripts PowerShell armazenados no Registro através de várias etapas até, finalmente, carregar um minerador de criptomoeda .NET diretamente na memória.
Mitigação
As organizações devem impor políticas estritas de execução de PowerShell e monitorar modificações suspeitas do Registro associadas ao armazenamento de carga útil. As soluções EDR devem detectar o carregamento de assembly .NET na memória e consultas anômalas de registros DNS TXT. A lista de permissões de aplicação também deve ser implementada para impedir drivers de modo kernel não autorizados como WinRing0.sys de carregamento.
Resposta
Se atividade maliciosa for detectada, os hosts afetados devem ser isolados imediatamente para interromper a comunicação C2 e a mineração de criptomoedas. Os respondedores devem realizar uma varredura forense em busca de Tarefas Agendadas não autorizadas, assinaturas WMI e exclusões do Microsoft Defender. Os registros de rede também devem ser revisados para conexões com domínios C2 conhecidos e consultas DNS-over-HTTPS suspeitas.
Fluxo de Ataque
Ainda estamos atualizando esta parte.
Detecções
Strings Suspeitas de Powershell (via powershell)
Chame Métodos .NET Suspeitos a partir do Powershell (via powershell)
Arquivo de Imagem Foi Criado Por Processo Suspeito (via file_event)
Canal de Comando e Controle DoH e DNS (via proxy)
IOCs (HashMd5) para detectar: De PowerShell Armazenado no Registro a Mineração de Criptomoeda na Memória: Uma Cadeia de Infecção em Várias Etapas
IOCs (SourceIP) para detectar: De PowerShell Armazenado no Registro a Mineração de Criptomoeda na Memória: Uma Cadeia de Infecção em Várias Etapas
IOCs (DestinationIP) para detectar: De PowerShell Armazenado no Registro a Mineração de Criptomoeda na Memória: Uma Cadeia de Infecção em Várias Etapas
Detecte DNS-over-HTTPS e Comunicação C2 POST HTTP/HTTPS [Conexão de Rede do Windows]
Assinatura de Evento Permanente WMI para Execução de PowerShell Baseada em Registro [Evento de Registro do Windows]
Ofuscação e Execução Secreta do PowerShell [Windows Powershell]
Execução de Simulação
-
Narrativa & Comandos do Ataque: O adversário busca estabelecer persistência a longo prazo no host comprometido. Em vez de usar uma chave ‘Run’ comum, optam por uma assinatura de evento permanente WMI mais discreta. O atacante cria um WMI
CommandLineEventConsumer. Este consumidor é configurado para executarpowershell.exe. Para evitar análise estática do comando, a carga útil maliciosa ou configuração real é armazenada em um caminho de registro não padrão:HKLM:Softwareuf42a9660377vstdfehzr. Quando o evento WMI é acionado (simulado aqui por um evento do sistema), o processo PowerShell será iniciado, referenciando a chave de registro específica, acionando assim a regra de detecção. -
Script de Teste de Regressão:
# Script de Simulação: Execução de PowerShell Baseada em Registro WMI # Este script cria a chave de registro específica e a assinatura WMI necessária para acionar a regra. $regPath = "HKLM:Softwareuf42a9660377" $regValueName = "vstdfehzr" $regValueData = "Invoke-Expression (Get-ItemProperty -Path '$regPath$regValueName').Payload" # 1. Criar a chave de registro e valor suspeitos if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null } New-ItemProperty -Path $regPath -Name $regValueName -Value "Write-Host 'Malicious Payload Triggered!'" -PropertyType String -Force | Out-Null # 2. Criar Assinatura de Evento Permanente WMI # Usamos um Filtro para acionar em um evento comum (por exemplo, tempo de atividade/inicialização do sistema) ou simular por meio da criação de consumidor $filterName = "Win32_LocalTimeFilter" $consumerName = "Win32_CommandLineConsumer" $subscriptionName = "WmiPersistenceSubscription" # Criar Filtro (Aciona a cada minuto para fins de simulação) $filterArgs = @{ Name = $filterName QueryLanguage = "WQL" Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" } $filter = Set-WmiInstance -Class __EventFilter -Arguments $filterArgs # Criar Consumidor (O comando do PowerShell referenciando o caminho de registro específico) $commandLine = "powershell.exe -Command `"$regValueData`"" $consumerArgs = @{ Name = $consumerName CommandLineTemplate = $commandLine } $consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $consumerArgs # Vincular Filtro e Consumidor Set-WmiInstance -Class __FilterToConsumerBinding -Arguments @{ Filter = $filter Consumer = $consumer } Write-Host "[+] Simulação: Assinatura WMI e Chave de Registro criada com sucesso." Write-Host "[+] Aguardando evento WMI para acionar execução do PowerShell..." # Nota: Em um ambiente real, aguardamos o evento. # Para fins de teste, a regra está muitas vezes procurando pela *criação* ou pelo *evento acionador*. -
Comandos de Limpeza:
# Script de Limpeza Write-Host "[!] Limpando artefatos de simulação..." # 1. Remove Assinatura WMI Get-WmiObject -Namespace rootsubscription -Class __EventFilter -Filter "Name='Win32_LocalTimeFilter'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class CommandLineEventConsumer -Filter "Name='Win32_CommandLineConsumer'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class __FilterToConsumerBinding | Where-Object { $_.Filter -match "Win32_LocalTimeFilter" } | Remove-WmiObject # 2. Remover Chave de Registro Remove-Item -Path "HKLM:Softwareuf42a9660377" -Recurse -Force Write-Host "[+] Limpeza concluída."