In diesem Artikel stellen wir Mekotio vor, einen lateinamerikanischen Banking-Trojaner, der hauptsächlich in den Ländern Brasilien, Chile, Mexiko, Spanien, Peru und Portugal sein Unwesen treibt. Das bemerkenswerteste Merkmal der neuesten Varianten dieser Malware-Familie ist die Verwendung einer SQL-Datenbank als C&C-Server.

Abbildung 1. Von Mekotio betroffene Länder

Wie bei vielen anderen lateinamerikanischen Banking-Trojanern, die wir bereits hier beschrieben haben, hat Mekotio eine eher chaotische Entwicklung genommen, da seine Funktionen sehr häufig geändert wurden. Aufgrund der internen Versionierung glauben wir, dass mehrere Varianten der Malware gleichzeitig entwickelt werden. Ähnlich wie bei Casbaneiro ist es jedoch praktisch unmöglich, diese Varianten auseinander zu halten. Deshalb bezeichnen wir sie alle als Mekotio.

Charakteristische Eigenschaften

Mekotio ist ein typischer lateinamerikanischer Banking-Trojaner, der seit mindestens 2015 aktiv ist. Das heißt er versucht seine Opfer über gefälschte Popup-Fenster zur Preisgabe von vertraulichen Informationen zu verleiten. Diese Fenster sind sorgfältig gestaltet, um den Eindruck zu erwecken, dass sie von lateinamerikanischen Banken und anderen Finanzinstituten stammen.

Mekotio sammelt diese Informationen über seine Opfer:

  • Firewall-Konfiguration
  • Hat das Opfer Administratorrechte auf dem Rechner?
  • Version des installierten Windows-Betriebssystems
  • Sind Betrugsbekämpfungsprodukte (GAS Tecnologia Warsaw und IBM Trusteer) installiert?
  • Liste der installierten Antimalwarelösungen

Mekotio stellt seine Persistenz entweder mithilfe eines Ausführungsschlüssels oder durch das Erstellen einer LNK-Datei im Startordner sicher.

Wie bei den meisten lateinamerikanischen Banking-Trojanern üblich, verfügt Mekotio über mehrere typische Backdoor-Funktionen. Er kann Screenshots machen, Fenster bearbeiten, Maus- und Tastaturaktionen simulieren, den Computer neu starten, den Zugriff auf verschiedene Bankwebsites einschränken und sich selbst aktualisieren. Einige Varianten können auch Bitcoins stehlen, indem sie eine Bitcoin-Brieftasche in der Zwischenablage ersetzen und die im Google Chrome-Browser gespeicherten Anmeldeinformationen herausfiltern. Interessanterweise existiert auch ein Befehl, der den Computer des Opfers unbrauchbar machen soll, indem alle Dateien und Ordner unterhalb von C:\Windows gelöscht werden.

Eine Möglichkeit zur Identifikation von Mekotio, ist eine bestimmte Meldung, die der Trojaner mehrmals anzeigt (siehe Abbildung 2).

Abbildung 2. Meldung, die alle Mekotio-Varianten nutzen
(Übersetzung: „Wir führen derzeit Sicherheitsupdates auf der Website durch! Bitte versuchen Sie es später noch einmal! Neue Sicherheitsmaßnahmen werden eingeführt: (1) neues Sicherheits-Plugin und (2) neues visuelles Erscheinungsbild. Ihr System wird neu gestartet, um den Vorgang abzuschließen.”)

Um das Stehlen von Passwörtern per Keylogging zu vereinfachen, deaktiviert Mekotio "AutoVervollständigen"-Option im Internet Explorer. Durch diese Funktion sparen Nutzer des Internet Explorers Zeit, beim Ausfüllen von Formularfeldern, indem schon gespeicherte Angaben herangezogen werden. Mekotio schaltet dies aus, indem er die folgenden Windows-Registry-Werte ändert:

  • HKCU\Software\Microsoft\windows\CurrentVersion\Explorer\AutoComplete\
    • AutoSuggest = “No”
  • HKCU\Software\Microsoft\Internet Explorer\Main\
    • Use FormSuggest = “No”
    • FormSuggest Passwords = “No”
    • FormSuggest PW Ask = “No”

Eine tiefergehende Analyse einer chilenischen Variante von Mekotio finden Sie in diesem kürzlich veröffentlichten WLS-Artikel (auf Spanisch).

Distributionsmethode

Wir glauben, dass Spam die Hauptverteilungsmethode für Mekotio ist (Beispiel siehe Abbildung 3). Seit 2018 konnten wir 38 verschiedene Vertriebsketten beobachten, mit der diese Malware-Familie verbreitet wird. Die meisten Ketten bestehen aus mehreren Phasen und enden mit dem Download eines ZIP-Archivs, was für lateinamerikanische Banking-Trojaner typisch ist. In den folgenden Abschnitten werden die beiden am häufigsten verwendeten Ketten analysiert.

Abbildung 3. Beispiel einer Spam-E-Mail, mit der Mekotio verteilt wird (Übersetzung: „Sehr geehrter Bürger, Ihre angeforderte Quittung:… Quittung herunterladen“)

 

Methode 1: Kontext übergeben

Die erste Kette besteht aus vier aufeinander folgenden Schritten, wie in Abbildung 4 dargestellt. Ein einfacher BAT-Dropper dropt einen VBScript-Downloader und führt ihn mit zwei Befehlszeilenparametern aus: einem benutzerdefinierten HTTP-Verb („111SA“) und einer URL zum Herunterladen der nächsten Stufe. Der Downloader lädt die nächste Stufe (einen weiteren Downloader) von der angegebenen URL herunter, wobei er einen individuellen User-Agent-Wert ("MyCustomUser" und seine Variationen) verwendet. Im dritten Schritt wird ein PowerShell-Skript heruntergeladen, wobei die Download-URL für Mekotio im Skript korrigiert wird, bevor es ausgeführt wird. Das PowerShell-Skript lädt dann Mekotio von der korrigierten URL herunter, installiert ihn und führt ihn aus (den Ausführungsprozess beschreiben wir später noch ausführlich).

 

 

Abbildung 4. Eine von Mekotio verwendete Distributionsmethode, bei der Kontext zwischen den Phasen weitergegeben wird.

Zwei Dinge sind an dieser Kette interessant. Das Erste ist die Verwendung von individuellen Werten sowohl für den User-Agent-Header als auch für das HTTP-Verb. Diese können dazu verwendet werden, um einige Netzwerkaktivitäten von Mekotio zu identifizieren.

Der zweite interessante Aspekt ist die Übergabe von Kontext (entweder als Befehlszeilenargumente oder durch Ändern des Hauptteils der nächsten Stufe). Dies ist eine einfache, aber effektive Anti-Analyse-Technik. Wenn Sie Downloader 1 ohne den passenden Dropper haben, dann verfügen Sie weder über die URL noch über das benutzerdefinierte HTTP-Verb, welche zum Abrufen der nächsten Stufe der Malware erforderlich ist. Ebenso ist es nutzlos, Downloader 3 ohne Downloader 2 zu haben, da die URL fehlt. Dieser Ansatz erschwert die Analyse, wenn der Kontext unbekannt ist.

Methode 2: MSI mit eingebettetem JavaScript

Wie viele andere lateinamerikanische Banking-Trojaner nutzt Mekotio in einigen der neuesten Vertriebsketten MSI. In diesem Fall ist die Kette viel kürzer und weniger robust, da nur ein einziges JavaScript, das als letzte Stufe dient, in die MSI eingebettet und ausgeführt wird.

Im Vergleich zur PowerShell-Endphase der vorherigen Kette gibt es einige sichtbare Ähnlichkeiten. Die wichtigste ist die Installationsroutine, die nach dem Herunterladen und Extrahieren des ZIP-Archivs aufgerufen wird und den Inhalt des extrahierten ZIP-Archivs entsprechend der Dateigröße umbenennt (siehe Abbildung 5). Dies hängt eng mit der im nächsten Abschnitt beschriebenen Ausführungsmethode zusammen.

 

Abbildung 5. Vergleich der Installationsroutine in den von Mekotio verwendeten JavaScript- und PowerShell-Skripten, wobei die Ähnlichkeit bei der Entscheidung über die Dateigröße hervorgehoben wird

Ausführung durch Missbrauch des AutoIt-Interpreters

Mekotio wird am häufigsten dadurch ausgeführt, dass der legitime AutoIt-Interpreter missbraucht wird. In diesem Szenario enthält das ZIP-Archiv (neben dem Mekotio-Banking-Trojaner) einen legitimen AutoIt-Interpreter und ein kleines AutoIt-Loader- oder Injector-Skript. In der letzten Phase der Verteilungskette wird der AutoIt-Interpreter ausgeführt und das Loader- oder Injector-Skript zur Interpretation an ihn übergeben. Dieses Skript führt dann den Banking-Trojaner aus. Abbildung 6 zeigt den gesamten Prozess.

 

Abbildung 6. Die häufigste Ausführungsmethode von Mekotio

Mekotio ist nicht der einzige lateinamerikanische Banking-Trojaner, der diese Methode einsetzt, aber sie wird bevorzugter eingesetzt als bei den Konkurrenten.

Kryptographie

Der Algorithmus zum Verschlüsseln von Zeichenfolgen in Mekotios Binärdateien ist im Wesentlichen der gleiche, den Casbaneiro verwendet. Viele Varianten von Mekotio ändern jedoch die Verarbeitung der Daten, bevor sie entschlüsselt werden. Die ersten paar Bytes des fest codierten Entschlüsselungsschlüssels werden möglicherweise ignoriert, ebenso wie einige Bytes der verschlüsselten Zeichenfolge. Einige Varianten codieren verschlüsselte Zeichenfolgen weiter mit base64. Die Einzelheiten dieser Methoden variieren.

C&C Server Kommunikation

SQL-Datenbank als C&C-Server

Einige Varianten von Mekotio basieren ihr Netzwerkprotokoll auf Delphi_Remote_Access_PC, ebenso wie Casbaneiro. Ist dies nicht der Fall, verwendet Mekotio eine SQL-Datenbank als eine Art C&C-Server. Diese Technik ist in Bezug auf lateinamerikanische Banking-Trojaner nicht ungewöhnlich. Anstelle eines SELECT-Befehls scheint sich Mekotio auf die Ausführung von SQL-Prozeduren zu verlassen. Auf diese Weise ist nicht sofort klar, wie die zugrunde liegende Datenbank aussieht. Die Anmeldezeichenfolge ist jedoch weiterhin in der Binärdatei fest codiert.

Generierung von C&C-Serveradressen

Wir haben drei verschiedene Algorithmen beobachtet, wie Mekotio die Adresse seines C&C-Servers erhält. Wir beschreiben sie unten in der chronologischen Reihenfolge, in der wir ihnen begegnet sind.

Basierend auf fest codierten Listen von "gefälschten Domains"

Die erste Methode basiert auf zwei fest codierten Domänenlisten - eine zum Generieren der C&C-Domäne und eine für den Port. Eine zufällige Domain wird aus beiden Listen ausgewählt und aufgelöst. Die IP-Adresse wird weiter geändert. Beim Generieren der C&C-Domäne wird eine fest codierte Zahl vom letzten Oktett der aufgelösten IP-Adresse abgezogen. Beim Generieren des C&C-Ports werden die Oktette zusammengefügt und wie eine Zahl behandelt. Aus Gründen der Übersichtlichkeit haben wir beide Algorithmen in Python implementiert (siehe Abbildung 7). Beachten Sie, dass dieser Ansatz dem von Casbaneiro (in der Hyperlink-Analyse als Methode 5 gekennzeichnet) überraschend ähnlich ist.

def generate_domain(base_domains, num):
	domain = to_ip(random.choice(base_domains))
	octets = domain.split(".")
	octets[3] = chr(int(octets[3]) - num)
	return octets.join(".")

def generate_port(base_domains):
	domain = to_ip(random.choice(base_domains))
	return int(domain.split(".").join(""))

Abbildung 7. Code zum Generieren von C & C-Domänen und -Ports aus fest codierten Domänenlisten

Basierend auf der aktuellen Stunde

Der zweite Ansatz verwendet eine DGA basierend auf der aktuellen Ortszeit (daher beeinflusst die Zeitzone des Opfers das Ergebnis). Der Algorithmus verwendet den aktuellen Wochentag, den Tag des Monats und die Stunde und generiert daraus eine einzelne Zeichenfolge. Anschließend wird die MD5 dieser Zeichenfolge berechnet, die als hexadezimale Zeichenfolge dargestellt wird. Das Ergebnis bildet zusammen mit einem fest codierten Suffix die C & C-Serverdomäne (ihr Port ist in der Binärdatei fest codiert). Abbildung 8 zeigt unsere Python-Implementierung dieses Algorithmus.

day_names = {
	0: "MON",
	1: "TUE",
	2: "WED",
	3: "THU",
	4: "FRI",
	5: "SAT",
	6: "SUN",
}

hour_names = {
	7: "AM02",
	8: "AM03",
	9: "AM04",
	10: "AM05",
	11: "AM06",
	12: "PM01",
	13: "PM02",
	14: "PM03",
	15: "PM04",
	16: "PM05",
	17: "PM06"
}

def get_hour_name(hour):
	if hour <= 6 or hour >= 18:
		return "AM01"
	else
		return hour_names[hour]

def generate_domain(suffix):
	time = get_current_time()
	dga_data = "%s%02d%s" % (day_names[time.dayOfWeek], time.day, hour_names[time.hour])
	dga_data = hexlify(md5(dga_data))
	return dga_data.lower() + suffix

Abbildung 8. Code zum Generieren der C & C-Domäne basierend auf der aktuellen Stunde

Basierend auf dem aktuellen Tag

Der dritte Algorithmus ist dem zweiten etwas ähnlich. Er unterscheidet sich im Format der aus der Ortszeit erstellten Zeichenfolge und in der Tatsache, dass jeden Tag ein anderes Suffix verwendet wird. Darüber hinaus wird der C&C-Port auf ähnliche Weise generiert. Die Python-Neuimplementierung des Codes ist erneut in Abbildung 9 dargestellt.

def generate_domain(domains_list, subdomain):
	time = get_current_time()
	dga_data = "%02d%02d%s" % (time.day, time.month, subdomain)
	dga_data = hexlify(md5(dga_data))
	return dga_data[:20] + "." + domains_list[time.day - 1]

def generate_port(portstring):
	time = get_current_time()
	return int("%d%02d%d" % (time.day, time.dayOfWeek, time.month))

Abbildung 9. Code zum Generieren der C&C-Domäne und des Ports basierend auf dem aktuellen Tag

Mehrere gleichzeitige Varianten?

Wir haben bereits erwähnt, dass Mekotio ähnlich wie andere lateinamerikanische Banking-Trojaner einem eher chaotischen Entwicklungszyklus folgt. Daneben gibt es jedoch Indikatoren dafür, dass mehrere Varianten von Mekotio gleichzeitig entwickelt werden.

Die beiden Hauptindikatoren sind die interne Versionierung und das Format der Zeichenfolge, die zum Exfiltrieren der Informationen über die Maschine des Opfers, von Mekotio verwendet wird. Wir haben vier verschiedene Versionsschemata identifiziert:

  1. Nummerierung (001, 002, 072, 39A,…)
  2. Version nach Datum (01-07, 15-06, 17-10, 20-09,…)
  3. Version bis zum vollen Datum (02_03_20, 13_03_20, 26_05_20,…)
  4. Nummerierung und Datum kombiniert (103-30-09, 279-07-05, 293-25-05,…)

Jedes dieser Schemata ist einem bestimmten Format der exfiltrierten Datenzeichenfolge zugeordnet. Da wir mehrere dieser Schemata gleichzeitig sehen, glauben wir, dass es möglicherweise mehrere Malware-Akteure gibt, die verschiedene Varianten von Mekotio verwenden.

Fazit

In diesem Blog-Beitrag haben wir Mekotio analysiert, einen lateinamerikanischen Banking-Trojaner, der seit mindestens 2015 aktiv ist. Wie bei den anderen in dieser Serie beschriebenen Banking-Trojanern weist Mekotio gemeinsame Merkmale für diese Art von Malware auf, z.B., dass er in Delphi geschrieben ist, gefälschte Popup-Fenster verwendet und mit Backdoor-Funktionen speziell für spanisch- und portugiesisch-sprachige Länder versehen ist.

Wir haben uns auf die interessantesten Funktionen dieses Banking-Trojaners konzentriert, wie seine primäre Ausführungsmethode durch Missbrauch des legitimen AutoIt-Interpreters, die Verwendung einer SQL-Datenbank als C&C-Server oder die verschiedenen Methoden, mit denen Mekotio die Adresse seines C&C-Servers generiert.

Wir haben auch einige Funktionen erwähnt, die Casbaneiro überraschend ähnlich sind.

 

Bei Fragen kontaktieren Sie uns unter bedrohlichintel@eset.com. Kompromittierungsindikatoren finden Sie auch in unserem GitHub-Repository.

Indicators of Compromise (IoCs)

Hashes

Mekotio samples

SHA-1 Description ESET detection name
AEA1FD2062CD6E1C0430CA36967D359F922A2EC3 Mekotio banking trojan (SQL variant) Win32/Spy.Mekotio.CQ
8CBD4BE36646E98C9D8C18DA954942620E515F32 Mekotio banking trojan Win32/Spy.Mekotio.O
297C2EDE67AE6F4C27858DCB0E84C495A57A7677 Mekotio banking trojan Win32/Spy.Mekotio.DD
511C7CFC2B942ED9FD7F99E309A81CEBD1228B50 Mekotio banking trojan Win32/Spy.Mekotio.T
47C3C058B651A04CA7C0FF54F883A05E2A3D0B90 Mekotio banking trojan Win32/Spy.Mekotio.CD

Legitimate AutoIt interpreter being abused

SHA-1 Description ESET detection name
ACC07666F4C1D4461D3E1C263CF6A194A8DD1544 AutoIt v3 Script interpreter clean

Network communication

  • User-Agent: “MyCustomUser”, “4M5yC6u4stom5U8se3r” (and other variations)
  • HTTP verb: “111SA”

Bitcoin wallets

  • 1PkVmYNiT6mobnDgq8M6YLXWqFraW2jdAk
  • 159cFxcSSpup2D4NSZiuBXgsGfgxWCHppv
  • 1H35EiMsXDeDJif2fTC98i81n4JBVFfru6

MITRE ATT&CK techniques

Note: This table was built using version 7 of the MITRE ATT&CK framework.

Tactic ID Name Description
Initial Access T1566.002 Phishing: Spearphishing Link Mekotio distribution chains start with a malicious link in an email.
Execution T1059 Command and Scripting Interpreter Mekotio is most commonly executed by abusing the legitimate AutoIt interpreter.
T1059.001 Command and Scripting Interpreter: PowerShell Mekotio uses PowerShell to execute its distribution chain stages.
T1059.005 Command and Scripting Interpreter: Visual Basic Mekotio uses VBScript to execute its distribution chain stages.
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder Mekotio ensures persistence by using a Run key or creating a LNK file in the startup folder.
Defense Evasion T1218 Signed Binary Proxy Execution Mekotio is executed by running a legitimate AutoIt interpreter and passing a loader script for it to interpret.
Credential Access T1555.003 Credentials from Password Stores: Credentials from Web Browsers Mekotio steals credentials from the Google Chrome browser.
Discovery T1010 Application Window Discovery Mekotio discovers various security tools and banking applications based on window names.
T1083 File and Directory Discovery Mekotio discovers banking protection software based on file system paths.
T1518.001 Software Discovery: Security Software Discovery Mekotio detects the presence of banking protection products.
T1082 System Information Discovery Mekotio collects information about the victim's machine, such as firewall status and Windows version.
Collection T1056.001 Input Capture: Keylogging Mekotio is capable of capturing keystrokes.
Command and Control T1568.002 Dynamic Resolution: Domain Generation Algorithms Mekotio generates its C&C domain using a DGA.
T1568.003 Dynamic Resolution: DNS Calculation Mekotio uses an algorithm to modify the resolved IP address to obtain the actual C&C address.
T1095 Non-Application Layer Protocol Mekotio’s network protocol in variants not using SQL is based on Remote_Delphi_Access_PC.
Exfiltration T1041 Exfiltration Over C2 Channel Mekotio sends the data it retrieves to its C&C server.

[1] Anti-fraud solutions used very frequently in Latin America.
[2] Common HTTP verbs are GET and POST.