ClickFix a MaaS: Dentro de un RAT Modular de Windows y su Panel de Control
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
Detecciones
Ejecución de Binario NodeJS Desde Ubicación No Común (vía cmdline)
Ver
Puntos de Persistencia Posibles [ASEPs – Software/NTUSER Hive] (vía evento_registro)
Ver
Descarga o Carga a través de Powershell (vía cmdline)
Ver
Conhost LOLBAS (vía cmdline)
Ver
MsiExec Generado por Proceso de Shell (vía cmdline)
Ver
Intento de Comunicaciones de Dominio de Búsqueda de IP Posible (vía dns)
Ver
Posibles Herramientas de Red Tor (vía cmdline)
Ver
Detección de Ejecución de Conhost para Generar Nodo para Script de Bootstrap [Creación de Proceso de Windows]
Ver
Ejecución de Comando Malicioso de PowerShell para Descargar e Instalar MSI [PowerShell de Windows]
Ver
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:
- Objetivo: El atacante quiere iniciar una carga útil maliciosa de Node.js (
bootstrap.js) sin levantar sospechas. - Método: Usar un binario de Windows firmado (
conhost.exe) como un proxy para lanzarnode.exeen modo sin cabeza, pasando el script bootstrap como argumento. - Pasos:
- Colocar un
bootstrap.jsmalicioso en un directorio de escritura (por ejemplo,%TEMP%). - Invocar
conhost.execon 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.
- Colocar un
# 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 - Objetivo: El atacante quiere iniciar una carga útil maliciosa de Node.js (
-
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."