StopRansomware: Bedrohungsanalyse der Gunra-Ransomware
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
Erkennungen
Mögliche Impacket-Befehlszeilenmuster (via cmdline)
Proof of Value
Erstellen oder Löschen von Schattenkopien über Powershell, CMD oder WMI (via cmdline)
Proof of Value
Alternative Fernzugriffs- / Verwaltungssoftware (via system)
Proof of Value
Mögliches Impacket-Ausführungsverhalten (via audit)
Proof of Value
Alternative Fernzugriffs- / Verwaltungssoftware (via audit)
Proof of Value
IOCs (HashSha256) zur Erkennung: #StopRansomware: Gunra Ransomware
Proof of Value
IOCs (SourceIP) zur Erkennung: #StopRansomware: Gunra Ransomware
Proof of Value
IOCs (DestinationIP) zur Erkennung: #StopRansomware: Gunra Ransomware
Proof of Value
Gunra Ransomware Kontomanipulation und Privilegieneskalationserkennung [Microsoft Windows Sicherheitsereignisprotokoll]
Proof of Value
Erkennung von ausgenutzten Schwachstellen in FortiOS und FortiProxy [Firewall]
Proof of Value
Gunra Ransomware Seitliche Bewegung und Anmeldeinformations-Dumping-Erkennung [Windows-Prozesserstellung]
Proof of Value
Erkennung von Gunra Ransomware-Dateisystemdurchlauf-APIs [Linux-Prozesserstellung]
Proof of Value
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
FindFirstFileWandFindNextFileWAPIs, 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 imImageLoadedFeld 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