Les différents correctifs proposés à ce jour ne colmatent la vulnérabilité de nos processeurs que de manière imparfaite. Voici un zoom sur les différents patchs proposés et leur efficacité (ou pas).
Trois mois après la révélation retentissante des failles Meltdown et Spectre, on semble enfin entrevoir la fin du tunnel. Il y a quelques jours, Microsoft annonçait ainsi la diffusion des patchs matériels pour Spectre directement depuis le catalogue de Microsoft Update, quel que soit le modèle de PC, pour peu qu’il soit équipé d’un processeur Intel. Un grand soulagement. Les utilisateurs ne se perdront plus dans le labyrinthe des pages support des constructeurs, ce qui était une grande source de confusion.
Mais la situation est-elle vraiment réglée pour autant ? La page Meltdown, en tous cas, est définitivement tournée, tant sur Windows que macOS ou Linux. « Le problème est résolu. L’attaque peut être parée au niveau du système d’exploitation. Il n’y a donc plus aucun risque à partir du moment où le système est à jour », nous explique Clémentine Maurice, chargée de recherche au CNRS et travaillant à l’IRISA sur la sécurité des microarchitectures.
L’exécution prédictive, talon d’Achille du processeur
Coté Spectre, ce n’est pas si simple, car le problème se situe au plus profond du fonctionnement du processeur, au niveau de l’exécution prédictive. Quand un programme se déroule et qu’il intègre des boucles ou des fils d’exécution basés sur une condition logique, les processeurs actuels n’attendent pas que celle-ci soit vraiment réalisée : ils anticipent son résultat et exécutent les instructions qui leur semblent les plus probables, ce qui permet de gagner un temps énorme.
Mais l’attaque Spectre montre qu’il est possible d’influencer cette mécanique d’anticipation. Un attaquant peut inciter le processeur à exécuter une branche qu’il ne devrait pas exécuter. Il peut ensuite deviner certaines informations de manière indirecte par des canaux auxiliaires, notamment en mesurant les temps d’accès mémoire. L’attaque Spectre se présente sous deux variantes, Bounds Check Bypass (CVE-2017-5753) et Branch Target Injection (CVE-2017-5715), en fonction du type de fil d’exécution ciblé. Ci-dessous, voici deux exemples de codes présentés en janvier dernier par les chercheurs de l’université technique de Graz, qui constituaient l’une des équipes ayant découvert Meltdown et Spectre.
Supprimer totalement cette mécanique d’anticipation n’est pas envisageable. « Les performances chuteraient alors de manière catastrophique », souligne Clémentine Maurice. A titre d’exemple, un développeur a créé une version du jeu Doom sans aucune exécution prédictive. Au lieu d’avoir 30 images par seconde, on se retrouve avec une image… toutes les sept heures. Il faut donc trouver une approche plus subtile.
Plusieurs solutions ont été proposées jusqu’à présent. Côté logiciel, il est possible de placer des sortes de barrières dans le code permettant de bloquer la prédiction à certains moments critiques. Dans certains cas, on peut utiliser de simples instructions (« LFENCE »). Dans d’autres cas, on peut ajouter des « retpolines », une construction un peu bizarroïde créée par Google et qui neutralise la prédiction de branche en la piégeant avec des boucles infinies.
Ces barrières s’intègrent au travers des compilateurs de code qui, parfois, peuvent même les placer de manière automatique. « Le problème, c’est que le compilateur doit savoir exactement où les placer, ce qui n’est pas facile. Les règles implémentées ne sont pas bonnes et peuvent être contournées », nous explique Michael Schwarz, doctorant à l’université technique de Graz et membre de l’une des équipes de chercheurs qui ont révélé Meltdown et Spectre. Le développeur peut également ajouter ces barrières à la main, mais cela suppose qu’il maîtrise parfaitement l’impact de la faille Spectre sur son code. Ce qui n’est pas franchement évident.
Les microcodes d’Intel ont du temps à arriver
De son côté, Intel travaille depuis des mois sur des patchs qui mettent à jour le microcode des processeurs. Plusieurs techniques sont à l’œuvre : Indirect Branch Restricted Speculation (IBRS), Indirect Branch Predictor Barrier (IBPB), Single Thread Indirect Branch Predictors (STIBP). « L’idée est de faire en sorte que le processeur oublie ce qu’il a appris et ne puisse plus être piégé par un attaquant », précise Michael Schwarz. Le problème, c’est que ces techniques ne s’appliquent qu’à la variante Branch Target Injection.
Par ailleurs, seuls les microcodes pour processeurs Intel de sixième génération (Skylake) étaient disponibles jusqu’à il y a encore peu de temps. Les microcodes pour les générations Haswell et Broadwell avaient provoqué des pannes et ont été retirées in extremis. La bonne nouvelle, c’est qu’Intel a bien avancé. Le patron d’Intel Brian Krzanich vient de déclarer que toutes les familles de processeurs de dernière génération (sur les 5 dernières années) pouvaient désormais bénéficier d’une protection logicielle fiable. Il assure par ailleurs qu’une protection au niveau matériel sera appliquée aux nouvelles générations de processeurs, pour Meltdown et pour l’une des variantes de Spectre. L’autre (Bounds Check Bypass) devra continuer à être mitigée par des moyens logiciels pour l’instant.
D’autres zones d’ombre continuent d’exister. « Tous les patchs logiciels cherchent à parer les attaques venant de l’espace utilisateur vers l’espace kernel. Le cas des attaques entre espaces utilisateurs n’est pas réglé », poursuit Michael Schwarz. Un doute persiste également sur les attaques à distance, depuis un navigateur. Pour éviter qu’un attaquant puisse réaliser l’attaque Spectre, les éditeurs ont dégradé la précision des fonctions de mesure temporelle dans leurs API Javascript. « Le problème, c’est qu’il n’est pas très difficile de fabriquer des fonctions de mesure temporelle à la main », souligne le chercheur.
Pour l’instant, il faut vivre avec
Bref, Spectre n’est pour l’instant colmatée que de manière imparfaite, même si beaucoup de travail a déjà été réalisé. Il semble par ailleurs que le potentiel de cette faille n’ait pas encore totalement été exploré. Depuis sa révélation, deux autres variantes ont été révélés, SpectrePrime et SgxPectre. Selon Michael Schwarz, elles ne remettent pas en cause les correctifs développés jusqu’à présent, ce qui est rassurant. Mais on sent bien que ce domaine est encore bien mouvant et que le problème est là pour durer. « A court terme, il va falloir apprendre à vivre avec cette faille et faire en sorte de réduire la probabilité d’attaque. J’espère néanmoins que les recherches dans le domaine des processeurs vont se poursuivre et qu’un jour cette faille sera supprimée totalement », estime Michael Schwarz.
Heureusement, les attaques Spectre ne sont pas simples à mettre en œuvre. Contrairement à Meltdown, elles dépendent de la configuration matérielle et logicielle de l’ordinateur, ce qui exclue toute exploitation massive. Seuls des hackers de talent pourraient l’exploiter, dans les cadre d’attaques ciblées. Mais il ne faut pas s’imaginer que c’est impossible. « Un étudiant en informatique au niveau licence est capable de le faire », souligne Michael Schwarz.