StopRansomware: Analisi della minaccia del ransomware Gunra
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
Gunra è un’operazione ransomware-as-a-service (RaaS) che segue un modello di doppia estorsione combinando la crittografia dei dati con l’esfiltrazione. Gli attori delle minacce prendono di mira infrastrutture critiche, enti governativi e una vasta gamma di organizzazioni commerciali in tutto il mondo. Il ransomware si basa su codice sorgente Conti trapelato ed è stato sviluppato per supportare ambienti Windows e Linux.
Indagine
L’FBI e i partner internazionali hanno osservato attori Gunra sfruttare vulnerabilità esposte su internet e abusare di credenziali rubate per l’accesso iniziale. L’indagine ha identificato l’uso delle librerie Impacket per il movimento laterale e l’uso di vari strumenti open-source per l’esfiltrazione dei dati. Il gruppo si affida inoltre a un portale di negoziazione basato su Tor e a qTox per comunicare con le vittime.
Mitigazione
Le organizzazioni dovrebbero dare priorità all’applicazione delle patch per le vulnerabilità note sfruttate nei sistemi esposti a internet, in particolare i gateway VPN e l’infrastruttura RDP. Mantenere backup immutabili offline e applicare una rigorosa segmentazione della rete è fondamentale per limitare il movimento laterale. Inoltre, l’autenticazione a più fattori (MFA) dovrebbe essere abilitata su tutti i servizi di accesso remoto.
Risposta
Se viene rilevata attività Gunra, gli host compromessi dovrebbero essere isolati immediatamente preservando nel contempo i principali artefatti forensi, inclusi file crittografati e log di sistema. Dovrebbe iniziare una caccia alle minacce per determinare l’estensione dell’intrusione e verificare l’attività degli account privilegiati. Le organizzazioni dovrebbero quindi seguire procedure formali di espulsione per contenere completamente e rimuovere l’avversario dall’ambiente.
Flusso di Attacco
Rilevamenti
Possibili Pattern della Linea di Comando Impacket (via cmdline)
Proof of Value
Creare o Eliminare Shadow Copy via Powershell, CMD o WMI (via cmdline)
Proof of Value
Software Alternativo di Accesso / Gestione Remota (via sistema)
Proof of Value
Possibile Comportamento di Esecuzione Impacket (via audit)
Proof of Value
Software Alternativo di Accesso / Gestione Remota (via audit)
Proof of Value
IOC (HashSha256) per rilevare: #StopRansomware: Gunra Ransomware
Proof of Value
IOC (SourceIP) per rilevare: #StopRansomware: Gunra Ransomware
Proof of Value
IOC (DestinationIP) per rilevare: #StopRansomware: Gunra Ransomware
Proof of Value
Rilevamento della Manipolazione degli Account Gunra Ransomware e Escalation dei Privilegi [Registro degli Eventi di Sicurezza di Microsoft Windows]
Proof of Value
Rilevamento delle Vulnerabilità Sfruttate in FortiOS e FortiProxy [Firewall]
Proof of Value
Rilevamento del Movimento Laterale Gunra Ransomware e Dumping di Credenziali [Creazione Processo Windows]
Proof of Value
Rilevamento delle API di Traversata del File System Gunra Ransomware [Creazione Processo Linux]
Proof of Value
Esecuzione di Simulazione
Prerequisito: Il Controllo Pre-volo di Telemetria & Baseline deve essere superato.
Motivo: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente le TTP identificate e mirare a generare la telemetria esatta attesa dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrativa & Comandi dell’Attacco: L’obiettivo dell’avversario è prepararsi per un dispiegamento del ransomware. Prima che la crittografia possa iniziare, il malware deve esplorare il file system per costruire un elenco di file di alto valore (documenti, database, ecc.). Il ransomware Gunra utilizza specificamente le
FindFirstFileWandFindNextFileWAPI per effettuare questa enumerazione su vasta scala. Simuleremo questo compilando ed eseguendo un piccolo frammento di codice C# che richiama esplicitamente queste API tramite un’importazione di DLL, facendo sì che Sysmon registri l’uso delle API nelcampo ImageLoaded. -
Script di Test di Regressione:
# Salva questo come TriggerDetection.cs using System; using System.Runtime.InteropServices; using System.IO; class Program { static void Main() { // Questo simula il comportamento di traversata del ransomware Gunra // forzando il caricamento di queste specifiche API. DirectoryInfo di = new DirectoryInfo(@"C:"); foreach (var file in di.GetFiles()) { // Accedere alle proprietà dei file attiva le API di traversata string name = file.Name; } Console.WriteLine("Traversata completa."); } } # Compila ed Esegui utilizzando csc.exe (integrato nel .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; } } "@ # Esegui un piccolo script C# che chiama esplicitamente le funzioni per garantire la presenza delle stringhe nei log $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; // Questo attiva le specifiche stringhe nel campo ImageLoaded di Sysmon if (FindFirstFileW("C:*", out data)) { Console.WriteLine("File trovato tramite FindFirstFileW"); FindNextFileW(handle, out data); } } } "@ $code | Out-File -FilePath "$env:TEMPTriggerDetection.cs" & csc.exe "$env:TEMPTriggerDetection.cs" & "$env:TEMPTriggerDetection.exe" -
Comandi di Pulizia:
Remove-Item "$env:TEMPTriggerDetection.cs" -ErrorAction SilentlyContinue Remove-Item "$env:TEMPTriggerDetection.exe" -ErrorAction SilentlyContinue