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.
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).
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.
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).
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.
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.
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:
- Nummerierung (001, 002, 072, 39A,…)
- Version nach Datum (01-07, 15-06, 17-10, 20-09,…)
- Version bis zum vollen Datum (02_03_20, 13_03_20, 26_05_20,…)
- 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.