attaquesChromeGoogleMenacessecurite informatiqueSpectreSpook.jsVulnérabilités

Comment l’attaque Spook.js fonctionne-t-elle ? | Blog officiel de Kaspersky

À titre de comparaison, une attaque d’hameçonnage semble assez logique : vous cliquez sur un lien, une page malveillante s’ouvre, vous saisissez certaines informations et le cybercriminel les vole. Maintenant prenons une autre situation : vous cliquez sur un lien et un cybercriminel vole vos données. Vous l’avez compris, aujourd’hui nous allons parler des pages malveillantes qui exploitent une fonction fondamentale du processeur pour voler les données sans que la victime n’ait à saisir des renseignements. La vulnérabilité en question est très difficile, voire impossible, à corriger.

En 2018, des chercheurs ont prouvé que ce scénario était théoriquement possible, en dévoilant les deux premières variantes de cette vulnérabilité de type Spectre. Trois ans plus tard, septembre 2021 a vu apparaître la toute première attaque réelle se servant de Spectre v1. Connu comme Spook.js, ce concept d’attaque est particulièrement compliqué mais nous allons essayer de le décortiquer.

Contexte de Spectre v1

Les deux premières attaques de ce type, Spectre et Meltdown, ont fait la une pour la première fois en 2018. Les attaques ont exploité le mécanisme de prédiction de branchement, conçu pour accélérer l’exécution des commandes, détecté dans tous les processeurs modernes.

Logo de la vulnérabilité Spectre

Lorsqu’un utilisateur saisit un mot de passe pour se connecter à un site, si le mot de passe est correct, un ensemble d’instructions s’exécute. Dans le cas contraire, c’en est un autre. Pourtant, et c’est là que la prédiction de branchement entre en jeu, avant de recevoir une réponse, le processeur commence à exécuter l’ensemble d’instructions qu’il pense le plus probable.

Dans notre exemple, si le mot de passe a été saisi correctement une centaine de fois dans le passé, le processeur part du principe qu’il en sera de même cette fois. S’il a raison, l’utilisateur profite de meilleures performances. Dans le cas contraire, le processeur abandonne les instructions exécutées de façon spéculative et exécute l’autre ensemble.

Lors d’une attaque avec la vulnérabilité Spectre, le malware essaie de lire une zone de données à laquelle le programme n’a pas accès. Lors de la première étape de l’attaque, plusieurs appels sont passés aux zones de données en libre accès, au moyen desquels le système de prédiction de branchement est  » entraîné  » pour réaliser l’opération de lecture interdite. Grâce à la prédiction de branchement, le processeur réalise des opérations en avance parce qu’il connaît le programme auquel il demande de lire les données, qu’il a d’ailleurs le droit de consulter. Mais après vérification, il s’avère que le programme n’est pas autorisé à accéder aux informations et les calculs exécutés de façon spéculative sont rejetés. Jusque-là, tout va bien ; mais les données lues par le processeur sont encore stockées dans le cache, la mémoire du processeur, pendant un certain temps.

Nous en arrivons à la partie la plus intéressante : étant donné qu’il est impossible de lire directement les données confidentielles du cache du processeur, le processus malveillant déploie une attaque dite par canal auxiliaire pour les voler. Cela implique de mesurer la vitesse d’accès à certaines informations. Si elle est relativement lente, cela signifie que les données sont dans le cache. Si elle est rapide, elles sont chargées depuis une RAM normale. Une suite déterminée de tentatives de lecture provoque la divulgation des informations confidentielles.

Nous avons donc une faille majeure dans le processeur et la seule façon de la corriger c’est en désactivant complètement la prédiction de branchement, et donc d’affecter sérieusement les performances. Cela étant dit, les attaques de type Spectre ont certaines limites :

  • Le cybercriminel doit pouvoir exécuter le code du programme sur l’ordinateur cible ou sur le dispositif mobile ;
  • Le cybercriminel a besoin d’un programme chiffré cible spécifique pour créer les conditions favorables à la réussite de l’attaque ;
  • Même si l’attaque fonctionne, l’extraction des données est extrêmement lente, avec des dizaines ou des centaines de bytes par seconde, et la lecture des erreurs est loin d’être impossible ;
  • De façon générale, le vol des données confidentielles recherchées, comme les mots de passe, les clés de chiffrement et autres, exige une combinaison de conditions.

Spook.js — une application de Spectre v1 dans la vie réelle

Nous pourrions en conclure que Spectre n’est pas si dangereux que cela. Après tout, si un cybercriminel peut exécuter un code sur un ordinateur cible, il serait beaucoup plus simple d’exploiter une des nombreuses vulnérabilités du système d’exploitation ou des programmes installés pour élever les privilèges et voler les données.

C’est vrai, mais les sites Web actuels contiennent aussi une grande quantité de codes de programmes qui sont exécutés sur l’ordinateur de la victime, dans le navigateur. C’est de cette façon que Spook.js exploite la vulnérabilité : une page infectée se charge, le navigateur exécute le code et le cybercriminel vole les données confidentielles.

Les auteurs de ce rapport ont montré quelques attaques concrètes. Tout d’abord, ils ont volé le mot de passe utilisateur de Tumblr. Ensuite, ils ont volé les données de LastPass. Enfin, ils ont intercepté une image que l’utilisateur a téléchargée à partir d’un espace de stockage privé sur un serveur de Google.

Une fonctionnalité du navigateur Google Chrome rend tout ce processus réalisable. Depuis que des informations ont été publiées sur Spectre, les développeurs de Chrome ont pris des mesures pour repousser les potentielles attaques en forçant les sites Internet à charger en isolement. Comme chaque site crée son propre processus, le code malveillant d’une page ne peut pas être utilisé pour voler les données à partir d’une autre ressource. Il y a une exception : les multiples pages d’un même site ou domaine sont regroupées dans un même processus de navigateur. Si le code malveillant (écrit en JavaScript, d’où le .js dans le nom de l’attaque) est exécuté sur l’une de ces pages, les données des autres pages peuvent être volées.

Attaque Spectre.js sur Tumblr

En tant que blog collectif, Tumblr peut héberger un code malveillant, du moins en théorie. Ainsi, avec une page malveillante ouverte dans un onglet, si un utilisateur essaie de se connecter au compte du service dans un autre onglet, le navigateur sauvegarde les informations et saisit automatiquement le nom d’utilisateur et le mot de passe, que le code malveillant peut voler.

En exploitant la vulnérabilité Spectre, une attaque peut interagir tangentiellement avec un autre onglet du même site et voler les données de façon indirecte. Une attaque réussie qui utilise cette approche ne laisse presque aucune trace.

Attaque Spectre.js sur LastPass

L’attaque qui vise le gestionnaire de mots de passe LastPass est différente puisque le code utilisé pour voler les données en exploitant Spectre v1 a été intégré dans une extension malveillante de Google Chrome. L’extension LastPass s’exécutait aussi dans le navigateur. Dans certains cas, les extensions sont aussi exécutées dans un processus de navigateur commun, ce qui rend possible le vol des données.

Attaque Spectre.js sur Google Cloud Storage

Un autre exemple est l’utilisation d’attaques qui visent Google Cloud Storage. L’onglet d’un navigateur contient une page malveillante hébergée sur sites.google.com. Un autre laisse l’utilisateur télécharger des images à partir de son espace de stockage privé sur la suite de services de Google. Dans ce cas, un cybercriminel peut utiliser un code malveillant pour accéder aux images.

Comparaison de l'image originale avec une volée de Google Cloud Storage grâce à une attaque Spook.js

Image originale (à gauche) et image volée de Google Cloud Storage grâce à une attaque Spook.js. Source

Limites de cette méthode

Les chercheurs ont montré comment cette attaque peut être lancée sur plusieurs processeurs, dont certains particulièrement modernes comme ceux d’Intel ou même l’Apple M1 basé sur une puce ARM. Dans tous les cas, l’attaque a été faite sur Google Chrome. En principe, plusieurs fonctionnalités uniques du navigateur rendent Sppok.js possible. D’autres navigateurs basés sur Chromium, comme Microsoft Edge, sont aussi vulnérables à cette attaque.

Pourtant, il y a certaines limites. Il y a d’abord la lenteur du vol des données, entre 400 et 600 bytes par seconde selon le processeur, et c’est pour cette raison que le fichier choisi pour la dernière démonstration est très petit. Il y a ensuite le grand nombre d’erreurs lorsque les données sont dérobées du cache du processeur. Jusqu’à 4 % des données sont incorrectes. D’où les artefacts dans la copie volée de l’image.

L’attaque échoue avec les processeurs AMD ou sur Mozilla Firefox, puisque les programmes JavaScript fonctionnent différemment. Les chercheurs n’excluent pas la possibilité de réussir une attaque qui vise les puces AMD ou le navigateur Firefox, mais ils devraient faire d’autres études pour le vérifier.

Enfin, pour lancer une attaque il faut d’abord charger le code malveillant sur une page ayant le même nom de domaine, comme dans le cas de blogs ou de stockage collectifs. Si cette méthode est utilisée pour le site d’une banque, par exemple, il est fort probable qu’elle n’aboutisse pas.

Ne paniquez pas

Cette étude de Spook.js est importante parce que, pour la première fois, les chercheurs ont pu prouver un scénario assez réaliste de l’exploitation d’une des vulnérabilités de type Spectre. Néanmoins, il y a très peu de chance de subir une attaque de ce genre dans le monde réel. Tout d’abord, les développeurs de Google Chrome, grâce à cette étude, ont renforcé le mécanisme qui permet d’isoler les sites chargés d’un autre. Ensuite, les cybercriminels disposent de méthodes beaucoup plus simples pour voler les données des utilisateurs, qu’il s’agisse d’un malware traditionnel ou d’ingénierie sociale, et cette attaque requiert une connaissance approfondie des processeurs modernes de bas niveau.

En tant que travail scientifique, Spook.js a été conçu pour altérer l’environnement du programme en introduisant de nouvelles recommandations pour la sécurité du site. Par exemple, les auteurs proposent de déplacer l’autorisation des pages vers un nom de domaine différent. Les études ultérieures trouveront peut-être des méthodes permettant de simplifier ces attaques, mais il est fort probable qu’elles amènent surtout l’adoption d’autres mesures pour renforcer la sécurité. Même si les vulnérabilités de type Spectre peuvent être exploitées en masse, les moyens de protection sont les mêmes que pour n’importe quel malware. Les fournisseurs de solutions de sécurité vont tout simplement ajouter ces nouveaux types d’attaques à la liste de celles à surveiller et à bloquer avant leur exécution.

Il est aussi possible que les chercheurs découvrent une fonction des vulnérabilités de type Spectre qui exige un remaniement plus important de la totalité de l’écosystème informatique actuel. Cette situation est très peu probable. N’oublions pas que trois ans se sont écoulés entre la présentation d’une vulnérabilité théorique et sa première attaque pratique (et en plus avec de nombreuses limites).

La vulnérabilité de type Spectre pourrait aussi être utilisée pour les attaques ciblées lorsque les bénéfices potentiels des données volées sont supérieurs au coût de l’opération. Même si ce scénario est pertinent pour votre entreprise, vous pouvez facilement rendre l’attaque plus difficile en utilisant différents navigateurs pour divers contenus. Par exemple, n’ouvrez pas les pages et les services du site qui contiennent des informations sensibles avec le même navigateur que vous utilisez pour le divertissement en ligne. Dans l’idéal, utilisez un environnement isolé, une machine virtuelle ou un dispositif à part pour vos données confidentielles.