SOC Prime Bias: Moyen

09 Déc 2025 18:46

Logiciel Malveillant Castle RAT Client : Tactiques, Techniques et Artisanat

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Logiciel Malveillant Castle RAT Client : Tactiques, Techniques et Artisanat
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

CastleRAT est un cheval de Troie d’accès à distance observé pour la première fois en mars 2025, distribué en variantes Python et C compilé. Il recueille des métadonnées système, des frappes au clavier, le contenu du presse-papiers, des captures d’écran et des détails sur les appareils multimédias, puis exfiltre ces informations vers un serveur C2 en utilisant le chiffrement RC4. Le malware peut récupérer des charges utiles supplémentaires, les lancer via rundll32 et établir la persistance via des tâches planifiées et des méthodes de contournement de l’UAC.

Investigation

L’équipe de recherche sur les menaces de Splunk a rétro-conçu les implémentations Python et C, mappant leurs comportements aux techniques MITRE ATT&CK, y compris la découverte de système, la capture de frappes au clavier, la capture d’écran, l’énumération des dispositifs audio/vidéo, les résolveurs mort-dépôts et la duplication de poignées pour l’escalade des privilèges. La recherche a mis en avant la dépendance de CastleRAT sur les binaires Windows légitimes (rundll32, ComputerDefaults.exe) et son utilisation de www.ip-api.com pour obtenir l’adresse IP publique.

Atténuation

Les défenseurs doivent détecter les connexions sortantes suspectes vers des domaines inconnus, les motifs de trafic chiffré RC4, et les exécutions de rundll32 utilisant des chargements de DLL basés sur les ordinaux. Surveillez les tâches planifiées créées pour démarrer CastleRAT, les tentatives de contournement de l’UAC exploitant ComputerDefaults.exe, et les processus lancés avec des indicateurs de navigateur silencieux. Bloquez l’accès aux emplacements de résolveurs morts-dépôts connus, y compris les pages abusées de la communauté Steam.

Réponse

Lorsque l’activité de CastleRAT est identifiée, isolez l’hôte impacté, tuez les processus malveillants et supprimez toutes les tâches planifiées ou artefacts de persistance associés. Collectez des preuves médico-légales telles que des hiérarchies de processus, des arguments en ligne de commande et des modifications du registre. Effectuez une chasse complète pour des plugins DLL supplémentaires et des canaux C2, puis déployez des mesures de remédiation et de durcissement dans l’environnement plus large.

mermaid graph TB %% Class definitions classDef technique fill:#e6f7ff %% Node definitions t1016_001[« <b>Technique</b> – T1016.001 Découverte de la configuration réseau du système<br />Collecte des détails système tels que le nom de l’ordinateur, le nom d’utilisateur, le GUID de la machine, la version du système d’exploitation et l’adresse IP publique à envoyer au C2 »] class t1016_001 technique t1115[« <b>Technique</b> – T1115 Données du presse-papiers<br />Récupère les données du presse-papiers Windows et les exfiltre, souvent en utilisant des actions de collage simulées »] class t1115 technique t1036[« <b>Technique</b> – T1036 Déguisement<br />Nom des fichiers déposés et variables d’environnement pour apparaître comme des composants Python ou Java légitimes »] class t1036 technique t1056_001[« <b>Technique</b> – T1056.001 Capture d’entrée : Keylogging<br />Intercepte les frappes au clavier, les écrit dans un fichier local, chiffre le fichier avec RC4 et l’envoie à l’attaquant »] class t1056_001 technique t1559[« <b>Technique</b> – T1559 Communication entre processus<br />Lance un processus shell caché avec ses flux standards redirigés via des tuyaux anonymes, permettant l’exécution de commandes à distance sans console visible »] class t1559 technique t1123[« <b>Technique</b> – T1123 Capture audio<br />Énumère les dispositifs de capture multimédia via Media Foundation »] class t1123 technique t1125[« <b>Technique</b> – T1125 Capture vidéo<br />Énumère les dispositifs de capture multimédia via Media Foundation »] class t1125 technique t1218_011[« <b>Technique</b> – T1218.011 Exécution de proxy binaire système : Rundll32<br />Charge une fonction d’exportation de DLL malveillante par ordinal »] class t1218_011 technique t1055_001[« <b>Technique</b> – T1055.001 Injection de processus : Injection de bibliothèque de liens dynamiques<br />Utilise rundll32.exe pour charger une DLL malveillante »] class t1055_001 technique t1547_010[« <b>Technique</b> – T1547.010 Exécution d’autostart au démarrage ou à la connexion : Moniteurs de port<br />Télécharge des plugins DLL supplémentaires à partir du C2, les décrypte avec RC4 et les charge »] class t1547_010 technique t1053[« <b>Technique</b> – T1053 Tâche/Emploi planifié<br />Crée une tâche planifiée pour lancer le malware au démarrage »] class t1053 technique t1113[« <b>Technique</b> – T1113 Capture d’écran<br />Capture périodiquement des captures d’écran et les exfiltre »] class t1113 technique t1102_001[« <b>Technique</b> – T1102.001 Service Web : Résolveur de dépôt mort<br />Récupère la configuration ou les charges utiles à partir de sites Web externes bénins »] class t1102_001 technique t1127[« <b>Technique</b> – T1127 Exécution de proxy par les Utilitaires de Développeur Fiable<br />Utilise ComputerDefaults.exe et duplication de poignées pour contourner l’UAC et exécuter du code avec des privilèges élevés »] class t1127 technique t1027[« <b>Technique</b> – T1027 Fichiers ou Informations Obfusqués<br />Utilise le chiffrement RC4 pour les charges utiles de commande et de données »] class t1027 technique t1048_001[« <b>Technique</b> – T1048.001 Exfiltration sur Protocole Alternatif : Protocole Non-C2 Symétrique Chiffré<br />Envoie des données chiffrées au C2 »] class t1048_001 technique t1132_001[« <b>Technique</b> – T1132.001 Encodage des Données : Encodage Standard<br />Encode les données avant la transmission »] class t1132_001 technique %% Connections showing attack flow t1016_001 u002du002d>|leads_to| t1115 t1115 u002du002d>|leads_to| t1036 t1036 u002du002d>|leads_to| t1056_001 t1056_001 u002du002d>|leads_to| t1559 t1559 u002du002d>|leads_to| t1123 t1123 u002du002d>|leads_to| t1125 t1125 u002du002d>|leads_to| t1218_011 t1218_011 u002du002d>|leads_to| t1055_001 t1055_001 u002du002d>|leads_to| t1547_010 t1547_010 u002du002d>|leads_to| t1053 t1053 u002du002d>|leads_to| t1113 t1113 u002du002d>|leads_to| t1102_001 t1102_001 u002du002d>|leads_to| t1127 t1127 u002du002d>|leads_to| t1027 t1027 u002du002d>|leads_to| t1048_001 t1048_001 u002du002d>|leads_to| t1132_001

Flow d’attaque

Exécution de simulation

Condition préalable : Le contrôle télémetrie et baseline doit avoir réussi.

Rationale : 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émetrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés mèneront à un mauvais diagnostic.

  • Narration & Commandes de l’attaque :

    1. Étape 1 – Déployer le binaire CastleRAT : L’attaquant copie CastleRAT.exe dans le répertoire %APPDATA% de la victime pour se fondre avec les données utilisateur.
    2. Étape 2 – Exécuter le keylogging : En utilisant un petit chargeur C#-en-mémoire, l’attaquant invoque SetWindowsHookEx pour installer un crochet clavier bas-niveau, entraînant Sysmon à enregistrer l’API dans le CallTrace de l’événement de création de processus.
    3. Étape 3 – Élévation de privilège : Le même chargeur appelle ensuite DuplicateHandle pour dupliquer une poignée d’un processus système privilégié (par exemple, lsass.exe), permettant au malware de s’exécuter avec des droits SYSTEM. Les deux appels API apparaissent dans le même CallTrace de Sysmon, satisfaisant les critères de la règle de détection.
  • Script de test de régression :

    # -------------------------------------------------
    # Simulation CastleRAT – déclenche SetWindowsHookEx et DuplicateHandle
    # -------------------------------------------------
    $castlePath = "$env:APPDATACastleRAT.exe"
    
    # 1. Déposez un stub minimal qui charge la charge utile réelle (simulée ici)
    $payload = @"
    using System;
    using System.Runtime.InteropServices;
    public class Loader {
        [DllImport("user32.dll")]
        public static extern IntPtr SetWindowsHookEx(int idHook, IntPtr lpfn, IntPtr hMod, uint dwThreadId);
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool DuplicateHandle(IntPtr hSourceProcessHandle,
                                                  IntPtr hSourceHandle,
                                                  IntPtr hTargetProcessHandle,
                                                  out IntPtr lpTargetHandle,
                                                  uint dwDesiredAccess,
                                                  bool bInheritHandle,
                                                  uint dwOptions);
        public static void Execute() {
            // Installer un crochet clavier bas-niveau (WH_KEYBOARD_LL = 13)
            SetWindowsHookEx(13, IntPtr.Zero, IntPtr.Zero, 0);
            // Dupliquer une poignée du processus courant (simulée)
            IntPtr dupHandle;
            DuplicateHandle((IntPtr)-1, (IntPtr)0x1234, (IntPtr)-1, out dupHandle, 0, false, 0);
        }
    }

« @

# Compiler le code C# à la volée
Add-Type -TypeDefinition $payload -Language CSharp

# Copier le processus PowerShell actuel (agit comme CastleRAT.exe) vers le chemin cible
Copy-Item -Path $PSCommandPath -Destination $castlePath -Force

# Exécuter la charge utile malveillante
[Loader]::Execute()

# Garder le processus en vie brièvement pour s'assurer que Sysmon enregistre la pile d'appels
Start-Sleep -Seconds 5
  • Commandes de nettoyage :

    # Supprimez le binaire CastleRAT simulé
    Remove-Item -Path "$env:APPDATACastleRAT.exe" -Force
    
    # Optionnellement décharger les crochets (non nécessaire pour le stub, mais inclus pour complétude)
    # Aucun déchargement explicite requis pour l'appel SetWindowsHookEx avec callback NULL utilisé ci-dessus.