L'attrait du MaaS : un infostealer renaît de ses cendres

NOVABLIGHT est un infostealer NodeJS développé et commercialisé sous forme d'offre MaaS. Il est principalement utilisé pour voler des identifiants et compromettre des portefeuilles cryptographiques.

18 minutes de lectureAnalyse des malwares
L'attrait du MaaS : un infostealer renaît de ses cendres

NOVABLIGHT en bref

NOVABLIGHT est un logiciel malveillant de type « Malware-as-a-Service » (MaaS) basé sur NodeJS et conçu pour voler des informations. Il est développé et commercialisé par un groupe cybercriminel maîtrisant la langue française. Cela ressort clairement de leurs discussions et communications opérationnelles sur leurs principales plateformes de vente et d'assistance, Telegram et Discord.

D'après notre analyse de la dernière version publiée de NOVABLIGHT, l'extrait de code suivant suggère que le groupe Sordeal, à l'origine de Nova Sentinel et MALICORD, est également responsable de NOVABLIGHT.

Principaux points abordés dans cet article

  • NOVABLIGHT est un logiciel malveillant de type « infostealer » présenté comme un outil éducatif, bien que les messages publiés sur la chaîne Telegram révèlent des informations sensibles et des captures d'écran non expurgées.
  • Les licences NOVABLIGHT sont valables pendant un an et les fichiers binaires peuvent être générés via Telegram ou Discord.
  • Code fortement obscurci doté de nombreuses fonctionnalités.

Découverte

Elastic Security Labs a identifié plusieurs campagnes utilisant de faux téléchargements d'installateurs de jeux vidéo comme appât initial pour infecter les utilisateurs d'Internet avec des logiciels malveillants de type MaaS. Dans un cas, l'URL http://gonefishe[.]com a invité l'utilisateur à télécharger un fichier binaire et à installer une version en français d'un jeu dont le nom et la description étaient similaires à ceux d'un jeu récemment publié sur Steam.

Distribution, monétisation et communauté

Le groupe a fait la promotion et la vente de son produit sur diverses plateformes en ligne, auparavant Sellix et Sellpass, et actuellement Billgang.

Le groupe vend une clé API qui expire entre 1 et 12 mois. Cette clé peut ensuite être utilisée pour créer une instance de NOVABLIGHT via un bot Telegram ou via Discord.

Le groupe promeut un programme de parrainage sur sa chaîne Discord, avec des clés API comme récompenses.

Les utilisateurs ont accès à un tableau de bord hébergé par le groupe qui présente les informations recueillies auprès des victimes. Les domaines suivants ont été identifiés, mais il en existe peut-être d'autres :

  • api.nova-blight[.]top
  • shadow.nova-blight[.]top
  • nova-blight[.]site
  • nova-blight[.]xyz
  • bamboulacity.nova-blight[.]xyz

Certaines des images utilisées dans le tableau de bord sont hébergées dans des référentiels GitHub associés à différents comptes, ce qui a permis de révéler davantage d'informations sur le groupe.

Le compte GitHub KSCHcuck1 est un pseudonyme similaire à celui de l'auteur précédent de MALICORD, une version gratuite de la première version du logiciel malveillant hébergée sur GitHub sous le compte KSCH-58 (LIEN VERS L'ARCHIVE WEB). " Le compte X @KSCH_dsc présentait également des similitudes et faisait activement la promotion de son meilleur logiciel de vol de données jamais commercialisé, ", encore en 2023.

Les comptes GitHub suivants ont été identifiés en lien avec le groupe :

Leur chaîne Telegram publique héberge des tutoriels et une communauté d'utilisateurs. Dans la capture d'écran suivante, les utilisateurs partagent des captures d'écran du processus de compilation.

Les utilisateurs de ce logiciel malveillant partagent ouvertement des images d'articles de luxe et de transferts d'argent, ce qui est remarquable dans la mesure où NOVABLIGHT est décrit comme étant destiné uniquement à des fins éducatives.

Analyse NOVABLIGHT

NOVABLIGHT est un outil modulaire et complet de vol d'informations, développé sur NodeJS avec le framework Electron. Ses capacités vont au-delà du simple vol d'identifiants, intégrant des méthodes de collecte et d'exfiltration de données, de détection de sandbox et de dissimulation avancée.

Un aspect remarquable du processus de création du logiciel malveillant est sa configuration modulaire. Bien qu'un client puisse choisir de désactiver certaines fonctionnalités, le code sous-jacent à ces fonctions reste dans la charge utile finale ; il est inactif et ne sera pas exécuté en fonction des indicateurs de configuration de la version.

Les extraits de code figurant dans ce rapport proviennent d'un échantillon non obscurci de la version 2.0, lorsque les détails de mise en œuvre correspondent aux échantillons de la version 2.2, ou de notre code manuellement désobscurci d 'un échantillon de la version 2.2 lorsqu'ils diffèrent.

Structure du code

"De la configuration initiale au vol de données, l'infostealer est organisé en un pipeline clair, en plusieurs étapes, géré par des contrôleurs d'" s de haut niveau. Les étapes principales sont les suivantes :

  • flow/init : vérifications préalables (instances en cours d'exécution, privilèges d'administrateur, connexion Internet), vérifications anti-analyse, énumération des informations système, établissement de la persistance, etc.
  • Flux/injection : injection d'applications et correctifs (Atomic, Mullvad, Discord, etc.)
  • flow/grabb: Collecte de données
  • flow/ClipBoard: détournement du presse-papiers
  • flux/envoi: exfiltration de données
  • flow/disable: Sabotage du système (désactivation de Windows Defender, anti-réinitialisation du système, connexion Internet interrompue, etc.)
  • Flux/nettoyage : Nettoyage après exfiltration

Pour plus d'informations sur la structure du code, veuillez consulter ce GitHub Gist, qui répertorie les dépendances directes de chacun des modules principaux et des flux d'exécution de NOVABLIGHT.

Détection anti-débogage et anti-sandbox

NOVABLIGHT intègre plusieurs techniques pour détecter et contourner les environnements d'analyse, en combinant l'empreinte digitale de l'environnement avec des contre-mesures actives. Ces vérifications comprennent :

  • Détection des noms de GPU liés à des machines virtuelles (vmware, virtualbox, qemu)
  • Vérification des noms d'utilisateur figurant sur la liste noire (sandbox, test, logiciels malveillants)
  • Identification des fichiers de pilotes spécifiques à la machine virtuelle (balloon.sys, qemu-ga)
  • Vérification de la résolution d'écran et de la présence de périphériques USB
  • Recherche sur GitHub de listes noires d'adresses IP, d'identifiants HWID, de noms d'utilisateur, de programmes, d'organisations, de noms de GPU, de noms de PC et de systèmes d'exploitation.
  • Suppression active des outils d'analyse et de débogage connus figurant dans une liste à distance.

Les listes noires sont hébergées sur GitHub :

Désactiver Defender & tente de désactiver le Gestionnaire des tâches.

NOVABLIGHT tente de désactiver Windows Defender et les fonctionnalités de sécurité Windows associées en téléchargeant et en exécutant un script batch, DisableWD.bat. à partir d'un référentiel GitHub public.

Le logiciel malveillant prétend être capable de désactiver le Gestionnaire des tâches, rendant ainsi difficile pour un utilisateur non averti d'identifier et de fermer le programme malveillant. Il utilise setValues du package regedit-rs pour définir la valeur DisableTaskMgr sur 1 sous HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System.

Cependant, en examinant le référentiel regedit-rs (v1.0.3 pour correspondre), il n'existe aucune fonction exportée nommée « setValues », mais uniquement « putValue ». Cette fonctionnalité peut ne pas fonctionner comme prévu.

Désactiver l'accès à Internet

Pour perturber la connexion Internet de la victime, le logiciel malveillant utilise deux méthodes distinctes. La première consiste à désactiver de manière persistante l'adaptateur Wi-Fi en le réinitialisant rapidement et de manière répétée, à l'aide du package npm externe wifi-control et de sa fonction resetWiFi.

La deuxième méthode désactive la carte réseau principale « Ethernet » à l'aide de la commande « netsh », en l'exécutant toutes les 5 secondes afin d'empêcher toute tentative de réactivation.

Échec de la récupération du système

Le logiciel malveillant peut compromettre la récupération du système en désactivant l'environnement de récupération Windows (reagentc /disable) et en supprimant toutes les copies fantômes de volume (vssadmin delete shadows /all) lorsque le drapeau « antireset » est activé dans la configuration.

Empêcher la suppression de fichiers

Une autre fonction de sabotage du système qui peut être visible pour la victime consiste à rendre le fichier exécutable du logiciel malveillant impossible à supprimer en modifiant ses autorisations de sécurité via l'icacls “${filePath}” /deny ${currentUser}:(DE,DC), où DE refuse les droits de suppression et DC empêche la suppression via le dossier parent et, éventuellement, en créant une boîte de message contextuelle contenant un message « troll ».

Avant de se verrouiller, il exécute également une commande PowerShell pour supprimer le compte de la victime des groupes système suivants : « Administrators », « Power Users », « Remote Desktop Users », « Administrateurs ».

Remplacement de l'adresse du presse-papiers

Le logiciel malveillant implémente un module clipper "" qui surveille activement le presse-papiers de la machine à la recherche d'adresses Crypto ou Paypal et les remplace par des adresses définies dans la configuration. Si l'utilisateur qui a créé la charge utile n'a pas fourni ses propres adresses, le logiciel malveillant utilise par défaut un ensemble codé en dur, vraisemblablement contrôlé par les développeurs afin de capturer les fonds des utilisateurs moins expérimentés.

Injections d'applications électroniques

NOVABLIGHT est capable d'injecter du code malveillant dans plusieurs applications populaires basées sur Electron. Les charges utiles sont récupérées de manière dynamique à partir du point de terminaison https://api.nova-blight[.]top/injections/*targeted_application*/*some_key*, en ciblant des applications telles que :

  • Client Discord
  • Portefeuille Exodus
  • Client VPN Mullvad
  • Portefeuille atomique
  • Client de messagerie Mailspring

Nous avons pu récupérer tous les modules à partir d'un référentiel GitHub public.

La mise en œuvre de l'injection est un exemple classique du reconditionnement d'une application Electron : décompresser le fichier ASAR, réécrire tous les fichiers source ciblés, puis le reconditionner. En prenant l'exemple du client Mullvad, celui-ci commence par décompresser Program Files\\Mullvad VPN\\resources\\app.asar dans un répertoire temporaire, récupère une version piratée de account.js à partir de https://api.nova-blight[.]top/injections/mullvad/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s, écrase le fichier source account.js, puis le recompresse. Bien que cela puisse encore fonctionner pour les anciennes versions de Mullvad telles que 2025.4, Cela ne semble pas fonctionner sur la dernière version de Mullvad.

Dans un cas similaire pour le client Exodus, les développeurs de NOVABLIGHT ont modifié la fonction setPassphrase dans le module principal de l'application Exodus, en y ajoutant des fonctionnalités supplémentaires permettant de voler des identifiants.
Voici à quoi cela ressemble main/index.js dans une version légitime d'Exodus 25.28.4 :

Dans le fichier trojanisé index.js, les mots de passe saisis par l'utilisateur sont exfiltrés via des webhooks Discord configurables et Telegram, en utilisant soit l'API Telegram officielle, soit un proxy API Telegram personnalisé.

Extraction de données sensibles dans Chrome

Pour cibler les navigateurs basés sur Chromium (Brave, Chrome, Edge) fonctionnant sous la version 137, le logiciel malveillant télécharge un fichier zip contenant un outil de décryptage des données Chrome à partir de l'adresse https://github.com/Hyutop/pandakmc-auto-vote/blob/main/bin.zip.

Le référentiel GitHub tente de se faire passer pour un outil de gestion des votes Minecraft.

Cependant, le fichier zip bin.zip contient le code compilé (decrypt.exe et chrome_decrypt.dll) de la version 0.11.0 du projet PoC de décrypteur lié à l'application Chrome par xaitax.

Énumération du système

Une fois activé, NOVABLIGHT exécute une suite complète de fonctions d'énumération du système conçues pour établir un profil complet de la machine et de l'activité de l'utilisateur victime. Chaque module cible une information spécifique, qui est ensuite enregistrée dans un répertoire local avant d'être téléchargée vers le serveur de commande et de contrôle. Les ingénieurs chargés de la détection doivent noter les implémentations spécifiques de chaque technique et indiquer quelle(s) source(s) de données offre(nt) une visibilité suffisante.

  • captureSystemInfo(): Recueille des spécifications matérielles et logicielles détaillées afin d'identifier l'appareil. Cela comprend l'identifiant matériel (HWID), les modèles de processeur et de carte graphique, la taille de la mémoire vive, les informations relatives au disque dur, la version du système d'exploitation Windows et la liste de tous les périphériques USB connectés.
  • Sortie : *configured_path*/System Info.txt

  • captureScreen()Capture une capture d'écran complète du bureau de la victime, fournissant un aperçu immédiat de l'activité actuelle de l'utilisateur.
    • Méthode : utilise la bibliothèque screenshot-desktop.
    • Résultat : un fichier image horodaté (par exemple, chemin_configuré/nom_hôte_2025-10-26_14-30-00.png).
  • captureTaskList(): Obtient une liste de tous les processus actuellement en cours d'exécution afin de dresser un état des lieux, ce qui permet à l'attaquant de voir quelles applications et quels outils de sécurité sont actifs.
    • Méthode : Exécute la commande « tasklist /FO CSV /NH ».
    • Sortie : *configured_path*/TaskManagerInfo.txt
  • captureAVDetails()Identifie le produit antivirus ou de protection des terminaux installé en interrogeant le Centre de sécurité Windows.
    • Méthode : exécute la commande PowerShell. Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Format-List
    • Sortie : *configured_path*/Avdetails.txt
  • captureClipboardContent(): Vide le contenu actuel du presse-papiers de l'utilisateur, qui peut contenir des informations sensibles et temporaires telles que des mots de passe ou des messages copiés.
    • Méthode : exécute la commande PowerShell « Get-Clipboard ».
    • Sortie : *configured_path*/Clipboard.txt
  • captureWebcamVideo()Enregistre discrètement une vidéo à l'aide de la webcam principale du système, fournissant ainsi des informations visuelles sur la victime et son environnement.
    • Méthode : Utilise la direct-synch-show bibliothèque pour la capture vidéo.
    • Sortie : *configured_path*/Bighead.avi
  • captureWifiPasswords(): Exfiltre les mots de passe de tous les réseaux Wi-Fi enregistrés sur l'appareil, ce qui permet un déplacement latéral ou l'accès à d'autres réseaux utilisés par la victime.
    • Méthode : Exécute la commande netsh wlan show profile *wifi_ssid* key=clear pour chaque profil.
    • Sortie : *configured_path*/WifiPasswords.txt
  • getFilesUrgentsCette fonctionnalité extrait les fichiers sur le disque en fonction d'un ensemble de mots-clés tels que : backup, default, code, discord, token, passw, mdp, motdepasse, mot_de_passe, login, secret, account, acount, apacht, banque, bank, matamask, wallet, crypto, exdous, 2fa, a1f, memo, compone, finance, seecret, credit, cni. Ces fichiers sont archivés sous le nom files.zip puis envoyés au C2.

l’exfiltration de données.

Il existe plusieurs canaux d' 3 s concernant les données volées : le panneau web officiel appartenant au groupe NOVABLIGHT, l'API webhook Discord et l'API Telegram. Le statut de ces canaux est incertain, car l'API proxy principale et le panneau Web sont actuellement hors service, ce qui pourrait perturber le fonctionnement des canaux Discord et Telegram s'ils dépendent de la même infrastructure proxy.

Le panneau Web était autrefois le canal officiel d'exfiltration, car il était présenté comme leur principale plateforme de gestion des données.

L'implémentation Telegram tente d'abord d'envoyer les données à une URL proxy configurée. Le code vérifie si l'URL contient la chaîne req, dans ce cas https://bamboulacity.nova-blight[.]xyz/req/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s.

Si l'URL proxy n'est pas configurée ou ne remplit pas les conditions requises, le module revient à une communication directe avec l'API Telegram officielle (à l'adresse https://api.telegram[.]org/bot*token*/sendMessage) en utilisant un identifiant utilisateur, un identifiant de discussion et un jeton botToken configurés pour envoyer les données volées.

Contrairement au module Telegram, la mise en œuvre du webhook Discord est beaucoup plus simple. Il utilise une seule URL pour l'exfiltration, sans mécanisme de secours. Les échantillons analysés ont systématiquement utilisé l'URL proxy personnalisée à cette fin.

NOVABLIGHT utilise une infrastructure redondante et multi-niveaux. Au lieu de s'appuyer sur un seul hébergeur de téléchargement, ce qui créerait un point de défaillance unique, le logiciel malveillant exploite une combinaison de services d'hébergement de fichiers tiers légitimes et de son propre backend dédié. Voici la liste extraite des domaines et des points de terminaison :

  • https://bashupload[.]com
  • https://litterbox.catbox[.]moe/resources/internals/api.php
  • https://tmpfiles[.]org/api/v1/upload
  • https://oshi[.]at/
  • http://sendfile[.]su/
  • https://wsend[.]net
  • https://api.gofile[.]io/servers
  • https://gofile[.]io/uploadFiles
  • https://rdmfile[.]eu/api/upload
  • https://bamboulacity.nova-blight[.]xyz/file/

Données ciblées

NOVABLIGHT exécute des routines ciblées conçues pour voler les identifiants et les fichiers de session d'une liste spécifique de logiciels installés. La liste sélectionnée est disponible dans ce GitHub Gist.

Techniques de dissimulation

Cartographie de tableaux

La première technique à aborder est l'utilisation du mappage de tableaux par le logiciel malveillant. Le script initialise un seul grand tableau global __p_6Aeb_dlrArray contenant des valeurs de différents types et encodages, qui représente la quasi-totalité des valeurs littérales utilisées dans le script.

Après avoir remplacé les références d'index de tableau, de nombreux petits morceaux de chaîne qui composent une chaîne complète sont divisés et concaténés au moment de l'exécution, mais à ce stade, le numéro de version NOVABLIGHT peut être facilement identifié.

Encodage de chaînes

La deuxième technique utilisée pour masquer des chaînes de caractères consiste à utiliser l'encodage base91. La fonction wrapper __p_xIFu_MAIN_STR est appelée avec un argument entier.

L'entier est un index d'un tableau secondaire mappant __p_9sMm_array qui contient des chaînes codées. Il récupère la chaîne codée et la transmet à la routine de décodage __p_xIFu_MAIN_STR_decode.

__p_xIFu_MAIN_STR_decode le décodera ensuite à l'aide d'un alphabet personnalisé :
vFAjbQox\>5?4K$m=83GYu.nBIh\<drPaN\^@%Hk:D_sSyz"ER9/p,(*JwtfO)iUl&C\[~\}\{|Z+gX1MqL;60!e]T#2cVW7 et renvoie la chaîne décodée.

Obscurcissement des modèles d'accès

Au lieu d'accéder directement aux objets et aux fonctions, le code utilise des objets « proxy » intermédiaires aplatis avec des clés modifiées, enveloppant les objets dans une autre couche d'objets afin de masquer les modèles d'accès d'origine.

Par exemple, la fonction « __p_LQ1f_flat_… » reçoit un objet plat « __p_w3Th_flat_object ». Cet objet contient des accesseurs d' 3 s pour les propriétés, dont l'un renvoie l'indicateur disableNetwork récupéré dans la configuration, ainsi qu'un wrapper pour un appel au dispatcher (__p_jGTR_dispatcher_26). Tout au long du code, on observe une structure où les noms des propriétés commencent par « empretecerian.js », qui est également le nom du fichier script. La fonction appelée peut alors accéder aux objets et fonctions réels via cet objet plat rempli par l'appelant.

Obscurcissement du flux de contrôle

Une partie du chemin d'exécution du code est acheminée via un répartiteur central, __p_jGTR_dispatcher_26, dans lequel le premier argument prend la forme d'une chaîne d'identification courte.

Chaque ID est associé à une fonction distincte. Par exemple, l'ID jgqatJ est référencé par le module modules/init/Troll.js et est responsable d'une boîte de message contextuelle « troll ».

Variables de substitution

Tout d'abord, l'obfuscation transforme la syntaxe des fonctions en« syntaxe de paramètres restants », qui remplace les paramètres par un tableau stockant les valeurs des variables au lieu des variables directes. Le code fait ensuite référence au tableau à l'aide de valeurs numériques. Par exemple, la fonction __p_xIFu_MAIN_STR_decode n'est pas appelée avec des paramètres directs. Au lieu de cela, ses arguments sont d'abord placés dans le tableau d'__p_A5wG_varMask s (ligne 22), et la fonction est programmée pour les récupérer à partir d'index prédéfinis. Par exemple, à la ligne 25, l'index -36 du tableau stocke l'index du caractère "c" dans une chaîne stockée dans __p_A5wG_varMask[171].

NOVABLIGHT et MITRE ATT&CK

Elastic utilise le cadre MITRE ATT& CK pour documenter les tactiques, techniques et procédures communes que les menaces persistantes avancées utilisent contre les réseaux d'entreprise.

Tactiques

Techniques

Conclusion

NOVABLIGHT démontre que même les logiciels malveillants les moins connus peuvent avoir un impact. En proposant un outil sophistiqué et convivial via des plateformes telles que Telegram et Discord, ses créateurs ont facilité l'accès à la cybercriminalité pour tous.

De plus, cette menace n'est pas statique. Notre analyse confirme que NOVABLIGHT est en cours de développement continu et actif. Cette évolution constante garantit que NOVABLIGHT restera une menace persistante et pertinente dans un avenir prévisible.

Détection de NOVABLIGHT

YARA

Elastic Security a créé des règles YARA pour identifier cette activité.

rule Windows_Infostealer_NovaBlight {
    meta:
        author = "Elastic Security"
        creation_date = "2025-07-18"
        last_modified = "2025-07-28"
        os = "Windows"
        arch = "x86"
        category_type = "Infostealer"
        family = "NovaBlight"
        threat_name = "Windows.Infostealer.NovaBlight"
        reference_sample = "d806d6b5811965e745fd444b8e57f2648780cc23db9aa2c1675bc9d18530ab73"

    strings:
        $a1 = "C:\\Users\\Administrateur\\Desktop\\Nova\\"
        $a2 = "[+] Recording..." fullword
        $a3 = "[+] Capture start" fullword
    condition:
        all of them
}

Observations

Les observables suivants ont été examinés dans le cadre de cette recherche.

ObservableTypeNomRéférence
ed164ee2eacad0eea9dc4fbe271ee2b2387b59929d73c843281a8d5e94c05d64SHA-256NOVABLIGHT VERSION 2.2
39f09771d70e96c7b760b3b6a30a015ec5fb6a9dd5bc1e2e609ddf073c2c853dSHA-256NOVABLIGHT VERSION 2.1
97393c27195c58f8e4acc9312a4c36818fe78f2ddce7ccba47f77a5ca42eab65SHA-256NOVABLIGHT VERSION 2.0
api.nova-blight[.]topDomainTableau de bord NOVABLIGHT
shadow.nova-blight[.]topDomainTableau de bord NOVABLIGHT
nova-blight[.]siteDomainTableau de bord NOVABLIGHT
nova-blight[.]xyzDomainTableau de bord NOVABLIGHT
bamboulacity.nova-blight[.]xyzDomainTableau de bord NOVABLIGHT

Références

Les éléments suivants ont été référencés tout au long de la recherche ci-dessus :

Partager cet article