Passer au contenu

GPU Fingerprinting : quand votre carte graphique joue les mouchards

Les algorithmes passent déjà leur temps à traquer les utilisateurs sur la toile, mais il apparaît désormais que les GPU pourraient jouer le rôle d’agent-doubles dans ce pistage à grande échelle.

Nous savions déjà qu’ils étaient désormais visés par des virus; une équipe internationale de chercheurs français, israéliens et australiens vient de développer une nouvelle technique d’exploitation, capable d’identifier des utilisateurs sur la base d’une “empreinte” laissée par le GPU d’un système. Cette preuve de concept vise à démontrer qu’elles peuvent ainsi être exploitées par des acteurs peu scrupuleux afin de collecter des données sur l’activité en ligne des internautes.

Toute cette technique repose sur un constat conceptuellement très simple. Sur une chaîne de production, il est impossible d’obtenir deux éléments parfaitement identiques. C’est une problématique centrale dans l’industrie; il existe des notions comme la tolérance qui permettent d’assurer un certain degré d’homogénéité sur l’ensemble de la production. Mais certains paramètres sont trop fins pour être contrôlés avec une précision absolue. Il restera toujours quelques différences subtiles entre deux unités.

Le diable est dans les détails

Au niveau des cartes graphiques, cela se traduit par de petites variations au niveau des performances. Celles-ci sont assez souvent négligeables en pratique, mais elles peuvent toutefois être quantifiées par des outils d’analyse très précis. Et c’est un point extrêmement important, car cette variabilité est unique pour chaque unité qui sort des lignes de production.

C’est ce point qui a été exploité par les chercheurs pour démontrer leur approche. Ils ont développé un script basé sur WebGL, une librairie graphique qui participe à l’affichage de contenus 3D dans les navigateurs. Ce script exploite alors la capacité de WebGL à faire tourner des petits bouts de code (GLSL, pour être précis) sur des sous-unités précises du GPU.

Or, à cause des petites différences liées au processus de fabrication mentionnées ci-dessus, ces sous-unités affichent toutes des performances très légèrement différentes. Ces dernières sont alors compilées pour en extraire une sorte d’empreinte digitale unique, d’où le terme anglais de “fingerprinting”. Celle-ci permet ensuite d’identifier individuellement une unité… et donc théoriquement de suivre l’utilisateur à la trace. Et cela concerne aussi les appareils équipés de cartes dédiées que de GPU intégrés, comme les smartphones, Chromebooks, et autres appareils plus modestes.

Les différences de performances entre deux GPU, synthétisées sous forme de graphique. © Laor et. al.

Une empreinte unique et tenace

C’est un problème, car il s’agit d’une empreinte extrêmement tenace. En effet, les techniques de fingerprinting les plus courantes souffrent presque toutes du même souci : de nombreuses empreintes peuvent évoluer au fil du temps, ce qui limite leur intérêt sur la durée. Mais dans le cas des travaux de ces chercheurs, il s’agit d’une empreinte basée presque entièrement sur des paramètres physiques. Elle est donc particulièrement stable, et donc exploitable sur une durée prolongée.

Les chercheurs ont remarqué qu’une fois intégrée à un algorithme de tracking de premier plan, cette approche permettait d’augmenter la durée médiane de pistage de 67%. De plus, l’équipe de recherche affirme que le processus ne prend que 8 secondes en moyenne; un délai encore relativement long, mais qui permet déjà d’envisager une utilisation en conditions réelles. Ils préviennent également que le développement de l’infrastructure web pourrait rendre cette surface d’attaque encore plus vulnérable à l’avenir.

L’équipe a par exemple exploré la plateforme WebGPU, qui permettra bientôt de faire tourner des compute shaders à travers un navigateur. Très sommairement, les compute shaders sont des petits programmes qui permettent de “détourner” un GPU de sa tâche primaire; au lieu de s’occuper du rendu, elle peut se mettre au service du système en réalisant d’autres tâches diverses et variées. Du pain béni pour ceux qui cherchent à les exploiter.

D’après les chercheurs, cette approche permettra de faire chuter la durée nécessaire pour prendre l’empreinte de 8 secondes à 125 millisecondes. Cela signifie qu’une simple visite de quelques secondes sur un site web lambda suffirait pour identifier individuellement le GPU de l’utilisateur. Avec tout ce que cela implique en termes de protection des données personnelles.

Un problème structurel difficile à régler

L’autre problème de cette “vulnérabilité”, c’est qu’elle est difficilement réparable, car elle dépend directement de la structure et du processus de fabrication des GPU. Les chercheurs suggèrent plusieurs pistes distinctes; toutes cherchent à éviter la comparaison entre les sous-unités, indispensable pour établir la signature. Ils proposent ainsi de restreindre l’accès des pages web à une seule sous-unité du GPU, ou encore de randomiser l’attribution des sous-unités aux différents processus. Mais aucune des solutions proposées ne permet de régler entièrement le problème sans consentir à un gros sacrifice du côté des performances.

La bonne nouvelle, c’est qu’il ne s’agit pas encore d’une technique exploitée à grande échelle par les pirates. Les acteurs concernés disposent donc d’un certain temps pour réfléchir à une vraie solution. D’après HotHardware, Intel, ARM, Google, Mozilla, and Brave ont déjà été avertis par l’équipe. De son côté, Khronos, le développeur à l’origine de WebGL, a annoncé le lancement d’une étude technique à grande échelle afin de traiter le mal à la racine. Dans l’idéal, ils y parviendront avant que l’exploitation de ces signatures de GPU ne devienne monnaie courante.

Le texte de l’étude est disponible ici.

🟣 Pour ne manquer aucune news sur le Journal du Geek, abonnez-vous sur Google Actualités. Et si vous nous adorez, on a une newsletter tous les matins.

1 commentaire
Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Mode