Résumé
Latrodectus est un téléchargeur découvert pour la première fois par Walmart en octobre 2023. Le logiciel malveillant est devenu très célèbre en raison de ses similitudes avec le célèbre logiciel malveillant IcedID, non seulement dans le code lui-même, mais aussi dans l'infrastructure, comme l'ont signalé précédemment Proofpoint et Team Cymru S2.
Le logiciel malveillant est généralement diffusé par le biais de campagnes de spam par courrier électronique menées par deux acteurs de menace spécifiques : TA577 et TA578. Parmi les nombreuses fonctionnalités qu'il contient, on trouve la capacité de télécharger et d'exécuter des charges utiles supplémentaires, de collecter et d'envoyer des informations système au C2, de mettre fin à des processus, et bien d'autres choses encore. En juillet 2024, Latrodectus a également été observé en train d'être mis au monde par un blaireau BRC4.
Au cours des activités de chasse de Threat Labs, nous avons découvert une nouvelle version de la charge utile Latrodectus, la version 1.4. Les mises à jour du logiciel malveillant comprennent une approche différente de la désobfuscation des chaînes de caractères, un nouveau point de terminaison C2, deux nouvelles commandes de porte dérobée, et bien plus encore.
Dans ce blog, nous nous concentrerons sur les fonctionnalités ajoutées/mises à jour dans cette nouvelle version.
Analyse des fichiers JavaScript
La première charge utile de la chaîne d'infection est un fichier JavaScript obscurci à l'aide d'une approche similaire à celle utilisée par d'autres campagnes de Latrodectus. La technique d'obscurcissement est employée en ajoutant plusieurs commentaires dans le fichier, ce qui le rend plus difficile à analyser et augmente considérablement la taille du fichier.
Le code pertinent est présent entre les commentaires indésirables et, une fois retiré du fichier, nous pouvons voir le code qui sera exécuté.
Le logiciel malveillant recherche les lignes commençant par la chaîne "/////", les place dans une mémoire tampon et les exécute en tant que fonction JS. La fonction exécutée télécharge ensuite un fichier MSI à partir d'un serveur distant et l'exécute/installe.
Analyse des fichiers MSI
Une fois exécuté/installé, le fichier MSI utilise l'outil Windows rundll32.exe pour charger une DLL nommée "nvidia.dll" et appelle une fonction nommée "AnselEnableCheck" exportée par cette DLL. La DLL malveillante est stockée dans un fichier CAB nommé "disk1", présent dans le fichier MSI lui-même :
Analyse des cryptomonnaies
Pour tenter d'obscurcir la charge utile principale, le fichier "nvidia.dll", le fichier "nvidia.dll" et le fichier "nvidia.dll" ont été ajoutés. utilise un crypteur nommé Dave. Ce crypteur existe depuis longtemps et a été utilisé dans le passé par d'autres logiciels malveillants tels que Emotet, BlackBasta et les versions précédentes de Latrodectus.
Le crypteur stocke la charge utile à exécuter soit dans une ressource, soit dans une section. Dans l'échantillon analysé, la charge utile est stockée dans une section appelée "V+N".
Les étapes utilisées pour désobfusquer, charger et exécuter la charge utile finale sont assez simples. Le logiciel malveillant déplace une clé dans la pile et résout les fonctions VirtualAlloc, LoadLibrary et GetProcAddress de l'API Windows.
Il alloue ensuite de la mémoire à l'aide de la fonction VirtualAlloc et effectue une opération XOR sur plusieurs octets par rapport aux données de la section mentionnée à l'aide de la clé définie précédemment, le résultat de l'opération étant la charge utile finale. Les étapes suivantes consistent à aligner la charge utile dans la mémoire et à appeler sa fonction principale.
Étant donné que le crypteur copie d'abord la charge utile originale dans la mémoire allouée avant que les autres étapes ne soient exécutées, il suffirait de vider le contenu de la première mémoire allouée pour obtenir la charge utile finale. Un script permettant de décompresser/déobfusquer statiquement les charges utiles de Latrodectus à l'aide de Dave crypter est disponible ici.
La charge utile finale est une DLL dont la fonction DllMain est appelée par le code du crypteur. L'étape suivante est l'exécution de la fonction exportée "AnselEnableCheck", qui est responsable de l'exécution de la charge utile finale.
En examinant la charge utile finale, nous remarquons qu'elle comporte plusieurs fonctions exportées, mais comme elles ont toutes la même RVA, l'appel à l'une d'entre elles n'a pas d'importance.
Analyse de la DLL de Latrodectus
Les caractéristiques générales de la charge utile principale ayant déjà été décrites par d'autres chercheurs, les sections suivantes se concentrent sur les mises à jour utilisées par la nouvelle version de Latrodectus.
Obfuscation des chaînes de caractères
Contrairement aux versions précédentes qui utilisaient une opération XOR pour désobfusquer ses chaînes, la version mise à jour utilise AES256 en mode CTR. La clé AES est codée en dur dans la fonction de désobfuscation elle-même et l'IV change pour chaque chaîne à décrypter. La clé utilisée dans les échantillons analysés est "d623b8ef6226cec3e24c55127de873e7839c776bb1a93b57b25fdbea0db68ea2".
La fonction de désobfuscation reçoit deux paramètres. Le premier est un bloc de données et le second un tampon de sortie. Le bloc de données sert à stocker les informations utilisées pour décrypter la chaîne et suit le format ci-dessous :
- Longueur de la chaîne : 2 octets
- IV : 16 octets
- Chaîne cryptée : Taille spécifiée dans le premier champ
Il convient de noter qu'il y a parfois des octets supplémentaires après le contenu de la chaîne cryptée. L'image suivante est un exemple de ce bloc de données :
ID de la campagne
Dans la version actuelle du logiciel malveillant, la fonction de génération d'identifiants de campagne continue d'utiliser la même approche où une chaîne d'entrée est hachée à l'aide de l'algorithme FNV. Cependant, une nouvelle chaîne d'entrée "Wiski" a été utilisée, ce qui a donné le code 0x24e7ce9e comme identifiant de la campagne.
C2 communication
Pour sa communication initiale avec le serveur C2, Latrodectus recueille un grand nombre d'informations sur le système infecté, telles que le nom d'utilisateur, la version du système d'exploitation et l'adresse MAC. Les informations sont formatées à l'aide d'un modèle spécifique, cryptées à l'aide de l'algorithme RC4, encodées à l'aide de base64 et envoyées au C2.
Les clés RC4 trouvées dans les échantillons analysés étaient "2sDbsEUXvhgLOO4Irt8AF6el3jJ0M1MowXyao00Nn6ZUjtjXwb" et "kcyBA7IbADOhw5ztcv09vmF8GYmR38eu7OGdfD7pyRelTPKH1G".
Pendant le formatage des données, nous pouvons signaler que le numéro de version 1.4 a été défini.
Les informations sont envoyées dans le corps du message HTTP via une requête HTTP POST. Le point de terminaison utilisé dans les nouvelles variantes est "/test" au lieu de "/live" comme dans les versions précédentes. Bien qu'il s'agisse d'un indicateur très faible, l'utilisation de ce point d'accès spécifique pourrait indiquer qu'il s'agit d'une version test du logiciel malveillant.
Commandes
Dans la version 1.4, Latrodectus a introduit deux nouvelles commandes dans sa charge utile : les commandes ID 22 et 25.
Commande 0x16
Dans cette commande, le logiciel malveillant télécharge un shellcode à partir du serveur spécifié et l'exécute via un nouveau thread.
La différence entre cette commande et la commande 14 est qu'une fonction qui effectue l'encodage base64 est passée en paramètre au shellcode lui-même. L'adresse de la fonction base64 est stockée dans une vue de fichier mappé nommée "12345".
Commande 0x19
Dans cette commande, le logiciel malveillant reçoit un nom de fichier et un emplacement distant à partir duquel télécharger le fichier. Le nom du fichier est alors ajouté à %AppData%, le fichier est téléchargé et son contenu est écrit dans le chemin mentionné.
Compte tenu de ces ajouts, vous trouverez ci-dessous un tableau des commandes mises à jour prises en charge par le logiciel malveillant :
ID de la commande | Description |
---|---|
2 | Collecte d'une liste de noms de fichiers de bureau |
3 | Collecte d'informations sur les processus en cours |
4 | Collecte d'informations sur le système |
12 | Téléchargez et exécutez un exécutable normal |
13 | Téléchargez et exécutez une DLL via rundll32 |
14 | Télécharger et exécuter un shellcode |
15 | Auto-actualisation |
17 | S'éteindre soi-même |
18 | Téléchargez et exécutez la charge utile IcedID |
19 | Augmenter le délai de mise en veille |
20 | Remise à zéro du compteur de requêtes |
21 | Téléchargez et exécutez le module du voleur |
22 | Téléchargez et exécutez un shellcode en passant la fonction d'encodage base64 en paramètre. |
25 | Téléchargez un fichier dans le répertoire %AppData%. |
Netskope Detection
- Netskope Threat Protection
- Gen:Variant.Ulise.493872
- Trojan.Generic.36724146
- Netskope Advanced Threat Protection offre une protection proactive contre cette menace.
- Win64.Trojan.ShellCoExec
Conclusions
Latrodectus a évolué assez rapidement, ajoutant de nouvelles fonctionnalités à sa charge utile. La compréhension des mises à jour appliquées à la charge utile permet aux défenseurs de maintenir les pipelines automatisés correctement paramétrés et d'utiliser les informations pour poursuivre la recherche de nouvelles variantes. Netskope Threat Labs continuera à suivre l'évolution de Latrodectus et de son TTP.
CIO
Tous les IOC et les scripts relatifs à ce malware se trouvent dans notre dépôt GitHub.