Étude de Spectre : vulnérabilités hardware des processeurs en 2019

11 Jan 2019

Lors du 35ème Chaos Communications Congress, soit près d’un an après la première publication sur les vulnérabilités hardware des processeurs, appelées Meltdown et Spectre, un groupe de chercheurs de l’Université de Technologie de Graz, en Autriche, a parlé de l’état actuel des vulnérabilités hardware connues dans les processeurs. Spoiler : l’année qui vient de s’écouler nous a amené beaucoup plus de vulnérabilités à comprendre.

L’essentiel sur Meltdown et Spectre

Nous allons tout d’abord vous rappeler la nature de Meltdown et Spectre, et en quoi ils diffèrent.

C’est parce que les processeurs modernes peuvent exécuter des instructions dans le désordre que la vulnérabilité Meltdown est apparue. Cette caractéristique est particulièrement utile puisqu’elle accélère le traitement du code, mais dans certains cas, le processeur traite un code vulnérable aux erreurs qui ne devrait pas être exécuté. Autrement dit, le code est d’abord exécuté par le processeur, et ce n’est qu’ensuite qu’il s’avère que l’opération ne peut pas être terminée. Ce genre de situations se produisent précisément parce que les instructions sont exécutées dans le désordre.

Il est évident que les résultats de ces opérations ne seront pas transmis ou utilisés n’importe où, et pourtant ils laissent des traces au niveau de la micro architecture, dans la mémoire cache du processeur. De plus, ils peuvent en être extraits. Par conséquent, le cache peut être utilisé pour mettre la main sur des données qui ne seraient pas accessibles normalement, comme un mot de passe par exemple. Voici son fonctionnement : un programme peut demander l’accès aux données stockées, et le système va répondre de façon raisonnable que l’accès est refusé pour manque d’autorisation d’accès. Cependant, à cause de l’exécution dans le désordre des opérations, le mot de passe va tout de même se retrouver dans le cache, et il peut facilement être récupéré. En résumé, Meltdown peut arriver lorsque vous essayez d’exécuter une action injustifiée.

La vulnérabilité Spectre ressemble à Meltdown, mais même si elle est liée à l’accélération du calcul du processeur, elle vient de la fonction moderne de prédiction du branchement du processeur. En général, le cache peut anticiper, avec une certaine précision, que comme l’action B arrive généralement après l’action A, il peut exécuter l’action B avant que les résultats de A ne soient clairs. S’il a vu juste, et que l’action B a bien lieu, alors tout va bien ; mais si les résultats de A montrent que le processeur aurait dû exécuter l’action C au lieu de B, alors le processeur va tout simplement abandonner le branchement B, et passer à un autre où il doit achever l’action C.

La prédiction de branchement peut être formée, puisque dans la plupart des cas elle retient les modèles des séquences d’action, et par conséquent elle améliore les performances du processeur de façon significative ; si B a eu lieu plusieurs fois après A, le processeur va considérer en toute logique que dans une situation similaire il devra également exécuter B après A. Et pourtant il commet des erreurs ; parfois C arrive au lieu de B, même si la prédiction de branchement se souvient parfaitement que l’action A est généralement suivie de B.

Si vous préparez le système assez longtemps, en lui montrant qu’un branchement en particulier est le bon, qu’il est toujours exécuté, puis modifiez un paramètre pour qu’il devienne incorrect, le processeur va tout de même l’exécuter pour ensuite le révoquer, après avoir détecté qu’il aurait dû exécuter un autre branchement. Cependant, tout comme avec Meltdown, le résultat de cette action peut persister, dans le cache par exemple, d’où les informations peuvent être extraites.

Les conséquences sont assez similaires : Spectre ouvre une trappe pour un accès non autorisé aux données. Cet accès ne serait donné que lorsque la prédiction de branchement se tromperait, mais l’existence de cette simple probabilité nous indique que cela va arriver.

Un an plus tard : plus d’une vingtaine de nouvelles variantes de Spectre et Meltdown

Après avoir découvert les premières vulnérabilités Meltdown et Spectre, les chercheurs ont commencé à faire des recherches plus actives à ce sujet, et ils ont rapidement trouvé des problèmes similaires que seuls quelques petits détails différenciaient. Les développeurs de processeur ont également utilisé d’autres optimisations qui ont engendré des vulnérabilités similaires à Meltdown et Spectre. L’équipe de l’Université de Graz parle de 14 vulnérabilités similaires à Meltdown, et de 13 similaires à Spectre, soit un total de 27 vulnérabilités hardware du processeur, alors qu’au début de 2018 il n’y en avait que deux qui appartenaient à ces groupes.

Classification des variantes de Meltdown et Spectre détectées cette année

 

De plus, même si AMD a rapidement déclaré que ses processeurs n’étaient pas menacés par les vulnérabilités du groupe Meltdown, les chercheurs ont rapidement détecté une variante de Meltdown, appelée Meltdown-BR, qui fonctionnait parfaitement sur les processeurs AMD. À ce stade, les processeurs des trois plus grands fournisseurs internationaux (AMD, AMR et Intel) sont susceptibles d’être touchés par Meltdown et Spectre, ou du moins par une des variantes de ces deux groupes.

Heureusement, une bonne partie des différentes versions existantes ne fonctionne avec aucun d’entre eux (pas ARM, ni AMD ou encore Intel), ou du moins les testeurs n’ont pas réussi à les faire fonctionner. Et pourtant la plupart de ces vulnérabilités fonctionne au moins quelque part.

Les entreprises ont commencé à fournir des patchs pour les microcodes du processeur, les systèmes d’exploitation, et les programmes individuels en janvier 2018, dans l’objectif de mettre un terme à ces parasites. Malheureusement, Spectre et Meltdown sont des vulnérabilités hardware. Elles existent au niveau hardware, et il est donc impossible de les éliminer complètement à l’aide de correctifs logiciel.

Ainsi, un des patchs a été mis en place dans le noyau de Linux OS, mais il ralentissait trop le système, et a dû être supprimé du code après un certain temps.

Spectre est problématique puisqu’il cible différents composants de la micro architecture, et il faut donc concevoir un patch séparé pour chacun d’entre eux. Chaque patch a besoin d’avoir certaines fonctions désactivées, ou d’exécuter certaines actions supplémentaires, et va donc entraîner une baisse de performance encore plus importante.

En réalité, la performance est souvent et sévèrement affectée par les patchs, et c’est pourquoi un système corrigé fonctionne plus lentement qu’un système où tous les composants vulnérables du processeur sont complètement désactivés.

Solution radicale – retirer la partie vulnérable du processeur en perçant là où indiqué. Vous vous doutez bien qu’il s’agit d’une blague.

 

Le futur de Spectre et Meltdown

Intel a annoncé en octobre 2018 que ses nouveaux processeurs, c’est-à-dire la génération qui devrait sortir en 2019, présente une protection contre Spectre et Meltdown au niveau hardware. Mais ils ont tenu ces mêmes propos par rapport aux deux versions « basiques » qui, comme nous l’avons déjà dit, sont en réalité beaucoup plus nombreuses. AMD envisage également de corriger une des variations de Spectre dans la nouvelle version de l’architecture Zen 2 de ses processeurs, qui devrait être lancée en 2019. ARM a également promis de mettre à jour son hardware, affirmant que « tous ses prochains processeurs pourront résister aux attaques similaires à Spectre ».

C’est évidemment une bonne nouvelle, mais seulement pour les personnes qui vont acheter de nouveaux appareils. Toutes les personnes ayant acheté un ordinateur, un smartphone, ou tout autre appareil équipé d’un processeur Intel, AMD ou ARM en 2018, ou plus tôt, devront installer des patchs pour pratiquement tout, et donc réduire leur performance de façon significative. Il est fort probable que les gens ne prennent pas le temps de le faire.

Les fabricants de processeurs ont trop longtemps ignoré les vulnérabilités au niveau hardware, puisqu’ils n’optimisaient leurs processeurs que pour avoir une meilleure performance. Toutes ces optimisations ont un coût : certains aspects ont bel et bien été améliorés, mais d’autres ont engendré plus de problèmes. Éliminer ces vulnérabilités est désormais un véritable défi puisqu’elles sont profondément enterrées. Il convient toutefois de dire qu’exploiter ces vulnérabilités n’est pas si facile, ce qui nous laisse un peu d’espoir, du moins jusqu’à ce que la nouvelle génération de processeurs soit obsolète.