Im Zuge unserer jüngsten Untersuchung bei Seqrite In unseren Laboren haben wir eine hochentwickelte Variante der Masslogger-Anmeldeinformationsdiebstahl-Malware identifiziert, die sich über .VBE-Dateien (VBScript-kodiert) verbreitet. Zunächst schien es sich um eine typische skriptbasierte Bedrohung zu handeln, doch eine genauere Analyse ergab, dass es sich um eine mehrstufige, dateilose Malware handelt, die stark auf die Windows-Registrierung angewiesen ist, um ihre schädliche Nutzlast zu speichern und auszuführen.
In diesem Blogbeitrag haben wir den internen Ablauf des VBScript-Codes, den verwendeten Verschleierungsmechanismus und dessen Manipulation analysiert, um dateifrei zu bleiben. Außerdem haben wir die Stager und die Funktionen der finalen Masslogger-Nutzlast erläutert.
Ursprünglicher Infektionsvektor:
Die Infektion beginnt mit einer VBE-Datei, die wahrscheinlich per Spam-E-Mail oder Drive-by-Download verbreitet wird. Die VBE-Datei ist ein VBScript, das mit dem integrierten Verschlüsselungsschema von Microsoft kodiert ist, um eine flüchtige Überprüfung zu erkennen. Nach der Dekodierung enthüllt das Skript mehrere Verschleierungsebenen, modulare Routinen und die tatsächliche Funktionalität.
Analyse der dekodierten .VBS – [VBScript]-Datei:
Zunächst bereitet die VBS-Datei mehrere Registrierungswerte unter einem bestimmten, von der Malware verwendeten Schlüssel vor und schreibt sie. Sie richtet die Ausführungsumgebung für die Speicherung einer dateilosen Nutzlast ein.
Registrierungsschlüssel und -wertnamen sind fest codiert und unkompliziert. Einige der kritischen Wertdaten bleiben jedoch codiert und werden während der Dateiausführung decodiert.
-Registrierungs-Setup für Befehle und Stager-Konfiguration:
Die Subroutine AKAAU() dient der Vorbereitung von Schlüsseln und Werten vor dem Schreiben in die Registrierung. Wertnamen und Wertdaten werden in separaten Arrays – „QORXG“ bzw. „ZBZLV“ – gespeichert. Beide Arrays werden mit „RegWrite“ in die Registrierung geschrieben.

Sobald das System infiziert ist, können wir diese schädlichen Registrierungseinträge im Registrierungseditor finden:

Hier ist die Zusammenfassung der Registrierungseinträge, die im Registrierungspfad „HKCU\Software\“ in das System geschrieben wurden:
| Wertname | Value Data | Zusammenfassung |
| cn | Stop-Process -Name conhost -Force | Beenden Sie den Prozess conhost.exe zwangsweise. |
| i | „AddInProcess32.exe“ | Zielprozess für die Code-Injektion. |
| in | "0" | Kontrollflag, das prüft, ob der PowerShell-Befehl bereits ausgeführt wurde oder nicht. |
| sofortig | LPICU | Verschleierte PowerShell-Befehle. Deobfuskieren und Stager-1 in den Speicher laden. |
| Path | esBbIgyFlZcXjUl | Name des Registrierungsschlüsselpfads. Er wird an „HKCU\Software\“ angehängt. |
| r | WAJLA | .Net-Assembly, gespeichert im umgekehrten String-Format. Stager-2. |
| s | RKFYI(DGSLP) | Hex-dekodierte Zeichenfolge. .Net-Assembly im umgekehrten Base64-Format gespeichert. Stager-1. |
| v | HIKGO() | Verschleierte Befehle für PowerShell. Entschleiert und lädt Stager-1 in den Speicher. Wird speziell zur Simulation von Benutzereingaben verwendet. |
Tabelle 1: Zusammenfassung der hinzugefügten Registrierungseinträge
Vor dem Schreiben dieser Register ruft die Malware eine Subroutine „ZGYHW()“ auf, die prüft, ob die Datei „C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” ist am Standort vorhanden.
Je nach Vorhandensein setzt Malware unterschiedliche Versionen von Stagern ein. In diesem Szenario ist Stager-2 folgendes:

– Registrierungs-Setup für die endgültige Payload-Bereitstellung:
Nachdem die oben genannten Registrierungen konfiguriert und geschrieben wurden, wird eine weitere Subroutine „XSSAY()“ aufgerufen. Diese Funktion ist für das Lesen weiterer größerer Zeichenfolgendaten verantwortlich (die tatsächliche Masslogger-Nutzlast, die verschlüsselt bleibt). Diese Daten werden dann in 25,000 Zeichen große Blöcke aufgeteilt und segmentiert in weitere Registrierungswerte geschrieben.

Jeder Block wird unter diesen Pfaden in die Registrierung geschrieben:
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*

-Aufgabenplaner:
Malware wird über eine geplante Windows-Aufgabe dauerhaft im System ausgeführt. Der Auslöser für die Aufgabe startet am Tag der Infektion (20xx-xx–xxT00:00:00) und wiederholt sich jede Minute (PT1M). Die Ausführung der Aufgabe erfolgt unter Berücksichtigung der Akkubeschränkungen.

Die Aufgabe verwendet den gleichen Namen wie ein erstellter Registrierungsschlüssel, d. h. esBbIgyFlZcXjUl und wird ausgelöst, um eine VBS-Datei auszuführen. Diese VBS fungiert als dauerhafte Ausführungsschleife, die nach erstellten Registern sucht, die angeben, ob eine Nutzlast ausgeführt werden soll.
-Taskplaner-Skript – Kann Benutzereingaben simulieren:
Wie wir im Bild unten sehen können:
- Es wird etwa 10000 Mal ausgeführt und schläft zwischen den Zyklen 10 Sekunden lang.
- Es liest den Registrierungswert „i“, um den Namen des Prozesses zu erhalten und zu bestätigen, ob er ausgeführt wird oder nicht.
- Anschließend wird geprüft, ob der Registrierungswert „in“ auf 1 gesetzt ist.
- Wenn ja, führt es stillschweigend den in der Registrierung gespeicherten bösartigen Befehl „instant“ aus.
- Wenn der Wert in „in“ nicht auf 1 gesetzt ist.
- Es startet PowerShell im sichtbaren Fenstermodus und verwendet „.SendKeys“-Methoden, um Werte der Register „v“ und „cn“ einzugeben, gefolgt von „{ENTER}“.
- Diese Technik ist wie die Simulation von Benutzereingaben in PowerShell.

Wie wir in der Übersichtstabelle gesehen haben,
„cn“-Registrierung wird verwendet, um die laufende Instanz des Prozesses conhost.exe zwangsweise zu stoppen.
„instant“ und „v“ Register werden als PowerShell verwendet, um Stager .Net-Assemblys zu deobfuskieren, vorzubereiten und im Speicher zu laden, ohne die Festplatte zu berühren.
Überprüfen Sie den Systemschutzstatus:
Malware überprüft den Schutzstatus des Zielsystems und bleibt während der Ausführung möglicherweise unentdeckt. Dies geschieht durch Abfragen wichtiger Registrierungsdatenbanken. Nachfolgend sind einige der Registrierungsdatenbanken aufgeführt, in denen AV-/Sicherheitsprodukte üblicherweise ihre Präsenz registrieren:
- „HKLM\SOFTWARE\Microsoft\Security Center\Provider\Av“,
- „HKLM\SOFTWARE\Microsoft\Security Center\Monitoring“,
- „HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Security and Maintenance\Providers“,
- „HKLM\SOFTWARE\Microsoft\Windows Defender\Security Center\Providers“
Diese Register sind im Skript verschlüsselt definiert. Die Malware versucht, die Unterschlüssel der oben genannten Schlüssel zu durchsuchen und den Wert „DisplayName“ zu lesen. DisplayName enthält den Namen des installierten AV-/Sicherheitstools. Werden mehrere Sicherheitsprodukte auf dem Zielsystem gefunden, stoppt die Malware ihre Ausführung.

-Trigger für Stager:
Die Subroutine SQSKP() in der VBE-Datei ist ein kritischer Teil der Malware-Ausführungskette. Sie erstellt und führt dynamisch einen PowerShell-Befehl aus, der die In-Memory-Ausführung eines aus der Windows-Registrierung abgerufenen .NET-Stages durchführt.

Hier ist der dekodierte Text ein entschleierter PowerShell-Befehl, nachdem |path| durch RVOYN ersetzt wurde.

Wie wir in Abb. 10 sehen können –
- Dieser PowerShell-Befehl wird gebildet und der Variable „LPICU“ zugewiesen.
- Der Inhalt der Variablen wird dann in den Registrierungswert „\instant“ geschrieben, der im Registrierungsschlüssel „Computer\HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl“ erstellt wird.
- Die Funktion führt den erstellten PowerShell-Befehl im Hintergrund aus, wobei „0“ das PowerShell-Fenster ausblendet.
- Die PowerShell liest dann den Registrierungsschlüssel „HKCU\Software\esBbIgyFlZcXjUl\s“ – Dieser Registrierungsschlüssel enthält den Stager-1, der im bewährten Base64-codierten Format gespeichert ist.

Wir haben gesehen, dass Malware-Autoren diese Verschlüsselungskombination in vielen der neueren Programme zum Stehlen von Anmeldeinformationen implementiert haben, darunter VIPKeylogger, Remcos, AsyncRAT usw.
- Der PowerShell-Befehl kehrt die Zeichenfolge um, indem er sie zusammenfügt, Base64-Zeichenfolgen dekodiert und sie mit der Funktion „[AppDomain]::CurrentDomain.Load ()“ als .Net-Assembly in den Speicher lädt. Dieser Ansatz ermöglicht Malware:
- Vermeiden Sie das Schreiben tatsächlicher Malware-Dateien auf die Festplatte (Ausweichfunktion).
- Erstellen und laden Sie die Nutzlast dynamisch zur Laufzeit.
- Ruft die Eingabemethode „[vv]::v('esBbIgyFlZcXjUl')“ auf, die auf den Registrierungspfad verweist.
Wir haben den Dump der deobfuskierten Stager-1-Nutzlast zur weiteren Analyse entnommen. Unsere Beobachtungen sind wie folgt:
Analyse von Stager-1:
Stager-1 ist eine kleine ausführbare Datei, die in der Registrierung „HKCU\Software\esBbIgyFlZcXjUl\s“ kodiert ist. Sie ist in .Net kompiliert und hat eine Größe von ca. 14 KB.
Bei der Analyse des Codes haben wir festgestellt, dass die Datei versucht, Inhalte aus einem anderen Registrierungsschlüssel mit dem Namen „r“ – [HKCU\Software\esBbIgyFlZcXjUl\r] zu lesen.
Diese Inhalte werden umgekehrt und es wird eine weitere kompilierte .Net-Binärdatei erstellt – der Stager-2.
Diese Binärdatei wird dann mit „Assembly.Load()“ in den Speicher geladen. Stager-1 versucht, die Methode r() innerhalb der Klasse r in der Stager-2-Assembly zu finden. Sie ist der Einstiegspunkt für die Ausführung von Stager-2.

Analyse von Stager-2:
Nachdem Stager-1 die Einrichtung abgeschlossen hat, fährt die Malware mit dem Stager-2-Loader fort. In dieser Infektionsphase konzentriert sie sich darauf, die eigentliche Masslogger-Nutzlast aus der Registrierung zu extrahieren und in den Zielprozess einzuschleusen.
Stager-2 erstellt zunächst potenzielle Dateipfade, um den Prozess zu starten und eine Code-Injektion durchzuführen.
Es wird geprüft, ob in einem dieser Pfade eine Datei (deren Name aus dem Registrierungswert „i“ abgerufen wird) vorhanden ist.
In unserem Fall haben wir festgestellt, dass der Zieldatei-/Prozesspfad wie folgt lautet:
„%WINDIR%\Microsoft.NET\Framework\v4.0.30319\AddInProcess32.exe“

Darüber hinaus extrahiert die Malware die tatsächliche Masslogger-Nutzlast, die zuvor (durch die Unterroutine „XSSAY()“) in mehrere Registrierungsunterschlüssel unter den unten aufgeführten Registrierungen geschrieben wurde, die wir zuvor gesehen haben.
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*
Die Funktion BBX() der Klasse „r“ sammelt alle Werte, verknüpft sie, wandelt den kombinierten String um und dekodiert ihn anschließend von hexadezimal in Rohbytes um. Diese Technik ermöglicht es Malware-Autoren, eine vollständige PE-Binärdatei über mehrere Registrierungsschlüssel hinweg zu verbergen. Die dekodierte Nutzlast wird dann zum Process Hollowing verwendet. Das Process Hollowing wird mit der Funktion .XGP() durchgeführt.
Dies ist eine clevere Möglichkeit, alles in der Registrierung zu speichern und den Speicher nur für die Ausführung zu verwenden.

-Frankreichspezifische Nutzlastlieferung:
Die geografisch ausgerichtete Bereitstellung von Nutzdaten ist bei fortgeschrittener Malware mittlerweile üblich, um das Verhalten je nach Standort des Opfers zu ändern. Stager-2 dieser Infektion prüft, ob die aktuelle Eingabesprache des Systems auf Französisch „Fr“ eingestellt ist und ob das Gebietsschema „France“ enthält.

Wenn die Bedingungen erfüllt sind, versucht der Schädling, speziell erstellte zusätzliche Nutzdaten von der fest codierten URL – hxxps://144.91.92.251/MoDi.txt – herunterzuladen. Zum Zeitpunkt der Analyse war die URL nicht erreichbar.
-Traces beenden und beenden:
Am Ende der Ausführung beendet die Malware zwangsweise laufende Instanzen der Prozesse conhost.exe und PowerShell.exe.

Durch das Beenden dieser Prozesse versucht die Malware wahrscheinlich, ihre Aktivitätsspuren zu verbergen. Schließlich beendet sie die Anwendung mit ProjectData.EndApp() und schließt damit den Stager-2-Lebenszyklus ab.
Analyse der endgültigen Nutzlast von Masslogger:
Nach erfolgreicher Deobfuskierung der endgültigen Nutzlast aus der Registrierung wird Masslogger in den Zielprozess „AddInProcess32.exe“ injiziert. Die Markierung dieser Malware ist im Speicherauszug des injizierten Prozesses wie folgt zu sehen:

Wir haben einen Speicherauszug dieser Nutzlast erstellt, die die letzte Stufe der Malware-Kette darstellt. Sie ist für die Ausführung der wichtigsten Funktionen zum Diebstahl von Anmeldeinformationen und Informationen verantwortlich.
-Datenerhebung:
Wie viele Infostealer-Malware zielt auch diese Malware auf mehrere Webbrowser und einige E-Mail-Clients ab, um vertrauliche Informationen wie gespeicherte Benutzernamen, Passwörter, AutoFill-Daten usw. zu stehlen. Nachfolgend finden Sie eine Liste der Webbrowser und einiger E-Mail-Clients, die Masslogger ins Visier nimmt.

Sehen wir uns eines der Module im Detail an, bei dem Malware versucht, gespeicherte Anmeldeinformationen aus dem Chrome-Browser abzugreifen.

Es ermittelt die Anmeldedaten des Benutzers durch Zugriff auf die SQLite-Datenbank „Anmeldedaten“. Es extrahiert Website-URLs zusammen mit den zugehörigen Benutzernamen und Passwörtern und sammelt diese zur weiteren Verwendung. Werden gültige Anmeldeinformationen gefunden, werden diese in einem strukturierten Format wie Website, Benutzername und Passwort gespeichert.
Abgesehen davon, dass es Browser und E-Mail-Clients zum Diebstahl von Informationen angreift, verfügt Masslogger auch über folgende Fähigkeiten:
- Keylogger-Aktivität.
- Erstellen und löschen Sie Snapshot-Dateien.
- Zwischenablagedaten abrufen.
- Versuchen Sie, die Benutzeraktivität zu überwachen, indem Sie GetForegroundWindow, GetWindowText usw. aufrufen.
- Lesen Sie Systemdetails wie IP-Adresse und Land.
- Hochladen mehrerer Dateien auf den Server.
-Datenexfilterung:
Die Methode SpeedOffPWExport() in der endgültigen Nutzlast ermöglicht die Datenexfiltration, indem gesammelte Anmeldeinformationen und Systeminformationen über mehrere Kanäle wie FTP, SMTP oder Telegram an Remotestandorte gesendet werden.
Wenn FTP aktiviert ist, lädt die Methode die gestohlenen Daten unter Verwendung fest codierter Anmeldeinformationen als TXT-Datei auf einen Remote-FTP-Server hoch.

Für SMTP erstellt es eine E-Mail, die die Daten entweder im Nachrichtentext oder als angehängte Textdatei enthält, und sendet sie über den angegebenen Mailserver.

Wenn die Telegram-Exfiltration aktiviert ist, werden die Daten mithilfe der Telegram-Bot-API als Dokument gesendet, einschließlich einer Beschriftung mit dem Benutzernamen und der IP des Opfers.

Fazit:
Die dateilose Variante von Masslogger zeigt den wachsenden Trend zu informationsstehlender Schadsoftware. Über ein VBE-Skript verbreitet, missbraucht sie die Windows-Registrierung, um ausführbare Nutzdaten zu speichern und diese direkt in den Speicher zu laden, ohne die Festplatte zu berühren. Sie kann gespeicherte Anmeldeinformationen aus mehreren Browsern und E-Mail-Clients abgreifen und nutzt mehrere Kanäle (FTP, SMTP, Telegram Bot) zur Datenexfiltration.
Diese Variante zeigt die Verlagerung von Credential-Stealing-Malware hin zu dateilosem und mehrstufigem Vorgehen (Stage-1, Stage-2). Dies stellt herkömmliche AV- und signaturbasierte Erkennungsmethoden vor eine Herausforderung. Um dies zu überwinden, müssen Sicherheitsexperten fortschrittliche Erkennungsmechanismen wie Verhaltenserkennung, Überwachung von Registrierungsanomalien usw. einsetzen.
Indikatoren für eine Kompromittierung (IoCs):
Datei MD5:
.VBE: 29DBD06402D208E5EBAE1FB7BA78AD7A
.VBS: F30F07EBD35B4C53B7DB1F936F72BE93
Stager-1: 2F1E771264FC0A782B8AB63EF3E74623
Stager-2: 37F0EB34C8086282752AF5E70F57D34C
MassLogger Payload: 1E11B72218448EF5F3FCA3C5312D70DB
URL:
hxxps://144.91.92.251/MoDi.txt
Seqrite Erkennung:
Script.trojan.49618.GC
Trojan.MSIL
Trojan.YakbeexMSIL.ZZ4
MITRE ATT & CK
| Taktik | Technik-ID | Technikname | Untertechnik-ID | Name der Untertechnik |
| Erster Zugriff | T1566 | Phishing | T1566.001 | Spear-Phishing-Anhang |
| Ausführung | T1059 | Befehls- und Skriptinterpreter | T1059.005 | Visual Basic |
| Ausführung | T1059 | Befehls- und Skriptinterpreter | T1059.001 | Powershell |
| Beharrlichkeit | T1053 | Geplante Aufgabe/Job | T1053.005 | Geplante Aufgabe |
| Verteidigungsflucht | T1140 | Dateien oder Informationen entschlüsseln/dekodieren | - | - |
| Verteidigungsflucht | T1112 | Registry ändern | - | - |
| Verteidigungsflucht | T1055 | Prozessinjektion | T1055.012 | Aushöhlungsprozess |
| Verteidigungsflucht | T1562 | Abwehrkräfte beeinträchtigen | T1562.001 | Tools deaktivieren oder ändern |
| Verteidigungsflucht | T1059 | Befehls- und Skriptinterpreter | T1059.001 | Powershell |
| Bewertung | T1518 | Softwareerkennung | T1518.001 | Erkennung von Sicherheitssoftware |
| Bewertung | T1082 | Systeminformationserkennung | - | - |
| Bewertung | T1012 | Registrierung abfragen | - | - |
| Zugang zu Anmeldeinformationen | T1555 | Anmeldeinformationen aus Passwortspeichern | T1555.003 | Anmeldeinformationen von Webbrowsern |
| Zugang zu Anmeldeinformationen | T1056 | Eingabeerfassung | T1056.001 | Keylogging |
| Kollektion | T1113 | Screen Capture | - | - |
| Kollektion | T1115 | Daten aus der Zwischenablage | - | - |
| Kollektion | T1056 | Eingabeerfassung | T1056.001 | Keylogging |
| Kollektion | T1083 | Datei- und Verzeichniserkennung | - | - |
| Command and Control | T1071 | Protokoll der Anwendungsschicht | T1071.001 | Webprotokolle |
| Command and Control | T1071 | Protokoll der Anwendungsschicht | T1071.002 | Dateiübertragungsprotokolle |
| Command and Control | T1071 | Protokoll der Anwendungsschicht | T1071.003 | Mail-Protokolle |
| Command and Control | T1105 | Ingress-Tool-Übertragung | - | - |
| Exfiltration | T1041 | Exfiltration über C2-Kanal | - | - |
| Exfiltration | T1567 | Exfiltration über Webservice | T1567.002 | Exfiltration in den Cloud-Speicher |
| Exfiltration | T1567 | Exfiltration über Webservice | T1567.001 | Exfiltration ins Code-Repository |



