28 mars 2025

TMPN (Skuld) Stealer : le côté obscur de l'open source

Résumé

  • TMPN Stealer est basé sur le projet open source « Skuld stealer ».
  • Il utilise des webhooks Discord pour communiquer.
  • Il injecte une charge active JS dans Discord
  • Il vole les données des navigateurs et des portefeuilles de cryptomonnaie
  • Il vole des fichiers locaux et des informations système

 

Introduction

Skuld, également connu sous le nom de TMPN Stealer, est un malware de vol d'informations écrit en Golang (Go) et apparu en mai 2023. Son développeur, identifié sous le nom de « Deathined », semble être un nouveau venu dans l'univers des malwares. Il s'est inspiré de projets open source pour les fonctionnalités de Skuld. Le malware est distribué par divers moyens, des liens malveillants et des sites web compromis notamment, en vue d'infecter des systèmes dans le monde entier.

Détails techniques

Présentation

L'échantillon analysé est écrit en Go avec un faux horodatage de compilation. La taille du fichier est de 14,4 Mo, ce qui est normal pour les programmes écrits en Go.

Acronis

GitHub contient une page où figurait probablement le code source de TMPN Stealer, mais elle n'est plus disponible : https://github.com/DextenXD/TMPN-Stealer

Acronis

En cours d'analyse, nous avons effectivement  découvert un lien dans le code menant à un autre projet : Skuld Stealer. Il s'agit d'un projet open source de démontration d'un voleur de données orienté Discord. Même la description est similaire à celle de TMPN :

Acronis

Configuration

Au démarrage de l'exécution, Skuld charge en mémoire une configuration contenant plusieurs chaînes de caractères. La première est « webhook », la seconde contient l'URL :

hxxps://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE

Il s'agit de webhooks Discord, un moyen simple de publier dans des canaux Discord. Ce mécanisme de contrôle est très utile, car les webhooks ne nécessitent pas d'utilisateur de bot ou d'authentification.

La chaîne suivante chargée en mémoire pointe vers le portefeuille BTC :

Acronis

Le code source supporte plusieurs portefeuilles de cryptomonnaie :

Acronis

Préparation

Avant d'exécuter la charge active principale, Skuld Stealer effectue quelques préparatifs :

Acronis

Skuld Stealer commence par vérifier s'il est déjà en cours d'exécution en testant le nom du mutex spécifique :

Acronis

Il appelle ensuite la fonction UAC Bypass. Il vérifie si le processus est élevé ou s'il peut être élevé, puis il appelle la fonction d'élévation. Cette fonction définit le chemin d'accès du malware dans la clé de la base de registre de l'utilitaire fodhelper.exe :

HKCU\\Software\\Classes\\ms-settings\\shell\\open\\command\\DelegateExecute

Ceci provoque l'affichage de la fenêtre UAC par fodhelper.exe, mais comme la clé de la base de registre a été modifiée, l'échantillon s'exécute avec des autorisations élevées. L'ancien processus efface alors la clé de la base de registre Fodhelper et se termine.

Pour se dissimuler aux yeux de l'utilisateur, Skuld Stealer utilise la commande « attrib +h +s », qui confère à l'échantillon les attributs « hidden » et « system ». Il utilise également la fonction « GetConsoleWindow » pour obtenir la description de la fenêtre active et la fonction « ShowWindow » pour passer l'état d'affichage de la fenêtre en mode masqué (« Hidden »).

Il ajoute une clé de la base de registre à ‘Software\Microsoft\Windows\CurrentVersion\Run’ pour persister sur les systèmes des victimes. Le nom de la clé sera « Realtek HD Audio Universal Service » avec la valeur « %APPDATA%\Microsoft\Protection\SecurityHealthSystray.exe ». Il vérifie ensuite si le fichier existe à cet emplacement. Si le dossier n'existe pas, il se copie lui-même à cet emplacement.

Ensuite, Skuld Stealer vérifie si l'échantillon s'exécute sur une machine virtuelle. Pour ce faire, il vérifie le nom d'hôte, le nom d'utilisateur, l'adresse MAC, l'adresse IP et l'identifiant matériel (HWID), qu'il compare avec ses propres listes enregistrées. Dès qu'une chaîne correspond, l'exécution s'interrompt. Il vérifie ensuite si un débogueur est attaché au processus.

Enfin, il tente d'échapper aux logiciels antivirus. Ici, il exclut son propre chemin de l'analyse de Microsoft Windows Defender et utilise des commandes PowerShell pour le désactiver :

powershell", "Set-MpPreference", "-DisableIntrusionPreventionSystem", "$true", "-DisableIOAVProtection", "$true", "-DisableRealtimeMonitoring", "$true", "-DisableScriptScanning", "$true", "-EnableControlledFolderAccess", "Disabled", "-EnableNetworkProtection", "AuditMode", "-Force", "-MAPSReporting", "Disabled", "-SubmitSamplesConsent", "NeverSend"

powershell", "Set-MpPreference", "-SubmitSamplesConsent", "2

"%s\\Windows Defender\\MpCmdRun.exe", os.Getenv("ProgramFiles")), "-RemoveDefinitions", "-All

La dernière étape de cette fonction consiste à bloquer la connexion aux sites suivants :

"virustotal.com", "avast.com",        “totalav.com", "scanguard.com", "totaladblock.com", "pcprotect.com", "mcafee.com", "bitdefender.com", "us.norton.com", "avg.com", "malwarebytes.com", "pandasecurity.com", "avira.com", "norton.com", "eset.com", "zillya.com", "kaspersky.com", "usa.kaspersky.com", "sophos.com", "home.sophos.com", "adaware.com", "bullguard.com", "clamav.net", "drweb.com", "emsisoft.com", "f-secure.com", "zonealarm.com", "trendmicro.com", "ccleaner.com"

Injection dans Discord

Pour exécuter la fonction d'injection, Skuld Stealer appelle d'abord deux fonctions de contournement. La première sert à contourner BetterDiscord, une modification du client Discord. En plus de différents plug-ins, émoticônes et outils pour développeurs, ce programme contient également des améliorations de la sécurité. Pour procéder au contournement, la fonction recherche et ouvre un fichier ‘AppData\Roaming\BetterDiscord\data\betterdiscord.asar’ et remplace toutes les occurrences de ‘api/webhooks’ par ‘ByHackirby’.

Acronis

La fonction tente ensuite de contourner Discord Token Protector. Elle commence par vérifier si ce module est présent sur le système. Si oui, elle ouvre un fichier "AppData\Roaming\DiscordTokenProtector\config.json" et modifie les valeurs suivantes :

"auto_start" = false

"auto_start_discord" = false

"integrity" = false

"integrity_allowbetterdiscord" = false

"integrity_checkexecutable" = false

"integrity_checkhash" = false

"integrity_checkmodule" = false

"integrity_checkscripts" = false

"integrity_checkresource" = false

"integrity_redownloadhashes" = false

"iterations_iv" = 364

"iterations_key" = 457

"version" = 69420

Le programme appelle ensuite une fonction d'injection. Il commence par vérifier la présence de Discord sur le PC, en chargeant des blocs de données multipliés et en en extrayant certaines données. Il joint ensuite toutes les données collectées et les transmet à la fonction ‘filepath.Glob’ sous la forme d’un filtre de recherche.

Acronis

Il télécharge ensuite le fichier « injection.js » depuis le site Github de Skuld. Le nom du fichier sera changé en « coreinedex.js » et écrit dans le chemin Discord précédemment trouvé. Ce script met en place des hooks et intercepte des données telles que les demandes de connexion, d'inscription et d'authentification à deux facteurs, les crédits PayPal et les modifications d'adresse e-mail/mot de passe. Les informations capturées sont envoyées au serveur au format JSON.

Acronis

Injection de portefeuilles de cryptomonnaie

L'injection cible deux portefeuilles de cryptomonnaie : Exodus et Atomic. Cette technique consiste à télécharger et enregistrer des fichiers avec l'extension « .asar », qui est une archive utilisée par les portefeuilles de cryptomonnaie, mais qui contient des données de l'attaquant.

Acronis

Découverte d'informations système

Une fois les deux injections effectuées, Skuld Stealer commence à obtenir des informations système. Pour ce faire, il appelle un certain nombre de fonctions avec l'intention d'obtenir des informations concernant le processeur, les disques, la carte graphique, le réseau, le système d'exploitation, les clés de licence Windows, la RAM, etc.

Acronis

Toutes ces données seront enregistrées au format JSON et envoyées au serveur. En plus des données brutes, il ajoute un lien vers l'image dans le champ « avatar_url ». Cet avatar est probablement utilisé dans le bot Discord de l'attaquant.

Acronis

 

Navigateurs

La fonction du navigateur cible deux types de navigateurs selon leur moteur, Chromium ou Gecko. Ces deux fonctions ont des noms et des chemins de navigateur différents. Les fonctions d'extraction de données, telles que les identifiants de connexion, les cookies, les numéros de carte bancaire, les téléchargements et l'historique, sont identiques pour tous les navigateurs.

Acronis

Jetons Discord

Pour obtenir les jetons Discord, Skuld Stealer recherche des chaînes particulières dans les bases de données des navigateurs. Les résultats sont ensuite transmis à la fonction qui interagit avec l'API Discord et qui vérifie si les jetons trouvés sont valides. Tous les résultats sont enregistrés au format JSON et envoyés au serveur.

Acronis

Codes d'authentification à deux facteurs pour Discord

Discord dispose d'un mécanisme pour le cas où un utilisateur perdrait l'accès à son terminal d'authentification à deux facteurs. Le fichier « discord_backup_codes.txt » contient des codes qui peuvent être utilisés dans de telles situations.

Acronis

L''échantillon recherche ce fichier dans les dossiers utilisateur suivants : Bureau, Téléchargements, Documents, Vidéos, Images, Musique, OneDrive.

Fichiers courants

Cette fonction recherche des fichiers dont le nom ou l'extension contient des mots-clés dans les dossiers suivants : Bureau, Téléchargements, Documents, Vidéos, Images, Musique, OneDrive. Si le mot-clé et l'extension sont effectivement présents dans le nom du fichier, le fichier est copié dans le nouveau dossier.

Acronis

La cartella viene quindi archiviata con una password che contiene 16 simboli casuali. L'archivio viene caricato sul server insieme ai dati JSON, che contengono l'URL del server di archiviazione, la password e il numero di file archiviati. Possiamo notare che il collegamento al server fornito nella funzione 'Upload' corrisponde al collegamento dal codice sorgente: 'https://api.gofile.io/getServer'. Questo collegamento non è valido, il che significa che l'esemplare acquisisce i dati ma non li invia all'attaccante.

Portafogli di criptovalute

Per questo ambito, l'esemplare presenta due diverse funzioni. La prima opzione cerca i file del portafoglio di criptovalute nel sistema locale, nella cartella '%APPDATA%\\Roaming'. Tutti i file trovati vengono compressi in un archivio e inviati al server. La seconda funzione controlla le estensioni del browser relative ai portafogli di criptovalute e prova ad appropriarsi dei profili.

Acronis

Vol de session de jeu

Pour voler des données de jeu, Skuld Stealer charge une liste de six noms : « Epic Games », « Minecraft », « Riot Games », « Uplay », « NationsGlory » et « Steam ». Chaque champ contient des valeurs supplémentaires, y compris les chemins d'accès et les noms de fichiers à rechercher. L'objectif est ici de copier tous les fichiers de cette liste vers le dossier temporaire et de les exfiltrer vers le serveur sous la forme d'une archive ZIP.

Acronis

Clipper

Enfin, le programme lance une fonction de clipper. Il utilise plusieurs valeurs d'expression régulière (regex) pour filtrer les données du presse-papiers. L'expression régulière cible différentes adresses de portefeuille de cryptomonnaie et, en cas de correspondance trouvée, elle remplace ces données par sa propre adresse de portefeuille de cryptomonnaie. L'adresse de l'attaquant repérée dans la configuration est l'adresse BTC.

Acronis

Conclusion

Compilé à partir du projet open source Skuld, TMPN Stealer comporte dans sa configuration une adresse de portefeuille BTC et un lien d'API Discord. Aucune information supplémentaire n'est ajoutée au code source, comme un serveur où transférer des fichiers, ce qui signifie que cet échantillon cible principalement Discord, en injectant une charge active JS pour récupérer des informations telles que des e-mails, des mots de passe et des jetons.

Discord est une cible prisée parce qu'il s'agit de la plate-forme de communication la plus populaire chez les joueurs, mais aussi auprès de la communauté des utilisateurs de cryptomonnaies. Le programme peut même contourner certains plug-ins Discord conçus pour renforcer la sécurité. Il peut également voler des données de navigateur et des fichiers d'utilisateur, qui peuvent contenir des identifiants, dont l'attaquant pourra se servir.

Détecté par Acronis

Acronis
Acronis

Indicateurs de compromission (IoC)  

Fichiers

Nom du fichier
SHA256
loader.exe
5a7e38a45533e0477c3868c49df16d307a3da80b97a27ac4261619ff31a219f8


Indicateurs réseau

URL
https://raw.githubusercontent.com/hackirby/discord-injection/main/injection.js
https://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE
https://i.redd.it/68p07sk4976z.jpg
https://api.gofile.io/getServer