Difficile d'y avoir échappé en ce début d'année 2018 si vous suivez l'actualité technologique. En effet, début janvier, ont été révélées par le Project Zero porté par Google les failles Spectres et Meltdown.

Il s'agit de failles matérielles. Pour une fois, ce n'est pas un logiciel qui est mis en cause mais la façon même de fonctionner des processeurs, qui peut entrainer des fuites de données. Le processeur est l'élément central de tout appareil électronique, il traite toutes les instructions des programmes et manipules toutes les données traitées. Autrement dit, toutes les données présentes sur votre ordinateur ou votre téléphone sont un jour ou l'autre passées par votre processeur.

meltdown_spectre

Donc le matériel commet des erreurs ?

Oui, en quelque sorte. Pour traiter les instructions d'un programme, le processeur charge l'ensemble des instructions et des données nécessaires en mémoire puis lit le programme instruction par instruction. Chaque instruction permettant de manipuler une partie des données.

Au début de l'informatiques, le procésseur et la mémoire fonctionnaient main dans la main en tournant à la même vitesse. A chaque cycle de procésseur, la mémoire faisait un cycle. Autrement dit, les deux éléments étaient synchronisés. Cependant, cette méthode posait plusieurs problèmes, elle empêchait les processeurs de monter en fréquence et surtout lorsque le processeur enoyait une instruction à la mémoire pour qu'elle lui envoie une instruction ou une données, celle-ci mettait plusieurs cycles à répondre et pendant ce temps, le procésseur ne pouvait rien faire.

Pour remédier à ces problèmes, les ingénieurs on désynchronisé les deux éléments pour permettre au processeur de tourner plus vite que la mémoire et pour lui permettre de continuer à travailler en attendant que la mémoire réponde à ces requêtes. Pour cela, les ingénieurs ont développés la prédiction de branchement.

Quoi ? Mon processeur fait des prédictions ?

Oui, mais pas avec une boule de cristal. En fait, il s'agit plus d'anticipation que de prédiction.

Lors d'une instruction conditionnée, le processeur va estimer que la condition est viable et exécuter en parallèle l'instruction suivante. Mais si l'instruction est fausse, il éffacera le travail effectué et reprendra l'instruction qu'il devait réellement traiter.

Si l'on transpose cela dans la vie courante, on pourrait imaginer le cas suivant :

Le matin, j'ouvre le volet electrique, s'il ne pleut pas je mets mon manteau en laine, sinon, je mets mon ciré. En suivant ces instructions, vous devez donc ouvrir le volet, attendre qu'il soit complètement ouvert, regarder s'il pleut ou non et en fonction du temps, choisir le manteau que vous allez mettre. Mais les réveils étant difficiles et puisque 4 fois sur 5 il ne pleut pas quand vous partez le matin, vous décidez d'enfiler votre manteau de laine pendant que le volet est en train de s'ouvrir. Quatre fois sur cinq, vous gagner su temps, mais la 5ème fois, vous en perdez car vous devez retirer votre manteau de laine pour mettre votre ciré. Mais au final, vous gagner globalement du temps en anticipant 4 fois sur 5 la bonne action à réaliser. Votre processeur fonctionne exactement comme cela lrosqu'il traites les instructions d'un programme.

Alors qu'est-ce que Spectre ?

Le problème est qu'en anticipant l'action, le processeur exécute une instruction sans savoir s'il en a le droit ou non. Ce n'est qu'à la fin de la vérification de la condition qu'il vérifiera s'il pouvait ou non faire l'action qu'il vient de réaliser. Un programme malveillant peut donc forcer le processeur à exécuter une action erronée pour récupérer les données d'un autre programme.

Dans notre exemple du dessus, c'est un peu comme si un programme disait : J'ouvre le volet electrique, s'il fait beau je prends le manteau du voisin sinon je prends mon manteau. Le processeur va estimer que vous pouvez prendre le manteau du voisin et vous le donner. Jusqu'à ce qu'il finisse d'exécuter la condition et qu'il se rende compte que vous n'avez pas le droit d'accéder à la maison du voisin pour prendre son manteau.

La faille Spectre fonctionne comme cela. Un programme malicieux va forcer le processeur à faire une mauvaise prédiction pour lui faire lire des données auxquelles il n'est pas sensé avoir accès. Et lorsque le processeur lit la données, il la stocke temporairement dans un cache (jusqu'à ce qu'il se rende compte que le programme n'avait pas le droit de la lire et la supprime). Mais pendant un court laps de temps, une données non légitime est présente dans le cache du processeur et peut être lu par un programme malveillant.

Concrètement, si un tel programme malveillant tourne sur votre ordinateur et que vous consulter votre messagerie en même temps, il pourra récupérer votre mot de passe au moment où il sera traité par votre processeur pour être envoyé pour vous identifier.

Mais c'est super dangereux alors ?

Pour l'instant, et avec les informations que j'ai pu lire et trouver, j'avoue que j'ai du mal à me faire un avis définitif. En théorie oui, cette faille est ultra critique. Cependant, dans les faits, lorsqu'un programme démarre, il prend une place aléatoire en mémoire en fonction de l'espace disponible. Dès lors, il faudrait que le programme malveillant fasse faire des milliards de fausses prédictions au processeur avant que la bonne donnée ne se retrouve dans le cache du processeur. Maintenant que cette faille est connue, il est fort à parier que les antivirus vont intégrer une analyse comportementale pour bloquer les programmes faisant faire trop de fausse prédictions au processeur.

Le moyen le plus efficace serait de connaitre l'emplacement mémoire où se trouve la donnée souhaitée pour la récupérer directement, mais cette méthode est extrèmement complexe car il faut être capable d'anticiper le fonctionnement de tout le système (système d'exploitation, antivirus, navigateur...) pour estimer l'endroit où se trouve la donnée voulue et faire faire une fausse prédiction au processeur afin de la récupérer. Ce type d'attaque viserait principalement des entreprises pour du vol de fichiers clients et non des particuliers pour simplement récupérer un numéro de carte bancaire dont le plafond sera rapidement atteint.

De plus, dernier point, la latence mémoire. On a vu plus haut que le but de la prédiction est de pouvoir faire travailler le processeur le temps que la mémoire réponde. Donc même en faisant faire une fausse prédiction au processeur, il y a de fortes chances que le processeur ait fini le calcul de la condition avant même que la mémoire n'ait le temps d'envoyer la donnée illégitime.

Enfin, la sécurité doit être vu comme un ensemble, et même si le programme malveillant arrivait à récupérer une donnée sensible, encore faut-il qu'il réussisse à l'envoyer vers l'extérieur. En entreprise les pare-feux sont sensés bloquer cette connextion sortante, et pour les particuliers, l'antivirus est sensé trouver suspect qu'un programme envoie subitement des données vers l'exterieur sans autorisation de l'utilisateur.

Pour les particuliers, le risque semble donc modéré, mais on ne peut toutefaois pas affirmer qu'il s'agisse d'un risque zéro. C'est d'ailleurs pour cela que la faille a été nommée Spectre, puisque c'est un risque qui pèsera longtemps mais qu'il est impossible d'en mesurer la portée réelle..

Donc, pour corriger la faille, il faut remplacer tous les processeurs ?

Oui, mais avant de penser au remplacement des processeurs, il faut déjà trouver comment corriger cette faille et empêcher le processeur d'accéder aux données d'un autre programme lors d'une prédiction éronnée. Pour l'instant les fabriquants de procésseurs sont très discret sur ce point et on ne sais pas dans quelle mesure cela va toucher l'architecture des processeurs ni même quel impact cela aura sur les performances, et jusqu'où il faudra modifier les programmes actuels pour les faire fonctionner sur l'architecture corrigée.

En bref, nous n'avons pas fini d'entendre parler de Spectre et en attendant, il est important de bien maintenir tous ses logiciels à jour pour contrer toutes nouvelles méthodes d'exploitation de cette faille.

Et c'est tout ?

Hélas non, car il existe une seconde variante de Spectre. Celle-ci touche uniquement les processeurs Intel et est dûe à une optimisation un peu trop poussée. L'exemple flagrant que le mieux est l'énemie du bien.

Pour gagner en performance, plutôt que d'effacer tout le cache du processeur et de reprendre les instructions une à une lors d'une prédiction éronnée, le choix a été fait de n'effacer que la donnée illégitime du cache. Le problème est que ce nettoyage est mal fait et que certaines données illégitimes restent en cache avec les risques évoqués plus haut, qu'un programme malveillant puisse la lire.

Des mises à jour du BIOS et des systèmes d'exploitations sont déjà disponibles pour essayer de contourner ce problème qui ne pourra, là encore, n'être résolu que par la sortie d'une nouvelle génération de processeurs.

Et Meltdown ?

Meltdown, c'est la prédiction de branchements poussée beaucoup trop loin. En effet, on distingue deux types de données, les données application et les données système. Un programme système peut faire de la prédiction sur des données application mais une application ne peut pas faire de prédiction sur des données système.

Concrètement, avec cette faille, un programme malveillant peut accéder aux données traitées par le système à un instant T. Par exemple, il peut accéder à la clé de cryptage permettant de chiffrer les données que vous envoyer pour vous connecter au site internet de votre banque, donnée qui normalement doit resté privé au système.

Cette faille ne concerne là encore que les processeurs Intel et c'est la plus dangereuse des trois. En effet, le système se chargeant en premier, il sera obligatoirement stocké au début de la mémoire et il est donc beaucoup plus facile de faire de fausses prédictions pour accéder aux données qu'il contient dans la mesure où l'on a une idée assez précise de l'endroit où elles se trouvent. C'est cette faille qui a été corrigée en premier, l'idée étant de mettre à jour le BIOS des cartes mères pour obliger le processeur à vider totalement le cache à chaque fois qu'il passe d'une instruction du système à une instruction d'un programme. Cette rustine entraine cependant une perte de performance allant de 5 à 30% selon les premières mesures. Cependant, la perte est négligeable pour les particulier et est surtout visible sur les système de type base de données qui font énormément d'accès mémoire.

En conclusion

Si Meltdown et la seconde version de Spectre semblent faciles à corriger puisqu'il suffit à Intel de retirer l'optimisation fautive de son architecture, la faille Spectre semble beaucoup plus complexe à corriger car elle s'appuie sur le comportement attendu de la prédiction de branchements. Mais pour l'instant, il est inutile de paniquer, il faut surtout bien appliquer les patchs de sécurité proposés par les éditeurs et les fabriquants de matériel, car si les solutions actuelles sont brutes et couteuses en performances, de futures méthodes de contournement de ces failles moins gourmandes en ressources vont surement voire le jour dans les semaines ou les mois à venir.