PareRansomware: Análise da Ameaça Gunra Ransomware
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Gunra é uma operação de ransomware-como-serviço (RaaS) que segue um modelo de dupla extorsão, combinando criptografia de dados com exfiltração. Os atores da ameaça visam infraestrutura crítica, entidades governamentais e uma ampla gama de organizações comerciais em todo o mundo. O ransomware é baseado no código-fonte vazado do Conti e evoluiu para suportar ambientes Windows e Linux.
Investigação
O FBI e parceiros internacionais observaram atores do Gunra explorando vulnerabilidades expostas à internet e abusando de credenciais roubadas para acesso inicial. A investigação identificou o uso de bibliotecas Impacket para movimento lateral e várias ferramentas de código aberto para exfiltração de dados. O grupo também depende de um portal de negociação baseado em Tor e qTox para se comunicar com as vítimas.
Mitigação
As organizações devem priorizar a correção de vulnerabilidades conhecidas exploradas em sistemas expostos à internet, especialmente gateways VPN e infraestrutura RDP. Manter backups offline imutáveis e impor uma segmentação de rede rigorosa são críticos para limitar movimentos laterais. A autenticação multifatorial (MFA) também deve ser habilitada em todos os serviços de acesso remoto.
Resposta
Se a atividade do Gunra for detectada, hosts comprometidos devem ser isolados imediatamente enquanto preservam artefatos forenses relevantes, incluindo arquivos criptografados e logs do sistema. A caça de ameaças deve começar para determinar o escopo da intrusão e revisar a atividade de contas privilegiadas. As organizações devem então seguir procedimentos formais de expulsão para conter completamente e remover o adversário do ambiente.
Fluxo de Ataque
Detecções
Padrões Possíveis de Linha de Comando Impacket (via cmdline)
Proof of Value
Criar ou Excluir Cópia de Sombra via Powershell, CMD ou WMI (via cmdline)
Proof of Value
Software Alternativo de Acesso Remoto / Gestão (via sistema)
Proof of Value
Comportamento Possível de Execução Impacket (via auditoria)
Proof of Value
Software Alternativo de Acesso Remoto / Gestão (via auditoria)
Proof of Value
IOCs (HashSha256) para detectar: #StopRansomware: Ransomware Gunra
Proof of Value
IOCs (SourceIP) para detectar: #StopRansomware: Ransomware Gunra
Proof of Value
IOCs (DestinationIP) para detectar: #StopRansomware: Ransomware Gunra
Proof of Value
Detecção de Manipulação de Conta e Escalonamento de Privilégio do Ransomware Gunra [Log de Evento de Segurança do Windows]
Proof of Value
Detecção de Vulnerabilidades Exploradas em FortiOS e FortiProxy [Firewall]
Proof of Value
Movimento Lateral e Detecção de Despejo de Credenciais do Ransomware Gunra [Criação de Processo do Windows]
Proof of Value
Detecção de APIs de Travessia de Sistema de Arquivos do Ransomware Gunra [Criação de Processo do Linux]
Proof of Value
Execução de Simulação
Pré-requisito: A Verificação de Pré-voo de Telemetria & Base de Referência deve ter sido aprovada.
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 os TTPs identificados e visar gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a diagnósticos incorretos.
-
Narrativa & Comandos do Ataque: O objetivo do adversário é se preparar para a implantação de ransomware. Antes que a criptografia possa começar, o malware deve percorrer o sistema de arquivos para construir uma lista de arquivos de alto valor (documentos, bancos de dados, etc.). O ransomware Gunra especificamente utiliza as
APIs FindFirstFileWandFindNextFileWpara realizar esta enumeração em larga escala. Vamos simular isso compilando e executando um pequeno trecho de C# que chama explicitamente essas APIs via uma importação de DLL, fazendo com que o Sysmon registre o uso das APIs no campoImageLoaded. -
Script de Teste de Regressão:
# Salve isto como TriggerDetection.cs using System; using System.Runtime.InteropServices; using System.IO; class Program { static void Main() { // Isso simula o comportamento de travessia do ransomware Gunra // forçando o carregamento dessas APIs específicas. DirectoryInfo di = new DirectoryInfo(@"C:"); foreach (var file in di.GetFiles()) { // Acessar propriedades de arquivos aciona as APIs de travessia string name = file.Name; } Console.WriteLine("Travessia completa."); } } # Compilar e Executar usando csc.exe (incorporado ao .NET Framework) Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindFirstFileW(string lpFileName, out WIN32_FIND_DATA lpFindFileData); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindNextFileW(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct WIN32_FIND_DATA { public uint dwFileAttributes; public uint ftCreationTime; public uint ftLastAccessTime; public uint ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; public uint dwFileIndexHigh; public uint dwFileIndexLow; public uint dwStreamSize; public string cFileName; public string cAlternateDataStream; } } "@ # Execute um pequeno script C# que chama explicitamente as funções para garantir a presença da string nos logs $code = @" using System; using System.Runtime.InteropServices; class Program { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindFirstFileW(string lpFileName, out FIND_DATA lpFindFileData); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindNextFileW(IntPtr hFindFile, out FIND_DATA lpFindFileData); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct FIND_DATA { public uint dwFileAttributes; public uint ftCreationTime; public uint ftLastAccessTime; public uint ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; public uint dwFileIndexHigh; public uint dwFileIndexLow; public uint dwStreamSize; public string cFileName; public string cAlternateDataStream; } static void Main() { FIND_DATA data; IntPtr handle = IntPtr.Zero; // Isso aciona as strings específicas no campo ImageLoaded do Sysmon if (FindFirstFileW("C:*", out data)) { Console.WriteLine("Arquivo encontrado via FindFirstFileW"); FindNextFileW(handle, out data); } } } "@ $code | Out-File -FilePath "$env:TEMPTriggerDetection.cs" & csc.exe "$env:TEMPTriggerDetection.cs" & "$env:TEMPTriggerDetection.exe" -
Comandos de Limpeza:
Remove-Item "$env:TEMPTriggerDetection.cs" -ErrorAction SilentlyContinue Remove-Item "$env:TEMPTriggerDetection.exe" -ErrorAction SilentlyContinue