SOC Prime Bias: Medio

09 Abr 2026 18:30

ClickFix a MaaS: Dentro de un RAT Modular de Windows y su Panel de Control

Author Photo
SOC Prime Team linkedin icon Seguir
ClickFix a MaaS: Dentro de un RAT Modular de Windows y su Panel de Control
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Netskope Threat Labs observó una campaña de ClickFix entregando un RAT personalizado para Windows construido en Node.js a través de instaladores MSI maliciosos. La carga útil mantiene módulos clave en memoria y utiliza transmisión gRPC a través de Tor para C2. Un error de OPSEC expuso el protocolo del panel de administración, apuntando a un modelo de malware como servicio con seguimiento de monederos. La persistencia se establece a través de un valor de Run a nivel de usuario en HKCU.

Investigación

Los investigadores capturaron el MSI, decodificaron el bootstrap de PowerShell y rastrearon la carga dinámica de módulos Node.js. Extrajeron y descifraron el blob de configuración para recuperar una dirección C2 .onion. Un archivo admin.proto filtrado reveló funciones de MaaS como la gestión multi-operador y el monitoreo de monederos, y los analistas notaron un watchdog auto-regenerador más el uso de Tor para tráfico anonimizado.

Mitigación

Bloquee la ejecución de MSI no firmados de fuentes no confiables y monitoree HKCU…Run para nuevas entradas sospechosas. Detecte PowerShell que descargue cargas útiles de MSI desde dominios como cloud-verificate.com. Alerta en conhost.exe o node.exe lanzados con argumentos ocultos y en tor.exe apareciendo en endpoints que no lo requieran.

Respuesta

Aísle los hosts afectados, recolecte memoria para análisis de módulos en memoria y elimine la persistencia de HKCU Run. Revise %LOCALAPPDATA%LogicOptimizer para buscar artefactos de preparación y cualquier actividad programada de tor.exe, luego bloquee el endpoint .onion y los dominios/IPs relacionados. Cace a nivel empresarial artefactos del mismo instalador y cadenas de procesos.

graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[«<b>Acción</b> – <b>T1204.001 Ejecución por usuario: Enlace malicioso</b><br/>La víctima hace clic en un enlace malicioso que lanza PowerShell»] class action_user_exec action process_powershell_cmd[«<b>Proceso</b> – <b>T1059.001 PowerShell</b><br/>Comando Base64 descarga instalador MSI»] class process_powershell_cmd process action_msi_install[«<b>Acción</b> – <b>T1546.016 Paquetes de instalador</b><br/>Instalación MSI silenciosa que despliega Node.js»] class action_msi_install action tool_msiexec[«<b>Herramienta</b> – <b>Nombre</b>: msiexec.exe<br/><b>Técnica</b>: T1218.007 Ejecución por proxy de binarios del sistema»] class tool_msiexec tool action_persistence[«<b>Acción</b> – <b>T1037.001 Script de inicio (clave Run)</b><br/>Escribe en HKCU Run para persistencia»] class action_persistence action tool_tor[«<b>Herramienta</b> – <b>Nombre</b>: tor.exe<br/><b>Técnica</b>: T1090.002 Proxy externo»] class tool_tor tool action_tor_proxy[«<b>Acción</b> – <b>T1090.003 Proxy multinivel</b><br/>Tráfico C2 vía Tor SOCKS5»] class action_tor_proxy action action_grpc_comm[«<b>Acción</b> – <b>T1102.002 Servicio web: gRPC bidireccional</b><br/>Comunicación con C2 .onion»] class action_grpc_comm action action_encrypted_channel[«<b>Acción</b> – <b>T1573 Canal cifrado</b><br/>AES-256-CBC o XOR para cifrar datos»] class action_encrypted_channel action action_collection[«<b>Acción</b> – <b>T1592.* Información del host</b><br/>Recolecta hardware, software y red»] class action_collection action action_archive[«<b>Acción</b> – <b>T1560.003 Archivado personalizado</b><br/>Cifrado multicapa con campos aleatorios»] class action_archive action action_config_repo[«<b>Acción</b> – <b>T1602 Datos de configuración</b><br/>Extrae C2 onion, puerto, ID operador»] class action_config_repo action action_dynamic_resolution[«<b>Acción</b> – <b>T1568 Resolución dinámica</b><br/>Resuelve .onion en tiempo de ejecución»] class action_dynamic_resolution action action_ip_discovery[«<b>Acción</b> – <b>T1016.001 Descubrimiento de conexión</b><br/>Obtiene IP externa»] class action_ip_discovery action %% Edges action_user_exec –>|triggers| process_powershell_cmd process_powershell_cmd –>|downloads| action_msi_install action_msi_install –>|uses| tool_msiexec action_msi_install –>|enables| action_persistence action_persistence –>|downloads| tool_tor tool_tor –>|enables| action_tor_proxy action_tor_proxy –>|routes| action_grpc_comm action_grpc_comm –>|encrypted via| action_encrypted_channel action_encrypted_channel –>|carries| action_collection action_collection –>|archives| action_archive action_archive –>|stores config in| action_config_repo action_config_repo –>|provides| action_dynamic_resolution action_dynamic_resolution –>|connects to| action_ip_discovery action_collection –>|discovers| action_ip_discovery

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La Comprobación de Telémetría y Línea de Base Pre-vuelo 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 TTPs identificados y apuntar a generar la telemetría exacta que espera la lógica de detección.

  • Narrativa del Ataque y Comandos:

    1. Objetivo: El atacante quiere iniciar una carga útil maliciosa de Node.js (bootstrap.js) sin levantar sospechas.
    2. Método: Usar un binario de Windows firmado (conhost.exe) como un proxy para lanzar node.exe en modo sin cabeza, pasando el script bootstrap como argumento.
    3. Pasos:
      • Colocar un bootstrap.js malicioso en un directorio de escritura (por ejemplo, %TEMP%).
      • Invocar conhost.exe con la cadena de argumento exacta que la regla observa.
      • El comando se ejecuta bajo el contexto del usuario actual, simulando un proceso legítimo de generación.
    # 1. Colocar bootstrap.js malicioso (contenido inofensivo simulado para prueba)
    $bootstrapPath = "$env:TEMPbootstrap.js"
    Set-Content -Path $bootstrapPath -Value "// placeholder de bootstrap malicioso"
    
    # 2. Ejecutar conhost.exe para generar node.exe con las banderas requeridas
    $conhost = "$env:windirsystem32conhost.exe"
    $args = '--headless "node.exe" "bootstrap.js"'
    Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP
  • Script de Prueba de Regresión:

    # -------------------------------------------------
    # Prueba de Regresión: Desencadenar Conhost → Bootstrap Node
    # -------------------------------------------------
    # Asegúrese de que Sysmon esté ejecutando y registrando eventos ProcessCreate.
    
    # Colocar un script de bootstrap ficticio
    $bootstrap = "$env:TEMPbootstrap.js"
    Set-Content -Path $bootstrap -Value "// contenido de prueba de bootstrap"
    
    # Definir la línea de comando exacta que la regla de detección busca
    $conhostPath = "$env:windirsystem32conhost.exe"
    $cmdLine = '--headless "node.exe" "bootstrap.js"'
    
    # Lanzar conhost con los argumentos de apariencia maliciosa
    Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP
    
    Write-Host "Simulación completada – verificar SIEM para la alerta."
  • Comandos de Limpieza:

    # Detener cualquier proceso node o conhost restante lanzado por la prueba
    Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Eliminar el script de bootstrap temporal
    Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue
    
    Write-Host "Limpieza finalizada."