Meltdown et Spectre : un point sur les deux failles

Publié le 05/01/2018 à 18:19 par
Imprimer

Suite aux informations qui circulaient ces derniers jours (voir notre actualité), Project Zero, le groupe de sécurité de Google a décidé d'avancer la date de l'embargo concernant non pas une, mais deux failles massives qui s'attaquent au fonctionnement interne des processeurs.

Deux failles distinctes ont été dévoilées simultanément (ce qui explique la confusion entretenue ces dernières heures par certaines sociétés dont Intel), Meltdown et Spectre .

Meltdown, exploitation anormale des caches, ne touche qu'Intel à ce jour

La première faille, Meltdown (CVE-2017-5754), est celle qui était évoquée ces derniers jours. Il s'agit d'une faille qui permet de bypasser les mécanismes d'isolation mémoire entre mémoire classique (utilisée par les applications) et mémoire kernel (utilisée par le noyau du système d'exploitation, et protégée normalement par des mécanismes hardware dans le CPU). Meltdown est une attaque side channel  qui s'attaque à une faille de certains processeurs OOO (Out Of Order, la plupart des processeurs performants modernes depuis le Pentium Pro) qui, dans leur mécanismes d'exécution spéculatifs, peuvent non seulement lire des données mémoires protégées mais aussi exécuter des instructions sur ces données mémoires.

Le papier publié par l'université autrichienne de Graz (qui a trouvé cette faille en simultanée avec l'équipe de Google) s'accompagne d'explications détaillées  qui montrent qu'il est possible de lire tout type de mémoire à partir d'un process malicieux, y compris côté serveur de bypasser toutes les protections de type VM/Hyperviseur/Docker.

Cette vulnérabilité est massive, mais on peut la contourner en forçant une isolation plus forte au niveau du système d'exploitation (voir notre article précédent sur l'implémentation KPTI du noyau Linux).

Meltdown ne concerne, pour l'instant, que les processeurs Intel et n'a pas été démontré de manière effective ailleurs. Les processeurs Intel ne respectent pas l'isolation kernel de la mémoire dans leur algorithme d'exécution spéculative, et c'est cette faille qui est exploitée.

A noter qu'Apple a également indiqué avoir patché iOS et tvOS  pour Meltdown sans préciser si la faille touchait précisément ses architectures ARM custom, ou s'il s'agissait juste de protéger les versions x86 d'iOS et de tvOS utilisées pour les simulateurs fournis avec ses outils de développements.

Nombre de systèmes d'exploitations ont déjà été patchés, c'était le cas de MacOS en novembre, Microsoft est en cours de déploiement de son patch, et dans le monde Linux le patch est en cours de finalisation également. Vous trouverez plus d'informations sur le site mis en place pour l'occasion  avec des liens directs vers les différents fournisseurs de matériel et de système d'exploitation (ou de solutions de virtualisation). Comme nous l'indiquions dans notre news précédente, au delà de quelques benchmarks théoriques assez spécifiques (notamment autour des I/O), l'impact pour le grand public sur les performances de ces patchs devrait être réduit. Pour le monde serveur, de multiples benchmarks montrent un impact, parfois dans des cas d'école, parfois d'autres non, qui semblent toucher plus spécifiquement les logiciels type base de données.

Il est impératif, vu la criticité du problème, d'appliquer ces patchs sur les systèmes utilisant un processeur Intel, étant donné qu'elle est relativement facile a exploiter.

Spectre, deux failles sur le même thème, qui touchent tout le monde

En parallèle à Meltdown, une autre faille a été dévoilée baptisée Spectre. Il s'agit toujours d'une variation sur le même thème, à savoir tenter d'exploiter les mécanismes d'exécution spéculative des processeurs. Il est difficile de classer la gravité des failles, dans un sens elle est moins grave que Meltdown car elle ne permet pas de s'attaquer à la mémoire noyau directement (Meltdown repose sur le bug d'implémentation spécifique des architectures Intel) mais uniquement à la mémoire "utilisateur".

Le papier décrit deux attaques distinctes. La première, connue sous le nom de CVE-2017-5753 (bounds check bypass) permet à un process d'accéder, dans certains conditions un peu plus complexes, à la mémoire d'un autre process (ou forcer une VM a partager des données qu'elles ne devrait pas, a noter que Google Project Zero a publié un PoC permettant, dans certaines conditions assez précises/complexes, d'attaquer la mémoire kernel de manière indirecte). Contrairement à Meltdown dont l'exploitation est triviale, il faut ici connaître les spécificités du programme que l'on attaque pour réussir à l'exploiter (rien d'impossible, bien évidemment !).

Le groupe Google Project Zero a montré que cette attaque était exploitable aussi bien sur les CPU Intel, AMD (FX et APU), et ARM (un Cortex A57 à été testé). Si tous les processeurs sont exploitables, c'est que tous les modèles OOO modernes reposent, dans les grandes lignes, sur l'algorithme de Tomasulo , du nom de l'ingénieur qui l'a développé en 1967 chez IBM.

Virtuellement, tous les systèmes (du serveur au smartphone) sont vulnérables à cette attaque pour laquelle des PoC existent même en Javascript (pour bypasser les barrières des VM qui isolent le code Javascript de vos différents onglets), ce qui la rend assez grave. Des méthodes de mitigations, aussi bien au niveau des compilateurs, des navigateurs, et des systèmes d'exploitations sont en cours de développement et des patchs sont attendus rapidement pour limiter le problème.

Côté navigateurs, Firefox a publié une première salve de modifications  pour éviter un certain type d'attaque (celles qui mesurent le temps entre deux instructions, en réduisant la résolution des instructions de mesures) mais ce n'est qu'un début, des changements plus importants devraient intervenir dans de prochaines versions au niveau de la VM Javascript. Google et Apple ont indiqué que les prochaines versions de Chrome et Safari ajouteraient des protections spécifiques également.

La seconde variante de Spectre (CVE-2017-5715, branch target injection), est cette fois spécifique une fois de plus à Intel et s'attaque aux mécanismes de branchement d'Haswell en permettant à un process root, dans un environnement virtualisé, d'accéder à la mémoire de l'hyperviseur. Intel, pour corriger ce problème, a déployé une mise à jour de microcode qui ajoute de nouvelles possibilités pour contrer de manière logicielle le problème via de futurs patchs dont on ne connaît pas encore forcément l'impact pratique (on notera la sortie sur le sujet de Linus Torvalds ).

En bref

Si Intel a tenté de minimiser par sa communication la manière dont il était touché par ces problèmes, en pratique, ce sont bien ses processeurs qui sont touchés le plus fortement à court terme avec la faille critique Meltdown. L'impact des patchs, pour les utilisateurs grand public devrait être relativement nul sur les performances mais dans des situations spécifiques et des charges serveurs, l'impact sur les performances pourra être ressenti ce qui ne ravira pas les clients Pro d'Intel (un premier exemple concret est Epic, derrière le jeu Fortnite à indiqué avoir constaté une très forte augmentation de la charge CPU  suite à l'application du patch Meltdown sur AWS, ce qui cause des problèmes de login sur son titre). En tentant de mélanger les deux failles dans sa communication à la presse, la société ne sort pas non plus grandie d'autant plus qu'une deuxième faille, dans la famille Spectre, s'attaque spécifiquement là aussi à ses processeurs !

Malgré tout, Spectre est de loin la vulnérabilité qui nous préoccupe le plus dans le sens ou l'on peut imaginer bien d'autres variantes que les deux évoquées par Google (on vous recommande si vous souhaitez plus de détails la lecture de ce post assez long ), dont certaines liées à des architectures précises (comme le cas de celle d'Haswell).

Et si AMD (probablement un peu vexé d'avoir été pointé du doigt par Intel) s'est empressé de contre communiquer en indiquant ne pas être vulnérable à deux des trois PoC présentées aujourd'hui (ce qui est vrai), il faut rester relativement prudent tant l'on risque de voir des variantes de Spectre se multiplier dans les années à venir et qu'il ne semble pas y avoir de solution miracle, à part patcher les failles trouvées au fur et à mesure qu'elles seront rendues publiques.

La complexité des scénarios d'utilisation modernes des processeurs, entre le code Javascript dans les navigateurs qui ouvre des portes à tout le monde (littéralement dans le cas des publicités, sans parler du futur potentiel désastre qu'est WebAssembly !), mais aussi l'utilisation mutualisée dans les Cloud qui se multiplie en baissant toujours plus les barrières de sécurité (le passage des VM aux solutions types Docker) ont massivement multiplié les surfaces d'attaque. Les modèles de sécurité, conçus en grande partie durant les 50 dernières années, vont devoir être réévalués sérieusement par toute l'industrie car l'on risque de reparler pendant encore un long moment des variantes de Spectre.

Vos réactions

Top articles