Lors de notre récente enquête à Seqrite Dans nos laboratoires, nous avons identifié une variante sophistiquée du logiciel malveillant Masslogger, voleur d'identifiants, se propageant via des fichiers .VBE (encodés en VBScript). Initialement, cette variante semblait être une menace classique basée sur un script, mais une analyse plus approfondie a révélé qu'il s'agissait d'un logiciel malveillant multi-étapes sans fichier, s'appuyant fortement sur le Registre Windows pour stocker et exécuter sa charge utile malveillante.
Dans cet article, nous avons analysé le flux interne du code VBScript, le mécanisme d'obfuscation utilisé et la façon dont il manipule le système pour qu'il reste sans fichier. Nous avons également expliqué les Stagers et les fonctionnalités de la charge utile finale de Masslogger.
Vecteur d'infection initiale :
L'infection débute par un fichier .VBE, probablement diffusé par courrier indésirable ou téléchargements intempestifs. Ce fichier est un script VBScript codé avec le schéma de codage intégré de Microsoft pour détecter les inspections occasionnelles. Une fois décodé, le script révèle plusieurs couches d'obfuscation, des routines modulaires et de véritables fonctionnalités.
Analyse du fichier .VBS décodé – [VBScript] :
Initialement, le fichier .VBS prépare et écrit plusieurs valeurs de registre sous une clé spécifique utilisée par le logiciel malveillant. Il configure l'environnement d'exécution pour le stockage d'une charge utile sans fichier.
Les noms de clés et de valeurs de registre sont codés en dur et simples. Cependant, peu de données de valeur critiques sont conservées codées et décodées lors de l'exécution du fichier.
- Configuration du registre pour les commandes et la configuration du Stager :
La sous-routine AKAAU() prépare les clés et les valeurs avant leur écriture dans le registre. Les noms et les données des valeurs sont stockés dans un tableau distinct : « QORXG » et « ZBZLV ». L'écriture des deux tableaux dans le registre s'effectue via « RegWrite ».

Une fois le système infecté, nous pouvons trouver ces entrées de registre malveillantes dans l'Éditeur du Registre :

Voici le résumé des entrées de registre écrites sur le système dans le chemin de registre « HKCU\Software\ » :
| Nom de la valeur | Données de la valeur | Résumé |
| cn | Arrêter-Processus -Nom conhost -Force | Tuez de force le processus conhost.exe. |
| i | « AddInProcess32.exe » | Processus cible pour l'injection de code. |
| in | "0" | Drapeau de contrôle, vérifiant si la commande PowerShell est déjà exécutée ou non. |
| levure de boulanger | Unité de soins intensifs pédiatriques (USIPL) | Commandes PowerShell obscurcies. Désobscurcit et charge Stager-1 en mémoire. |
| Chemin | esBbIgyFlZcXjUl | Nom du chemin d'accès à la clé de registre. Il est ajouté à « HKCU\Software\ ». |
| r | WAJLA | Assemblage .Net, stocké au format de chaîne inversée. Stager-2. |
| s | RKFYI (DGSLP) | Chaîne décodée hexadécimale. Assemblage .Net stocké au format Base64 inversé. Stager-1. |
| v | HIKGO() | Commandes obscurcies pour PowerShell. Désobscurcissent et chargent Stager-1 en mémoire. Utilisées spécifiquement pour la simulation de saisie utilisateur. |
Tableau 1 : Résumé des entrées de registre ajoutées
Avant d'écrire ces entrées de registre, le logiciel malveillant appelle une sous-routine « ZGYHW() » qui vérifie si le fichier « C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe » est présent à l'emplacement.
Selon leur présence, les logiciels malveillants déploient différentes versions de Stagers. Plus précisément, Stager-2 dans ce scénario :

– Configuration du registre pour le déploiement final de la charge utile :
Une fois les registres ci-dessus configurés et écrits, une autre sous-routine « XSSAY() » est appelée. Cette fonction est chargée de lire une autre chaîne de données plus volumineuse (constituant une charge utile Masslogger, conservée codée). Ces données sont ensuite divisées en blocs de 25,000 XNUMX caractères et enregistrées dans d'autres valeurs de registre sous forme segmentée.

Chaque bloc est écrit dans le registre à ces chemins :
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*

-Planificateur de tâches :
Les logiciels malveillants établissent leur persistance via une tâche planifiée Windows, garantissant ainsi leur exécution continue dans le système. Le déclenchement de la tâche démarre à la date de l'infection (20xx-xx–xxT00:00:00) et se répète toutes les minutes (PT1M). L'exécution de la tâche est planifiée sans tenir compte des restrictions liées à la batterie.

La tâche utilise le même nom qu'une clé de registre créée (par exemple, esBbIgyFlZcXjUl) et est déclenchée pour exécuter un fichier .VBS. Ce fichier .VBS constitue une boucle d'exécution persistante qui vérifie la présence d'entrées de registre indiquant si une charge utile doit être exécutée.
-Script du planificateur de tâches – Capable de simuler la saisie utilisateur :
Comme nous pouvons le voir dans l’image ci-dessous :
- Il fonctionne environ 10000 10 fois, en dormant XNUMX secondes entre chaque cycle.
- Il lit la valeur de registre « i » pour obtenir le nom du processus et confirmer s’il est en cours d’exécution ou non.
- Ensuite, il vérifie si la valeur de registre « in » est définie sur 1,
- si oui, il exécute silencieusement la commande malveillante stockée dans le registre « instantanément ».
- Lorsque la valeur dans « in » n’est pas définie sur 1.
- Il lance PowerShell en mode fenêtre visible et utilise les méthodes « .SendKeys » pour saisir les valeurs des registres « v » et « cn » suivies de « {ENTER} ».
- Cette technique revient à simuler les entrées utilisateur dans PowerShell.

Comme nous l’avons vu dans le tableau récapitulatif,
La clé de registre « cn » est utilisée pour arrêter de force l'instance en cours du processus conhost.exe.
Les registres « instant » et « v » sont utilisés comme un PowerShell pour désobfusquer, préparer et charger l'assembly Stager .Net en mémoire, sans toucher au disque.
Vérifier l’état de protection du système :
Les logiciels malveillants vérifient l'état de protection du système cible et peuvent passer inaperçus lors de leur exécution. Ils le font en interrogeant certains registres importants. Voici quelques-uns des registres où les produits antivirus et de sécurité enregistrent généralement leur présence :
- « HKLM\SOFTWARE\Microsoft\Security Center\Provider\Av »,
- « HKLM\SOFTWARE\Microsoft\Security Center\Monitoring »,
- « HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Security and Maintenance\Providers »,
- « HKLM\SOFTWARE\Microsoft\Windows Defender\Centre de sécurité\Fournisseurs »
Ces registres sont définis dans le script sous forme codée. Le logiciel malveillant tente d'énumérer les sous-clés des clés ci-dessus et tente de lire la valeur « DisplayName ». DisplayName contient le nom de l'antivirus/outil de sécurité installé. Si plusieurs produits de sécurité sont installés sur le système cible, le logiciel malveillant interrompt son exécution.

-Déclencheur pour Stager :
La sous-routine SQSKP() du fichier .VBE est un élément essentiel de la chaîne d'exécution des logiciels malveillants. Elle construit et exécute dynamiquement une commande PowerShell exécutant en mémoire un stager .NET récupéré dans le registre Windows.

Ici, le texte décodé est une commande PowerShell désobscurcie, après avoir remplacé |path| par RVOYN.

Comme nous pouvons le voir dans la Fig-10 –
- Cette commande PowerShell est formée et affectée à la variable « LPICU ».
- Le contenu de la variable est ensuite écrit dans la valeur de registre « \instant », qui est créée dans la clé de registre « Computer\HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl ».
- La fonction exécute la commande PowerShell construite en silence, où « 0 » masque la fenêtre PowerShell.
- PowerShell lit ensuite la clé de registre « HKCU\Software\esBbIgyFlZcXjUl\s » – Cette clé de registre contient le Stager-1, conservé dans un format codé Base64 vénéré.

Nous avons vu des auteurs de logiciels malveillants implémenter cette combinaison d'encodage dans de nombreux voleurs d'informations d'identification récents, notamment VIPKeylogger, Remcos, AsyncRAT, etc.
- La commande PowerShell inverse la chaîne, la joint, décode les chaînes base64 et la charge sous forme d'assembly .Net à l'aide de la fonction « [AppDomain]::CurrentDomain.Load() » en mémoire. Cette approche permet aux logiciels malveillants de :
- Évitez d’écrire des fichiers malveillants réels sur le disque (capacité d’évasion).
- Construisez et chargez dynamiquement la charge utile au moment de l'exécution.
- Appelle la méthode d'entrée « [vv]::v('esBbIgyFlZcXjUl') », qui fait référence au chemin du registre.
Nous avons récupéré la charge utile Stager-1 désobfusquée pour une analyse plus approfondie. Voici nos observations :
Analyse de Stager-1 :
Stager-1 est un petit exécutable encodé dans le registre « HKCU\Software\esBbIgyFlZcXjUl\s ». Il est compilé en .Net et pèse environ 14 Ko.
En analysant son code, nous avons constaté que le fichier tente de lire le contenu d'une autre clé de registre portant le nom « r » – [HKCU\Software\esBbIgyFlZcXjUl\r].
Ces contenus sont inversés et un autre binaire compilé .Net est formé – le stager-2.
Ce binaire est ensuite chargé en mémoire via « Assembly.Load() ». Stager-1 tente de localiser la méthode r() dans la classe r de l'assembly Stager-2. C'est le point d'entrée de l'exécution de Stager-2.

Analyse de Stager-2 :
Une fois l'installation de Stager-1 terminée, le malware accède à son chargeur Stager-2. Cette étape de l'infection consiste à extraire la charge utile Masslogger du registre et à l'injecter dans le processus cible.
Stager-2 construit initialement des chemins de fichiers potentiels pour lancer le processus et effectuer l'injection de code.
Il vérifie si un fichier (dont le nom est récupéré à partir de la valeur de registre « i ») existe dans l’un de ces chemins.
Dans notre cas, nous avons trouvé que le chemin du fichier/processus cible est :
« %WINDIR%\Microsoft.NET\Framework\v4.0.30319\AddInProcess32.exe »

De plus, le logiciel malveillant extrait la charge utile réelle de Masslogger qui a été précédemment écrite (par la sous-routine « XSSAY() ») dans plusieurs sous-clés de registre sous les registres ci-dessous, que nous avons vus précédemment ».
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*
La fonction BBX() de la classe « r » collecte toutes les entrées de valeur, les concaténe, inverse la chaîne combinée, puis la décode de l'hexadécimal en octets bruts. Cette technique permet aux auteurs de logiciels malveillants de dissimuler un binaire PE complet dans plusieurs clés de registre. La charge utile décodée est ensuite utilisée pour le « process hollowing ». Ce processus est réalisé à l'aide de la fonction .XGP().
C'est une manière intelligente de conserver tout ce qui est stocké dans le registre et d'utiliser uniquement la mémoire pour l'exécution.

-Livraison de charge utile spécifique à la France :
L'envoi de charges utiles géolocalisées est désormais courant dans les logiciels malveillants avancés, modifiant le comportement en fonction de la localisation de la victime. La phase 2 de cette infection vérifie si la langue d'entrée du système est définie sur le français « Fr » et si les paramètres régionaux contiennent « France ».

Si les conditions sont remplies, il tente de télécharger une charge utile supplémentaire spécialement conçue à partir de l'URL codée en dur : hxxps://144.91.92.251/MoDi.txt. Au moment de l'analyse, l'URL n'était pas accessible.
-Terminer les traces et quitter :
À la fin de son exécution, le logiciel malveillant arrête de force les instances en cours d'exécution des processus conhost.exe et PowerShell.exe.

En interrompant ces processus, le malware cherche probablement à masquer ses traces d'activité. Enfin, il quitte l'application via ProjectData.EndApp(), complétant ainsi le cycle de vie de l'étape 2.
Analyse de la charge utile finale du Masslogger :
Après avoir désobfusqué la charge utile finale du registre, Masslogger est injecté dans le processus cible « AddInProcess32.exe ». Le marqueur de ce malware est visible dans le vidage mémoire du processus injecté, comme indiqué ci-dessous :

Nous avons réalisé un vidage mémoire de cette charge utile, représentant l'étape finale de la chaîne du malware. Elle est responsable de l'exécution des principales fonctionnalités de vol d'informations d'identification.
-Collecte de données :
Tout comme de nombreux logiciels malveillants de vol d'informations, ce logiciel malveillant cible également plusieurs navigateurs Web et quelques clients de messagerie pour voler des informations sensibles, telles que le nom d'utilisateur enregistré, les mots de passe, les données de remplissage automatique, etc. Vous trouverez ci-dessous la liste des navigateurs Web et de quelques clients de messagerie que Masslogger tente de cibler.

Voyons en détail l’un des modules dans lequel un logiciel malveillant tente de récupérer les informations de connexion enregistrées à partir du navigateur Chrome.

Il localise les données de connexion de l'utilisateur en accédant à sa base de données SQLite « Données de connexion ». Il extrait les URL des sites web, ainsi que les noms d'utilisateur et mots de passe correspondants, et les collecte pour une utilisation ultérieure. Si des identifiants valides sont trouvés, ils sont stockés dans un format structuré, comme le site web, le nom d'utilisateur et le mot de passe.
Outre le ciblage des navigateurs et des clients de messagerie pour le vol d’informations, Masslogger possède également des capacités de :
- Activité du keylogger.
- Prendre et effacer des fichiers instantanés.
- Récupérer les données du presse-papiers.
- Essayez de surveiller l'activité des utilisateurs en appelant GetForegroundWindow, GetWindowText, etc.
- Lisez les détails du système, comme l'adresse IP et le pays.
- Téléchargement de plusieurs fichiers sur le serveur.
-Exfiltration de données :
La méthode SpeedOffPWExport() dans la charge utile finale permet l'exfiltration des données en envoyant les informations d'identification collectées et les informations système à des emplacements distants via plusieurs canaux, tels que FTP, SMTP ou Telegram.
Si FTP est activé, la méthode télécharge les données volées sous forme de fichier .txt sur un serveur FTP distant à l'aide d'informations d'identification codées en dur.

Pour SMTP, il construit un e-mail contenant les données dans le corps du message ou sous forme de fichier texte joint et l'envoie à l'aide du serveur de messagerie spécifié.

Si l'exfiltration Telegram est activée, elle envoie les données sous forme de document à l'aide de l'API Telegram Bot, y compris une légende avec le nom d'utilisateur et l'IP de la victime.

En conclusion :
La variante sans fichier de Masslogger illustre l'évolution des malwares de vol d'informations. Distribué via un script .VBE, il exploite le registre Windows pour stocker une charge utile exécutable et la charge directement en mémoire sans toucher au disque. Il est capable de collecter les identifiants stockés dans plusieurs navigateurs et clients de messagerie, et d'utiliser plusieurs canaux [FTP, SMTP, Telegram Bot] pour l'exfiltration de données.
Cette variante illustre l'évolution des logiciels malveillants de vol d'identifiants vers des systèmes sans fichier et fonctionnant en plusieurs étapes (Étape 1, Étape 2). Cela remet en question les méthodes de détection traditionnelles basées sur les antivirus et les signatures. Pour y remédier, les défenseurs de la sécurité doivent utiliser des mécanismes de détection avancés, tels que la détection comportementale et la surveillance des anomalies de registre.
Indicateurs de compromission (IoC) :
Fichier MD5 :
.VBE: 29DBD06402D208E5EBAE1FB7BA78AD7A
.VBS: F30F07EBD35B4C53B7DB1F936F72BE93
Stager-1: 2F1E771264FC0A782B8AB63EF3E74623
Stager-2: 37F0EB34C8086282752AF5E70F57D34C
MassLogger Payload: 1E11B72218448EF5F3FCA3C5312D70DB
URL:
hxxps://144.91.92.251/MoDi.txt
Seqrite Détection:
Script.trojan.49618.GC
Cheval de Troie.MSIL
Cheval de Troie.YakbeexMSIL.ZZ4
MITRE ATT & CK
| Tactique | Identification de la technique | Nom de la technique | ID de sous-technique | Nom de la sous-technique |
| Accès initial | T1566 | L'hameçonnage | T1566.001 | Pièce jointe pour hameçonnage ciblé |
| De bout en bout | T1059 | Interpréteur de commandes et de scripts | T1059.005 | Visual Basic |
| De bout en bout | T1059 | Interpréteur de commandes et de scripts | T1059.001 | PowerShell |
| Persistence | T1053 | Tâche/Travail planifié | T1053.005 | Tâche planifiée |
| Évasion défensive | T1140 | Décrypter/décoder des fichiers ou des informations | - | - |
| Évasion défensive | T1112 | Modifier le registre | - | - |
| Évasion défensive | T1055 | Processus d'injection | T1055.012 | Processus d'évidement |
| Évasion défensive | T1562 | Altérer les défenses | T1562.001 | Désactiver ou modifier les outils |
| Évasion défensive | T1059 | Interpréteur de commandes et de scripts | T1059.001 | PowerShell |
| Découverte | T1518 | Découverte de logiciels | T1518.001 | Découverte de logiciels de sécurité |
| Découverte | T1082 | Découverte des informations système | - | - |
| Découverte | T1012 | Registre de requête | - | - |
| Accès aux informations d'identification | T1555 | Informations d'identification des magasins de mots de passe | T1555.003 | Informations d'identification des navigateurs Web |
| Accès aux informations d'identification | T1056 | Capture d'entrée | T1056.001 | Keylogging |
| Collection | T1113 | Capture d'écran | - | - |
| Collection | T1115 | Données du Presse-papiers | - | - |
| Collection | T1056 | Capture d'entrée | T1056.001 | Keylogging |
| Collection | T1083 | Découverte de fichiers et de répertoires | - | - |
| Commander et contrôler | T1071 | Protocole de la couche application | T1071.001 | Protocoles Web |
| Commander et contrôler | T1071 | Protocole de la couche application | T1071.002 | Protocoles de transfert de fichiers |
| Commander et contrôler | T1071 | Protocole de la couche application | T1071.003 | Protocoles de messagerie |
| Commander et contrôler | T1105 | Transfert d'outil d'entrée | - | - |
| exfiltration | T1041 | Exfiltration sur le canal C2 | - | - |
| exfiltration | T1567 | Exfiltration via un service Web | T1567.002 | Exfiltration vers le stockage cloud |
| exfiltration | T1567 | Exfiltration via un service Web | T1567.001 | Exfiltration vers le référentiel de code |



