Sommaire
Mars Stealer est un voleur d’informations vendu sur des forums clandestins par MarsTeam depuis le 22 juin 2021, avec le modèle malware-as-a-service. Les capacités des logiciels malveillants sont celles d’un voleur classique axé sur le vol de crypto-monnaie. En bref, Mars Stealer est capable de:
- collecter des données de plusieurs navigateurs (mots de passe, cookies, cartes de crédit, etc.);
- voler les informations d’identification des plugins crypto, des portefeuilles crypto et des plugins 2FA ;
- récupérer des fichiers ;
- empreinte digitale de l’hôte infecté.
Il partage le code avec d’autres des voleurs d’informations dont Arkei, Oski et Vidar.
Compte tenu de ses fonctionnalités intéressantes, de sa facilité d’utilisation et de son prix raisonnable, le malware Mars Stealer est devenu populaire sur plusieurs forums clandestins. De plus, les développeurs présumés sortent régulièrement de nouvelles versions du malware pour corriger certains bugs et surtout pour améliorer les capacités de Mars Stealer en termes de collecte de données et d’évasion de défense.
Mars Stealer a récemment été mis au jour par l’analyse approfondie de 3xp0rt1 et la sortie d’une version crackée. Dans le billet de blog, 3xp0rt a écrit une analyse d’un échantillon de Mars Stealer d’une première version en exposant les différentes méthodes d’obscurcissement et les données ciblées par le malware sur les hôtes infectés. Quelques jours plus tard, certains membres de la communauté infosec ont partagé leurs découvertes sur le constructeur et le panneau d’administration du voleur d’informations. Ces derniers jours, certaines campagnes diffusant Mars Stealer ont été publiquement décrites2 3.
Les analystes de SEKOIA.IO surveillent la menace sur les forums clandestins pour se tenir au courant des derniers développements. Nous avons également récemment effectué une analyse approfondie d’échantillons de différentes versions de Mars Stealer, et avons remarqué de nombreux changements dans les techniques d’obscurcissement.
Pourquoi enquêter sur le malware Mars Stealer ?
Les voleurs d’informations sont une menace à prendre en compte, car de nombreux acteurs de la menace les utilisent pour récolter des informations d’identification et d’autres informations personnelles. Les données volées peuvent ensuite être revendues sur des forums clandestins, puis éventuellement exploitées dans des opérations de « Big Game Hunting », comme le fait le groupe de menaces Lapsus$4.
Parmi ces voleurs d’informations, Mars Stealer est devenu une menace émergente ces derniers mois.
Tout d’abord, le logiciel malveillant fait l’objet d’une large publicité sur de nombreux forums clandestins et les publications touchent un large public. De plus, les utilisateurs de Mars Stealer donnent généralement de bons commentaires et n’hésitent pas à le recommander lorsque les membres du forum recherchent un voleur d’informations. Le malware Mars Stealer est donc apparu dans notre veille Dark Web au cours du second semestre 2021.
Figure 1. Retours positifs sur le logiciel et le service Mars Stealer sur le forum
XSS ou Mars Stealer »
Il convient de noter que Mars Stealer est en développement continu et que le projet est entretenu par des professionnels, ce qui le rend attrayant et digne de confiance pour les clients potentiels. En effet, les développeurs présumés (MarsTeam) recueillent régulièrement les retours des utilisateurs sur les posts des forums underground, sur le canal de support Telegram ou sur Jabber. MarsTeam prend ensuite en compte ces retours pour apporter des améliorations, de nouvelles fonctionnalités ou des corrections de bugs. De nouvelles versions sortent régulièrement et sont accompagnées d’un changelog pour lister les changements notables apportés à l’agent Mars Stealer ainsi qu’au panel.
Figure 3. Changelog de la version 8 de Mars Stealer publiée sur le forum XSS
Par ailleurs, le malware est apparu dans les rapports OSINT début 2022, notamment avec l’analyse approfondie du grand 3xp0rt. Depuis, son occurrence s’est accrue dans la communauté infosec du fait de la publication de son constructeur et surtout, certaines campagnes diffusant Mars Stealer ont été mises au jour dans la sphère Cyber Threat Intelligence.
Enfin, l’arrêt brutal des opérations de Raccoon Stealer, qui est l’un des voleurs les plus répandus, laisse une part importante du marché aux voleurs d’informations. En effet, le 25 mars 2022, le profileur de ratons laveurs annonçait sur le forum clandestin russophone XSS que le groupe exploitant Raccoon Stealer fermait le projet pour une durée indéterminée. Cet arrêt inopiné est dû à la perte d’un développeur du projet Raccoon Stealer lors de « l’opération spéciale », en référence à la guerre russe en Ukraine.
Figure 4. Déclaration de Raccoonstealer sur l’arrêt du projet Raccoon Stealer sur le forum XSS
Une publication de MarsTeam sur le forum XSS a pleinement confirmé cette hypothèse. Le 24 mars 2022, MarsTeam a répondu à deux clients potentiels :
«gars, gérez l’arriéré de messages, répondra à tous dans les 24 heures. Beaucoup de gens venaient de Raccoon. Nous n’avons pas le temps de traiter physiquement tous les messages.« » (traduit du russe)
Figure 5. MarsTeam mentionne une vague de clients venant de Raccoon sur le forum XSS
Pour toutes les raisons ci-dessus, il nous semble pertinent de surveiller la menace Mars Stealer, de rester à jour sur le développement du malware et de suivre les indicateurs de compromission (IoC) pour détecter Mars Stealer. Ces deux points font l’objet des parties suivantes.
Un voyage avec les développeurs de malwares
Dans cette partie, nous analysons les publications et les activités des présumés Développeurs Mars Stealer (MarsTeam) sur les forums souterrains. Selon notre surveillance du Dark Web, MarsTeam est actif sur de nombreux forums souterrains, notamment XSS.is, lolz.guru et bhf.io. Cependant, nous nous concentrons sur le forum XSS car MarsTeam publie en premier, et plus fréquemment sur celui-ci.
Le 21 mai 2021, l’équipe Mars Stealer a rejoint le forum souterrain XSS sous le nom MarsTeam avec un dépôt de 0,009 Bitcoin (336 $ au taux de change de mai 2021). Un mois plus tard, MarsTeam a ouvert une nouvelle discussion dont le titre traduit du russe est « Mars Stealer – un voleur natif et non résident avec des fonctionnalités de chargeur et de voleur ».
Figure 6. Première publication de MarsTeam annonçant Mars Stealer
La publication présente Mars Stealer comme «un nouveau logiciel développé pour les personnes travaillant avec la cryptographie» – à interpréter : pour les personnes qui veulent voler des crypto-monnaies. Le malware est vendu avec le modèle malware-as-a-service pour 140 $ par mois.
Capacités de Mars Stealer
Comme mentionné dans l’introduction, les capacités de Mars Stealer annoncées par MarsTeam sont celles d’un voleur d’informations classique avec un accent particulier sur le vol de crypto-monnaie. Notre analyse technique de Mars Stealer a confirmé que les applications ciblées par les échantillons de logiciels malveillants sont celles décrites dans MarsTeam.
Le voleur collecte des informations personnelles à partir de nombreux navigateurs : mots de passe, cookies, cartes de crédit, données de remplissage automatique, historique des sites Web visités et fichiers téléchargés. La liste des navigateurs pris en charge est assez large, des plus populaires (Google Chrome, Internet Explorer, Microsoft Edge, Firefox, etc.) aux moins courants. Mars Stealer collecte ces données dans le chemin par défaut des différentes données utilisateur du navigateur ou profils de navigateur.
Le vol de crypto-monnaies est l’une de ses caractéristiques distinctives, MarsTeam précise que : «Une caractéristique importante qui nous distingue des concurrents est la collection de plugins de navigateur avec un accent sur la crypto-monnaie et les plugins 2FA» (traduit du russe). En effet, la liste des plugins crypto ciblés est très longue avec plus de 40 références, dont les plus utilisées (Coinbase, MetaMask, Binance). Il en va de même pour la liste des portefeuilles crypto et des plugins 2FA ciblés par le voleur d’informations.
Le logiciel malveillant prend également les empreintes digitales de l’hôte infecté pour collecter des informations sur le matériel, les logiciels installés et d’autres informations personnelles. Mars Stealer collecte ces données à l’aide d’appels WinAPI tels que GetSystemInfo, GetCurrentProcess ou en demandant les clés de registre Windows telles que HARDWARE\DESCRIPTION\System\CentralProcessor\0, SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.
Enfin et surtout, Mars Stealer agit comme un récupérateur de fichiers facilement personnalisable par l’opérateur. MarsTeam le décrit comme « une fonctionnalité puissante » car le chemin de démarrage, l’extension de fichier, la taille du fichier et la recherche récursive peuvent être configurés. Il capture également une capture d’écran du bureau de la victime, charge les fichiers sur la machine infectée et les exécute avec des arguments.
Service de haute qualité pour les opérateurs de logiciels malveillants
En plus de l’agent de vol, Mars Stealer est vendu avec le panneau d’administration et le support client. Il convient de noter que l’opérateur du logiciel malveillant doit héberger le serveur Command & Control (C2) et le panneau associé sur son propre serveur pour accéder aux données volées. MarsTeam insiste sur le fait que tout le trafic est disponible uniquement pour le client et ne transite pas par un serveur des développeurs de Mars Stealer. Cette fonctionnalité est souvent demandée par les utilisateurs de voleurs d’informations qui souhaitent contrôler et posséder toutes les données.
Dans la première MarsTeam, le panneau d’administration de Mars Stealer est décrit comme «une puissante fonctionnalité de recherche de données» et l’expérience utilisateur semble être une priorité dans le développement de Mars Stealer. MarsTeam décrit les multiples fonctionnalités du panneau sur lesquelles l’opérateur peut facilement gérer, trier, filtrer et supprimer les journaux.
De plus, l’achat de Mars Stealer inclut un service de haute qualité comprenant la prise en charge de tous les problèmes, l’accès au chat client et les nouvelles versions du malware.
Toutes les fonctionnalités de logiciels malveillants accompagnées d’une interface conviviale et d’un support de qualité rendent Mars Stealer très attrayant et populaire auprès des attaquants sur les marchés clandestins.
Présence sur les forums clandestins
Sur les forums clandestins, la réactivité de l’équipe de Mars Stealer sur les forums clandestins envoie un message positif aux clients potentiels. MarsTeam est non seulement réactif aux demandes des utilisateurs, mais aussi très actif sur plusieurs forums underground. Depuis la première communication sur Mars Stealer en juin 2021, MarsTeam a régulièrement publié des changelogs pour annoncer de nouvelles versions de malwares, comme le montre la figure suivante. Les offres spéciales ou teasing de nouvelles fonctionnalités font également l’objet de nombreux posts de MarsTeam.
Figure 7. Chronologie des principales publications de MarsTeam sur le forum XSS
Considérons les sorties des nouvelles versions de Mars Stealer sur le forum XSS. La plupart de ces journaux des modifications incluent de nouvelles fonctionnalités, des améliorations ou des corrections de bogues à la fois sur l’agent et sur le panneau d’administration. Nous avons remarqué que les premières versions n’avaient pas de numéro de version. Le versioning officiel a commencé avec la version 4 publiée le 21 août 2021, nous avons donc approximativement associé les premières versions aux MarsTeam. La plupart d’entre eux sont divisés en deux sections : sur le logiciel et sur le panneau d’administration.
Les améliorations logicielles se concentrent sur la couverture des applications ciblées en ajoutant de nouveaux navigateurs ou de nouveaux plugins cryptographiques, ainsi que la mise à niveau des techniques d’évasion de la défense. Par exemple, la version 7 a introduit la prise en charge du navigateur Google Beta et de nombreux plugins crypto, ce qui a augmenté le nombre de plugins crypto collectables à 101. La version 6 apporte de nouvelles méthodes d’évasion pour les VM et les antivirus.
Les améliorations apportées sur le panneau d’administration web visent à faciliter l’expérience utilisateur en donnant de nouvelles possibilités de tri, de filtrage et de recherche de données volées. Le développeur Mars Stealer a également optimisé les performances liées à la base de données SQL.
L’analyse des publications de la MarsTeamsur différents forums underground montre que le présumé Mars Stealer travaille professionnellement sur le développement logiciel, mais aussi sur la communication et le support. Cette conscience semble séduire les attaquants qui veulent acheter et utiliser un voleur d’informations bien entretenu et en constante amélioration.
Comment collecter les IoC de Mars Stealer ?
Dans la partie précédente, nous avons montré comment Mars Stealer est devenu une menace émergente et pourquoi il faut s’y intéresser. Dans cette partie, nous voyons comment collecter les IoC de Mars Stealer en fonction des signatures YARA, du traqueur de serveur C2 et de l’extraction automatisée de la configuration du logiciel malveillant. La dernière méthode nécessite une analyse technique de Mars Stealer et de ses versions qui implémentent différentes techniques d’obfuscation. Cette analyse approfondie fait l’objet de la partie nommée Mars Stealer objectif C2.
Collecte d’échantillons de Mars Stealer
Premières versions
Avant d’analyser les différentes versions du malware Mars Stealer, une première étape consiste à collecter les échantillons du malware. Nous avons donc écrit une règle YARA basée sur l’échantillon partagé dans l’analyse 3xp0rt pour identifier d’autres échantillons de Mars Stealer.
Une méthode fiable pour détecter des échantillons d’une famille de logiciels malveillants consiste à rechercher des modèles de code d’opération (opcode) utilisés dans la routine de désobscurcissement. Dans les premières versions, le logiciel malveillant implémentait une fonction de désobscurcissement qui décodait d’abord les chaînes codées en base64, puis décryptait les chaînes chiffrées en RC4. Cet algorithme est appliqué sur de nombreuses chaînes obscurcies comme le montre la figure suivante, qui correspond à la fonction de chargement des chaînes obscurcies.
Figure 8. Fonction chargeant des chaînes obscurcies dans un échantillon de la première version de Mars Stealer
Quatre instructions sont répétées pour chaque donnée obscurcie : push, call, add et mov. Une règle YARA identifiant cette version de Mars Stealer peut être écrite sur la base de la répétition de ces opcodes. L’ajout au modèle de détection de certaines chaînes spécifiques peut affiner la règle afin d’identifier uniquement les binaires Mars Stealer. Voici une règle YARA possible pour trouver des exemples de Mars Stealer :
samples:
rule infostealer_win_mars_stealer_early_version {
meta:
description = "Identifies samples of Mars Stealer early version based on opcodes of the function loading obfuscated strings."
source = "SEKOIA.IO"
reference = "https://blog.sekoia.io/mars-a-red-hot-information-stealer/"
classification = "TLP:WHITE"
hash = "7da3029263bfbb0699119a715ce22a3941cf8100428fd43c9e1e46bf436ca687"
strings:
$dec = {a3 ?? ?? ?? ?? 68 ?? ?? ?? ?? e8 ?? ?? 00 00 83 c4 ??}
$api00 = "LoadLibrary" ascii
$api01 = "GetProcAddress" ascii
$api02 = "ExitProcess" ascii
$api03 = "advapi32.dll" ascii
$api04 = "crypt32.dll" ascii
$api05 = "GetTickCount" ascii
$api06 = "Sleep" ascii
$api07 = "GetUserDefaultLangID" ascii
$api08 = "CreateMutex" ascii
$api09 = "GetLastError" ascii
$api10 = "HeapAlloc" ascii
$api11 = "GetProcessHeap" ascii
$api12 = "GetComputerName" ascii
$api13 = "VirtualProtect" ascii
$api14 = "GetUserName" ascii
$api15 = "CryptStringToBinary" ascii
$str0 = "JohnDoe" ascii
condition:
uint16(0)==0x5A4D and
#dec > 400 and 12 of ($api*) and $str0
}
Figure 9. Règle YARA permettant d’identifier les échantillons de la première version de Mars Stealer
Nous avons partagé la règle sur les plateformes de partage d’échantillons et collecté plusieurs résultats à partir de cette règle YARA. À partir de notre surveillance du Dark Web, nous avons observé différentes versions de Mars Stealer en fonction de leur routine de désobscurcissement parmi nos échantillons collectés. Nous avons également remarqué plusieurs échantillons pour lesquels un nouveau nom de section PE est apparu : LLCPPC. Plus de détails sur les différentes versions peuvent être trouvés dans l’analyse technique suivante.
Versions LLCPPC
Le nom de section PE LLCPPC est un facteur hautement discriminant du malware Mars Stealer. On peut donc facilement identifier les échantillons de Mars Stealer en utilisant cette caractéristique dans une règle YARA en utilisant le module PE :
import "pe"
rule infostealer_win_mars_stealer_llcppc {
meta:
description = "Identifies samples of Mars Stealer based on the PE section name LLCPPC."
source = "SEKOIA.IO"
reference = "https://blog.sekoia.io/mars-a-red-hot-information-stealer/"
classification = "TLP:WHITE"
hash = "fd92fe8a4534bc6e14e177fee38a13f771a091fa6c7171fcee2791c58fbecf40"
condition:
uint16(0)==0x5A4D and
for any i in ( 0..pe.number_of_sections-1 ): (
pe.sections[i].name == "LLCPPC" and pe.sections[i].raw_data_size < 5000 )
}
Figure 10.identifiant les échantillons de Mars Stealer en fonction du nom de la section
Pour information, LLCPPC est un profil sur le forum clandestin lolz.guru qui inverse certains logiciels malveillants populaires (Redline, Mars Stealer, DCRat, X-FILES et SHurkSteal) afin de démystifier les informations trompeuses utilisées pour faire la publicité du produit.
Le développeur de Mars Stealer a probablement nommé la section PE du malware rag LLCPPC après l’analyse du malware qui a révélé des contrevérités dans la publicité du malware. Le 24 août 2021, LLCPPC a publié une analyse technique d’un échantillon de Mars Stealer avec le titre «Mars Stealer est le pire voleur | Comment le codeur de merde vous trompe».
Figure 11. Publication de LLCPPC démystifiant un échantillon de Mars Stealer sur le forum lolz.guru
Dans cette analyse, LLCPPC conclut que seuls le cryptage et la table d’adresses d’importation sécurisée sont les avantages de Mars Stealer tandis que la liste des inconvénients est beaucoup plus longue. Parmi eux, LLCPPC a soulevé le code non optimisé, le manque de débogage et d’évasion de la virtualisation, l’absence de multithreading, etc. Comme le montre la figure précédente, LLCPPC a également mentionné que l’échantillon Mars Stealer est bien détecté par VirusTotal et Any.Run analyse, contrairement à MarsTeam a déclaré.
Dernière version (version 8)
La section LLCPPC a disparu dans la dernière version de Mars Stealer, qui correspond à la version 8 selon les MarsTeam sur XSS. En effet, les échantillons de la dernière version de Mars Stealer n’envoient qu’une seule requête pour récupérer les DLL (freebl3.dll, mozglue.dll, msvcp140.dll, nss3.dll, softokn3.dll, sqlite3.dll et vcruntime140.dll). Ces fichiers sont liés à des DLL tierces légitimes permettant à Mars Stealer de collecter des données auprès de l’hôte infecté. Comme écrit par MarsTeam dans les notes de version de la version 8 « maintenant, le logiciel fait une requête après le fichier de requête, qui contient toutes les bibliothèques nécessaires au bon fonctionnement du logiciel » (traduit du russe), cela correspond donc aux échantillons de la version 8.
La communication avec le serveur C2 s’effectue via HTTP, et depuis la version 6, le voleur peut utiliser HTTPS.
Figure 12 : Communication HTTP avec le serveur C2
- Implant envoie une requête GET à l’URL C2 pour récupérer sa configuration.
- Implant récupère toutes les DLL sur le endpoint «/request», les librairies sont compressées (cf figure 13).
- Les données volées sont publiées sur le C2 sur la même URL utilisée à l’étape (1).
Figure 13 : Réponse HTTP sur /request qui contient toutes les DLL compressées
Pour identifier et collecter ces échantillons, nous pouvons à nouveau écrire une règle YARA basée sur la routine de désobscurcissement de chaîne puisque le nom de section discriminant n’est plus utilisé. À partir de notre analyse technique, nous identifions la routine de désobscurcissement basée sur les clés XOR, qui est détaillée dans la section « Mars Stealer objective C2 ». L’algorithme consiste à xorer chaque chaîne obscurcie et sa clé correspondante.
Notre règle YARA résultante est la suivante :
rule infostealer_win_mars_stealer_xor_routine {
meta:
description = "Identifies samples of Mars Stealer based on the XOR deobfuscation routine."
source = "SEKOIA.IO"
reference = "https://blog.sekoia.io/mars-a-red-hot-information-stealer/"
classification = "TLP:WHITE"
hash = "4bcff4386ce8fadce358ef0dbe90f8d5aa7b4c7aec93fca2e605ca2cbc52218b"
strings:
$xor = {8b 4d ?? 03 4d ?? 0f be 19 8b 55 ?? 52 e8 ?? ?? ?? ?? 83 c4 ?? 8b c8 8b 45 ?? 33 d2 f7 f1 8b 45 ?? 0f be 0c 10 33 d9 8b 55 ?? 03 55 ?? 88 1a eb be}
condition:
uint16(0)==0x5A4D and $xor
}
Figure 14. Règle YARA identifiant la routine XOR implémentée par Mars Stealer
Pour conclure cette section, nous voudrions mentionner une autre méthode assez classique mais très efficace pour collecter et classer les échantillons de logiciels malveillants en fonction de l’heure de création du PE. En effet, de nombreux échantillons déballés de Mars Stealer partagent des dates de création de PE identiques, ce qui les rend faciles à identifier sur les plateformes de partage d’échantillons : «2021-08-12T17:45:33» et «2022-01-05T14:09:08».
Les infrastructures de Command & Control des cyber-attaquants observées en 2021 par SEKOIA.IO
Suivi des serveurs Mars Stealer C2
Le suivi des serveurs utilisés pour héberger des serveurs C2 de malwares ou plus largement des infrastructures adverses est une approche de chasse proactive que nous avons intensément développée chez SEKOIA.IO5. Concernant le malware Mars Stealer, les serveurs C2 sont hébergés par les attaquants et non par le développeur du malware. Cela rend plus difficile, voire impossible, l’identification d’une heuristique basée sur la réponse HTTP pour trouver les serveurs C2 du malware, car chaque attaquant doit configurer son propre serveur HTTP hébergeant le panneau d’administration de Mars Stealer.
Cependant, une bonne et simple méthode pour suivre les logiciels malveillants largement vendus consiste à trouver des serveurs hébergeant l’une des pages Web caractéristiques du panneau d’administration. En recherchant le hachage de ces pages Web spécifiques (pages JavaScript, PHP ou HTML) sur des plates-formes d’analyse d’URL, nous pouvons identifier les serveurs utilisés par le logiciel malveillant pour télécharger des charges utiles et exfiltrer les informations volées.
Concernant le panneau d’administration de Mars Stealer, nous pouvons suivre plusieurs pages qui sont spécifiques au panneau des logiciels malveillants. Par exemple :
- d8f09307b60c5bef5ceacfd8501bd3d91f1de9e5e746bb2d7def94d86789da50 et 304288329069ad8eaafce0f10a369101607c9248fbc9aaaa733c9e2dab5c467f sont spécifiques aux pages de connexion Mars Stealer ( PHPlogin.php). Le premier hash correspond à la page de connexion de la version 8 de Mars Stealer, tandis que le second correspond à la page de connexion de la version 7 et inférieure. Nous avons pu confirmer ces résultats à partir du code source divulgué du panneau d’administration.
- 20e6bb3cf9d13f10bca7b7b5d1f4cb82146c274747e8c2ae7fe3307881f00829 est spécifique à une page CSS utilisée par la page de connexion Mars Stealer (bootstrap.min.css).
Figure 15. Login page of the Mars Stealer administration panel
From this information, we can write a heuristic on urlscan.io6 (or other similar services) like:
hash:(20e6bb3cf9d13f10bca7b7b5d1f4cb82146c274747e8c2ae7fe3307881f00829 OR 304288329069ad8eaafce0f10a369101607c9248fbc9aaaa733c9e2dab5c467f OR d8f09307b60c5bef5ceacfd8501bd3d91f1de9e5e746bb2d7def94d86789da50)
Le 7 avril 2022, cette requête a abouti à 43 URL qui hébergeaient un panneau d’administration Mars Stealer.
Figure 16. Résultats Urlscan.io sur les pages de connexion d’identification heuristique de Mars Stealer
Cette méthode est basée sur les soumissions d’URL et, malheureusement, n’est pas aussi proactive que l’heuristique basée sur la réponse HTTP. Mais il a le mérite de collecter les IoC (noms de domaine ou adresses IP) du réseau au fil du temps. De plus, les pages Web du panneau d’administration des logiciels malveillants changent rarement, contrairement au code source de l’agent. C’est donc un bon moyen de suivre une famille de logiciels malveillants au fil du temps, puis de pivoter vers de nouveaux échantillons qui pourraient ne pas être détectés par nos règles YARA.
Une autre façon de suivre les serveurs Mars Stealer C2 consiste à pivoter sur la demande (3de1fb0d1108907fd61d6d6b9a4c6b856af509e0af35578f158cfce5d634fe07) qui est l’archive contenant les DLL légitimes. Tous les échantillons de Mars Stealer de la version 8 demandent cette ressource. Par exemple, sur VirusTotal, certains serveurs C2 peuvent être identifiés hébergeant le fichier zip et les échantillons le demandant.
En conclusion, nous suivons la menace Mars Stealer par différents moyens qui nous permettent de collecter les IoC du réseau et du système. Une autre technique que nous avons utilisée pour collecter les URL de Mars Stealer C2 consiste à les extraire des échantillons. La partie suivante est consacrée à notre analyse approfondie de plusieurs versions de Mars Stealer, ce qui nous a permis de mettre en place un extracteur de configuration.
C2 de Mars Stealer
Une analyse approfondie de ce malware a été faite par 3xp0rt, l’article décrit comment les chaînes sont chargées, les vérifications effectuées contre les hôtes infectés (langues, anti-émulation, ex: John Doe & HALT9), le l’extraction des cookies et des portefeuilles crypto, l’exfiltration C2 et l’accaparement de la configuration. Dans notre contexte, l’analyse ici est centrée sur la configuration Command and Control qui plus est, sur la manière de l’extraire automatiquement. Pour répondre à ce besoin, une analyse des différentes versions du malware et de la manière dont l’URL C2 est désobscurcie et chargée dans PE est nécessaire. À partir de cette analyse, nous avons essayé d’identifier les versions de Mars Stealer en nous basant sur les MarsTeam sur le forum XSS.
Principales fonctionnalités de Mars Stealer
La figure ci-dessous présente brièvement à quoi ressemble la fonction principale de Mars Stealer (pour plus de détails, consultez l’analyse approfondie 3xp0rt1), sa fonction principale pourrait être divisée en 8 unités décrites ci-dessous :
- Charger la chaîne statique : cette fonction prépare le logiciel malveillant pour charger d’autres bibliothèques et fonctions et configurer la clé de déchiffrement ;
- Lier la fonction de base pour configurer les fonctionnalités des logiciels malveillants pour les étapes 3 à 4 comprend ;
- Anti-débogage / Anti-émulation :
- Vérifier l’heure
- Vérifier le bac à sable Windows Defender
- Déchiffrer toutes les chaînes : cela inclut le nom de la fonction des autres bibliothèques, les chaînes utilisées par le voleur (par exemple les requêtes SQL pour l’extraction des cookies) ;
- Chargez toutes les fonctions et bibliothèques requises (sqlite3.dll, freebl3.dll, mozglue.dll, etc…) ;
- Voler des cookies, crypto wallet, mot de passe, etc…;
- Exfiltration des données volées via HTTP vers son C2 ;
- Se supprime via un ShellExecuteExA (C:\Windows\System32\cmd.exe /c timeout /t 5 & del /f /q "%s" & exit).
Figure 17. Fonction centrale de Mars Stealer
Cet article se concentre sur les différences observées à travers les différents échantillons de Mars Stealer que nous avons collectés. Comme mentionné précédemment dans l’analyse des publications sur les forums underground, MarsTeam essaie d’améliorer son produit à chaque version (correction de bogues, quelques obfuscations et nouvelles fonctionnalités). Les annonces de publication sur le forum XSS peuvent ne pas correspondre à ce qui a été identifié comme une version dans cet article. Le processus d’identification de version est basé sur la façon dont le logiciel malveillant stocke et désobscurcit son C2, ce qui pourrait entraîner un chevauchement des versions des versions annoncées par MarsTeam et notre travail.
La section suivante décrit la première et plus ancienne technique utilisée par Mars Stealer pour charger son C2, qui impliquait de récupérer la clé RC4 et de repérer la position du Command and Control dans le PE.
Chargement des chaînes
Une des premières fonctions du malware vise à charger un petit ensemble de chaînes, qui seront utilisées un peu plus tard avec les deux fonctions connues de Kernel32.dll: LoadLibrary et GetProcAddress. Ces deux fonctions sont utilisées pour d’autres fonctions et le chargement de la bibliothèque. Dans cette même fonction (load_string), la première chaîne chargée est longue de vingt octets, ce qui semble être la clé utilisée pour déchiffrer (RC4) les chaînes du malware.
Ces chaînes masquées sont stockées dans la .data dans ce format donné : chaîne chiffrée avec l’algorithme RC4 (Rivest Cipher 4)7 stocké en base64. La figure ci-dessous montre comment la clé RC4 est chargée.
Figure 18. Chargement de la clé RC4
Par exemple, pour la chaîne suivante : « K3vgIP3rMlysQNU= » :
- La chaîne décodée en base64 est 2b7be020fdeb325cac40d5.
- La chaîne décryptée RC4 avec la clé 85297062256884302049 est «MachineGuid».
La récupération de la clé RC4 est la première étape pour obtenir le C2 en texte clair. Ensuite, trouver le décalage de la chaîne qui contient le C2 est l’objectif. Ces chaînes sont les troisième et quatrième chaînes chargées et décryptées dans la fonction decrypt_string.
Figure 19. Offset de C2 codé en base64 et chiffré avec RC4 (adresses : 0x4131f4 et 0x413210)
Dans l’une des versions les plus récentes, une nouvelle section a été créée par les auteurs de Mars Stealer. L’emplacement C2 est maintenant à un décalage défini dans le code LLCPPC, cf figure 20. Cette version et son évolution sont analysées en profondeur dans les trois sections suivantes.
Une nouvelle section est entrée dans le ring
Comme introduit dans la section « Collecting Mars Stealer samples », une nouvelle section avec le nom singulier LLCPPC a été introduite dans la structure Mars Stealer PE.
La structure de cette section a évolué au cours des différentes versions. Tout d’abord, cette section était composée d’un segment contenant le code utilisé par le logiciel malveillant, puis les auteurs ajoutent des données, parfois en texte clair ou masquées.
La nouvelle section de logiciels malveillants a la structure suivante :
Figure 20. Structure de la section LLCPPC
Dans la structure de la section LLCPPC précédente, l’URL C2 est en texte clair, ce qui signifie qu’elle n’est pas masquée et que la clé XOR n’est pas utilisée. Cependant, dans la plupart des exemples, l’URL C2 est masquée par la clé XOR.
Trois versions différentes de cette section ont été observées au cours de notre enquête. La première version de cette section est celle qui utilise le cryptage RC4 sur le C2 situé dans la section des données, puis dans la prochaine version, les développeurs de logiciels malveillants ajoutent au bas de la section le C2 et changent la méthode d’obscurcissement. Les données peuvent être masquées par une opération XOR ou peuvent être stockées en texte clair.
LLCPPC avec cryptage RC4
La version la plus simple de la section LLCPPC ne contient que du code. Le code est chargé de charger la chaîne obscurcie à partir d’un décalage spécifique et d’appeler la fonction de désobscurcissement (par exemple , décodage base64 plus décryptage RC4).
Figure 21. Décompilation IDA de la fonction « decrypt_string » qui appelle une fonction dans la section LLCPPC pour charger le C2
Les développeurs de Malware avaient remplacé le décryptage C2 (voir figure 21) par un appel à la fonction située au début de la section LLCPPC, bizarrement suivi de plusieurs opérations NOP.
La fonction appelante de la section LLCPPC est la suivante :
Figure 22. Décompilation IDA du chargement C2 avant son déchiffrement (RC4)
- L’appel edx est un appel à la kernel32.dll fonction GetModuleHandleA permettant de retourner le handle du fichier chargé, où le module de requête ici est 0, c’est une astuce pour retourner l’adresse de base du PE.
- À partir de cette adresse, un décalage est calculé (différent dans chaque échantillon de Mars Stealer) : lea eax, [edi + 0x16d40], edi qui contient l’adresse de base du PE.
- Ensuite, un appel esi est effectué, le registre esi contient l’adresse de la fonction qui décode base64 et décrypte RC4. Cette fonction se trouve dans la section .text et est utilisée pour déchiffrer d’autres chaînes du logiciel malveillant. C’est la même fonction qui est appelée plusieurs fois par decrypt_string.
- Enfin, la chaîne décodée et décryptée est ensuite stockée à un emplacement spécifique avec mov dword [edi + 0x177b0], eax; le edi contient toujours l’adresse de base du PE.
Figure 23. Décompilation IDA du chargement de bozkurtoot[.]dev C2 après son déchiffrement (RC4)
Le processus de désobscurcissement est appelé deux fois, une fois pour l’adresse IP ou le nom de domaine C2 et pour le chemin d’URL, comme indiqué dans la figure ci-dessus.
LLCPPC avec données intégrées
Comme mentionné précédemment, certaines versions de cette section intègrent des données, ces données semblent être le C2 (adresse IP ou nom de domaine) plus son chemin URL.
Désormais deux variantes existent, une avec le C2 en clair (cf figure 24) et une variante où le C2 est xoré (cf figure 25) :
Figure 24. Dump Radare2 de la section LLCPPC avec C2 en clair
Figure 25. Dump Radare2 de la section LLCPPC avec C2 obscurci
Une analyse dynamique aide à identifier comment le C2 a été obscurci et où sa clé d’obscurcissement a été stockée.
La fonction de désobscurcissement (cf figure 27) détermine la longueur de la chaîne, puis charge les touches C2 et xor à partir d’un offset connu situé dans la section LLCPPC pour finalement appeler la fonction qui unxors les données. En outre, cette fonction est située dans la .text et est également utilisée pour la désobfuscation d’autres chaînes.
En fait, le C2 obfusqué peut être lu en texte clair avec le court extrait de code Python suivant :
def unxor(string: iterable, key: iterable) -> str:
"""Method to unxor obfuscated data from llcppc section"""
unxored = ""
for c1, c2 in zip(key, string):
unxored += chr(c1 ^ c2)
return unxored
Figure 26. Fonction désobscurcissant les données de la section LLCPPC
The function responsible for the string unxor data is the following one:
Figure 27. Décompilation IDA de la fonction responsable de la chaîne unxor
Comme observé lors du calcul de l’analyse sur plusieurs échantillons à l’aide de l’obfuscation XOR et des données stockées dans la section LLCPPC ( cf figure 20). La cible C2 masquée, le chemin d’URL C2 et la clé XOR sont situés à la même position pour chaque échantillon de cette version ; cela indique une attribution statique de l’emplacement par les auteurs.
- Le décalage cible C2 est : adresse de base LLCPPC + 0x200.
- Le texte en clair cible C2 se trouve dans la section .data : 0x41A800.
- Le décalage du chemin d’URL C2 est : adresse de base LLCPPC + 0x280 .
- Le texte en clair du chemin de l’URL C2 se trouve dans la section .data : 0x41A2A0.
- La clé XOR pour la cible C2 et le chemin d’URL C2 est : adresse de base LLCPPC + 0x300.
The mechanism described in the above section to get the C2 might be assigned to version 4 and above. A new variant then came with virtual machines and environment analysis detection.
LLCPPC Anti VM mechanism
L’équipe Mars Stealer a mis à jour son chargement C2; certains contrôles anti-VM ont été introduits dans une nouvelle version. Comme le montre la figure ci-dessous, le logiciel malveillant parcourt le processus en cours d’exécution à la recherche de noms de processus particuliers. Cette version vérifie si un processus contient VBOX ou si un processus est nommé q.exe qui est un outil de Sysinternal : Rootkit detection utility 8 . Dans le cas où aucun des processus suspects n’est identifié, le malware alloue un espace mémoire virtuel à la fonction cœur de Mars Stealer ( cf . figure 17) puis l’exécute ( cf figure 28, « jmp eax »).
Figure 28. Anti-VM mechanism
The C2 loading method for this version does not differ that much from other LLCPPC versions. Indeed, after the virtual memory allocation of Mars Stealer core function followed by the jump into this new allocated memory area, the code of Mars Stealer remains the same as the one described in the « Mars Stealer capabilities » section. However, from a scripting point of view it will be required to look a step further to find out the « OEP » (Original Entry Point).
LLCPPC left the game: Mars Stealer V8
As explained previously in the section « Collecting Mars Stealer samples », the last version has evolved, both the C2 server and the implant benefit from some upgrades. From the implant point of view, two major functionalities were introduced:
- Downloaded DLLs are now grouped in a single ZIP file named and fetched from the “/request” URL.
- A new anti-analysis check is introduced.
The C2 is obfuscated using the same techniques as described in the section « LLCPPC with embedded data », but for this version, obfuscated data are located in the .rdata section. Moreover, each part of the C2, the IP address or the domain name and the URL path, has their own XOR key. The structure of the code does not change regarding the previous version with XOR obfuscation; the xored string is followed in the PE structure by its XOR key.
Figure 29. Obfuscated C2 IP address followed by its XOR key
This simple version 8 of Mars Stealer does not represent the trend we observed during our tracking session, various samples identified as version 8 are packed with Themida9.
Extra analysis notes
As mentioned in the past section, the samples retrieved from VirusTotal were identified with only two different RC4 keys: 8529706225688430204 and 86223203794583053453 with massive usage of the first one. We cannot affirm that one key is linked to a specific release, nor a selling batch, nor a threat actor (this hypothesis does not make sense here, in a malware-as-a-service context).
The XOR key located at the end of the LLCPPC section is repeatedly present even if no obfuscation is applied on the C2 (cf figure 24).
Some older (below version 7) Mars Stealer samples came « packed » with a VMProtect layer, related hashes are:
- a6cd1f6158ce5a16bd500218333e81fcb6ecd960da3cfa0c1b701a5cf9f98dec
- 8ded24590c991f33438fe38f3ae10e91672369b1f029bf339a94d74c8645932a
- af503eb7e314b4a8acb2ef849fc7cea7f273fa9544b40904314b651859b66a17
SEKOIA.IO interaction
Malware C2 loading and deobfuscation have been analyzed in their different versions and the behavior of the multiple versions are now identified. A FAME module10 to automatically extract Command and Control has been developed. This module uses the Python library r2pipe11 to interact with the PE file.
Twice a week, one of our workers of the SEKOIA Malware Watcher project pulls samples from VirusTotal that match our YARA rule mentioned in the “Collecting Mars Stealer samples” section and submits these samples to our FAME instance. C2 are extracted via FAME and finally pushed contextualized to SEKOIA.IO with the relationship indicating the Mars Stealer malware.
Figure 29. From VirusTotal to SEKOIA.IO with FAME
The FAME module will be release as Open Source on the SEKOIA.IO public Github repository named fame_module12. The extractor is available as standalone script13.
Figure 30. Pushed IoCs in SEKOIA.IO from SEKOIA Malware Watcher
Extracted IoCs can be found in the SEKOIA.IO Intelligence Center under the Mars Stealer malware object on the Threat Context tab and these IoCs are tagged with the source SEKOIA Malware Watcher.
Thanks for reading. You can also read our article on how to track and detect cobalt strike?
Resources
- IoCs: https://github.com/SEKOIA-IO/Community/blob/main/IOCs/marsstealer/mars_stealer_iocs_20220407.csv
- YARA rules:
- infostealer_win_mars_stealer_early_version: https://github.com/SEKOIA-IO/Community/blob/main/IOCs/marsstealer/infostealer_marsstealer_early_version.yar
- infostealer_win_mars_stealer_llcppc: https://github.com/SEKOIA-IO/Community/blob/main/IOCs/marsstealer/infostealer_marsstealer_llcppc.yar
- infostealer_win_mars_stealer_xor_routine: https://github.com/SEKOIA-IO/Community/blob/main/IOCs/marsstealer/infostealer_marsstealer_xor_routine.yar
- Standalone extraction script: https://github.com/SEKOIA-IO/Community/blob/main/scripts/mars_stealer_c2_extractor.py
External references
1 3xp0rt analysis of Mars Stealer, February 1, 2022
2 Exclusive Threat Research: Mars (Stealer) Attacks!, MorphisecLab, March 29, 2022
4 Lapsus$: when kiddies play in the big league, SEKOIA TDR, March 23, 2022
5 The Command & Control infrastructures of cyber attackers observed in 2021 by SEKOIA.IO, SEKOIA TDR, January, 2022
6 URL Scan Mars Stealer Administration Panel Heuristic
7 RC4: Rivest Cipher 4, Wikipedia
8 Sysinternal tool: Rootkit detection utility, Microsoft
9 Themida Overview, Oreans Technologies
10 FAME Automates Malware Evaluation, CERT Société Générale & CERT SEKOIA
11 Python library r2pipe, Radare2
12 FAME module: Mars Stealer configuration extractor, SEKOIA TDR
13 Standalone script: Mars Stealer configuration extractor, SEKOIA TDR
Thank you for reading this article. You can also read our article on:
- Raccoon Stealer v2 – Partie 2 : Analyse approfondie
- Raccoon Stealer v2 – Partie 1 : De retour des morts
- Le paysage des menaces ransomware observé par SEKOIA.IO durant le 1ᵉʳ semestre 2022
- Nouvelle campagne de phishing de TURLA en Europe de l’Est
- Mars, a red-hot information stealer
- BumbleBee: a new trendy loader for Initial Access Brokers.
Échangez avec l’équipe
Vous souhaitez en savoir plus sur nos solutions de protection ? Vous voulez découvrir nos produits de XDR et de CTI ? Vous avez un projet de cybersécurité dans votre organisation ? Prenez rendez-vous et rencontrons-nous !