Les performances et la sécurité s'affrontent une fois de plus dans l'attaque « Collide+Power »
Une autre semaine, un autre BWAIN !
Comme vous le saurez si vous avez écouté le podcast de la semaine dernière (indice, indice !), BWAIN est l'abréviation de Bug With An Impressive Name :
S3 Ep145 : Des bugs aux noms impressionnants !
C'est un surnom que nous appliquons lorsque les chercheurs d'une nouvelle attaque de cybersécurité sont tellement enthousiasmés par leur découverte qu'ils lui donnent un surnom convivial, enregistrent un nom de domaine personnalisé, créent un site Web personnalisé et lui conçoivent un logo spécial.
Cette fois, le nom Collide+Power inclut un caractère de ponctuation embêtant, ce qui est un plus dans la dénomination des bogues, mais un moins lors de l'enregistrement d'un domaine Internet. (Ironiquement, les noms de domaine sont autorisés à utiliser -, mais pas +).
Ainsi, le nom de domaine a dû être légèrement abrégé en https://collidepower.com, mais le site Web vous donnera quand même un aperçu du problème, même en soustrayant le signe d'addition.
Les chercheurs à l'origine de ce nouvel article sont Andreas Kogler, Jonas Juffinger, Lukas Giner, Martin Schwarzl, Daniel Gruss et Stefan Mangard de l'Université de Graz en Autriche, ainsi que Lukas Gerlach et Michael Schwarz du Centre CISPA Helmholtz pour la sécurité de l'information en Allemagne.
Nous n’allons pas essayer d’expliquer en détail les différentes formes de cette attaque, car les détails techniques sur la façon de prendre les mesures et la modélisation mathématique utilisée pour tirer des conclusions à partir de ces mesures sont complexes.
Mais le cœur du problème, si vous me permettez le jeu de mots partiel, est que la mémoire cache enfouie dans les puces des processeurs modernes, destinée à fournir une amélioration invisible et automatique des performances…
…n'est pas toujours aussi invisible qu'on pourrait le penser, et peut parfois divulguer tout ou partie de son contenu, même à des processus qui ne devraient pas être en mesure de le voir.
Comme son nom l'indique, la mémoire cache (on la prononce cash, comme en dollars et en centimes, et non cachet, comme pour respect et prestige, si vous vous êtes déjà posé la question), conserve des copies spéciales des valeurs de données de la RAM conventionnelle dans des emplacements cachés à l'intérieur du processeur. puce elle-même.
Si le processeur garde une trace des adresses RAM (emplacements de mémoire) que vous avez utilisées récemment et peut deviner assez bien celles que vous êtes susceptible d'utiliser à nouveau bientôt, il peut les conserver temporairement dans sa mémoire cache et ainsi accélérer considérablement votre deuxième accès à ces valeurs, et le troisième accès, le quatrième, et ainsi de suite.
Par exemple, si vous recherchez une série de valeurs de données dans une table pour convertir les pixels d'une image d'un format de couleur à un autre, vous constaterez peut-être que la plupart du temps, la table de recherche vous demande de visiter l'une des adresses RAM 0x06ABCC00 (ce qui pourrait être l'endroit où le code spécial pour le « pixel noir » est stocké) ou l'adresse 0x3E00A040 (qui peut être l'emplacement du code « pixel transparent »).
En conservant automatiquement les valeurs de ces deux adresses mémoire couramment nécessaires dans son cache, le processeur peut court-circuiter (au sens figuré, pas littéralement !) les futures tentatives d'accès à ces adresses, de sorte qu'il n'est pas nécessaire d'envoyer des signaux électriques à l'extérieur du processeur. sur la carte mère et dans les puces RAM réelles pour lire la copie principale des données qui y sont stockées.
Ainsi, les données mises en cache sont généralement beaucoup plus rapides d’accès que les données contenues dans la RAM de la carte mère.
De manière générale, cependant, vous ne pouvez pas choisir quels registres de cache sont utilisés pour stocker quelles adresses RAM, et vous ne pouvez pas choisir quand le processeur décide d'arrêter de mettre en cache la valeur de votre « code de pixel transparent » et de commencer à mettre en cache celle d'un autre programme. « clé cryptographique super-secrète » à la place.
En effet, le cache peut contenir un large mélange de valeurs, provenant d'un large mélange d'adresses RAM, appartenant à un large mélange de différents comptes d'utilisateurs et niveaux de privilèges, le tout en même temps.
Pour cette raison, ainsi que pour des raisons d'efficacité et de performances, même les programmes de niveau administrateur ne peuvent pas consulter directement la liste des adresses actuellement mises en cache, ni obtenir leurs valeurs, afin de protéger les données mises en cache contre la surveillance externe.
En tant que programmeur, vous utilisez toujours l'instruction du code machine « lire le code de pixel transparent à partir de l'adresse 0x3E00A040 », et le système d'exploitation décide toujours si vous êtes censé avoir accès à ces données en fonction de l'adresse numérique 0x3E00A040, même si le les données proviennent finalement directement du cache au lieu de la véritable adresse RAM 0x3E00A040.