Seit 2019 beobachten ESET Forscher einen neuen Bankentrojaner in Brasilien, der sich gegen Unternehmensmitarbeiter verschiedener Branchen richtet. Dazu gehören Unternehmen aus dem Ingenieurwesen, dem Gesundheitswesen, dem Einzelhandel, der Finanzen sowie Regierungsorganisationen.
Diese neue Bedrohung, die wir Janeleiro genannt haben, versucht ihre Opfer mit Popup-Fenstern in die Irre zu führen, die den Websites einiger der größten Banken in Brasiliens nachempfunden sind. Die Popups enthalten Phishing-Formulare, mit denen die Opfer der Malware dazu gebracht werden sollen, ihre Bankdaten und persönlichen Informationen einzugeben. Die Malware erfasst und überträgt diese daraufhin auf ihre C&C-Server. Janeleiro folgt genau dem gleichen Implementierungsmuster wie einige der bekanntesten Malware-Familien, die auf die Region abzielen: Dazu gehören Casbaneiro, Grandoreiro, Mekotio, Amavaldo und Vadokrist.
Im Gegensatz zu diesen bekannten Malware-Familien wurde Janeleiro allerdings in Visual Basic .NET und nicht in der Programmiersprache Delphi geschrieben, die viele Bedrohungsakteure in der Region seit Jahren verwenden. Janeleiro ermöglicht den Hintermännern der Malware mehr Kontrolle bei der Manipulation und Anpassung ihrer gefälschten Popup-Fenster. Je nachdem, was sie benötigen, um die Angriffe durchzuführen, können sie Mausklicks und Tastenanschläge senden und Benutzereingaben sowie den Bildschirm in Echtzeit aufzeichnen. Dabei zeichnen sich diese Angriffe nicht durch ihre Automatisierung aus, sondern sind eher praxisorientiert: In vielen Fällen muss der Betreiber die Fenster über Befehle in Echtzeit anpassen.
Die Betreiber scheinen dabei auf GitHub zu setzen. Sie nutzen den Dienst, um ihre Module zu speichern, ihre Organisationsseite zu verwalten und jeden Tag neue Repositories hochzuladen. Darin befinden sich auch die Dateien mit den C&C-Server-Listen über die die Trojaner die Verbindung mit ihren Bedienern herstellen. Es ist interessant, dass die Malware von einer einzigen Quelle abhängig ist. Doch noch interessanter ist es, dass die neueste Version von Janeleiro nur einen Tag lebt.
Ziel: Brasilien
Auf Basis unserer Telemetriedaten können wir davon ausgehen, dass diese Malware es nur Unternehmensmitarbeiter abgesehen hat. Schädliche E-Mails werden nur an Unternehmen in Brasilien gesendet. Obwohl wir nicht glauben, dass es sich dabei um gezielte Angriffe handelt, scheinen diese Mails nur in kleinen Mengen gesendet zu werden. Laut unseren Daten sind die betroffenen Sektoren Ingenieurwesen, Gesundheitswesen, Einzelhandel, Fertigung, Finanzen, Transport und Regierung.
Ein Beispiel für eine Phishing-E-Mail ist in Abbildung 1 dargestellt: Es handelt sich um eine falsche Benachrichtigung bezüglich einer nicht bezahlten Rechnung. Sie enthält einen Link, der zu einem kompromittierten Server führt. Die abgerufene Seite leitet zu einem Download eines in Azure gehosteten ZIP-Archivs weiter. Weitere von den Angreifern gesendete E-Mail-Links werden nicht über kompromittierte Server geleitet, sondern führen direkt zum ZIP-Archiv.
Die Server, auf denen diese ZIP-Archive mit Janeleiro gehostet werden, verfügen über URLs, die den gleichen Konventionen entsprechen wie URLs, die wir bei der Bereitstellung anderer Banking-Trojaner-Familien gesehen haben (siehe Abschnitt Indicators of Compromise). In einigen Fällen haben diese URLs sowohl Janeleiro als auch andere, in Delphi geschriebene Banker, zu unterschiedlichen Zeiten verteilt. Dies deutet darauf hin, dass entweder verschiedene kriminelle Gruppen denselben Anbieter für den Spam-Versand und das Hosten ihrer Malware verwenden oder, dass sie dieselbe Gruppe sind. Wir haben noch nicht festgestellt, welche Hypothese richtig ist.
Eine Übersicht über den Angriff ist in Abbildung 2 dargestellt.
Das ZIP-Archiv enthält ein MSI-Installationsprogramm, das die Haupt-DLL des Trojaners lädt. Diese Technik wird von mehreren Malware-Familien in der Region bevorzugt. Janeleiro ruft die öffentliche IP-Adresse des Computers ab und versucht diese mithilfe eines Webdienstes zu lokalisieren. Wenn der zurückgegebene Ländercode nicht mit BR übereinstimmt, wird die Malware beendet. Wenn die Geolokalisierungsprüfung erfolgreich ist, sammelt Janeleiro Informationen über die gefährdete Maschine, einschließlich:
- Aktuelles Datum und Uhrzeit
- Computer- und Benutzername
- Name des Betriebssystems und die verwendete Architektur
- Malware-Version
- Region in Brasilien, in der sich das Opfer befindet
Die Informationen werden auf eine Website hochgeladen, über die erfolgreiche Angriffe verfolgt werden können. Danach ruft Janeleiro die IP-Adressen der C&C-Server von einer GitHub-Organisationsseite ab, die anscheinend von den Kriminellen erstellt wurde. Nach diesem Schritt ist das Schadprogramm zur Ausführung seiner Kernfunktionalitäten bereit und wartet auf Befehle von seinen Betreibern.
Im Jahr 2020 veröffentlichte ESET ein Whitepaper, in dem die Ergebnisse zur Interkonnektivität zwischen den bekanntesten lateinamerikanischen Banking-Trojaner-Familien, darunter Casbaneiro, Grandoreiro und Amavaldo, detailliert beschrieben wurden. Die Ähnlichkeiten betreffen die Implementierung des Trojaners: Zum einen, die Benachrichtigung des Betreibers, wenn ein aktives Fenster mit einem interessanten Namen oder Titel auf der Grundlage einer vordefinierten Schlüsselwortliste erkannt wird. Zum anderen, die Verwendung eines gefälschten Popup-Fensters, um potenziellen Opfern vorzuspielen, sie gäben vertrauliche Informationen auf einer legitimen Website ein. Dieser Vorgang wird durch das Flussdiagramm in Abbildung 3 veranschaulicht.
Janeleiro folgt dem genauen Implementierungsmuster wie elf weitere Malware-Familien, die auf Brasilien abzielen. Abbildung 4 zeigt einige der gefälschten Popup-Fenster, die von Janeleiro erstellt werden.
Janeleiro in Aktion
Janeleiro beginnt mit der Auflistung von Fenstern und der Überprüfung ihrer Namen, um interessante Schlüsselwörter zu finden (siehe Abbildung 5), die auf den Besuch des Benutzers auf der Website einer Bank hinweisen. Natürlich geht es dabei besonders um die Banken, die Janeleiros Fake Pop-Up-Fenster unterstützen.
Wenn eines der Schlüsselwörter gefunden wird, versucht Janeleiro sofort, die Adressen seiner C&C-Server von GitHub abzurufen und stellt eine Verbindung zu ihnen her. Die gefälschten Popup-Fenster, die im nächsten Schritt des Angriffs angezeigt werden, werden bei Bedarf dynamisch erstellt und vom Angreifer über Befehle an die Malware gesteuert. Sie durchlaufen mehrere Phasen, um den Benutzer auszutricksen. In dieser Zeit empfängt der Angreifer in Echtzeit Screenshots, die protokollierten Tastenanschläge und die Informationen, die in die gefälschten Formulare eingegeben werden.
Die Tatsache, dass Bedrohungsakteure GitHub missbrauchen, ist nicht neu. Janeleiro macht dies jedoch auf recht interessante Weise: Die Bediener haben eine GitHub-Organisationsseite erstellt, die sie jeden Tag in der Form SLK<dd/mm/yyyy> umbenennen, wobei <dd/mm/yyyy> das aktuelle Datum ist.
Ein Screenshot der GitHub-Organisationsseite vom 15. März 2021 ist in Abbildung 6 dargestellt.
Der Benutzeraccount novoescritorio1-alberto erstellt täglich ein neues Repository, dass diesem Namensformat folgt. Der Zweck des Repositorys besteht in der Bereitstellung einer Datei mit der Liste der C&C-Server-Adressen von Janeleiro, die die Malware für Rückmeldungen an die Betreiber, zum Empfang von Befehlen und zur Abschöpfung von Informationen in Echtzeit verwendet.Abbildung 7 zeigt einen Screenshot mit einem der Repositories auf der GitHub-Organisationsseite, der Betreiber von Janeleiro, einschließlich des Benutzerkontos, das die Commits ausführt.
Ein Screenshot des sekundären Zweigs im Repository ist in Abbildung 8 dargestellt.
Wir haben GitHub über diese Aktivität informiert, aber zum Zeitpunkt des Schreibens wurden weder Maßnahmen gegen die Organisationsseite noch gegen das Konto ergriffen, das das Repository mit neuen C&C-Serveradressen erstellt.
In der neuesten Version von Janeleiro, Version 0.0.3, haben die Entwickler eine interessante Verschlüsselungs-/Entschlüsselungsfunktion mit einer Open-Source-Bibliothek namens EncryptDecryptUtils eingeführt. Das neue Verfahren zur Entschlüsselung ist in Abbildung 9 dargestellt.
Um eine Zeichenfolge zu entschlüsseln, verschlüsselt Janeleiro die aus dem aktuellen Datum resultierende Zeichenfolge. Das Ergebnis wird dann als Passphrase und Salt-Wert verwendet, um einen neuen Schlüssel für die Entschlüsselung zu erstellen. Dies hat einen äußerst wichtigen Effekt: Die neueste Version von Janeleiro kann ihre Zeichenfolgen nur an einem bestimmten Tag entschlüsseln. Dies kann der gleiche Tag sein, an dem die Zeichenfolgen verschlüsselt wurden, oder ein Tag in der Zukunft An jedem anderen Tag schlägt die Entschlüsselung fehl.
Dies gilt auch für den Inhalt der SLK-Datei im Hauptzweig: die verschlüsselte und Base 64-codierte Liste der C&C-Server, wie in Abbildung 10 dargestellt.
Der Inhalt wird auf die gleiche Weise verschlüsselt: Wenn Janeleiro den Inhalt der Datei entschlüsselt, muss es an einem bestimmten Datum geschehen, damit es wie beabsichtigt funktioniert.
Entwicklung von Janeleiro
Janeleiro verfügt über einen internen Versionswert (wie in Abbildung 11 dargestellt), mit dem die Angreifer ermitteln können, welche Version ihrer Malware einen Computer erfolgreich kompromittiert hat. Bis März 2021 haben wir vier Versionen identifiziert, von denen zwei dieselbe interne Versionsnummer haben.
Während wir im Jahr 2021 die Versionen 0.0.2 und 0.0.3 gesehen haben, waren wir auf der Suche nach einem fehlenden Schlüsselstück in der Entwicklung von Janeleiro: Version 0.0.1, die Ende 2019 oder Anfang 2020 hätte existieren sollen Überraschenderweise fanden wir stattdessen Samples der Version 0.0.4 aus dem Jahr 2019. Diese neuen Samples wurden über eine DLL-Loader-Komponente in Verbindung mit einem Passwort-Stealer bereitgestellt, was bedeutet, dass die Gruppe hinter Janeleiro auch über andere Tools verfügt.
Eine Übersicht über Janeleiros Versionen von 2019 bis 2021 ist in Abbildung 12 dargestellt.
The inconsistency in the timeline and internal versioning of the malware suggests that it was under development as far back as 2018, and in 2020 they decided to switch to a previous version of their code and to improve that and refine its command processing for the operator to have better control of the trojan during the attack.
Die Inkonsistenz in der Zeitleiste und der internen Versionierung der Malware lässt darauf schließen, dass sie bereits 2018 entwickelt wurde. 2020 beschloss man dann auf eine frühere Version des Codes umzusteigen und diese zu verbessern sowie die Befehlsverarbeitung für den Bediener zu verfeinern, um während des Angriffs bessere Kontrolle über den Trojaner zu haben.
Traditionen und Traditionsbrüche
Obwohl Janeleiro dem gleichen Implementierungsmuster folgt, das andere Malware-Familien der Region verwenden, unterscheidet er sich in mehrfacher Hinsicht von diesen:
- Er ist in Visual Basic .NET geschrieben: Merkwürdigerweise ist es in Brasilien so, dass es hauptsächlich von in Delphi entwickelten Banking-Trojanern angegriffen wird. Dies ist die Programmiersprache der Wahl für mehrere Bedrohungsakteure, die offenbar zusammenarbeiten und Tools und Infrastruktur gemeinsam nutzen. Janeleiros Präferenz für VB.NET ist eine bemerkenswerte Abweichung von der für die Region üblichen Norm.
- Keine binäre Verschleierung: Während Janeleiro eine einfache Verschleierungstechnik nutzt, indem er zufällige Namen für seine Klassen, Module, Methodennamen, Parameter und Zeichenfolgenverschlüsselung generiert, werden keine Packer verwendet, um die Erkennung und Analyse zu erschweren. Andere Trojaner wie Grandoreiro, Mekotio, Ousaban, Vadokrist und Guildma verwenden häufig Themida und binäre Padding-Techniken.
- Keine benutzerdefinierten Verschlüsselungsalgorithmen: Die Entwickler von Janeleiro verlassen sich auf kryptografische Funktionen, die von .NET Framework bereitgestellt werden, sowie auf Open-Source-Projekte für die Verschlüsselung und Entschlüsselung von Zeichenfolgen, wobei AES- und RSA-Algorithmen bevorzugt werden. Trojaner wie Casbaneiro, Grandoreiro, Amavaldo, Mispadu und Guildma verwenden unter anderem benutzerdefinierte Verschlüsselungsalgorithmen, einschließlich Verschleierungstechniken unter Verwendung von Zeichenfolgentabellen.
- Einfache Ausführungsmethode: Das MSI-Installationsprogramm stellt keine anderen Komponenten als die Haupt-Trojaner-DLL bereit und führt keine anderen Anweisungen als das Laden und Ausführen eines der Exporte der DLL aus, die sich selbst im System installiert. Wir haben keine Beispiele für ein MSI-Installationsprogramm gefunden, das verschleierte Skripte ausführt, Support-Tools oder Komponenten für DLL-Side-Loading entpackt, was bei anderen Malware-Familien in der Region beliebt ist.
- Keine Verteidigung gegen Sicherheitssoftware: Einige der größten brasilianischen Banken verlangen, dass ihre Kunden ein Sicherheitsmodul installieren, bevor sie online auf ihre Bankkonten zugreifen können. Zum Beispiel dies Warsaw Betrugsbekämpfungssoftware. Es ist häufig der Fall, dass Banking-Trojaner aus LATAM versuchen, herauszufinden, ob eine solche Software auf dem gefährdeten Computer installiert ist, und sie den Angreifern melden. Einige Malware-Familien wie Grandoreiro und Guildma versuchen, sie in der Windows-Firewall zu deaktivieren oder den Treiber zu deaktivieren.
- Verwendet Code von NjRAT: Janeleiro ist weit davon entfernt, eine weitere Inkarnation des bekannten NjRAT zu sein, verwendet jedoch die SocketClient- und Remotedesktop-Erfassungsfunktionen von NjRAT sowie diverse andere Funktionen. NjRAT wird - zumindest von LATAM-Backtrojanern - nicht häufig verwendet, möglicherweise weil sie in Delphi programmierte Trojaner bevorzugen. Neben anderer Malware wurde NjRAT jedoch in Operation Spalax verwendet, einer Kampagne, die speziell auf Kolumbien abzielt
Befehle
Mit Parametern versehene Befehle werden vom C&C-Server in verschlüsselter Form empfangen. Dabei wird derselbe Algorithmus genutzt, der zum Verschlüsseln von Zeichenfolgen verwendet wird (siehe Anhang A). Ein typisches Befehlsformat lautet wie folgt: %CommandName%%PredefinedSeparatorKeyword%%Parameters%.
Nach der Entschlüsselung wird der Befehl in ein Array von Zeichenfolgen aufgeteilt. Jeder Teil des Befehls wird durch ein vordefiniertes Schlüsselwort getrennt, das in der Konfiguration der Malware fest codiert ist. Alle von uns analysierten Versionen verwenden | 'meio' |, das den Befehlsnamen und jeden Parameter trennt.
Abbildung 13 zeigt, wie Janeleiro den Namen des Befehls überprüft und die angeforderte Aktion ausführt.
Wenn Janeleiro Daten an den Operator zurücksendet, geschieht dies in einem ähnlichen Format:% CommandName %% PredefinedSeparatorKeyword %% Encoded data%.
Die meisten Befehle von Janeleiro dienen zur Steuerung von Fenstern, Maus und Tastatur sowie der gefälschten Popup-Fenster. Mit der Weiterentwicklung von Version 0.0.2A auf 0.0.3 wurden weitere Befehle hinzugefügt, die dem Bediener eine verfeinerte Steuerung boten:
- Befehle zum Steuern eines bestimmten Fensters
- Auflisten und Senden von Informationen zu Fenstern (Titel, Klasse, Handle)
- Anpassung spezifischer Fenstergrößen, Minimierung und Maximierung
- Abmessungen des Bildschirms
- Beendigung aller Chrome.exe-Prozesse und Neustart von Chrome.exe mit den Argumenten --disable-gpu
- Erfassung des Bildschirms in Echtzeit
- Keylogging in Echtzeit
- Senden von Tastenanschlägen und Mausklicks
- Anzeigen oder Schließen eines bestimmten gefälschten Popup-Fensters
- Verschiedene Befehle wie: Datum und Uhrzeit senden, Socket trennen, eigenen Prozess beenden
Fazit
Der experimentelle Charakter von Janeleiro, der zwischen verschiedenen Versionen hin und her wechselt, deutet auf einen Akteur hin, der immer noch nach dem richtigen Weg sucht, aber nicht weniger erfahren ist als die Konkurrenz: Janeleiro folgt dem einzigartigen Implementierungsmuster vieler LATAM-Banking-Trojaner für gefälschte Popup-Fenster. Dies scheint kein Zufall oder bloße Inspiration zu sein: Dieser Bedrohungsakteur verwendet und verteilt Janeleiro über dieselbe Infrastruktur, die auch einige der bekanntesten Malware-Familien in der Region nutzen. Wir werden die Aktivitäten dieses Bedrohungsakteurs weiter beobachten. Die Zeit wird zeigen, welche neuen Entwicklungen sie in Zukunft machen werden.
Für Anfragen oder Sample-Einreichungen zum Thema wenden Sie sich bitte an threatintel@eset.com.
Besonderer Dank geht an Jonathan Camargo Zacarias von der Itaú Bank für seine Hilfe bei den Nachforschungen.
Indicators of Compromise (IoCs)
A comprehensive list of Indicators of Compromise (IoCs) and samples can be found in our GitHub repository.
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# |
Download URLs
In the following <NNNNNNNNNNN> is a random number between 10000000000 and 90000000000.
Downloading only 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>
Downloading Janeleiro and other Delphi banking trojans
- 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>
Downloading Delphi bankers
- 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>
C&C servers
These are the IP addresses of the C&C servers where Janeleiro connects to report, receive commands and send data:
- 52.204.58[.]11
- 35.174.60[.]172
These are the tracking URLs where Janeleiro sends information about the compromised system during 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/
These are the URLs used by System.Logins.dll to exfiltrate the harvested data:
- http://comunicador.duckdns[.]org/catalista/emails/checkuser.php
- http://comunicador.duckdns[.]org/catalista/lixo/index.php
IPs associated with the domain:
- 178.79.178[.]203
- 138.197.101[.]4
MITRE ATT&CK techniques
Note: This table was built using version 8 of the MITRE ATT&CK framework.
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 |