SOC Prime Bias: Medio

31 Mar 2026 16:57

Laboratorios de Seguridad de Elastic descubre BRUSHWORM y BRUSHLOGGER

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Laboratorios de Seguridad de Elastic descubre BRUSHWORM y BRUSHLOGGER
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Elastic Security Labs descubrió dos familias de malware personalizado, BRUSHWORM y BRUSHLOGGER, utilizadas contra una institución financiera en el sur de Asia. BRUSHWORM es un backdoor modular que mantiene la persistencia a través de una tarea programada, se propaga mediante medios extraíbles y roba archivos en una amplia variedad de extensiones. BRUSHLOGGER es un registrador de teclas cargado lateralmente como DLL que captura pulsaciones de teclado junto con el contexto de la ventana activa y guarda los registros en forma cifrada con XOR. Ambas muestras de malware aparentan ser relativamente poco sofisticadas y muestran signos de un desarrollo en curso de prueba y error.

Investigación

Durante la investigación, los analistas recuperaron el ejecutable del backdoor paint.exe y la DLL de registrador de teclas cargado lateralmente libcurl.dll, luego examinaron sus métodos de persistencia, lógica de configuración, comportamiento de propagación por USB y directorios de preparación de datos. También se encontraron compilaciones de desarrollo más antiguas, como V1.exe, V2.exe y V4.exe en VirusTotal, donde estaban vinculadas a infraestructura DNS dinámica gratuita para orden y control. El informe documentó además las tareas programadas del malware, mutex y convenciones de rutas de archivos.

Mitigación

Los defensores deben evitar la ejecución de binarios desconocidos de las rutas ProgramData y Public, monitorear la creación de tareas programadas llamadas MSGraphics o MSRecorder, y detectar el mutex Windows-Updates-KB852654856. Las organizaciones también deben deshabilitar o restringir la ejecución automática desde medios removibles e inspeccionar nombres de archivos atractivos sospechosos. Se debe reforzar el registro e inspección del tráfico WinHTTP al dominio C2 identificado.

Respuesta

Si se detecta actividad de BRUSHWORM o BRUSHLOGGER, aísle el punto final, preserve las muestras de paint.exe y libcurl.dll, capture evidencia de tareas programadas y elimine archivos maliciosos de todos los directorios de usuario y públicos. Los investigadores también deben escanear unidades removibles en busca de binarios atractivos, borrar la carpeta de exfiltración almacenada, restablecer credenciales afectadas y monitorear cualquier recuperación adicional de carga útil desde el servidor C2.

"graph TB %% Class definitions section classDef technique fill:#cfe2f3 %% Node definitions exec_check["<b>Técnica</b> – T1497.002 Evasión de Virtualización/Sandbox:<br/>Verifica actividad del usuario, resolución de pantalla, nombre de usuario, nombre de computadora, cadenas de CPUID de hipervisor y movimientos del mouse para abortar en entornos de análisis."] class exec_check technique persistence_task["<b>Técnica</b> – T1053 Tarea/Trabajo Programado:<br/>Crea una tarea programada de Windows llamada MSGraphics que ejecuta el backdoor en cada inicio de sesión del usuario."] class persistence_task technique c2_contact["<b>Técnica</b> – T1071 Protocolo de Capa de Aplicación:<br/>El backdoor contacta a su servidor C2 sobre HTTPS usando WinHTTP."] class c2_contact technique encrypted_channel["<b>Técnica</b> – T1573 Canal Encriptado:<br/>Establece un canal cifrado para descargar módulos adicionales."] class encrypted_channel technique shared_module["<b>Técnica</b> – T1129 Módulos Compartidos:<br/>Descarga una carga útil DLL (Recorder.dll) del servidor C2."] class shared_module technique second_task["<b>Técnica</b> – T1053 Tarea/Trabajo Programado:<br/>Crea una segunda tarea programada que lanza Recorder.dll vía rundll32.exe."] class second_task technique dll_side["<b>Técnica</b> – T1574.001 Carga Lateral de DLL:<br/>El libcurl.dll malicioso es cargado lateralmente para secuestrar el flujo de ejecución."] class dll_side technique keylogging["<b>Técnica</b> – T1056.001 Registro de Teclas:<br/>DllMain instala un gancho de teclado de bajo nivel para capturar pulsaciones, títulos de ventanas y marcas de tiempo."] class keylogging technique obfuscation["<b>Técnica</b> – T1027 Archivos o Información Ofuscados:<br/>Archivos de registro están cifrados con XOR; los datos de configuración son escritos en texto claro y luego eliminados."] class obfuscation technique local_staging["<b>Técnica</b> – T1074.001 Preparación Local de Datos:<br/>Archivos recolectados son copiados a C:UsersPublicSysteminfo y se guarda un registro hash para evitar exfiltración duplicada."] class local_staging technique usb_propagation["<b>Técnica</b> – T1092 Comunicación a través de Medios Removibles:<br/>Cuando Internet es accesible, el malware se copia a unidades USB adjuntas usando nombres de archivos atractivos."] class usb_propagation technique usb_data_exfil["<b>Técnica</b> – T1025 Datos de Medios Removibles:<br/>Continúa el robo de archivos de las unidades USB."] class usb_data_exfil technique physical_exfil["<b>Técnica</b> – T1052.001 Exfiltración a través de Medio Físico:<br/>Si no hay Internet, los archivos robados son copiados a medios removibles para exfiltración física."] class physical_exfil technique %% Connections showing flow exec_check –>|activa| persistence_task persistence_task –>|ejecuta| c2_contact c2_contact –>|establece| encrypted_channel c2_contact –>|descarga| shared_module shared_module –>|crea| second_task second_task –>|lanza| dll_side dll_side –>|carga| keylogging keylogging –>|produce| obfuscation obfuscation –>|almacena| local_staging local_staging –>|copia a| usb_propagation usb_propagation –>|exfiltra de| usb_data_exfil local_staging –>|usa para| physical_exfil "

Flujo de Ataque

Simulación de Ejecución

Prerrequisito: La verificación previa de Telemetría y Línea Basal debe haber pasado.

Especulació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 apuntar a generar el telemetría exacto esperado por la lógica de detección.

  • Narrativa y Comandos de Ataque:
    Un atacante ha obtenido una DLL maliciosa (maligna.dll) que, cuando se ejecuta a través de rundll32.exe, suelta una carga útil de ransomware y escribe datos cifrados en una unidad USB. Para evitar sospechas, el atacante primero usa paint.exe para crear una imagen de aspecto benigno en el medio removible, luego usa rundll32.exe para cargar la DLL maliciosa oculta en el mismo directorio. Ambas acciones generan eventos de creación de proceso que coinciden con la regla Sigma.

  • Script de Prueba de Regresión:

    # ------------------------------
    # Simulación de abuso de Paint + Rundll32
    # ------------------------------
    
    # 1. Crear un directorio de trabajo temporal
    $workDir = "$env:TEMPPaintRundllSim"
    New-Item -ItemType Directory -Path $workDir -Force | Out-Null
    
    # 2. Copiar una imagen legítima al USB (simulado por $workDir)
    $imagePath = Join-Path $workDir "inocente.png"
    Invoke-WebRequest -Uri "https://via.placeholder.com/150" -OutFile $imagePath
    
    # 3. Lanzar Paint para abrir la imagen (uso benigno – aún coincide con la regla)
    Start-Process -FilePath "$env:WINDIRsystem32mspaint.exe" -ArgumentList "`"$imagePath`"" -PassThru | Out-Null
    
    # 4. Dejar caer una DLL maliciosa (simulado; la carga útil real sería encubierta)
    $dllPath = Join-Path $workDir "maligna.dll"
    $dllBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # Encabezado PE mínimo de marcador de posición
    [IO.File]::WriteAllBytes($dllPath, $dllBytes)
    
    # 5. Ejecutar la DLL a través de Rundll32 (este es el paso malicioso)
    Start-Process -FilePath "$env:WINDIRsystem32rundll32.exe" `
                 -ArgumentList "`"$dllPath`,EntryPoint`"" -PassThru | Out-Null
    
    # 6. Pausa para permitir la ingestión en SIEM
    Write-Host "Simulación ejecutada. Esperar ~30s para que los registros aparezcan en SIEM."
  • Comandos de Limpieza:

    # Eliminar archivos y procesos temporales
    Stop-Process -Name mspaint -ErrorAction SilentlyContinue
    Stop-Process -Name rundll32 -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPPaintRundllSim" -Recurse -Force
    Write-Host "Limpieza completada."