SOC Prime Bias: Moyen

09 Avr 2026 18:30

ClickFix à MaaS : À l’intérieur d’un RAT Windows modulaire et de son panneau de contrôle

Author Photo
SOC Prime Team linkedin icon Suivre
ClickFix à MaaS : À l’intérieur d’un RAT Windows modulaire et de son panneau de contrôle
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Netskope Threat Labs a observé une campagne ClickFix délivrant un RAT Windows personnalisé construit sur Node.js via des installateurs MSI malveillants. Le payload conserve les modules clés en mémoire et utilise le streaming gRPC sur Tor pour le C2. Une erreur d’OPSEC a exposé le protocole du panneau d’administration, pointant vers un modèle de malware-as-a-service avec suivi des portefeuilles. La persistance est définie via une valeur Run au niveau de l’utilisateur HKCU.

Investigation

Les chercheurs ont capturé le MSI, décodé le bootstrap PowerShell et suivi le chargement dynamique des modules Node.js. Ils ont extrait et déchiffré le blob de configuration pour récupérer une adresse .onion C2. Un fichier admin.proto divulgué a révélé des fonctions de MaaS telles que la gestion multi-opérateurs et la surveillance des portefeuilles, et les analystes ont noté un watchdog auto-réparateur ainsi que l’utilisation de Tor pour un trafic anonymisé.

Atténuation

Bloquer l’exécution de MSI non signés provenant de sources non fiables et surveiller HKCU…Run pour de nouvelles entrées suspectes. Détecter PowerShell qui télécharge des payloads MSI à partir de domaines comme cloud-verificate.com. Alerter sur conhost.exe ou node.exe lancés avec des arguments cachés et sur tor.exe apparaissant sur des points de terminaison qui n’en ont pas besoin.

Réponse

Isoler les hôtes affectés, collecter la mémoire pour l’analyse des modules en mémoire, et supprimer la persistance Run HKCU. Examiner %LOCALAPPDATA%LogicOptimizer pour les artefacts de mise en scène et toute activité planifiée de tor.exe, puis bloquer le point de terminaison onion et les domaines/IPs associés. Chasser dans toute l’entreprise les mêmes artefacts d’installateur et chaînes de processus.

graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[« <b>Action</b> – <b>T1204.001 Exécution utilisateur: Lien malveillant</b><br/>La victime clique sur un lien malveillant et lance PowerShell »] class action_user_exec action process_powershell_cmd[« <b>Processus</b> – <b>T1059.001 PowerShell</b><br/>Commande Base64 télécharge un installateur MSI »] class process_powershell_cmd process action_msi_install[« <b>Action</b> – <b>T1546.016 Paquets d’installation</b><br/>Installation MSI silencieuse de Node.js »] class action_msi_install action tool_msiexec[« <b>Outil</b> – msiexec.exe<br/>Exécution proxy de binaire système »] class tool_msiexec tool action_persistence[« <b>Persistance</b> – Clé Run<br/>Écriture dans HKCU Run »] class action_persistence action tool_tor[« <b>Outil</b> – tor.exe<br/>Proxy externe »] class tool_tor tool action_tor_proxy[« <b>Action</b> – Proxy multi-sauts<br/>Trafic C2 via Tor SOCKS5 »] class action_tor_proxy action action_grpc_comm[« <b>Action</b> – Service web gRPC<br/>Communication avec C2 .onion »] class action_grpc_comm action action_encrypted_channel[« <b>Action</b> – Canal chiffré<br/>AES-256-CBC ou XOR »] class action_encrypted_channel action action_collection[« <b>Action</b> – Collecte d’hôte<br/>Collecte des données système »] class action_collection action action_archive[« <b>Action</b> – Archivage personnalisé<br/>Chiffrement multi-couche »] class action_archive action action_config_repo[« <b>Action</b> – Configuration<br/>Extraction des infos C2 »] class action_config_repo action action_dynamic_resolution[« <b>Action</b> – Résolution dynamique<br/>Résout .onion à l’exécution »] class action_dynamic_resolution action action_ip_discovery[« <b>Action</b> – Découverte IP<br/>Récupère IP externe »] 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

Flux du Attaque

Exécution de Simulation

Prérequis : Le Contrôle Pré-Vol de Télémétrie & Baseline doit avoir réussi.

Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.

  • Narration & Commandes d’Attaque :

    1. Objectif : L’attaquant veut amorcer un payload Node.js malveillant (bootstrap.js) sans éveiller les soupçons.
    2. Méthode : Utiliser un binaire Windows signé (conhost.exe) comme proxy pour lancer node.exe en mode tête basse, passant le script bootstrap comme argument.
    3. Étapes :
      • Déposer un bootstrap.js malveillant dans un répertoire accessible en écriture (par exemple, %TEMP%).
      • Invoquer conhost.exe avec la chaîne d’arguments exacte que la règle surveille.
      • La commande s’exécute dans le contexte de l’utilisateur actuel, imitant le lancement d’un processus légitime.
    # 1. Déposer bootstrap.js malveillant (contenu inoffensif simulé pour le test)
    $bootstrapPath = "$env:TEMPbootstrap.js"
    Set-Content -Path $bootstrapPath -Value "// espace réservé de bootstrap malveillant"
    
    # 2. Exécuter conhost.exe pour lancer node.exe avec les drapeaux requis
    $conhost = "$env:windirsystem32conhost.exe"
    $args = '--headless "node.exe" "bootstrap.js"'
    Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP
  • Script de Test de Régression :

    # -------------------------------------------------
    # Test de Régression : Déclencher Conhost → Node Bootstrap
    # -------------------------------------------------
    # Assurez-vous que Sysmon est en cours d'exécution et journalise les événements ProcessCreate.
    
    # Déposer un script bootstrap factice
    $bootstrap = "$env:TEMPbootstrap.js"
    Set-Content -Path $bootstrap -Value "// contenu de test bootstrap"
    
    # Définir la ligne de commande exacte que la règle de détection recherche
    $conhostPath = "$env:windirsystem32conhost.exe"
    $cmdLine = '--headless "node.exe" "bootstrap.js"'
    
    # Lancer conhost avec les arguments à apparence malveillante
    Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP
    
    Write-Host "Simulation terminée – vérifiez SIEM pour l'alerte."
  • Commandes de Nettoyage :

    # Arrêter tous les processus node ou conhost restants lancés par le test
    Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Retirer le script bootstrap temporaire
    Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue
    
    Write-Host "Nettoyage terminé."