SOC Prime Bias: Kritisch

13 Aug 2026 06:08 UTC

StopRansomware: Bedrohungsanalyse der Gunra-Ransomware

Author Photo
SOC Prime Team linkedin icon Folgen
StopRansomware: Bedrohungsanalyse der Gunra-Ransomware
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Gunra ist eine Ransomware-as-a-Service (RaaS)-Operation, die einem Doppel-Erpressungsmodell folgt, das Datenverschlüsselung mit Exfiltration kombiniert. Die Bedrohungsakteure zielen auf kritische Infrastrukturen, Regierungsbehörden und eine Vielzahl von Handelsorganisationen weltweit ab. Die Ransomware basiert auf durchgesickertem Conti-Quellcode und hat sich weiterentwickelt, um sowohl Windows- als auch Linux-Umgebungen zu unterstützen.

Untersuchung

Das FBI und internationale Partner haben beobachtet, dass Gunra-Akteure aus dem Internet zugängliche Schwachstellen ausnutzen und gestohlene Anmeldeinformationen missbrauchen, um ersten Zugang zu erlangen. Die Untersuchung identifizierte die Nutzung von Impacket-Bibliotheken für die seitliche Bewegung und mehrere Open-Source-Tools für die Datenexfiltration. Die Gruppe nutzt auch ein auf Tor basierendes Verhandlungsportal und qTox, um mit Opfern zu kommunizieren.

Eindämmung

Organisationen sollten die Behebung bekannter ausgenutzter Schwachstellen in internetexponierten Systemen, insbesondere VPN-Gateways und RDP-Infrastruktur, priorisieren. Die Pflege unveränderbarer Offline-Backups und die Durchsetzung strikter Netzwerksegmentierung sind entscheidend, um seitliche Bewegungen zu begrenzen. Multi-Faktor-Authentifizierung (MFA) sollte außerdem für alle Remotezugriffsdienste aktiviert werden.

Reaktion

Wenn Gunra-Aktivitäten festgestellt werden, sollten kompromittierte Hosts sofort isoliert werden, während relevante forensische Artefakte, einschließlich verschlüsselter Dateien und Systemprotokolle, erhalten bleiben. Bedrohungssuche sollte beginnen, um den Umfang des Einbruchs zu bestimmen und privilegierte Kontoaktivitäten zu überprüfen. Organisationen sollten dann formelle Eviktionsverfahren befolgen, um den Gegner vollständig aus der Umgebung zu entfernen.

Angriffsablauf

Simulationsausführung

Voraussetzung: Der Telemetrie- & Basislinien-Pre-Flight-Check muss bestanden haben.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und Erzählung MÜSSEN die identifizierten TTPs direkt widerspiegeln und zielen darauf ab, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.

  • Angriffserzählung & Befehle: Das Ziel des Gegners ist es, sich auf den Einsatz von Ransomware vorzubereiten. Bevor die Verschlüsselung beginnen kann, muss die Malware das Dateisystem durchsuchen, um eine Liste von hochrangigen Dateien (Dokumente, Datenbanken usw.) zu erstellen. Die Gunra-Ransomware verwendet speziell die FindFirstFileW and FindNextFileW APIs, um diese umfassende Aufzählung durchzuführen. Wir werden dies simulieren, indem wir ein kleines C#-Fragment kompilieren und ausführen, das diese APIs explizit über einen DLL-Import aufruft, wodurch Sysmon die API-Nutzung im ImageLoaded Feld protokolliert.

  • Regressions-Testskript:

    # Speichern Sie dies als TriggerDetection.cs
    using System;
    using System.Runtime.InteropServices;
    using System.IO;
    
    class Program {
        static void Main() {
            // Dies simuliert das Traversierungsverhalten der Gunra-Ransomware
            // indem es das Laden dieser speziellen APIs erzwingt.
            DirectoryInfo di = new DirectoryInfo(@"C:");
            foreach (var file in di.GetFiles()) {
                // Der Zugriff auf Dateieigenschaften löst die Traversierungs-APIs aus
                string name = file.Name;
            }
            Console.WriteLine("Traversierung abgeschlossen.");
        }
    }
    
    # Kompilieren und Ausführen mit csc.exe (integriert in das .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;
        }
    }
    "@
    
    # Führen Sie ein kleines C#-Skript aus, das die Funktionen explizit aufruft, um sicherzustellen, dass die Zeichenfolge in den Protokollen enthalten ist
    $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;
            // Dies löst die spezifischen Zeichenfolgen im Sysmon ImageLoaded-Feld aus
            if (FindFirstFileW("C:*", out data)) {
                Console.WriteLine("Datei über FindFirstFileW gefunden");
                FindNextFileW(handle, out data);
            }
        }
    }
    "@
    $code | Out-File -FilePath "$env:TEMPTriggerDetection.cs"
    & csc.exe "$env:TEMPTriggerDetection.cs"
    & "$env:TEMPTriggerDetection.exe"
  • Bereinigungskommandos:

    Remove-Item "$env:TEMPTriggerDetection.cs" -ErrorAction SilentlyContinue
    Remove-Item "$env:TEMPTriggerDetection.exe" -ErrorAction SilentlyContinue