Rilide, auch bekannt als LumaC2 und CookieGenesis, ist eine ausgeklügelte Malware, die Chromium-basierte Browser ins Visier nimmt, um Nutzeraktivitäten zu kapern und sensible Daten zu stehlen. Rilide wurde im Jahr 2023 entdeckt und nutzt Browser-Erweiterungen, um seine Angriffe auszuführen. Rilide missbraucht seine Browser-Komponente, um bösartige Skripte in Webseiten einzuschleusen. Zusätzlich zu seinen Möglichkeiten zur Datenexfiltration verfügt es auch über fortschrittliche Funktionen zum Diebstahl von Kryptowährungen, mit Manipulation der Zwei-Faktor-Authentifizierung (2FA) für gängige Wallets und E-Mail-Clients.
Seit Anfang 2025 hat das Trusteer-Forschungslabor mehr als 50.000 infizierte Benutzersitzungen beobachtet, was auf das Ausmaß der Bedrohungsaktivitäten hindeutet. Rilide führt eine laufende weltweite Kampagne durch, die vom Trusteer-Labor entdeckt wurde und Angriffe auf Nordamerika, Südamerika, Europa und Japan beinhaltet.
In diesem Beitrag werden wir erkunden, wie Rilide im Browser über seine Erweiterung arbeitet, und die Techniken untersuchen, die es zur Durchführung seiner Angriffe verwendet, insbesondere seine Auswirkungen auf Finanzplattformen.
Die Funktionen von Rilide verdeutlichen den Wandel in der Geschäftswelt von traditionellen Webinjektionen mit einem einzigen seiteninternen JavaScript-Code hin zu Browsererweiterungen. Browser-Erweiterungen ermöglichen viele Funktionen, die ohne sie ziemlich schwierig zu erreichen sind. Die folgende Analyse zeigt, wie leistungsfähig eine Erweiterung ist und warum moderne Malware sie oft verwendet.
In der Vergangenheit wurden die meisten „Man-in-the-Browser“-Angriffe dadurch ausgeführt, dass Schadsoftware den Browserspeicher durchsuchte, um bestimmte HTML-Muster zu identifizieren und ein <script>-Tag direkt in den Speicherinhalt der Seite einzufügen. Trotz der böswilligen Absicht unterlagen diese Skripte weiterhin den Sicherheitsmechanismen des Browsers, etwa dem Betrieb in einer Sandbox-Umgebung, der Einhaltung der Same-Origin-Richtlinie und der Verknüpfung an den Lebenszyklus der Seite, in die sie eingeschleust wurden.
So konnten die eingeschleusten Skripte beispielsweise weder auf Cookies oder Ressourcen anderer Herkunft zugreifen, noch konnten sie bestehen bleiben oder ausgeführt werden, sobald die Seite geschlossen wurde.
Im Gegensatz dazu überwinden moderne Angriffe mithilfe bösartiger Browsererweiterungen die meisten dieser Einschränkungen. Erweiterungen funktionieren unabhängig von einer bestimmten Webseite, so dass sie dauerhaft im Hintergrund laufen können. Sie verfügen außerdem über erweiterte Berechtigungen, die es ihnen ermöglichen, die Same-Origin-Beschränkungen zu umgehen, auf browserweite Ressourcen wie Cookies oder Speicher zuzugreifen und auch dann aktiv zu bleiben, wenn keine Seiten geöffnet sind. Dieser Wandel hat Browser-Erweiterungen zu einem mächtigen Tool für Angreifer gemacht, das ein Maß an Persistenz und Kontrolle bietet, das weit über herkömmliche Web-Injection-Methoden hinausgeht.
Erweiterungen führten auch zu einer Änderung des JavaScript-Ausführungskontexts, was seinerseits nachteilige Vorteile mit sich brachte. Traditionelle Web-Injections liefen im selben Kontext wie der Webanwendungscode, einschließlich der Sicherheitstools. Jegliche zurückbleibenden Beweise (wie Skriptelemente, Netzwerkanfragen, JS-Variablen usw.) könnten die Malware nachweisbar machen.
Nun gibt es neben dem Seitenkontext zwei weitere JavaScript-Umgebungen:
Die gesamte Kommunikation zwischen diesen Kontexten erfolgt über definierte Browser-Schnittstellen, die für die Seite oder ihre Entwickler nicht sichtbar sind. Die meisten Erweiterungen und deren Nachweise sind systembedingt isoliert, und ihre Erkennung gestaltet sich besonders schwierig, wenn am Hauptdokument keine Änderungen vorgenommen werden.
Neben der verbesserten Umgehung von Sicherheitslücken ist die Entwicklung von Browsererweiterungen dank der umfangreichen integrierten Funktionalität und Berechtigungen moderner Browser-APIs auch unkompliziert. Die folgende Analyse zeigt, wie Erweiterungen die Entwicklung komplexer Angriffe erleichtern.
Angesichts der verbesserten Kontrollmöglichkeiten, der Persistenz, der Ausweichmöglichkeiten und der einfachen Entwicklung, die Browsererweiterungen bieten, ist der Wechsel von traditionellen „Man-in-the-Browser“-Techniken hin zu erweiterungsbasierten Angriffen in der Entwicklung browserbasierter Bedrohungen nicht nur verständlich, sondern unvermeidlich.
Wir beginnen unsere Analyse von Rilide mit der Manifestdatei – einer entscheidenden Komponente, die die Funktionalität und die Zugriffsebenen der Erweiterung beschreibt und erste Hinweise zum Verständnis der schädlichen Funktionen von Rilide liefert.
Eine der analysierten Varianten präsentiert sich als Google Drive-Erweiterung:
Später folgt eine Liste der erforderlichen Berechtigungen. Die Liste enthält zahlreiche kritische Browserfunktionen, darunter unter anderem:
Unter „host_permission“ darf die Erweiterung auf <all_ urls> zugreifen und mit ihnen interagieren, also auf jedes Schema, jede Domain, jeden Pfad und jeden Port, die vom Browser unterstützt werden.
„Inhaltsskripte“ werden außerdem so eingestellt, dass sie auf allen URLs bei document_start ausgeführt werden. Das heißt, sie werden ausgeführt, sobald der Browser mit dem Laden der Seite beginnt, bevor der Inhalt vollständig gerendert ist.
Das Skript main.js beinhaltet allgemeine Funktionen zum Informationsdiebstahl, während gmail.js auf die Gmail-Mail-Client-Seite abzielt. Dennoch werden alle Skripte in jede Seite eingebunden.
Unter „declarative_net_request“ konfiguriert die Erweiterung Regeln zum Entfernen mehrerer Content Security Policy (CSP)-Header. Dadurch kann Rilide Sicherheitsbeschränkungen umgehen und Inline-Inhalte einfügen.
Unter „Hintergrund“ wird der Service Worker der Erweiterung konfiguriert. Hier überwacht die Malware die Browser-Ereignisse und stellt die Kommunikation mit dem C2-Server her. Als Nächstes gehen wir auf die Analyse des Hintergrundskripts ein, um besser zu verstehen, wie die Malware auf Browser-Ereignisse abhört und ihre Angriffsstrategie ausführt.
Die Datei Background.js enthält Initialisierungscode, der so konfiguriert ist, dass er beim Installationsereignis der Erweiterung ausgeführt wird. Er ruft Geräteinformationen wie CPU- und Speicherdetails über chrome.system-Aufrufe und installierte Erweiterungsdaten mit chrome.management ab. Die eindeutige ID wird mit dem npm-uuid-Modul (importiert über jspm) generiert und im Speicher gespeichert. Schließlich werden alle Cookies mit chrome.cookies.getAll mit leerem Filterparameter abgerufen.
Diese Daten werden an den C2-Server gesendet, und die Antwort kann die Proxy-Funktionen der Erweiterung aktivieren. Während der Initialisierung der Erweiterung werden auch Injektionen, Befehle und Malware-Einstellungen abgerufen.
Der letzte Schritt der Initialisierung besteht darin, die CSP-Entfernungsregeln zu aktivieren. Anschließend ist die Malware bereit, Browserereignisse einzurichten und zu überwachen. Wir können wieder einmal den Vorteil der Verwendung einer Browsererweiterung im Vergleich zu traditionellen Web-Injecting-Techniken deutlich erkennen, die all diese Informationen leicht erfassen.
In früheren Versionen von Rilide waren C2-Domains direkt in die JavaScript-Dateien fest einprogrammiert. Andere Varianten extrahierten Domains, indem sie Transaktionsdetails aus einer bestimmten Bitcoin-Wallet abriefen.
Die hier analysierte neue Variante enthält Code zum Abrufen von Domains von einem Telegram-Bot. Regelmäßige Aufrufe zum Abrufen der Domains werden so eingestellt, dass sie jede Minute über Google Chrome-Alarme erfolgen.
Dank dieses Ansatzes kann die Malware problemlos die Domain wechseln, wenn eine davon erkannt und blockiert wird.
Obwohl diese Variante die Telegram-Token nicht enthielt, wird diese Methode wahrscheinlich in zukünftigen Versionen verfügbar sein.
Das Content-Skript sendet alle Eingabeelemente der Seite mit chrome.runtime.sendMessage mit dem Typ „new-grabber-info“.
Der folgende Listener wird in background.js gesetzt, um die Daten an den C2-Server weiterzugeben.
Außerdem wartet der Hintergrund auf „set-screenshot-result“-Meldungen.
Diese Nachrichten lösen das Erstellen eines Screenshots mit chrome.tabs.captureVisibleTab ausund sendet die Daten zurück an das C2.
Wenn sich der Benutzer auf einer Bank-Website anmeldet, können mit diesen Methoden eine Reihe sensibler Daten gestohlen werden. Dazu gehören Benutzernamen und Passwörter, Kontonummern, PIN-Codes, Kreditkartendetails, Antworten auf Sicherheitsfragen und Informationen zum Übertragungsempfänger.
Im letzten Teil der Hintergrundskripte werden periodische Aufrufe für Befehlsabruf und Proxy-Prüfungen mit Hilfe von „ chrome.alarms“ eingerichtet. Die Befehlsalarme rufen eine Liste von Befehlen vom C2 ab und führen diese nacheinander aus.
Der Proxy-Check-Alarm prüft den Status der Proxy-Verbindung und initiiert bei Bedarf eine neue. Sobald die Listener eingestellt sind, wird die synchrone Ausführung des Hintergrundskripts beendet.
cmds.js enthält Code, der es ermöglicht, einen Befehl (aus einer vordefinierten Liste) zusammen mit Parametern vom C2 zu empfangen und gegebenenfalls Ergebnisse zurückzusenden.
Einige interessante Befehle sind:
Andere Befehle ermöglichen das Ändern der Erweiterungskonfiguration, das Abrufen von Geräteinformationen, die aktuelle URL und so weiter. Diese Befehlsfolge ermöglicht dynamische Änderungen im Arbeitsablauf und der Ausführung der Malware und macht sie so besser geeignet, Benutzerinteraktionen anzuregen. Die meisten dieser Befehle nutzen integrierte Chrome-Erweiterungsfunktionen, was die Entwicklung für Malware-Autoren erleichtert.
Das Inhaltsskript main.js beginnt mit der Initialisierung der jQuery-Bibliothek innerhalb einer anonymen Funktion, die vollständig inline eingebettet ist, ohne externe Importe. Darauf folgt obfuskierter Code, der bösartige Funktionen ausführt.
Die Chromium-Erweiterungsarchitektur ermöglicht es Erweiterungen, die Verantwortlichkeiten für die Injektion zu trennen und es schwerer zu erkennen. Der Service Worker lädt die Injections während des Initialisierungsschritts herunter und speichert sie, während das Content-Skript sie liest und ausführt. Es wurden keine Webanfragen im Seitenkontext gesendet, was dazu beiträgt, dass die Malware unentdeckt bleibt. main.js iteriert alle geholten Injektionen, und wenn die aktuelle URL mit der Injektions-URL übereinstimmt, wird sie injiziert.
Rilide verwendet eine clevere Methode, um Skripte in den DOM einzuschleusen.
Es erstellt ein Dokumentattribut „onreset“, wobei die Injektion als Ereignishandler dient. Anschließend wird sofort ein benutzerdefiniertes „Reset“-Ereignis gesendet, das die Injektion ausführt und schließlich das Attribut entfernt.
Dieses Attribut wird zu einem bestimmten Zeitpunkt zwischen dem Aufruf von „setAttribute“ und dem Aufruf von „removeAttribute“ gesetzt, was es für Sicherheitstools schwierig macht, es zu erkennen.
Der letzte Funktionsaufruf richtet den generischen Datendiebstahl-Listener ein.
Mithilfe eines jQuery-Selektors werden alle Eingabeelemente ausgewählt und der „change“-Event-Listener wird gesetzt.
Das „change“-Ereignis tritt immer dann ein, wenn der Wert eines Eingabefelds geändert wird und dieses den Fokus verliert (der Benutzer klickt auf ein anderes Element). Wenn sich ein Opfer beispielsweise in sein Bankkonto einloggt, wird sein Benutzername erfasst, sobald es auf das Passwortfeld klickt, und die Passworteingabe wird gestohlen, sobald der Benutzer das Formular absendet. Die Daten werden über chrome.runtime.sendMessage an den Service-Worker gesendet, von diesen wird es dann an die C2-Server weitergeleitet.
Das Ziel dieses Skripts ist es, die zurückgezogene 2FA-Autorisierungsanfrage durch eine neue Geräteautorisierungsanfrage zu ersetzen. Wir spekulieren, dass dieser Ansatz die Kunden vor nicht autorisierten Auszahlungen schützt, da sie die Autorisierung des neuen Geräts eher als weniger verdächtig empfinden als Auszahlungen.
Das Skript beginnt mit einer Inline-Initialisierung der jQuery-Bibliothek und einer Überprüfung, ob der aktuelle Standort „mail.google“ enthält, bevor Sie mit der Ausführung beginnen. Die Injektion sucht regelmäßig nach E-Mails von beliebten Kryptowährungs-Wallets und ruft, falls erkannt, die entsprechende Wallet-Funktion auf.
Die jQuery-Selektoren sind recht einfach und verwenden „divs“, die die Wallet-Namen als Text enthalten.
Wir demonstrieren die benutzerdefinierte Injektion eines bestimmten Anbieters, obwohl sie alle ähnlich funktionieren.
Der Code sucht nach allen Elementen, die den Text „Withdrawal Request“ enthalten, und ersetzt ihn durch „Authorize New Device“.
Außerdem wird nach Span-Elementen gesucht, die den Text „Rücktritt“ enthalten, um den Inhalt der E-Mail-Vorschau zu ersetzen.
Vor der Injektion:
Nach der Injektion:
Der E-Mail-Text selbst ist folgendermaßen zu finden:
Vereinfacht ausgedrückt findet das Skript alle Elemente mit der CSS-Klasse „ii“, die ein untergeordnetes „div“-Element mit dem Text „Adresse sorgfältig überprüfen“ haben. Es extrahiert auch den Autorisierungscode auf der Grundlage des Elements und des Stils des Autorisierungscode-Textes. Diese Methode zur Identifizierung von Elementen ist nicht sehr stabil, da bereits kleine Änderungen an Stil, Text oder Struktur sie unbrauchbar machen können.
Abschließend wird der HTML-Inhalt der E-Mail mit fest codiertem Inhalt überschrieben.
Originalinhalt:
Neue Inhalte:
Dieser Mechanismus ermöglicht es dem Bedrohungsakteur, Kryptowährungen abzuheben, ohne den Benutzer über die Abhebungen zu informieren.
Eine weitere herausragende Funktion, die mühelos durch Erweiterungen implementiert wird, ist die Proxy-Funktion. Rilide ermöglicht es, den Browser des Opfers in einen HTTP-Proxy umzuwandeln, wobei alle Anfragen weitergeleitet werden und dabei die Anmeldedaten und Daten des Opfers genutzt werden.
Diese Fähigkeit ist besonders gefährlich für Finanzbetrug, da Angreifer auf Bankportale, Handelskonten und Zahlungsplattformen zugreifen können, ohne zusätzliche Authentifizierungsprüfungen auszulösen. Sie können unter dem Deckmantel legitimer Benutzeraktivitäten Transaktionen initiieren, Kontoeinstellungen ändern oder Gelder abzweigen und dabei herkömmliche Sicherheitsmaßnahmen wie die IP-Adresse-Verfolgung umgehen. Indem sie sich effektiv als das Opfer ausgeben, können Angreifer vertrauensbasierte Mechanismen ausnutzen, um nahtlos Betrug zu begehen.
Diese Funktionalität war bemerkenswert einfach zu implementieren, da sie direkt von CursedChrome kopiert wurde, einem Bildungsprojekt, das einen Proof of Concept für diese Art von Angriff demonstrierte.
Der Proxy nutzt den Erweiterungsservice-Worker, um eine WebSocket-Verbindung mit dem C2-Server des Angreifers einzurichten. Über diese Verbindung kann der Servicemitarbeiter vom Angreifer gesendete Befehle empfangen. Diese Befehle bestimmen die Aktionen des Proxys, wie das Stellen von Anfragen oder das Navigieren auf Webseiten. Es werden Anfragen mithilfe der vom Opfer gesammelten Cookies gestellt, und die Antworten werden an den C2 zurückgesendet.
Beispiel für CursedChrome-Code:
Rilide Codebeispiel:
Abgesehen von einigen Namensunterschieden und Unterschieden in der Position der Funktionsdefinitionen ist der Code identisch. Dieses Projekt verfügt sogar über Backend-Code und eine Management-Benutzeroberfläche (UI), was den Angreifern das Leben erleichtert.
Rilide ist ein Beispiel dafür, wie Browser-Erweiterungen die Geschäftswelt für Man-in-the-Browser-Angriffe verändert haben. Durch die Nutzung der inhärenten Funktionen von Erweiterungen gewinnen Angreifer beispiellose Kontrolle über den Browser, was eine ausgeklügelte und persistente Ausbeutung ermöglicht, die die Einschränkungen herkömmlicher In-Page-Web-Injektionen bei Weitem übertrifft. Diese Entwicklung unterstreicht die wachsende Notwendigkeit von Wachsamkeit und robusten Abwehrmechanismen, da die Einfachheit und die Stärke von extensionbasierten Angriffen diese zu einem attraktiven Ziel für Cyberkriminelle machen.
Um sich zu schützen, sollten Nutzer regelmäßig ihre installierten Browsererweiterungen überprüfen und unbekannte oder verdächtige Erweiterungen umgehend entfernen.
Darüber hinaus ist es wichtig, E-Mail-Konten auf ungewöhnliche Aktivitäten wie unerwartete Anmeldeversuche zu überwachen und Kryptowährungs-Wallets auf unautorisierte Transaktionen oder unbekannte Aktionen aufmerksam im Auge zu behalten. Proaktives und vorsichtiges Handeln kann dazu beitragen, die Risiken dieses sich wandelnden Angriffsmusters zu mindern.
IBM Trusteer hilft Ihnen dabei, Betrug und Malware zu erkennen, Benutzer zu authentifizieren und über die gesamte Omnichannel-Customer-Journey hinweg ein Vertrauen in Identitäten aufzubauen. Mehr als 500 führende Unternehmen verlassen sich auf Trusteer, wenn es darum geht, die digitale Journey ihrer Kunden zu schützen und das Unternehmenswachstum zu unterstützen.
historytab.js | 2b72cc2c0c53321a472471c5189fdb56 |
notif.js | 8679a34885a02e94189c8fec5132245a |
config.js | 408d8fa7eade661e9a02b6065b792fca |
ico.png | 40de419c81de274c26c63e0f23d91a3f |
scrrule.js | 9db73e9a3a24070de075da13fdea01ab |
exts.js | 868eb23af363b5790d16103d2dd94178 |
rules.json | 6c1f6ab3492a615404a70161303de746 |
manifest.json | fd7d90a5e31cd19bbc65095d722c1525 |
utils.js | bd14616118af50f6e0b886bd90144845 |
content-scripts-register-polyfill.4.0.0.js | 5bf61a91e003afb1e169e3e3e3be336cac |
app.html | 08785f3794a7ae9aab6b3fa669646794 |
background.js | 1de94fff2cb80f44d82d69f816139974 |
main.js | 6c19e1bf9a7eac2c9b44f5e5c0b76d39 |
gmail.js | 49c851c025506d0a570d75bc00c7605a |
csp.js | 15606d8d8d6ca797c2c98c20114619b4 |
exchangeSettings.js | 2dcf7f099c08f9d074994a0a4f996720 |
screen.js | 7d0defc1a08d5a58d95f5ca38509c8ef |
domain.js | bb0bc698eb64447a3ab581517273487b |
inj.js | 3d67fa8a26390e8819d6bd36a2c5959f |
set.js | 8049e7bd36a88f7a393b7ff0746a04db |
proxing.js | b4b2510d7ec41711ef29ddddddd4cab09a |
cmds.js | 0ebb9b78c38ae45884b85632fe087e49 |
machine.js | c43644bed7d94e3ec880af3195e4c906 |
extFiles.zip | 3113c21eee9704b14437edb5c6f29634 |
Domain:
statbrwsr.digital