MISE À JOUR (6 avril 2021) :
Bien que nous n'ayons pas reçu de réponse officielle de GitHub, lorsque nous avons vérifié le 6 avril vers 18:00 UTC, les dépôts malveillants utilisés par Janeleiro avaient été supprimés.
ESET Recherche a suivi un nouveau trojan bancaire qui cible les utilisateurs d'entreprise au Brésil depuis 2019 à travers de nombreux verticaux touchant des secteurs tels que l'ingénierie, la santé, la vente au détail, la fabrication, la finance, le transport et le gouvernement.
Cette nouvelle menace, que nous avons nommée Janeleiro, tente de tromper ses victimes avec des fenêtres pop-up conçues pour ressembler aux sites Web de certaines des plus grandes banques du Brésil. Ces fenêtres pop-up contiennent de faux formulaires visant à inciter les victimes du logiciel malveillant à saisir leurs informations d'identification bancaires et leurs informations personnelles que le malware capture et exfiltre vers ses serveurs C&C. Pour la mise en œuvre de cette technique, Janeleiro suit exactement le même schéma que certaines des familles de logiciels malveillants les plus importantes ciblant la région, notamment Casbaneiro, Grandoreiro, Mekotio, Amavaldo, et Vadokrist
Contrairement à ces familles de logiciels malveillants bien connues, Janeleiro est écrit en Visual Basic .NET, ce qui constitue un écart important par rapport au langage de programmation Delphi que les acteurs de la menace utilisent depuis des années dans la région. Janeleiro a évolué vers l'objectif de donner plus de contrôle aux opérateurs pour manipuler et ajuster ses fausses fenêtres pop-up en fonction de ce dont ils ont besoin pour mener à bien l'attaque, envoyer des clics de souris et des frappes au clavier, et enregistrer les entrées de l'utilisateur et l'écran en temps réel. La nature de ces types d'attaques ne se caractérise pas par leurs capacités d'automatisation, mais plutôt par leur approche pratique : dans bien des cas, l'opérateur doit ajuster les fenêtres via des commandes en temps réel.
Les opérateurs semblent à l'aise avec l'utilisation de GitHub pour stocker leurs modules, administrer leur page d'organisation et télécharger chaque jour de nouveaux dépôts où ils stockent les fichiers contenant les listes de serveurs C&C que les trojans récupèrent pour se connecter à leurs opérateurs. Le fait que votre logiciel malveillant dépende d'une source unique est une démarche intéressante. Mais que diriez-vous si nous vous disions que la dernière version de Janeleiro ne vit qu'un jour?
La cible : le Brésil
D'après nos données télémétriques, nous pouvons affirmer que ce malware ne cible que les utilisateurs professionnels. Les e-mails malveillants sont envoyés à des entreprises au Brésil et, même si nous ne pensons pas qu'il s'agisse d'attaques ciblées, ils semblent être envoyés en petits lots. D'après notre télémétrie, les secteurs touchés sont l'ingénierie, la santé, la vente au détail, la fabrication, la finance, le transport et le gouvernement.
La figure 1 présente un exemple d'e-mail d’hameçonnage : une fausse notification concernant une facture impayée. Il contient un lien qui mène à un serveur compromis. La page récupérée redirige simplement vers le téléchargement d'une archive ZIP hébergée dans Azure. Certains autres courriels envoyés par ces attaquants ne comportent pas de redirection via un serveur compromis mais mènent directement à l'archive ZIP.
Les serveurs qui hébergent ces archives ZIP avec Janeleiro ont des URL qui suivent la même convention que d'autres URL que nous avons vues délivrer d'autres familles de chevaux de Troie bancaires (voir la section Indicateurs de compromission). Dans certains cas, ces URL ont distribué à la fois Janeleiro et d'autres banquiers Delphi à des moments différents. Cela suggère que soit les différents groupes criminels partagent le même fournisseur pour l'envoi d'e-mails de spam et pour l'hébergement de leurs logiciels malveillants, soit il s'agit du même groupe. Nous n'avons pas encore déterminé quelle hypothèse est la bonne.
La figure 2 donne un aperçu de l'attaque.
L'archive ZIP contient un programme d'installation MSI qui charge la DLL principale du cheval de Troie. L'utilisation d'un installateur MSI est une technique privilégiée par plusieurs familles de logiciels malveillants dans la région. Janeleiro récupère l'adresse IP publique de l'ordinateur et utilise un service Web pour tenter de le géolocaliser. Si la valeur du code pays renvoyée ne correspond pas à BR, le malware s'arrête. Si la vérification de la géolocalisation passe, Janeleiro recueille des informations sur la machine compromise, notamment :
- La date et l'heure actuelles
- Le nom de la machine et le nom d'utilisateur
- Le nom complet et l'architecture du système d'exploitation
- La version du logiciel malveillant
- Le nom de la région obtenu lors de la géolocalisation de l'ordinateur.
Les informations sont téléchargées sur un site web dans le but de suivre les attaques réussies. Ensuite, Janeleiro récupère les adresses IP des serveurs C&C sur une page d'organisation GitHub apparemment créée par les criminels. Il est alors prêt à démarrer ses fonctionnalités principales et à attendre les commandes d'un opérateur.
En 2020, ESET a publié un white paper détaillant les résultats de l'interconnexion des familles latino-américaines de chevaux de Troie bancaires les plus importantes, notamment Casbaneiro, Grandoreiro et Amavaldo. Les similitudes décrites dans ce document résident dans la mise en œuvre du noyau du cheval de Troie : notification à l'opérateur lorsqu'il y a une fenêtre active avec un nom ou un titre intéressant basé sur une liste de mots clés prédéfinie, et utilisation d'une fausse fenêtre pop-up pour tromper les victimes potentielles en leur faisant croire qu'elles saisissent des informations sensibles sur un site Web légitime. Ce processus est illustré par l'organigramme de la figure 3.
Janeleiro suit le même schéma que onze autres familles de logiciels malveillants ciblant le Brésil. Comme le montre la Figure 4, nous pouvons voir certaines des fausses fenêtres pop-up créées par Janeleiro.
Janeleiro in action
Janeleiro commence à énumérer les fenêtres et à vérifier leurs titres pour trouver des mots-clés intéressants (comme le montre la figure 5) qui indiqueraient que l'utilisateur visite le site Web d'une entité bancaire intéressante, en particulier ceux qui sont pris en charge par sa mise en œuvre de fausses fenêtres pop-up.
Lorsqu'un de ces mots-clés est trouvé, Janeleiro tente immédiatement de récupérer les adresses de ses serveurs C&C sur GitHub et s'y connecte. Ces fausses fenêtres pop-up sont créées dynamiquement à la demande et contrôlées par l'attaquant via des commandes adressées au logiciel malveillant. Elles passent par plusieurs étapes pour tromper l'utilisateur tandis que l'attaquant reçoit en temps réel des captures d'écran, les frappes au clavier enregistrées et les informations saisies dans les faux formulaires.
Le fait que les acteurs de la menace abusent de GitHub n'a rien de nouveau; toutefois, Janeleiro le fait de manière assez intéressante : les opérateurs ont créé une page d'organisation GitHub qu'ils renomment chaque jour sous la forme SLK<dd/mm/yyyy>, où <dd/mm/yyyy> correspond à la date du jour.
Une capture d'écran de la page d'organisation GitHub telle qu'elle se présentait le 15 mars 2021 est présentée à la figure 6.
Tous les jours, l'opérateur novoescritorio1-alberto crée un nouveau référentiel en suivant ce format de dénomination. L'objectif de ce dépôt est de contenir un fichier contenant la liste des adresses IP des serveurs C&C de Janeleiro, où il se connecte pour rendre compte à ses opérateurs, recevoir des commandes et exfiltrer des informations en temps réel.
Une capture d'écran montrant l'un des dépôts de la page d'organisation GitHub attribués aux opérateurs de Janeleiro est présentée dans la Figure 7, y compris le nom d'utilisateur du compte qui effectue les commits.
Une capture d'écran de la branche secondaire du dépôt est présentée dans la Figure 8.
Nous avons informé GitHub de cette activité, mais au moment de la rédaction de ce document, aucune action n'a été entreprise contre la page de l'organisation ni contre le compte qui crée le dépôt avec de nouvelles adresses de serveurs C&C.
Dans la dernière version de Janeleiro, la version 0.0.3, les développeurs ont introduit une fonction intéressante de chiffrement/déchiffrement à l'aide d'une bibliothèque open-source appelée EncryptDecryptUtils. La nouvelle procédure de déchiffrement est présentée dans la Figure 9.
Pour déchiffrer une chaîne, Janeleiro chiffre la chaîne résultant de la date actuelle et le résultat est ensuite utilisé comme phrase de passe et valeur de sel pour créer une nouvelle clé pour le déchiffrage. Cela a un effet extrêmement important : la dernière version de Janeleiro ne peut déchiffrer ses chaînes que le jour prévu. Il peut s'agir du jour même où les chaînes ont été chiffrées ou d'un jour ultérieur, mais le déchiffrage échoue dès le lendemain.
Ceci est également vrai pour le contenu du fichier SLK de la branche principale : la liste chiffrée et codée en base 64 des serveurs C&C, comme le montre la Figure 10.
Le contenu est chiffré selon la même procédure : lorsque Janeleiro déchiffre le contenu du fichier, il doit être à une date précise - la date du jour - pour fonctionner comme prévu.
L’évolution de Janeleiro
Janeleiro possède une valeur de version interne (comme le montre la figure 11) qui peut être utilisée par les attaquants pour identifier la version de leur logiciel malveillant qui a réussi à compromettre une machine. En mars 2021, nous avons identifié quatre versions, mais deux d'entre elles partagent le même numéro de version interne.
Alors qu'en 2021, nous avons vu les versions 0.0.2 et 0.0.3, nous étions intéressés par la recherche d'une pièce maîtresse manquante dans l'évolution de Janeleiro : la version 0.0.1, qui aurait dû exister fin 2019 ou début 2020. À notre grande surprise, nous avons trouvé des échantillons de la version 0.0.4 datant de 2019. Ces nouveaux échantillons du cheval de Troie ont été déployés par un composant chargeur de DLL en tandem avec un voleur de mots de passe, ce qui signifie que le groupe derrière Janeleiro a d'autres outils dans son arsenal.
La figure 12 présente un aperçu des versions de Janeleiro de 2019 à 2021.
L'incohérence de la chronologie et de la version interne du logiciel malveillant suggère qu'il était en cours de développement dès 2018, et qu'en 2020, ils ont décidé de passer à une version antérieure de leur code et d'améliorer celle-ci et d'affiner son traitement des commandes pour que l'opérateur ait un meilleur contrôle du trojan pendant l'attaque
Destructeur et gardien des traditions
Bien que Janeleiro suive le même schéma pour la mise en œuvre de ses fausses fenêtres pop-up, ainsi que d'autres familles de logiciels malveillants qu'ESET a répertoriées dans la région, il se distingue de ces familles de logiciels malveillants de plusieurs façons :
- Il est écrit en Visual Basic .NET : Le cas curieux du Brésil est qu'il est surtout visé par des chevaux de Troie bancaires développés en Delphi - le langage de programmation de prédilection de plusieurs acteurs de la menace qui travaillent apparemment ensemble en partageant des outils et des infrastructures. La préférence de Janeleiro pour VB.NET est un écart notable par rapport à ce qui semble être la norme dans la région.
- Pas d'obfuscation binaire : Bien que Janeleiro ait recours à une légère obfuscation en générant des noms aléatoires pour ses classes, modules, noms de méthodes, paramètres et chiffrement de chaînes, il n'utilise pas d'empaqueteurs pour rendre la détection et l'analyse plus difficiles. D'autres chevaux de Troie, tels que Grandoreiro, Mekotio, Ousaban, Vadokrist et Guildma, font un usage intensif des techniques de Themida et de remplissage binaire.
- Aucun algorithme de chiffrement personnalisé : Les développeurs de Janeleiro s'appuient sur les fonctions cryptographiques fournies par le .NET Framework ainsi que sur des projets open-source pour le chiffrement/déchiffrement des chaînes de caractères, avec une préférence pour les algorithmes AES et RSA. Les chevaux de Troie tels que Casbaneiro, Grandoreiro, Amavaldo, Mispadu et Guildma, entre autres, utilisent des algorithmes de chiffrement personnalisés, y compris des techniques d'obscurcissement utilisant des tables de chaînes.
- Méthode d'exécution simple : Le programme d'installation MSI ne déploie pas d'autres composants que la DLL principale du cheval de Troie et n'exécute pas d'autres instructions que le chargement et l'exécution de l'une des exportations de la DLL qui s'installe dans le système. Nous n'avons trouvé aucun échantillon d'un installateur MSI exécutant des scripts obfusqués, des outils d'aide au déballage ou des composants pour le chargement latéral de DLL, qui est populaire auprès d'autres familles de logiciels malveillants dans la région.
- Aucune défense contre les logiciels de sécurité : Certaines des plus grandes banques du Brésil exigent que leurs clients installent un module de sécurité avant de leur permettre d'accéder à leurs comptes bancaires en ligne. Par exemple, le logiciel anti-fraude Warsaw. Il arrive souvent que les chevaux de Troie bancaires LATAM essaient de savoir si un tel logiciel est installé sur la machine compromise et le signalent aux attaquants. Certaines familles de logiciels malveillants comme Grandoreiro et Guildma tentent de le désactiver dans le pare-feu Windows ou de désactiver son pilote.
- Utilise du code de NjRAT : Janeleiro est loin d'être une autre incarnation du célèbre NjRAT, mais il utilise les fonctions de capture SocketClient et Remote Desktop de NjRAT, ainsi que d'autres fonctions diverses. NjRAT n'est pas couramment utilisé - du moins par les trojans de cuisson LATAM - peut-être en raison de leur préférence pour l'utilisation de trojans personnalisés en Delphi. Cependant, parmi d'autres logiciels malveillants, NjRAT a été utilisé dans le cadre de l’Opération Spalax, une campagne qui cible spécifiquement la Colombie.
Commandes
Les commandes avec paramètres sont reçues du serveur C&C sous forme chiffrée avec le même algorithme que celui utilisé pour chiffrer les chaînes de caractères (voir section Annexe A). Voici un format de commande typique : %CommandName%%PredefinedSeparatorKeyword%%Parameters%.
Après le déchiffrement, la commande est divisée en un tableau de chaînes de caractères. Chaque partie de la commande est séparée par un mot-clé prédéfini codé en dur dans la configuration du logiciel malveillant - toutes les versions que nous avons analysées utilisent |'meio'|, qui sépare le nom de la commande et chaque paramètre.
La Figure 13 montre comment Janeleiro vérifie le nom de la commande et exécute l'action demandée.
Lorsque Janeleiro renvoie des données à l'opérateur, il le fait dans un format similaire : %CommandName%%PredefinedSeparatorKeyword%%Encoded data%.
La majorité des commandes de Janeleiro servent à contrôler les fenêtres, la souris et le clavier, ainsi que ses fausses fenêtres pop-up. Au fur et à mesure de l'évolution de la version 0.0.2A à 0.0.3, d'autres commandes ont été ajoutées, offrant à l'opérateur un contrôle plus fin :
- Commandes pour contrôler une fenêtre spécifique
- Énumérer et envoyer des informations sur les fenêtres (titre, classe, poignée)
- Ajuster la taille d'une fenêtre spécifique, minimisation, maximisation
- Modifier les dimensions de l'écran
- Fermer tous les processus exe, et redémarrer chrome.exe avec les arguments -disable-gpu
- Capture de l'écran en temps réel
- Enregistreur de frappes en temps réel
- Envoyer des touches et clics de souris
- Afficher ou fermer une fausse fenêtre pop-up spécifique
- Commandes diverses telles que : envoi de la date et de l'heure, déconnexion de la socket, fin de son propre processus.
Conclusion
La nature expérimentale de Janeleiro, qui fait des allers-retours entre différentes versions, nous montre un acteur qui essaie toujours de trouver la bonne façon de faire, mais qui n'est pas moins expérimenté que ses concurrents : Janeleiro suit le même schéma pour la mise en œuvre des fausses fenêtres pop-up que de nombreux chevaux de Troie bancaires du LATAM, ce qui ne semble pas être une coïncidence ou une inspiration : cet acteur emploie et distribue Janeleiro en partageant la même infrastructure que certaines des familles de logiciels malveillants les plus importantes. Comme nous continuons à suivre les activités de cet acteur, le temps nous dira quels nouveaux développements ils proposeront à l'avenir.
Pour toute demande de renseignements, ou pour soumettre des échantillons liés à ce sujet, contactez-nous à l'adresse threatintel@eset.com.
Nous remercions tout particulièrement Johnatan Camargo Zacarias, de la banque Itaú, pour son aide dans cette enquête.
Indicateurs de compromission (IoCs)
Une liste complète des indicateurs de compromission (IoCs) et des échantillons est disponible dans notre dépôt GitHub.
SHA-1 hashes
Version 0.0.4
SHA-1 | Description | ESET detection name |
---|---|---|
CF117E5CA26594F497E0F15106518FEE52B88D8D | MSI file | MSIL/TrojanDownloader.Agent.FSC |
D16AC192499192F06A3903192A4AA57A28CCCA5A | Console.exe loader | MSIL/TrojanDownloader.Agent.FSC |
462D6AD77860D3D523D2CAFBC227F012952E513C | #rowspan# | MSIL/Kryptik.TBD |
0A5BBEC328FDD4E8B2379AF770DF8B180411B05D | LoadDllMSI.dll loader | MSIL/TrojanDownloader.Agent.FSC |
0AA349050B7EF173BFA34B92687554E81EEB28FF | System.Logins.Initial.dll | MSIL/Agent.TIX |
5B19E2D1950ADD701864D5F0F18A1111AAABEA28 | #rowspan# | #rowspan# |
186E590239083A5B54971CAB66A58301230164C2 | System.Modules.Initial.dll | #rowspan# |
E1B2FD94F16237379E4CAD6832A6FCE7F543DC40 | System.Modules.Initial.dll | MSIL/Janeleiro.A |
4061B2FBEB7F1026E54EE928867169D1B001B7A5 | #rowspan# | #rowspan# |
Version 0.0.2A
SHA-1 | Description | ESET detection name |
---|---|---|
8674E61B421A905DA8B866A194680D08D27D77AE | Main Trojan Loader | MSIL/Agent.AAI |
2E5F7D5F680152E738B8910E694651D48126382A | #rowspan# | MSIL/Janeleiro.A |
06E4F11A2A6EF8284C6AAC5A924D186410257650 | Main Trojan | MSIL/Agent.AAI |
Version 0.0.2B
SHA-1 | Description | ESET detection name |
---|---|---|
291A5F0DF18CC68FA0DA1B7F401EAD17C9FBDD7F | MSI file | MSIL/Janeleiro.A |
FB246A5A1105B83DFA8032394759DBC23AB81529 | #rowspan# | #rowspan# |
6F6FF405F6DA50B517E82FF9D1A546D8F13EC3F7 | Main trojan | #rowspan# |
742E0AEDC8970D47F16F5549A6B61D839485DE3C | #rowspan# | #rowspan# |
Version 0.0.3
SHA-1 | Description | ESET detection name |
---|---|---|
455FAF2A741C28BA1EFCE8635AC0FCE935C080FF | MSI file | MSIL/Janeleiro.A |
D71EB97FC1F5FE50D608518D2820CB96F2A3376F | #rowspan# | #rowspan# |
158DA5AB85BFAC471DC2B2EE66FD99AEF7432DBB | Main trojan | #rowspan# |
6BFAEFCC0930DA5A2BAEC19723C8C835A003D1EC | #rowspan# | #rowspan# |
URL de téléchargement
Ici, <NNNNNNNNNNN> représente un nombre aléatoire entre 10000000000 et 90000000000.
Télécharge uniquement Janeleiro
- https://recuperaglobaldanfeonline.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNNN>
- https://protocolo-faturamento-servico.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://acessoriapremierfantasiafaturas.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
Télécharge Janeleiro et d'autres chevaux de Troie bancaires Delphi
- https://portalrotulosfechamento.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://servicosemitidosglobalnfe.southcentralus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://emissaocomprovanteatrasado.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
Télécharge des chevaux de Troie bancaires Delphi
- https://emitidasfaturasfevereiro.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://dinamicoscontratosvencidos.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://arquivosemitidoscomsucesso.eastus.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://fatura-digital-arquiv-lo.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://nota-eletronica-servicos.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
- https://eletronicadanfe.brazilsouth.cloudapp.azure[.]com/nfedown.php?dw=<NNNNNNNNNN>
Serveurs C&C
Voici les adresses IP des serveurs C&C où Janeleiro se connecte pour faire des rapports, recevoir des commandes et envoyer des données :
- 52.204.58[.]11
- 35.174.60[.]172
Les URL de suivi où Janeleiro envoie des informations sur le système compromis pendant l'installation :
- http://tasoofile.us-east-1.elasticbeanstalk[.]com/count
- http://slkvemnemim.us-east-1.elasticbeanstalk[.]com/count
- http://checa-env.cf3tefmhmr.eu-north-1.elasticbeanstalk[.]com/cnt/
Les URL utilisées System.Logins.dll pour exfiltrer les données récoltées :
- http://comunicador.duckdns[.]org/catalista/emails/checkuser.php
- http://comunicador.duckdns[.]org/catalista/lixo/index.php
Adresses IP associées à ce domaine :
- 178.79.178[.]203
- 138.197.101[.]4
Techniques MITRE ATT&CK
Note : Ce tableau a été construit en utilisant la version 8 de MITRE ATT&CK.
Tactic | ID | Name | Description |
---|---|---|---|
Resource Development | T1584.004 | Compromise Infrastructure: Server | In some cases, malicious emails sent to targets contain links to a compromised server that redirects to the download of Janeleiro. |
Initial Access | T1566.002 | Phishing: Spearphishing Link | Attackers send malicious emails that have a download link for Janeleiro malware. |
Execution | T1204.001 | User Execution: Malicious Link | Phishing emails sent by the attackers contain a link to download a ZIP archive that holds an MSI installer with Janeleiro malware. |
Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Janeleiro achieves persistence by adding itself to the Run registry key (in v0.0.3 of the malware). |
T1547.009 | Boot or Logon Autostart Execution: Shortcut Modification | Janeleiro creates a LNK file for persistence (in v0.0.4, v0.0.2A and v0.0.2B of the malware). | |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Janeleiro v0.0.2B is obfuscated and its strings are RSA-encrypted. Version 0.0.3 uses AES for string encryption. |
Credential Access | T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | Janeleiro v0.0.4 can download a DLL that steals passwords from Chrome, Firefox and Opera browsers. |
T1552.001 | Unsecured Credentials: Credentials In Files | Janeleiro v0.0.4 can download a DLL that obtains passwords stored in files from several applications such as FileZilla, Pidgin and Thunderbird. | |
Discovery | T1087.003 | Account Discovery: Email Account | Janeleiro v0.0.4 can download a DLL that collects Gmail addresses. |
T1010 | Application Window Discovery | Janeleiro collects information about open windows so the attacker can decide to inject pop-ups. | |
T1082 | System Information Discovery | Janeleiro collects information from the victim’s machine, such as username, OS and architecture. | |
T1033 | System Owner/User Discovery | Janeleiro collects the username from the victim’s machine. | |
T1124 | System Time Discovery | Janeleiro collects current date and time when the victim is compromised. | |
Collection | T1115 | Clipboard Data | Janeleiro uses a clipboard event handler to access clipboard data. |
T1056.001 | Input Capture: Keylogging | Janeleiro can perform keylogging. | |
T1113 | Screen Capture | Janeleiro can capture screenshots of the victim’s desktop. | |
T1056.002 | Input Capture: GUI Input Capture | Janeleiro displays fake forms on top of banking sites to intercept credentials from victims. | |
Command and Control | T1095 | Non-Application Layer Protocol | Janeleiro uses TCP for C&C communications. |
T1102.001 | Web Service: Dead Drop Resolver | Janeleiro uses GitHub repositories to store C&C information. | |
Exfiltration | T1041 | Exfiltration Over C2 Channel | Janeleiro exfiltrates data over the same channel used for C&C. |
Appendix A: Overview of Janeleiro’s malware family
Here is each incarnation we have found of Janeleiro from 2019 until March 2021.
Version 0.0.4
- Period of activity: 2019 – Possibly still active.
- The first version of Janeleiro - that we know of - came in the form of an MSI installer and at least two variants:
- Variant 1: MSI installer loads a DLL called LoadDllMSI.dll internally
- Variant 2: MSI installer executes Console.exe, which checks privileges and loads an embedded DLL assembly called LoadSystem.dll.
Both LoadDllMSI.dll and LoadSystem.dll perform the same tasks:
- Create an installation folder
- Download and store two modules: Logins.Initial.dll and System.Modules.Initial.dll. The two modules are downloaded from a GitHub account that, at the time of writing, has been closed.
- Create several Shortcuts in strategic places
- Log the successful compromise of the system to a tracking website
System.Logins: It is a password stealer for Google Chrome, FileZilla, Mozilla Firefox, Opera, Pidgin, and Mozilla Thunderbird. Additionally, it harvests email information from Gmail. All the information is exfiltrated to two websites. Version 0.0.4 is the only one that is deployed with this malicious tool.
System.Modules: Janeleiro’s main trojan, implemented as a Windows Forms application compiled as DLL. This version had the capacity to dynamically create fake pop-up windows using several Forms for several banking entities, including banks operating in Mexico, but it is unknown if this version was distributed in Mexico at any point.
This version used two GitHub organization pages to download the IP addresses of its C&C servers: the names of the pages are generated by encrypting the current date with SLK as suffix as shown in Figure 14.
At the time of writing, we believe that the operators have abandoned this version of the malware. We couldn’t find any active GitHub pages by following the name generation algorithm used by Janeleiro.
Many commands for the trojan were left unimplemented, some were implemented and other discarded in newer versions used in 2020 and 2021.
Version 0.0.2A
- Period of activity: 2020 – Unknown.
- Internal Malware Version: 0.0.2
The MSI installer loads a DLL that borrows from LoadSystem installation and persistence procedures but unpacks the embedded main trojan DLL from its resources. The main trojan was implemented as a Windows Forms application compiled as DLL.
This version of Janeleiro only uses one Form to create the fake pop-up windows with more commands supported by the operator but with fewer targets: Mexican banking entities were discarded. All of the images used to cover the screen and trick the user are for Brazilian banks.
This version also appears to have been abandoned and cannot contact its C&C servers by retrieving the IP lists from a GitHub page. It uses the same algorithm as Version 0.0.4 with the same key vhpjzqqtpo, suggesting that the operators where using the same GitHub page as for Version 0.0.4. Figure 15 shows the code that attempts to retrieve the list from GitHub.
Version 0.0.2B
- Period of activity: 2021 – Still active.
- Internal Malware Version: 0.0.2
New characteristics of this version:
- Implemented as a Windows Presentation Foundation application
- Major restructuration of the code combining the loader code with the main trojan
- Geolocation of the compromised machine
- Implementation of clipboard hijacking to replace bitcoin addresses
- Expanded set of supported commands
- Strings encrypted/decrypted with the RSA algorithm
Figure 16 shows the implementation of clipboard hijacking by Janeleiro; when a bitcoin address is found, it randomly picks one from its own list of bitcoin addresses and replaces it.
In this version a simplified procedure was implemented to retrieve the addresses of its C&C servers from a GitHub organization page; the name scheme this time is a simple concatenation of SLK with the current date time without the slashes, as shown in Figure 17.
The code attempts to download the contents of a file in a secondary branch. The file contains, in plaintext, the list of the C&C IP addresses and ports. At the time of writing, the GitHub organization pages can be found using the procedure as they continue to operate with this recent version of Janeleiro.
Version 0.0.3
- Period of activity: Since March 2021 – Still active.
- Internal Malware Version: 0.0.3
New characteristics of this version:
- Implemented as a Windows Forms application
- A recombination of Version 0.0.2A and 0.0.2B code and technique implementations
- New persistence method using Windows Registry Run Key
- Expanded set of supported commands
- Uses AES algorithm to encrypt/decrypt its strings
This version uses the same procedure as Version 0.0.2B to get the C&C servers from the GitHub organization page, with the difference that it uses the main branch within the repository and the list is encrypted and encoded with base64 as shown in Figure 18.
This procedure is also used when decrypting the list of C&C servers, therefore there must exist a repository containing the file in the main branch, with the encrypted list intended for that day. Otherwise this version cannot contact the operators as decryption will fail.
Appendix B: Third-party tools used by Janeleiro
Janeleiro uses several third-party, open-source libraries for various purposes:
Tool | Description | Used by |
---|---|---|
Fody | Used to load every other third-party tool, or trojan component, such as LoadSystem in version 0.0.4. | All versions including System.Logins |
Mimekit, Mailkit, Xnet, BouncyCastle, uPREC | Used to collect emails and login information. | System.Logins |
SharpClipboard | Used for clipboard hijacking: when the user copies a bitcoin address, Janeleiro replaces it with one randomly chosen from a list of its own.
Interestingly, the Janeleiro developers don’t seem to have downloaded SharpClipboard’s source code to compile their own version: they obtained a compiled copy from another GitHub repository; we don’t believe that user is in any way related to the development of this threat. |
Version 0.0.2B Version 0.0.3 |
SharpVectors | Used to load SVG images contained in resources. These images are logos of several banks used by the fake pop-up windows. | Version 0.0.2B Version 0.0.3 |
Newtonsoft JSON | Used to parse the data returned by the geoPlugin web service. | Version 0.0.2B Version 0.0.3 |
EncryptDecryptUtils | Used to encrypt and decrypt its strings. Functions were modified to contain the key, so it’s not present in the trojan’s code. | Version 0.0.3 |