Logiciel malveillant Rilide : comment les extensions de navigateur modifient les cyberattaques

Écran d’ordinateur affichant un triangle rouge signalant la présence de logiciels malveillants

Présentation de Rilide

Rilide, également connu sous les noms de LumaC2 et CookieGenesis, est un logiciel malveillant sophistiqué qui cible les navigateurs basés sur Chromium pour détourner l’activité des utilisateurs et voler des données sensibles. Découvert en 2023, Rilide exploite les extensions de navigateur pour mener à bien ses attaques. Rilide abuse son composant d’extension de navigateur pour injecter des scripts malveillants dans les pages Web. Outre ses capacités d’exfiltration des données, il propose également une fonctionnalité avancée de vol de crypto-monnaies, avec manipulation de l’authentification à deux facteurs (2FA) pour les portefeuilles et les clients de messagerie les plus répandus.

Depuis début 2025, le laboratoire de recherche Trusteer a recensé plus de 50 000 sessions d’utilisateurs infectées, ce qui témoigne de l’ampleur de cette menace. Rilide mène actuellement une campagne mondiale, détectée par le laboratoire Trusteer, qui attaque l’Amérique du Nord, l’Amérique du Sud, l’Europe et le Japon.

Dans cet article, nous allons découvrir comment Rilide fonctionne au sein du navigateur via son extension et examiner les techniques qu’il utilise pour mener ses attaques, en particulier son impact sur les plateformes financières.

Les capacités de Rilide mettent en évidence le changement de l’environnement (informatique) des menaces, passant des injections Web traditionnelles utilisant un seul code JavaScript intégré à la page aux extensions de navigateur. Les extensions de navigateur facilitent de nombreuses fonctions qu’il serait difficile de réaliser sans elles. L’analyse suivante montre à quel point une extension est puissante et pourquoi les logiciels malveillants modernes ont tendance à les utiliser.

Man-in-the-browser : hier et aujourd’hui

Par le passé, la plupart des attaques de type « man-in-the-browser » étaient exécutées par des logiciels malveillants analysant la mémoire du navigateur pour identifier des modèles HTML spécifiques et en injectant une balise <script> directement dans le contenu en mémoire de la page. Malgré l’intention malveillante, ces scripts étaient toujours soumis aux mécanismes de sécurité du navigateur, tels que le fonctionnement dans un environnement en bac à sable, le respect de la politique de la même origine et le lien avec le cycle de vie de la page dans laquelle ils avaient été injectés.

Par exemple, les scripts injectés ne pouvaient pas accéder à des cookies ou à des ressources d’autres origines, ni persister ou s’exécuter une fois la page fermée.

En revanche, les attaques modernes utilisant des extensions de navigateur malveillantes surmontent la plupart de ces limitations. Les extensions fonctionnent indépendamment de toute page Web spécifique, ce qui leur permet de s’exécuter en permanence en arrière-plan. Ils disposent également de privilèges élevés, ce qui leur permet de contourner les restrictions liées à la même origine, d’accéder aux ressources du navigateur, telles que les cookies ou le stockage, et de rester actifs même lorsqu’aucune page n’est ouverte. Cette évolution a fait des extensions de navigateur un outil puissant pour les attaquants, offrant un niveau de persistance et de contrôle bien supérieur aux méthodes traditionnelles d’injection sur le Web.

Les extensions ont également introduit une modification du contexte d’exécution de JavaScript, qui présente ses propres avantages malveillants. Les injections Web traditionnelles s’exécutent dans le même contexte que le code de l’application Web, y compris les outils de sécurité. Toute preuve laissée de côté (comme des éléments de script, des requêtes de réseau, des variables js, etc.) pourrait rendre le logiciel malveillant détectable.

Outre le contexte de la page, il existe deux environnements JavaScript différents :

  1. Tout d’abord, il y a le contexte du script de contenu, qui permet d’accéder au document de la page mais qui est partiellement isolé de l’environnement de la page principale.
  2. De plus, il existe un contexte de code en arrière-plan (un service worker) qui n’a pas accès au script de contenu ni à l’environnement de la page principale.

Toutes les communications entre ces contextes se font via des interfaces du navigateur définies qui ne sont pas visibles pour la page ou ses développeurs. La plupart des comportements et des preuves d’extension sont isolés par conception, et la détection est particulièrement difficile si le document principal n’est pas modifié.

En plus d’offrir une meilleure évasion, le développement d’extensions de navigateur est également simple, grâce aux nombreuses fonctionnalités et autorisations intégrées fournies par les API des navigateurs modernes. L’analyse suivante montre comment les extensions facilitent le développement d’attaques complexes.

Compte tenu du contrôle, de la persistance et des capacités d’évasion accrus et de la facilité de développement qu’offrent les extensions, le passage des techniques man-in-the-browser traditionnelles aux attaques basées sur les extensions est non seulement compréhensible, mais inévitable, compte tenu de l’évolution des menaces basées sur les navigateurs.

Homme regardant un ordinateur

Renforcez vos renseignements de sécurité 


Gardez une longueur d’avance sur les menaces grâce à l’actualité et aux réflexions sur la sécurité, l’IA et bien plus encore, dans la newsletter hebdomadaire Think. 


Découvrir en détail l’extension de navigateur Rilide

Répartition du manifeste

Nous commencerons notre analyse de Rilide par le fichier manifeste, un composant essentiel qui décrit les fonctionnalités et les niveaux d’accès de l’extension, fournissant ainsi les premiers indices permettant de comprendre les capacités malveillantes de Rilide.

L’une des variantes analysées se présente comme une extension de Google Drive :

Code pour la description de l’extension du manifeste
Figure 1 : description de l’extension du manifeste

Plus loin, vous trouverez une liste des autorisations requises. La liste contient plusieurs fonctionnalités critiques des navigateurs, notamment :

  • « Scripting » : permet d’injecter et d’exécuter du code JavaScript sur des pages Web
  • « Cookies » : permet de lire, de modifier ou de supprimer les cookies du navigateur
  • « WebRequest » : observation et modification des requêtes réseau effectuées par le navigateur
  • « ClipboardRead/Write » : lecture et modification du contenu du clipboard utilisateur
  • « ActiveTab » : accède temporairement au contenu de l’onglet actif actuellement

Sous l’autorisation "host_permission", l’extension est autorisée à accéder et à interagir avec <all_ urls>, c’est-à-dire tout schéma, domaine, chemin et port pris en charge par le navigateur.

Les "Content scripts" sont également configurés pour s’exécuter sur toutes les URL à document_start, ce qui signifie qu’ils s’exécutent dès que le navigateur commence à charger la page, avant que tout contenu ne soit entièrement affiché.

Code montrant la configuration du script de manifeste
Figure 2 : configuration du script du manifeste

Le script main.js comprend des fonctionnalités générales de vol d’informations, tandis que gmail.js cible la page du client de messagerie Gmail. Néanmoins, tous les scripts sont injectés dans chaque page.

Sous "declarative_net_request", l’extension configure des règles pour supprimer plusieurs en-têtes de politique de sécurité de contenu (CSP). Cela permet à Rilide de contourner les restrictions de sécurité et d’injecter du contenu en ligne.

Sous "Background", le service worker de l’extension est configuré. C’est là que le logiciel malveillant surveille les événements du navigateur et établit la communication avec le serveur C2. Ensuite, nous nous pencherons sur l’analyse des scripts d’arrière-plan afin de mieux comprendre comment le logiciel malveillant suit les événements du navigateur et exécute sa stratégie d’attaque.

Analyse du script Background.js
Initialisation

Background.js contient un code d’initialisation configuré pour être exécuté lors de l’installation de l’extension. Il récupère les informations relatives à l’appareil, telles que les détails relatifs au processeur et au stockage, à l’aide des appels chrome.system et les données relatives aux extensions installées à l’aide de chrome.management. L’identifiant unique est généré à l’aide du module npm uuid (importé via jspm) et enregistré au niveau local. Enfin, tous les cookies sont récupérés via chrome.cookies.getAll avec un paramètre de filtre vide.

Code d’initialisation
Figure 3 : code d’initialisation

Ces données sont envoyées au serveur C2, et la réponse peut activer les capacités de proxy de l’extension. Les injections, les commandes et les paramètres des logiciels malveillants sont également récupérés lors de l’initialisation de l’extension.

La dernière partie de l’initialisation consiste à activer les règles de suppression du CSP, après quoi le logiciel malveillant est prêt à s’installer et à surveiller les événements du navigateur. Une fois de plus, nous voyons clairement les avantages de l’utilisation d’une extension de navigateur par rapport aux techniques traditionnelles d’injection sur le Web, qui permettent de collecter facilement toutes ces informations.

Nouvelles méthodes d’extraction de domaines

Les versions précédentes de Rilide intégraient directement les domaines C2 dans les fichiers JavaScript. D’autres variantes ont extrait des domaines en récupérant les détails des transactions d’un portefeuille Bitcoin donné.

La nouvelle variante analysée ici inclut du code conçu pour récupérer des domaines depuis un bot Telegram. Des appels périodiques pour récupérer les domaines sont configurés pour s’exécuter toutes les minutes à l’aide des alarmes Google Chrome.

Cette approche permet aux logiciels malveillants de changer facilement de domaine si l’un d’entre eux est détecté et bloqué.

Bien que cette variante ne contienne pas les tokens Telegram, cette méthode apparaîtra probablement dans les futures versions.

code pour l’extraction du domaine à partir du bot telegram
Figure 4 : extraction du domaine à partir du bot telegram

Prêt pour l’exfiltration des données

Le script de contenu envoie toutes les valeurs des éléments d’entrée de la page via chrome.exécution.sendMessage avec le type de message "new-grabber-info".

L’écouteur suivant est défini dans background.js pour transmettre les données au serveur C2.

code pour l’écouteur de données d’entrée
Figure 5 : programme d’écoute de données d’entrée

En outre, l’arrière-plan attend les messages "set-capture d’écran-Résultats".

Ces messages déclenchent la capture d’écran avec chrome.tabs.captureVisibleTab et en renvoyant les données au serveur C2.

code pour prendre une capture d’écran et transmettre les données
Figure 6 : capture d’écran et transmission des données

En utilisant ces méthodes, si l’utilisateur se connecte à un site bancaire, diverses données sensibles peuvent être volées. Ces informations incluent les noms d’utilisateur et les mots de passe, les numéros de compte, les codes PIN, les informations de carte de crédit, les réponses aux questions de sécurité et les informations sur les destinataires de transfert.

Dans la dernière partie des scripts d’arrière-plan, les appels périodiques pour récupérer les commandes et vérifier le proxy sont définis à l’aide de "chrome.alarms". Les alarmes de commande récupèrent une liste de commandes du C2 et les exécutent une par une.

L’alarme de vérification du proxy vérifie l’état de la connexion du proxy et en déclenche une nouvelle si nécessaire. Une fois les écouteurs configurés, l'exécution synchrone du script d'arrière-plan se termine.

cmds.js, que peut faire le logiciel malveillant ?

cmds.js contient du code qui facilite la réception d’une commande (à partir d’une liste prédéfinie) ainsi que les paramètres du C2 et le renvoi des résultats, le cas échéant.

Voici quelques commandes intéressantes :

  • "Extension" : activer une extension basée sur un identifiant donné
  • "Push" : créer une notification de navigateur avec le contenu récupéré et ouvrir un nouvel onglet en cliquant sur la notification
  • “Capture d'écran” : capturer le contenu de l’onglet visible en utilisant "chrome.tab.captureVisibleTab"
  • "History" : revenir à l’historique de navigation
  • "Cookies" : récupérer tous les cookies du navigateur, comme dans le code d’initialisation
  • "URL" : ouvrir un nouvel onglet avec l’URL indiquée

D’autres commandes permettent de modifier la configuration de l’extension, de récupérer les informations sur les appareils, l’URL actuelle, etc. Cet ensemble de commandes permet de modifier de manière dynamique le workflow et l’exécution du logiciel malveillant, ce qui le rend plus apte à attirer l’interaction de l’utilisateur. La plupart de ces commandes utilisent des fonctions d’extension Chrome intégrées, ce qui facilite le développement pour les auteurs de logiciels malveillants.

Script de contenu main.js : injections personnalisées et vol de données

Le script de contenu main.js commence avec la bibliothèque jQuery initialisée dans une fonction anonyme, entièrement intégrée en ligne sans importation externe. Cela est suivi par un code obscurci exécutant des fonctions malveillantes.

L’architecture d’extension de Chromium permet aux extensions de séparer les responsabilités d’injection et de les rendre plus difficiles à détecter. Le service worker télécharge et stocke les injections pendant l’étape d’initialisation, tandis que le script de contenu les lit et les exécute. Aucune requête Web n’a été envoyée dans le contexte de la page, ce qui aide à garder le logiciel malveillant indétectable. main.js itère toutes les injections récupérées, et si l’URL actuelle correspond à l’URL d’injection, il l’injecte.

Rilide utilise une méthode ingénieuse pour injecter des scripts dans le DOM.

code pour l’injection de script
Figure 7 : injection de script

Il crée un attribut document "onreset" avec l’injection comme gestionnaire d’événements. Il envoie ensuite immédiatement un événement "reset" personnalisé, qui exécute l’injection, et supprime enfin l’attribut.

Cet attribut est défini à un moment précis entre l’appel "setAttributes" et l’appel "removeAttributes", ce qui rend difficile la détection par les outils de sécurité.

Le dernier appel de fonction met en place l’écouteur générique du voleur de données.

Écouteur d’entrée du script de contenu (après désobfuscation et renommage des variables)
Figure 8 : écouteur d’entrée de scripts de contenu (après avoir supprimé désobfuscation et renommage des variables)

À l’aide d’un sélecteur jQuery, tous les éléments d’entrée sont sélectionnés et l’écouteur d’événements "change" est configuré.

L’événement "change"se produit chaque fois que la valeur d’un champ d’entrée est modifiée et perd la mise au point (l’utilisateur clique sur un autre élément). Par exemple, lorsqu’une victime se connecte à son compte bancaire, son nom d’utilisateur est collecté lorsqu’elle clique sur le champ de mot de passe, et le mot de passe saisi est volé lorsque l’utilisateur envoie le formulaire. Les données sont envoyées au service worker via l’exécution chrome.runtime.sendMessage, qui le transmettent ensuite aux serveurs C2.

Script de contenu gmail.js – dissimuler un vol de cryptomonnaies
 

L’objectif de ce script est de remplacer la demande d’autorisation de retrait 2FA par une nouvelle demande d’autorisation de dispositif. Nous supposons que cette approche permet aux clients de ne pas se rendre compte des retraits non autorisés, car ils sont plus susceptibles de percevoir la nouvelle autorisation du dispositif comme moins suspecte que les retraits eux-mêmes.

Le script commence par une initialisation en ligne de la bibliothèque jQuery et une vérification que l’emplacement actuel contient "mail.google" avant de commencer l’exécution. L’injection vérifie périodiquement la présence d’e-mails provenant de portefeuilles de cryptomonnaies populaires et, si elle est détectée, invoque la fonction correspondante du portefeuille.

code de recherche d’e-mails relatifs aux portefeuilles cryptographiques
Figure 9 : recherche d’e-mails relatifs aux portefeuilles cryptographiques

Les sélecteurs jQuery sont assez simples, utilisant des "divs" qui contiennent les noms des portefeuilles dans le texte.

Nous démontrerons l’injection personnalisée d’un fournisseur spécifique, bien qu’ils agissent tous de la même manière.

Le code recherche tout élément contenant le texte « Demande de retrait » et le remplace par « Autoriser un nouvel appareil ».

code pour modifier le texte de notification de retrait
Figure 10 : modification du texte de notification de retrait

Il recherche également des éléments span contenant le texte « retrait » pour remplacer le contenu de l’aperçu de l’e-mail.

Avant l’injection :

E-mail de notification de retrait original
Figure 11 : e-mail de notification de retrait original

Après l’injection :

E-mail de notification d’un nouvel appareil
Figure 12 : e-mail de notification de nouvel appareil

Le corps de l’e-mail lui-même se trouve de la manière suivante :

code pour la modification du contenu du corps d’un e-mail
Figure 13 : modification du contenu du corps d’un e-mail

En termes simples, le script trouve tous les éléments de la classe CSS "ii" qui ont un élément "div" descendant avec le texte « Vérifiez attentivement l’adresse ». Il extrait également le code d’autorisation en fonction de l’élément et du style du texte du code d’autorisation. Cette méthode d’identification des éléments n’est pas très stable, car de petites modifications du style, du texte ou de la structure peuvent l’interrompre.

HTML de l’e-mail de retrait
Figure 14 : HTML de l’e-mail de retrait

Enfin, le contenu HTML de l’e-mail est remplacé par un contenu codé en dur.

Contenu original :

notification de retrait originale masquée
Figure 15 : notification de retrait originale

Nouveau contenu :

nouveau contenu d’e-mail injecté
Figure 16 : contenu d’e-mail injecté

Ce mécanisme permet à l’acteur de la menace de retirer des cryptomonnaies sans avertir l’utilisateur des retraits.

Code proxy : de la preuve de concept au logiciel malveillant réel

Une autre fonctionnalité remarquable, mise en œuvre sans effort grâce aux extensions, est la fonctionnalité de proxy. Rilide permet de convertir le navigateur de la victime en un proxy HTTP, transmettant toutes les requêtes tout en utilisant les identifiants et les données de la victime.

Cette capacité est particulièrement dangereuse en cas de fraude financière, car les attaquants peuvent accéder aux portails bancaires, aux comptes commerciaux et aux plateformes de paiement sans déclencher de contrôles d’authentification supplémentaires. Ils peuvent initier des transactions, modifier les paramètres du compte ou siphonner des fonds sous couvert d’activité utilisateur légitime, contournant ainsi les mesures de sécurité traditionnelles comme le suivi des adresses IP. En se faisant passer pour la victime, les attaquants peuvent exploiter des mécanismes basés sur la confiance pour commettre des fraudes de manière inaperçue.

Cette fonctionnalité était remarquablement simple à mettre en œuvre puisqu’elle a été copiée directement à partir de CursedChrome, un projet éducatif démontrant une preuve de concept pour ce type d’attaque.

Le proxy fonctionne en utilisant l’assistant de service des extensions pour établir une connexion WebSocket avec le serveur C2 de l’attaquant. Cette connexion permet au service worker de recevoir les commandes envoyées par l’attaquant. Ces commandes dictent les actions du proxy, telles que l’envoi de requêtes ou la navigation sur des sites Web. Les demandes sont faites en utilisant les cookies collectés par la victime, et les réponses sont renvoyées au C2.

Exemple de code CursedChrome :

Code de la fonction d’initialisation de CursedChrome
Figure 17 : code de la fonction d’initialisation de CursedChrome

Exemple de code Rilide :

Code de la fonction startProxy de Rilide
Figure 18 : code de la fonction startProxy de Rilide

À part quelques différences de nom et la localisation de la définition de la fonction, le code reste le même. Ce projet est même livré avec un code backend et une interface utilisateur de gestion (UI), ce qui facilite la vie des pirates.

Rester en sécurité grâce aux extensions
 

Rilide illustre la façon dont les extensions de navigateur ont transformé l’environnement des menaces pour les attaques de type « man-in-the-browser ». En exploitant les capacités inhérentes aux extensions, les pirates acquièrent un contrôle sans précédent sur le navigateur, ce qui permet une exploitation sophistiquée et persistante qui dépasse de loin les limites des injections Web traditionnelles. Ce changement met en évidence le besoin croissant de vigilance et de défenses robustes, car la simplicité et la puissance des attaques basées sur les extensions en font un vecteur de choix pour les cybercriminels.

Pour se protéger, les utilisateurs doivent régulièrement vérifier les extensions de navigateur qu’ils ont installées et supprimer rapidement celles qui ne leur sont pas familières ou qui sont suspectes.

De plus, il est essentiel de surveiller les comptes e-mail pour détecter toute activité inhabituelle, comme des tentatives de connexion inattendues, et de garder un œil sur les portefeuilles de cryptomonnaies pour repérer les transactions non autorisées ou les actions inconnues. En restant proactif et prudent, vous pouvez contribuer à atténuer les risques posés par ce paradigme d’attaque en constante évolution.

IBM Trusteer vous aide à détecter les fraudes et les logiciels malveillants, à authentifier les utilisateurs et à établir une identité fiable tout au long du parcours client omnicanal. Plus de 500 organisations de premier plan utilisent Trusteer pour sécuriser les parcours numériques de leurs clients et soutenir la croissance de leur entreprise.

Indicateurs de compromission

Fichiers

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

 5bf61a91e003afb1e169e3e3be336cac

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

 b4b2510d7ec41711ef29ddddd4cab09a

cmds.js

 0ebb9b78c38ae45884b85632fe087e49

machine.js

 c43644bed7d94e3ec880af3195e4c906

extFiles.zip

 3113c21eee9704b14437edb5c6f29634

Domaine:
statbrwsr.digital 

Mixture of Experts | 12 décembre, épisode 85

Décryptage de l’IA : Tour d’horizon hebdomadaire

Rejoignez notre panel d’ingénieurs, de chercheurs, de chefs de produits et autres spécialistes de premier plan pour connaître l’essentiel de l’actualité et des dernières tendances dans le domaine de l’IA.

Solutions connexes
Services de réponse aux incidents

Améliorez le programme de réponse aux incidents de votre organisation, minimisez l’impact d’une violation et bénéficiez d’une réponse rapide aux incidents de cybersécurité.

Explorer les services de réponse aux incidents
Solutions de détection et de réponse aux menaces

Utilisez les solutions de détection et de réponse aux menaces d’IBM pour renforcer votre sécurité et accélérer la détection des menaces.

Découvrir les solutions de détection des menaces
Solutions IBM QRadar SOAR

Optimisez les processus de prise de décision, améliorez l’efficacité du SOC et accélérez la réponse aux incidents grâce à une solution d’automatisation intelligente et d’orchestration.

Explorer QRadar SOAR
Passez à l’étape suivante

Améliorez le programme de réponse aux incidents de votre organisation, minimisez l’impact d’une violation et bénéficiez d’une réponse rapide aux incidents de cybersécurité.

  1. Explorer les services de réponse aux incidents
  2. En savoir plus sur IBM X-Force