Louis Schürmann, Security Analyst von Swiss Post Cybersecurity, hat eine bisher unbemerkte PURELOGS-Stealer-Kampagne identifiziert und analysiert. In unserem Blog-Artikel beschreibt er die gesamte Angriffskette, von der Verwendung legitimer Infrastruktur bis hin zur finalen Datenexfiltration.
Phishing-Triage ist in der Regel vorhersehbar, aber dieses Beispiel war eine Ausnahme. Getarnt als pharmazeutische Rechnung, wandte sich der Loader sofort an archive.org, um ein PNG-Bild abzurufen. Dies erweckte das Interesse unseres Security Analysten. Nach vier Entschlüsslungsschichten entpuppte sich PURELOGS. Während die Malware selbst bekannt ist, bietet die Staging-Infrastruktur dieser Kampagne eine wertvolle Fallstudie zum Thema Evasion.
Die Infektion beginnt mit einer Phishing-E-Mail, die als pharmazeutische Rechnung getarnt ist. Im ZIP-Archiv befindet sich eine Datei mit der Erweiterung .js. Die meisten Benutzer sehen JavaScript und denken an Browser, aber dies ist kein Browser-JavaScript.
Es handelt sich um eine Windows Script Host (WSH)-JScript-Datei, was bedeutet, dass sie mit vollständigen Berechtigungen auf Betriebssystemebene über die Windows-Skript-Engine ausgeführt wird. Sie erhält direkten Zugriff auf COM-Objekte wie WScript.Shell und Win32_Process, sodass sie Dateien erstellen, Prozesse starten und nach Belieben mit dem System interagieren kann.
Auf den ersten Blick ist die Datei unlesbar:
Sie ist vollgepackt mit Non-ASCII-Zeichen, die die statische Analyse stören und die signaturbasierte Erkennung beeinträchtigen. Wenn man jedoch die unbrauchbaren Zeichen entfernt, ist die Logik des Skripts ziemlich einfach: Es erstellt einen PowerShell-Befehl mit einer Base64-codierten Payload und feuert diese mit WMI ab.
Der Command startet einen versteckten PowerShell-Prozess und führt die decodierte Payload im Speicher mit Invoke-Expression aus. Es werden keine Dateien auf die Festplatte geschrieben, sodass ein grundlegender dateibasierter Virenscanner sie nicht erkennt. Eine standardmässige dateilose Ausführung. Was unserem Security Analysten auffiel, war das, was die PowerShell-Payload als Nächstes tat. Sie begann mit der Suche nach einer PNG-Datei auf archive.org.
Das entschlüsselte PowerShell-Skript fungiert als Downloader der ersten Stage. Anstatt eine ausführbare Datei von einer Wegwerfdomäne abzurufen, lädt es ein PNG-Bild von archive.org herunter.
Archive.org ist eine legitime, bekannte Website. Wenn Analysten die Netzwerklogs überprüfen und Datenverkehr zu archive.org sehen, wird dies in der Regel nicht als verdächtig eingestuft. Die Angreifer nutzen den guten Ruf der Website als Deckmantel.
Aber es handelt sich hierbei nicht um eine normale PNG-Datei. Nun, eigentlich schon, aber mit Extras. Die Angreifer haben eine Base64-kodierte Payload nach dem IEND-Chunk der PNG-Datei eingebettet, der das offizielle Ende der Bilddaten markiert. Die Datei wird in jedem Viewer weiterhin als gültiges Bild dargestellt. Zwischen zwei benutzerdefinierten Markern (BaseStart- und -BaseEnd) befindet sich die eigentliche Malware.
Das PowerShell-Skript verwendet REGEX, um die Payload zwischen diesen Markern zu extrahieren:
$imageData -match 'BaseStart-(.+?)-BaseEnd'
$valor = $matches[1]
Beachten Sie, dass DownloadString() anstelle von DownloadFile() verwendet. Das „Bild“ kommt in seiner ursprünglichen Form nie mit der Festplatte in Berührung. Es existiert nur im Speicher als String-Variable. Dateibasierte Sicherheitskontrollen haben keine Möglichkeit, es zu überprüfen.
Nach dem Extrahieren dekodiert das Skript die Payload mit Base64 und lädt sie mithilfe von .NET Reflection direkt in den Speicher:
Hier kommt die dateilose Ausführung wirklich zum Tragen. Herkömmliche Antivirenprogramme scannen Dateien auf der Festplatte, berechnen Hashes und gleichen Signaturen ab. Wenn eine Assembly direkt aus einem Byte-Array in den Speicher geladen wird, umgeht sie all das. Die Malware existiert nur im Speicherbereich des PowerShell-Prozesses.
Das Skript übergibt dann mehrere Argumente an die geladene Assembly, darunter eine weitere verschlüsselte URL, und ruft eine Methode mit Reflection auf. Wir sind von einem einfachen Dropper zu einem konfigurierbaren Loader übergegangen, und in der nächsten Stage wird es noch komplexer.
Die vom PowerShell-Stager geladene .NET-Assembly wird von den IBM X-Force-Forschern als „VMDetectLoader” bezeichnet. Es handelt sich um einen modularen Loader, der für Persistenzoptionen, Umgebungsprüfungen und das Einfügen der nächsten Stage zuständig ist. Sein Verhalten wird vollständig von den aus Stage 1 übergebenen Argumenten bestimmt.
In dieser Kampagne haben die Angreifer einige spezifische Konfigurationsentscheidungen getroffen:
Keine Persistenz: Der Loader unterstützt mehrere Persistenzmechanismen (VBScript mit Run-Registrierungsschlüsseln, geplante Aufgaben), aber hier wurde keiner aktiviert.
VM-Erkennung aktiviert: Eine standardmässige Sandbox-Umgehungsprüfung. Wenn der Loader erkennt, dass er in einer virtuellen Maschine ausgeführt wird, wird er beendet. Die meisten automatisierten Malware-Analysen basieren auf VMs, sodass die Malware auf diese Weise einer frühzeitigen Erkennung entgeht.
Zielprozess: CasPol.exe: Dies ist der Hostprozess, den der Loader für die Injektion verwendet. CasPol.exe ist ein legitimes .NET Framework-Tool (Code Access Security Policy Tool) und eignet sich daher perfekt als Tarnung. Für Sicherheitstools sieht es wie ein vertrauenswürdiges Microsoft-Dienstprogramm aus, das seine Aufgabe erfüllt.
Ein interessantes Detail: Viele der internen Variablennamen sind auf Portugiesisch (wie „nativo” für „nativ”). IBM X-Force ordnet VMDetectLoader dem südamerikanischen Threat Actor Hive0131 zu. Da VMDetectLoader jedoch der einzige Indikator ist, der diese PURELOGS-Kampagne mit diesem TA in Verbindung bringt, schätze ich die Zuordnung als wenig zuverlässig ein.
Die Hauptaufgabe des Loaders besteht darin, die Payload der nächsten Stage abzurufen. Er nimmt eines der Argumente aus Stage 1 (gespeichert in der Variablen $olinia), kehrt es um und dekodiert es mit Base64, um eine URL zu erhalten, die auf eine .txt-Datei verweist.
Diese Datei enthält eine weitere verschlüsselte PE, die der Loader abruft, dekodiert und mithilfe einer Technik namens Prozessinjektion für die Injektion vorbereitet.
Nachdem die Payload der nächsten Stage dekodiert und im Speicher abgelegt wurde, besteht die letzte Aufgabe des Loaders darin, sie auszuführen. Dazu verwendet er eine klassische und gut dokumentierte Prozessinjektionstechnik: RunPE, auch bekannt als Process Hollowing.
Er startet das legitime .NET Framework-Dienstprogramm CasPol.exe in einem angehaltenen Zustand, entfernt seinen ursprünglichen Code aus dem Speicher und ersetzt ihn durch die entschlüsselte Payload. Durch das Kapern des Hauptthreads und das Umleiten des Instruction Pointers zum Entry Point der Payload tarnt sich die Malware effektiv als vertrauenswürdiger Microsoft-Prozess. Aus Sicht des Betriebssystems und vieler Sicherheitstools läuft CasPol.exe einfach wie erwartet, sodass die nächste Stage ihre Arbeit als „vertrauenswürdiger” Prozess aufnehmen kann.
Die über Process Hollowing injizierte Payload ist nicht der endgültige PURELOGS-Stealer. Stattdessen handelt es sich um einen mit .NET-Reactor verschleierten .NET-Unpacker. Sein einziger Zweck besteht darin, die endgültige Payload vollständig im Speicher zu entschlüsseln, zu dekomprimieren und auszuführen.
Der Code des Unpackers erscheint zunächst wirr. Der Konstruktor der ExecutionEngine-Klasse offenbart jedoch die tatsächliche Architektur: Jede Methode ist für ein bestimmtes Ereignis registriert und bildet eine sequenzielle Pipeline, in der der Abschluss eines Schritts den nächsten in der Angriffskette auslöst.
Diese Architektur unterteilt den Entpackungsprozess in fünf verschiedene, sequenzielle Stages. Die Main-Methode startet diese Kette einfach, indem sie eine ExecutionEngine-Instanz erstellt und das erste Ereignis auslöst.
Der erste operative Schritt ist die Entschlüsselung mit DecompressDispatcher. Diese Funktion übernimmt die verschlüsselte Payload, einen Schlüssel und einen Initialisierungsvektor (IV) aus den eingebetteten Ressourcen des Unpackers.
Die Wahl der Kryptografie ist hier bemerkenswert. Anstelle eines modernen Standards wie AES verwendet die Malware den Triple-DES-Algorithmus (3DES). 3DES ist eine Legacy-Verschlüsselung, die vom NIST (National Institute of Standards and Technology) offiziell als zu langsam und ineffizient eingestuft wurde. Ihre Verwendung hier ist wahrscheinlich eine bewusste Entscheidung, um automatisierte Erkennungssysteme zu umgehen. Viele Sicherheitstools sind so konfiguriert, dass sie nach den mit AES verbundenen kryptografischen Konstanten und Signaturen suchen. Die Verwendung eines älteren, weniger verbreiteten Algorithmus kann daher dazu beitragen, dass die Malware unentdeckt bleibt.
Nach der Entschlüsselung sind die resultierenden Daten immer noch keine gültige PE-Datei. Es handelt sich um ein GZip-komprimiertes Archiv. Das nächste Ereignis in der Angriffskette löst den Dekomprimierungsprozess aus: EncryptEfficientDecryptor.
Dieser zweistufige Ansatz aus Verschlüsselung und anschliessender Komprimierung ist eine gängige und effektive Technik zum Schutz einer Payload. Er stellt sicher, dass die endgültige Assemblierung bis zum letzten möglichen Moment nicht offengelegt wird und schützt sie so vor statischen Analyse-Tools, die sie andernfalls möglicherweise erkennen würden.
Nachdem die endgültige PURELOGS-Assembly nun vollständig im Speicher dekomprimiert ist, sind die letzten beiden Schritte der Pipeline der Ausführung gewidmet. Dies wird mithilfe von .NET Reflection erreicht, um eine vollständige dateilose Übergabe zu erzielen.
Nach vier Phasen des Entpackens und Injizierens läuft der PURELOGS-Stealer nun innerhalb des ausgehöhlten CasPol.exe-Prozesses.
PURELOGS ist ein handelsüblicher .NET-Infostealer, der erstmals 2022 in verschiedenen Untergrundforen zum Verkauf angeboten wurde. Er wird von einem Entwickler namens PureCoder entwickelt und verkauft, der auch eine Reihe anderer bösartiger Tools anbietet, darunter PureRAT, BlueLoader und PureCrypter.
Wie die meisten Infostealer heutzutage funktioniert PURELOGS als Malware-as-a-Service (MaaS) und ist somit für eine Vielzahl von Bedrohungsakteuren zugänglich, unabhängig von ihren technischen Fähigkeiten. Der Stealer wird auf Clearnet- und Darknet-Seiten beworben, der Verkauf erfolgt über einen vollautomatisierten Telegram-Bot. Für nur 150 US-Dollar pro Monat kann jeder ein Abonnement erwerben und innerhalb weniger Minuten einen ausgeklügelten Infostealer einsetzen.
Die Malware selbst ist modular aufgebaut und verfügt über Funktionen, die sowohl für weniger versierte als auch für erfahrenere Akteure attraktiv sind. Dazu gehören In-Memory-.NET-Loader, flexible Command-and-Control-Kanäle (C2) und ein Plugin-System zum Sammeln einer Vielzahl von Daten aus kompromittierten Systemen.
Der PURELOGS-Stub selbst wird durch eine Kombination aus ConfuserEx, .NET Reactor und benutzerdefinierten Virtualisierungstechniken verschleiert. Dies führt zu verstümmelten Klassen- und Methodennamen, virtualisiertem Kontrollfluss und verschlüsselten Zeichenfolgen. Dies erschwert die Analyse, macht sie jedoch nicht unmöglich.
Im Kern ist der Ausführungsfluss des Stealers unkompliziert:
Die C2-Konfiguration wird als Protobuf-serialisierter, XOR-verschlüsselter Blob gespeichert, der in die Ressourcen der Malware eingebettet ist. Um auf die Konfiguration zuzugreifen, wendet die Malware zunächst eine benutzerdefinierte XOR-Entschlüsselungsroutine auf den Ressourcen-Blob an. Das Ergebnis ist eine Protobuf-Nachricht, die eine weitere Verschlüsselungsebene enthält: Die eigentlichen Konfigurationsdaten sind mit 3DES verschlüsselt.
Der folgende Codeausschnitt zeigt die endgültige 3DES-Entschlüsselungsroutine. Sie nimmt die verschlüsselten Daten und eine Base64-kodierte Zeichenfolge (den Schlüssel) als Eingabe.
Nach der Entschlüsselung zeigt die Konfiguration Folgendes an:
Wie bereits erwähnt, ist PURELOGS modular aufgebaut. Das heisst, es umfasst zahlreiche Module, die jeweils auf unterschiedliche Anwendungen und Anmeldedaten ausgerichtet sind. Angesichts der grossen Anzahl verfügbarer Module wird nicht auf jedes einzelne eingegangen. Stattdessen liegt der Fokus auf den beiden wichtigsten Modulen. Eine vollständige Liste finden Sie am Ende des Blog-Artikels.
Das primäre Datenerfassungsmodul des Stealers zielt auf Browser ab, die auf dem Open-Source-Projekt Chromium basieren, das die Blink-Rendering-Engine verwendet. Dadurch kann es mit einer einzigen Codebasis eine Vielzahl beliebter Browser wie Google Chrome, Microsoft Edge und Opera angreifen.
PURELOGS liest zunächst die Local State-Datei, um den verschlüsselten Hauptschlüssel zu finden. Dieser Schlüssel wird durch die Windows Data Protection API (DPAPI) geschützt. Der Schutz durch DPAPI ist jedoch kontextabhängig und bietet in diesem Szenario keinen wirklichen Schutz. Da die Malware innerhalb der Benutzersitzung des Opfers ausgeführt wird, reicht ein Aufruf der nativen Funktion CryptUnprotectData aus, damit das Betriebssystem den Hauptschlüssel transparent entschlüsselt. Dadurch wird der Schutz gegen einen Angreifer, der bereits die Codeausführung erreicht hat, unwirksam.
Lesen Sie mehr über alternative Techniken zum Diebstahl von Chromium-Anmeldeinformationen in unserem früheren Blog-Artikel über die ClickFix-Täuschung.
Mit dem Klartext-AES-256-GCM-Hauptschlüssel greift PURELOGS auf die SQLite-Datenbanken, Anmeldedaten, Cookies und Webdaten zu, um gespeicherte Anmeldedaten, Sitzungscookies, Informationen zur automatischen Ausfüllung, Verlaufsdaten und Kreditkartendaten zu entschlüsseln und zu extrahieren. Schliesslich werden alle gesammelten Informationen zusammengetragen, serialisiert und in eine Protobuf-Datenstruktur gepackt, bereit für die Exfiltration.
Die Malware verfolgt einen zweigleisigen Ansatz zum Diebstahl von Kryptowährungen und zielt sowohl auf herkömmliche Desktop-Wallet-Anwendungen als auch auf moderne browserbasierte Wallet-Erweiterungen ab. Für Desktop-Wallets verfügt die WalletStealer-Klasse über eine umfangreiche, fest codierte Liste mit über 30 Wallet-Anwendungen, darunter Bitcoin Core, Electrum, Exodus und Monero. Sie überprüft systematisch die Standardinstallationspfade (in der Regel innerhalb von %APPDATA%) und Registry-Keys für diese Anwendungen. Wenn eine Wallet-Datei (wie wallet.dat oder default_wallet) gefunden wird, wird sie für die Exfiltration in die Warteschlange gestellt.
Die grössere Gefahr liegt jedoch in der Ausrichtung auf Browser-Erweiterungen, die im ChromiumBrowserStealer-Modul implementiert sind. Diese Komponente zielt auf über 70 verschiedene browserbasierte Web3-Wallets ab, darunter MetaMask, Phantom, Trust Wallet und Binance Chain Wallet. Sie funktioniert, indem sie das Verzeichnis „Local Extension Settings“ der kompromittierten Browser durchsucht. Sie vergleicht die Verzeichnisnamen mit einer Liste an bekannter Wallet-Erweiterungs-IDs (z. B. nkbihfbeogaeaoehlefnkodbefgpgknn für MetaMask). Wenn eine Übereinstimmung gefunden wird, komprimiert die Malware den gesamten Erweiterungsdatenordner, der die verschlüsselten Seed-Phrasen und privaten Schlüssel enthält, in ein ZIP-Archiv. Da diese Erweiterungen häufig die Speichermechanismen des Browsers nutzen, kann der Angreifer diese Daten potenziell mit demselben Hauptschlüssel entschlüsseln, der aus dem Browserprofil gestohlen wurde.
Die vollständige Liste der angegriffenen Anwendungen und Dienste umfasst:
Firefox/Gecko-Browser, Opera-Browser, Yandex-Browser, FileZilla, WinSCP, Outlook, Thunderbird, Foxmail, Mailbird, MailMaster, Telegram, Signal, Pidgin, Steam, OpenVPN, ProtonVPN, Ngrok, OBS Studio, Internet Download Manager (IDM)
PURELOGS zeigt, wie sich handelsübliche Malware an die moderne Bedrohungslandschaft angepasst hat, nicht durch bahnbrechende Innovationen, sondern durch praktische Umgehungsmassnahmen in jeder Phase. Der entscheidende Punkt hierbei ist nicht die Raffinesse, sondern die Mengenökonomie. Diese Kampagnen zielen nicht auf bestimmte Branchen oder hochwertige Unternehmen ab. Es handelt sich um “Spray and Pray” Operationen, bei denen der Erfolg an der Anzahl der Infektionen gemessen wird und nicht an den Auswirkungen pro Opfer. Für 150 US-Dollar pro Monat können Bedrohungsakteure dieses Tooling einsetzen und ein breites Netz über Tausende potenzieller Ziele auswerfen. Mehr Infektionen bedeuten mehr gestohlene Anmeldedaten, mehr Krypto-Wallets und mehr Daten, die zu Geld gemacht werden können.
Dies führt zu einer interessanten Dynamik: Die Angriffe benötigen keine hochmodernen EDR-Bypasses, da die Ziele grösstenteils nicht über ein EDR verfügen. Privatanwender, kleine Unternehmen und Freiberufler arbeiten bestenfalls mit Windows Defender und einfachen Antivirenprogrammen. Die vierstufige Lieferkette ist kein Overkill, sondern genau richtig für dieses Bedrohungsmodell. Sie überwindet die Abwehrmassnahmen von Verbrauchern und bleibt dabei kostengünstig und skalierbar.
Für Unternehmen ist jedoch Folgendes wichtig: Diese Kampagnen machen keine Unterschiede. Mitarbeiter, die von zu Hause aus arbeiten, Auftragnehmer, die private Geräte nutzen, Partner in Ihrer Lieferkette – sie alle befinden sich im Explosionsradius. Sobald Anmeldedaten kompromittiert sind, werden sie für Unternehmens-VPNs, Cloud-Dienste und SaaS-Plattformen getestet. Ein Infostealer, der den privaten Laptop eines Remote-Mitarbeiters befällt, kann schnell zu einem Sicherheitsvorfall für das gesamte Unternehmen werden.
Die Abwehr ist nicht komplex. Die speicherbasierte Ausführung hinterlässt Verhaltensspuren. Process-Hollowing erzeugt Anomalien. Der Missbrauch von Reflection erzeugt Telemetriedaten. Aber Sie benötigen Transparenz, um dies zu erkennen, und Sie benötigen Überwachung, um darauf zu reagieren.
Die Malware mag günstig sein, aber das Risiko ist es nicht.
The only system which is truly secure is one which is switched off and unplugged locked in a titanium lined safe, buried in a concrete bunker, and is surrounded by nerve gas and very highly paid armed guards. Even then, I wouldn't stake my life on it.
- Gene Spafford, Direktor, Projekt für Computerbetrieb, Audit und Sicherheitstechnologie (COAST), Purdue University
| IOC | Typ | Bezeichnung | Kontext |
| c3857a086bdac485a5e65fc88828cb0c4c831be7a1f63e2dab32a47f97b36289 | SHA256 |
PO 4501054441 Luan Pharm.js |
JS Stager |
| c208d8d0493c60f14172acb4549dcb394d2b92d30bcae4880e66df3c3a7100e4 | SHA256 | Microsoft.Win32.TaskScheduler.dll | Loader |
| 3050a5206d0847d5cfa16e79944ce348db688294e311db4d7b6045ffbe337450 | SHA256 | Qgwwal.exe | Sec. Lader |
| bb723217f9c2932116c9e1313d558a7baddb921886eaa3beca95f7b3c5b848b0 | SHA256 | ClassLibrary4.dll | Payload |
| 08a5d0d8ec398acc707bb26cb3d8ee2187f8c33a3cbdee641262cfc3aed1e91d | SHA256 |
optimized_MSI.png |
Payload |
| hxxps[://]archive[.]org/download/optimierte_msi_20250904/optimierte_MSI[.]png | url | Payload | |
| hxxps[://]ia902909[.]us[.]archive[.]org/16/items/optimized_msi_20250904/optimized_MSI[.]png | url | Payload | |
| hxxp[://]lineclearexpress[.]wuaze[.]com/arquivo_20250908023227[.]txt | url | Payload | |
| 185.27.134.206 | IP | Payload Delivery | |
| 45.137.70.55:5888 | IP:Port | C2 |
https://www.ibm.com/think/x-force/dcrat-presence-growing-in-latin-america
https://github.com/SychicBoy/NETReactorSlayer
https://hackforums.net/showthread.php?tid=5926879
https://www.netresec.com/?page=Blog&month=2025-07&post=PureLogs-Forensics