StopRansomware : Analyse de la menace Gunra Ransomware
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Gunra est une opération de ransomware en tant que service (RaaS) qui suit un modèle de double extorsion combinant le chiffrement des données avec l’exfiltration. Les acteurs de la menace ciblent les infrastructures critiques, les entités gouvernementales et un large éventail d’organisations commerciales à travers le monde. Le ransomware est basé sur le code source de Conti qui a fuité et a évolué pour prendre en charge les environnements Windows et Linux.
Enquête
Le FBI et ses partenaires internationaux ont observé les acteurs de Gunra exploitant des vulnérabilités accessibles depuis Internet et abusant des identifiants volés pour un accès initial. L’enquête a identifié l’utilisation des bibliothèques Impacket pour le mouvement latéral ainsi que de multiples outils open-source pour l’exfiltration des données. Le groupe utilise également un portail de négociation basé sur Tor et qTox pour communiquer avec les victimes.
Atténuation
Les organisations devraient donner la priorité à la correction des vulnérabilités connues exploitées dans les systèmes accessibles depuis Internet, en particulier les passerelles VPN et l’infrastructure RDP. Le maintien de sauvegardes immuables hors ligne et l’application d’une segmentation réseau stricte sont essentiels pour limiter le mouvement latéral. L’authentification multi-facteurs (MFA) doit également être activée pour tous les services d’accès à distance.
Réponse
Si une activité de Gunra est détectée, les hôtes compromis doivent être isolés immédiatement tout en préservant les artefacts judiciaires pertinents, y compris les fichiers chiffrés et les journaux système. La chasse aux menaces doit commencer pour déterminer l’étendue de l’intrusion et examiner l’activité des comptes privilégiés. Les organisations doivent ensuite suivre des procédures formelles d’éviction pour contenir et éliminer complètement l’adversaire de l’environnement.
Flux d’attaque
Détections
Modèles possibles de lignes de commande Impacket (via cmdline)
Proof of Value
Créer ou supprimer une copie de l’ombre via Powershell, CMD ou WMI (via cmdline)
Proof of Value
Logiciel alternatif d’accès/gestion à distance (via système)
Proof of Value
Comportement d’exécution possible d’Impacket (via audit)
Proof of Value
Logiciel alternatif d’accès/gestion à distance (via audit)
Proof of Value
IOCs (HashSha256) à détecter : #StopRansomware : Gunra Ransomware
Proof of Value
IOCs (SourceIP) à détecter : #StopRansomware : Gunra Ransomware
Proof of Value
IOCs (DestinationIP) à détecter : #StopRansomware : Gunra Ransomware
Proof of Value
Détection de la manipulation de comptes et de l’escalade de privilèges par le ransomware Gunra [Journal des événements de sécurité Microsoft Windows]
Proof of Value
Détection des vulnérabilités exploitées dans FortiOS et FortiProxy [Pare-feu]
Proof of Value
Détection du mouvement latéral et du vidage des identifiants du ransomware Gunra [Création de processus Windows]
Proof of Value
Détection des API de parcours de système de fichiers par le ransomware Gunra [Création de processus Linux]
Proof of Value
Exécution de simulation
Prérequis : La vérification préliminaire Télémetry & Baseline doit avoir été réussie.
Rationale : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le narratif DOIVENT refléter directement les TTPs identifiés et visent à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés entraîneront un diagnostic erroné.
-
Narratif & Commandes de l’attaque : L’objectif de l’adversaire est de préparer un déploiement de ransomware. Avant que le chiffrement puisse commencer, le logiciel malveillant doit explorer le système de fichiers pour bâtir une liste de fichiers de grande valeur (documents, bases de données, etc.). Le ransomware Gunra utilise spécifiquement les
API FindFirstFileWandFindNextFileWpour effectuer cette énumération à grande échelle. Nous allons simuler cela en compilant et en exécutant un petit extrait de code C# qui appelle explicitement ces API via une importation de DLL, provoquant l’enregistrement de l’utilisation des API par Sysmon dans lechamp ImageLoaded.champ. -
Script de test de régression :
# Enregistrez ceci sous TriggerDetection.cs using System; using System.Runtime.InteropServices; using System.IO; class Program { static void Main() { // Cela simule le comportement de parcours du ransomware Gunra // en forçant le chargement de ces APIs spécifiques. DirectoryInfo di = new DirectoryInfo(@"C:"); foreach (var file in di.GetFiles()) { // L'accès aux propriétés de fichier déclenche les APIs de parcours string name = file.Name; } Console.WriteLine("Parcours terminé."); } } # Compilez et exécutez en utilisant csc.exe (intégré au .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; } } "@ # Exécutez un petit script C# qui appelle explicitement les fonctions pour assurer la présence de chaînes dans les journaux $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; // Cela déclenche les chaînes spécifiques dans le champ ImageLoaded de Sysmon if (FindFirstFileW("C:*", out data)) { Console.WriteLine("Fichier trouvé via FindFirstFileW"); FindNextFileW(handle, out data); } } } "@ $code | Out-File -FilePath "$env:TEMPTriggerDetection.cs" & csc.exe "$env:TEMPTriggerDetection.cs" & "$env:TEMPTriggerDetection.exe" -
Commandes de nettoyage :
Remove-Item "$env:TEMPTriggerDetection.cs" -ErrorAction SilentlyContinue Remove-Item "$env:TEMPTriggerDetection.exe" -ErrorAction SilentlyContinue