Nouveau malware VVS Stealer cible les comptes Discord via un code Python obfusqué
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
VVS Stealer est un nouveau logiciel malveillant d’exfiltration d’informations basé sur Python et vendu sur Telegram. Il est obscurci avec Pyarmor, empaqueté avec PyInstaller et persiste via le dossier de démarrage de Windows. Le malware récolte les jetons Discord, les identifiants des navigateurs, les cookies, l’historique, les mots de passe et les captures d’écran. Il peut également injecter un charge utile JavaScript malveillant pour détourner les sessions Discord actives.
Enquête
Palo Alto Networks Unit 42 a révélé le logiciel malveillant, notant qu’il est proposé à la vente depuis avril 2025. Les chercheurs ont décrit sa technique d’obscurcissement, son modèle de distribution et ses fonctionnalités, y compris le vol d’identifiants et l’injection sur Discord. Le rapport lie l’outil à des acteurs menaçants francophones actifs dans des groupes Telegram axés sur les stealer.
Atténuation
Les organisations devraient surveiller les exécutables PyInstaller inconnus et les raccourcis inattendus dans le dossier de démarrage. Déployer des règles de détection de points de terminaison pour les scripts Python obscurcis et les charges utiles JavaScript suspectes. Appliquer l’authentification multi-facteurs pour les comptes Discord et de navigateurs et limiter les privilèges administratifs qui pourraient être abusés pour récolter des identifiants.
Réponse
Si VVS Stealer est détecté, isoler le point de terminaison affecté, collecter la mémoire et les artefacts de fichiers, et extraire les IOC. Supprimer l’entrée de démarrage malveillante, terminer tous les processus Discord injectés et forcer une réinitialisation des mots de passe pour les comptes compromis. Mener une enquête médico-légale complète pour trouver des identifiants volés supplémentaires et assurer que l’infrastructure C2 à distance est bloquée.
« graph TB %% Class definitions classDef action fill:#99ccff classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef technique fill:#ffff99 %% Nodes mal_vvs_stealer[« <b>Malware</b> – <b>VVS Stealer</b><br/><b>Description</b>: Voleur d’informations empaqueté avec PyInstaller et obfusqué avec PyArmor. »] class mal_vvs_stealer malware tool_pyinstaller[« <b>Outil</b> – <b>PyInstaller</b><br/><b>Description</b>: Regroupe les applications Python en exécutables autonomes. »] class tool_pyinstaller tool tool_pyarmor[« <b>Outil</b> – <b>PyArmor</b><br/><b>Description</b>: Obfusque le bytecode Python pour cacher la logique malveillante. »] class tool_pyarmor tool tech_T1027[« <b>Technique</b> – <b>T1027 Fichiers ou informations obfusqués</b><br/><b>Description</b>: Les adversaires utilisent l’obfuscation pour dissimuler du code malveillant. »] class tech_T1027 technique action_download_js[« <b>Action</b> – Télécharger des charges utiles JavaScript supplémentaires »] class action_download_js action tech_T1027_006[« <b>Technique</b> – <b>T1027.006 Contrebande HTML</b><br/><b>Description</b>: Intégrer du code malveillant dans le HTML pour contourner les défenses. »] class tech_T1027_006 technique tech_T1505[« <b>Technique</b> – <b>T1505 Composant logiciel serveur</b><br/><b>Description</b>: Installer des composants serveur supplémentaires pour soutenir l’activité malveillante. »] class tech_T1505 technique action_persistence[« <b>Action</b> – Établir une persistance via le dossier de démarrage »] class action_persistence action tech_T1037_005[« <b>Technique</b> – <b>T1037.005 Éléments de démarrage</b><br/><b>Description</b>: Placer des exécutables dans le dossier de démarrage de l’utilisateur pour les exécuter à l’ouverture de session. »] class tech_T1037_005 technique tech_T1547[« <b>Technique</b> – <b>T1547 Exécution lors du démarrage ou de l’ouverture de session</b><br/><b>Description</b>: Enregistrer des programmes pour s’exécuter automatiquement au démarrage ou à l’ouverture de session. »] class tech_T1547 technique action_fake_error[« <b>Action</b> – Afficher une fausse erreur fatale »] class action_fake_error action tech_T1562_011[« <b>Technique</b> – <b>T1562.011 Falsification d’alerte de sécurité</b><br/><b>Description</b>: Montrer de fausses alertes de sécurité pour tromper les utilisateurs. »] class tech_T1562_011 technique action_screenshot[« <b>Action</b> – Capturer l’écran »] class action_screenshot action tech_T1113[« <b>Technique</b> – <b>T1113 Capture d’écran</b><br/><b>Description</b>: Enregistrer des captures d’écran du bureau de la victime. »] class tech_T1113 technique action_browser_harvest[« <b>Action</b> – Collecter des données du navigateur (cookies, mots de passe, historique) »] class action_browser_harvest action tech_T1555_003[« <b>Technique</b> – <b>T1555.003 Identifiants des navigateurs web</b><br/><b>Description</b>: Extraire les identifiants sauvegardés et les cookies des navigateurs. »] class tech_T1555_003 technique action_discord_hijack[« <b>Action</b> – Terminer le client Discord et injecter un JavaScript malveillant »] class action_discord_hijack action tech_T1539[« <b>Technique</b> – <b>T1539 Vol de cookie de session web</b><br/><b>Description</b>: Obtenir des cookies de session web actifs à partir des navigateurs. »] class tech_T1539 technique tech_T1134_003[« <b>Technique</b> – <b>T1134.003 Manipulation de jeton d’accès</b><br/><b>Description</b>: Voler ou usurper des jetons d’authentification. »] class tech_T1134_003 technique action_c2_exfil[« <b>Action</b> – Exfiltrer des données via C2 basé sur le web »] class action_c2_exfil action tech_T1071_001[« <b>Technique</b> – <b>T1071.001 Protocole de couche applicative : Protocoles Web</b><br/><b>Description</b>: Utiliser le trafic web standard pour la commande et le contrôle. »] class tech_T1071_001 technique tech_T1102[« <b>Technique</b> – <b>T1102 Service web</b><br/><b>Description</b>: Communiquer avec des serveurs distants via des services web pour l’exfiltration de données. »] class tech_T1102 technique %% Connections mal_vvs_stealer u002du002d>|utilise| tech_T1027 mal_vvs_stealer u002du002d>|empaqueté avec| tool_pyinstaller mal_vvs_stealer u002du002d>|obfusqué avec| tool_pyarmor mal_vvs_stealer u002du002d>|télécharge| action_download_js action_download_js u002du002d>|utilise| tech_T1027_006 action_download_js u002du002d>|utilise| tech_T1505 action_download_js u002du002d>|établit la persistance via| action_persistence action_persistence u002du002d>|utilise| tech_T1037_005 action_persistence u002du002d>|exploite| tech_T1547 action_persistence u002du002d>|affiche| action_fake_error action_fake_error u002du002d>|utilise| tech_T1562_011 action_fake_error u002du002d>|capture| action_screenshot action_screenshot u002du002d>|utilise| tech_T1113 action_screenshot u002du002d>|collecte| action_browser_harvest action_browser_harvest u002du002d>|utilise| tech_T1555_003 action_browser_harvest u002du002d>|cible Discord et injecte du JS| action_discord_hijack action_discord_hijack u002du002d>|utilise| tech_T1539 action_discord_hijack u002du002d>|utilise| tech_T1134_003 action_discord_hijack u002du002d>|exfiltre via| action_c2_exfil action_c2_exfil u002du002d>|utilise| tech_T1071_001 action_c2_exfil u002du002d>|utilise| tech_T1102 «
Flux d’attaque
Détections
Fichier Python créé dans un répertoire inhabituel (via file_event)
Voir
Abus possible de Discord comme canal C2 (via dns_query)
Voir
Abus possible de Discord comme canal C2 (via proxy)
Voir
Binaire / scripts suspects dans l’emplacement de démarrage (via file_event)
Voir
Utilisation possible de PyInstaller (via file_event)
Voir
Package VVS Stealer PyInstaller et terminaison de Discord [Création de processus Windows]
Voir
Exécution de simulation
Prérequis : la vérification préliminaire de télémétrie et de référence doit avoir été réussie.
Justification : Cette section détaille l’exécution précise de la technique d’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTP 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 liés mèneront à un diagnostic erroné.
-
Narratif d’attaque et commandes :
L’adversaire a compromis un compte utilisateur à faible privilège sur un poste de travail Windows. À l’aide d’un outil de téléchargement PowerShell, ils lancent un exécutable malveillant empaqueté avec PyInstaller (VVS_Stealer.exe) qui génère d’abord un processus avec la ligne de commande contenant la chaîne “PyInstaller”. Le payload ensuite force la terminaison du client Discord en cours d’exécution pour préparer une étape d’injection de vol de jeton. Toutes les actions se déroulent dans le contexte de l’utilisateur actuel, générant un seul Événement de création de processus qui correspond aux critères de la règle.Étape par étape :
- Copier le paquet PyInstaller malveillant dans
%TEMP%. - L’exécuter avec une ligne de commande qui inclut explicitement le mot “PyInstaller”.
- Le binaire malveillant appelle en interne
taskkill /IM Discord.exe /Fpour terminer Discord. - La terminaison génère un Événement de création de processus événement où le champ
Imagerésout le chemin de l’exécutable Discord (C:Users<user>AppDataLocalDiscordapp-... Discord.exe) et la ligne de commande d’origine contient encore “PyInstaller”.
- Copier le paquet PyInstaller malveillant dans
-
Script de test de régression : Le script PowerShell suivant reproduit exactement la télémétrie nécessaire pour déclencher la règle de détection. Il évite intentionnellement toute charge utile malveillante réelle ; à la place, il lance un processus
notepad.exeinoffensif mais prétend être un exécutable empaqueté avec PyInstaller en incorporant le mot-clé dans la ligne de commande. Il termine également tout processus Discord en cours d’exécution pour simuler la condition « Image se termine par Discord.exe ».# ------------------------------------------------- # Script de simulation – Déclenche la règle Sigma #f63685c4‑feea‑431b‑a749‑55cf8661e6ac # ------------------------------------------------- # 1. S'assurer que Discord est en cours d'exécution (facultatif, pour garantir la terminaison) $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath -WindowStyle Hidden Start-Sleep -Seconds 5 } # 2. Lancer un processus factice avec "PyInstaller" dans sa ligne de commande. # Utilisation de notepad.exe comme espace réservé bénin. $dummyCmd = "C:WindowsSystem32notepad.exe" $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd" Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden Write-Host "[+] Processus factice lancé avec le mot-clé PyInstaller." # 3. Terminer immédiatement Discord pour générer l'événement Discord.exe image. if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) { Stop-Process -Name "Discord" -Force Write-Host "[+] Discord.exe terminé." } # 4. Optionnel : Nettoyer la fenêtre factice de notepad après un court délai. Start-Sleep -Seconds 8 Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] Nettoyage terminé." -
Commandes de nettoyage : Assurez-vous qu’aucun processus résiduel ne reste.
# Supprimer tous les processus factices notepad en cours Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force # Redémarrer Discord si nécessaire pour la continuité post-test $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath Write-Host "[+] Discord redémarré pour les opérations normales." }