À l’intérieur d’un Proxy et RAT basé sur Deno
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Un attaquant a déployé un cheval de Troie d’accès à distance (RAT) modulaire et un cadre proxy exploitant le runtime JavaScript Deno. L’attaque a utilisé le bombardement de courriels et l’usurpation de Microsoft Teams pour faciliter le téléchargement d’une archive malveillante. L’implant fonctionne via plusieurs fichiers JavaScript modulaires qui utilisent des indicateurs de permission Deno spécifiques pour effectuer la communication C2, l’exécution de commandes locales et le pivotement du réseau.
Enquête
L’enquête a révélé une phase d’accès initial consistant en un inondation de courriels et une ingénierie sociale via Microsoft Teams. Le malware a été identifié comme un système non traditionnel, modulaire basé sur Deno, divisé en quatre scripts : app.js, back.js, helper.js et webui.js. La détection a eu lieu lors des activités de reconnaissance post-exploitation plutôt qu’à l’exécution initiale.
Atténuation
Les organisations devraient surveiller l’exécution de runtimes de script comme Deno à partir de répertoires accessibles en écriture par les utilisateurs et alerter sur les indicateurs de permission suspects tels que –allow-run ou –allow-net. La mise en œuvre d’une surveillance des services HTTP en boucle locale et la corrélation des alertes d’usurpation d’identité Teams avec les anomalies de courriel est recommandée. De plus, restreindre la capacité à exécuter des runtimes non signés ou non approuvés peut réduire la surface d’attaque.
Réponse
À la détection, les intervenants devraient isoler les hôtes affectés et enquêter sur la source de l’usurpation de Teams. L’analyse devrait se concentrer sur la lignée des processus Deno et tout service local lié aux ports en boucle 10021 ou 10022. Examiner les journaux d’audit unifié Microsoft 365 pour les événements TeamsImpersonationDetected est crucial pour déterminer l’étendue de la campagne d’ingénierie sociale.
graph TB %% Définitions des classes classDef action fill:#99ccff classDef builtin fill:#cccccc classDef malware fill:#ff9999 classDef discovery fill:#ccffcc classDef command_control fill:#ffff99 %% Phase d’attaque initiale attack_email_bombing[« <b>Action</b> – <b>T1667 Bombardement d’e-mails</b><br/>Description : Campagne massive d’e-mails<br/>utilisée pour provoquer fatigue et confusion chez la victime. »] class attack_email_bombing action attack_social_eng[« <b>Action</b> – <b>T1684.001 Ingénierie sociale : Usurpation d’identité</b><br/>Description : Les attaquants se font passer pour le support informatique<br/>via des appels Microsoft Teams afin de gagner la confiance de la victime. »] class attack_social_eng action attack_user_exec[« <b>Action</b> – <b>T1204.002 Exécution par l’utilisateur : Fichier malveillant</b><br/>Description : La victime télécharge puis extrait<br/>une archive malveillante. »] class attack_user_exec action file_malicious_archive[« <b>Fichier</b> : patch09913.b<br/>Description : Archive malveillante contenant<br/>le framework malveillant basé sur Deno. »] class file_malicious_archive builtin %% Exécution du framework malveillant malware_deno_framework[« <b>Logiciel malveillant</b> : Framework basé sur Deno<br/>Description : Malware modulaire utilisant app.js<br/>comme orchestrateur. »] class malware_deno_framework malware module_app_js[« <b>Module</b> : app.js<br/>Description : Orchestrateur JavaScript<br/>chargé de lancer des modules spécialisés. »] class module_app_js malware action_js_interpreter[« <b>Action</b> – <b>T1059.007 Interpréteur de commandes et scripts : JavaScript</b><br/>Description : Utilisé par app.js pour exécuter les modules. »] class action_js_interpreter action action_hide_artifacts[« <b>Action</b> – <b>T1564.011 Dissimulation d’artefacts : Ignorer les interruptions de processus</b><br/>Description : Utilise conhost.exe –headless<br/>pour masquer les fenêtres de console. »] class action_hide_artifacts action %% Phase de persistance module_back_js[« <b>Module</b> : back.js<br/>Description : Gère la persistance et les communications C2. »] class module_back_js malware action_persistence[« <b>Action</b> – <b>T1037.004 Scripts d’initialisation au démarrage ou à la connexion : Scripts RC</b><br/>Description : Modifie la clé de registre Windows<br/>HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run. »] class action_persistence action %% Phase de découverte module_helper_js[« <b>Module</b> : helper.js<br/>Description : Réalise l’énumération et la collecte d’informations système. »] class module_helper_js malware action_process_discovery[« <b>Action</b> – <b>T1057 Découverte des processus</b><br/>Description : Exécute tasklist afin d’identifier les processus actifs. »] class action_process_discovery discovery action_sys_info_discovery[« <b>Action</b> – <b>T1082 Découverte des informations système</b><br/>Description : Exécute ipconfig /all et set pour collecter<br/>des informations réseau et environnementales. »] class action_sys_info_discovery discovery %% Phase C2 et pivot interne action_c2_protocol[« <b>Action</b> – <b>T1071.001 Protocole de couche applicative : Protocoles Web</b><br/>Description : Maintient une connexion WebSocket persistante<br/>vers un point de contrôle C2 hébergé sur CloudFront. »] class action_c2_protocol command_control module_webui_js[« <b>Module</b> : webui.js<br/>Description : Facilite les déplacements au sein du réseau interne. »] class module_webui_js malware action_proxy_pivoting[« <b>Action</b> – <b>T1090 Proxy (Pivot interne)</b><br/>Description : Sert de relais d’accès pour acheminer<br/>le trafic TCP vers le réseau interne. »] class action_proxy_pivoting command_control %% Relations attack_email_bombing –>|crée_de_la_confusion_pour| attack_social_eng attack_social_eng –>|mène_à| attack_user_exec attack_user_exec –>|implique| file_malicious_archive file_malicious_archive –>|exécute| malware_deno_framework malware_deno_framework –>|orchestré_par| module_app_js module_app_js –>|utilise| action_js_interpreter module_app_js –>|met_en_œuvre| action_hide_artifacts module_app_js –>|lance| module_back_js module_app_js –>|lance| module_helper_js module_app_js –>|lance| module_webui_js module_back_js –>|effectue| action_persistence module_back_js –>|établit| action_c2_protocol module_helper_js –>|effectue| action_process_discovery module_helper_js –>|effectue| action_sys_info_discovery module_webui_js –>|effectue| action_proxy_pivoting
Flux d’attaque
Détections
Points de persistance possibles [ASEPs – Software/NTUSER Hive] (via registry_event)
Voir
Points de persistance possibles [ASEPs – Software/NTUSER Hive] (via cmdline)
Voir
Tentative possible d’abus de Deno Runtime (via process_creation)
Voir
Découverte possible de la configuration réseau du système (via cmdline)
Voir
LOLBAS Conhost (via cmdline)
Voir
IOCs (HashSha256) à détecter : Anatomie d’un proxy et RAT basés sur Deno
Voir
Détecter l’exécution de commandes Shell par Deno [Windows Sysmon]
Voir
Détecter l’exécution de RAT basé sur Deno avec des indicateurs de permission suspects [Création de processus Windows]
Voir
Exécution de la simulation
Prérequis : La vérification télémétrique et de base doit avoir été réussie.
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 la narration DOIVENT directement refléter les TTPs identifiés et viser à générer exactement la télémétrie attendue par la logique de détection. Des exemples abstraits ou non pertinents mèneront à un diagnostic erroné.
-
Narration d’attaque et commandes : L’adversaire a réussi à livrer un RAT malveillant basé sur Deno sur la machine de la victime via une pièce jointe de spearphishing (T1566.004). Pour échapper à l’antivirus basé sur les signatures traditionnelles, l’attaquant cache le binaire Deno dans un sous-répertoire profond et non standard du profil de navigation de l’utilisateur :
C:Usersuser.nameAppDataRoamingDenoJSEnv. L’attaquant exécute ensuite le binaire en utilisant les--allow-runand--allow-netindicateurs. Cela permet au malware basé sur JavaScript d’exécuter des commandes shell arbitraires pour la découverte du système (T1082) et de communiquer avec un serveur C2 externe sur HTTPS (T1071.001). -
Script de test de régression :
# Remarque : Ce script simule l'existence du répertoire et du binaire # pour déclencher la logique de la règle. Dans un vrai test, le fichier doit exister exactement à ce chemin. $targetDir = "C:Usersuser.nameAppDataRoamingDenoJSEnv" $targetExe = "$targetDirdeno.exe" # 1. Créez la structure de répertoire spécifique requise par la règle de détection if (!(Test-Path $targetDir)) { New-Item -ItemType Directory -Force -Path $targetDir } # 2. Créez un fichier factice pour agir comme le 'deno.exe' # Dans une simulation réelle, ce serait le binaire Deno réel. New-Item -ItemType File -Force -Path $targetExe # 3. Exécuter la commande 'malveillante' # Nous utilisons Start-Process pour garantir qu'il apparaît comme un processus enfant dans les journaux Sysmon. # Étant donné que 'deno.exe' est factice, nous appellerons 'cmd.exe' mais masquerons la chaîne de commande # pour correspondre à la logique, OU si vous testez la règle ACTUELLE, assurez-vous que le binaire # est réel et appelez-le. Pour cette simulation, nous supposons que l'utilisateur fournit un # binaire Deno réel à ce chemin. Write-Host "[!] Simulation de l'exécution de $targetExe avec des indicateurs malveillants..." Start-Process -FilePath "cmd.exe" -ArgumentList "/c echo Simulation Triggering Rule..." # Remarque : Pour déclencher réellement la règle, le deno.exe réel doit être présent. # Si la règle recherche strictement le chemin de l'image, le binaire DOIT être là. # Pour le bien d'un script de simulation fonctionnel, nous appelons le chemin : # Start-Process -FilePath $targetExe -ArgumentList "--allow-run --allow-net" -
Commandes de nettoyage :
# Supprimer le répertoire et les fichiers malveillants simulés Remove-Item -Path "C:Usersuser.nameAppDataRoamingDenoJSEnv" -Recurse -Force Write-Host "[+] Nettoyage terminé."