Sécurité informatique : les attaques MELTDOWN et SPECTRE

Le monde numérique est en ébullition depuis quelques semaines suite aux révélations faites au sujet de failles concernant certains processeurs informatiques. Elles sont d’autant plus préoccupantes qu’elles touchent des matériels en service depuis de nombreuses années et des plus répandus sur la planète. Surnommées Meltdown et Spectre, elles sont une porte ouverte à de réelles menaces ayant potentiellement un impact en termes de vol de données mais surtout de sécurité pendant les transactions numériques.

Grâce à l’expertise globale de ses membres, l’association EESTEL possède une vision globale tant sur des aspects hardware que software. Légitime et attentive à des sujets aussi sensibles, l’association apporte aujourd’hui son un éclairage sur le fonctionnement de ces failles et de leurs potentielles dangerosités.

I – Des matériels faillibles sous la menace d’attaques virales

a – Une faille dans le hardware de certains processeurs

Tout d’abord, notons qu’il ne s’agit pas de virus, mais simplement de procédés révélés début 2018 par différentes entités (académiques, industriels) permettant de contourner les mécanismes de sécurité en place dans les processeurs de beaucoup de PCs ou Smartphones actuels. Ces processeurs émanent de fabricants (surtout Intel mais aussi AMD dans le cas de Spectre) ou se conforment à l’architecture ARM. Ces vulnérabilités sont graves car elles proviennent d’insuffisances dans l’architecture et le hardware de ces processeurs, et ne sont que partiellement palliées par des mises à jour logicielles des OS sur ces machines. Malheureusement, le hardware ne se « patche » pas à distance !

Ce n’est pas la première fois que le hard est mis en question : en 1994, le coprocesseur de calcul flottant des Pentiums faisait des erreurs de calcul, et ceci coûta des millions de dollars à Intel. Cette fois-ci, le cours d’Intel a baissé début Janvier de 5%, et l’affaire n’est pas close.

b – Des portes d’entrée aux virus

Ces vulnérabilités pourraient être utilisées par un virus afin d’extraire les secrets (clés, mots de passe) d’une application quelconque. Secrets, qui lors de l’exécution de cette application, seraient gérés par l’OS. Avec Spectre, une application pourrait interférer avec une autre application, ce qui est particulièrement grave dans le cas des serveurs, avec virtualisation ou pas.

c – Aucune attaque virale constatée pour le moment

Pour le moment, nous n’en sommes pas là puisque personne n’a constaté d’attaques virales basées sur les vulnérabilités en question. Attaques qui, d’ailleurs, ne sont pas faciles à mettre en œuvre. Par ailleurs, la diffusion d’un virus exige non seulement de profiter d’une vulnérabilité, mais aussi de développer un moyen de propagation efficace et rapide, ainsi qu’un moyen d’en recueillir les bénéfices : voir par exemple le virus Wannacry !

d – Des gestes qui sauvent

Quoiqu’il en soit, l’application rapide de mises à jour d’OS et la sauvegarde régulière des données utilisateur sont des actions de plus en plus vitales dans ce contexte de menaces de plus en plus fréquentes.

II – Processus de fonctionnement des attaques Spectre et Meltdown

a – Notions d’architecture informatique

Afin d’expliquer les attaques Meltdown ou Spectre, il convient de connaître quelques principes de fonctionnement et d’architecture des microprocesseurs modernes assurant la fonction de CPU : Central Processing Unit (moderne ici est très relatif, car ces architectures existent depuis de nombreuses années).

3 détails de fonctionnement sont concernés :

W

Mémoires cache, ou comment accélérer les échanges d’instructions ou de données entre mémoire externe RAM et le CPU,

W

Protections et Isolation des programmes (OS ou applications) entre eux,

W

Exécution parallèle des instructions, pour accélérer les programmes.

Les CPU du type de ceux que l’on trouve dans nos PCs ou smartphones sont connectés sur la carte mère à des périphériques ou mémoires externes : mémoires de masse, disque ou flash, de quelques dizaines ou centaines de giga-octets, mémoire de travail RAM de quelques giga-octets. Ces mémoires contiennent l’OS et différents programmes applicatifs. Les performances des CPU, nécessitées par des programmes et contenus de plus en plus complexes, dépendent évidemment beaucoup des capacités de calcul de ces CPU ainsi que du temps d’accès CPU-RAM, notamment.

b – Fonctionnement du cache informatique

Les CPU contiennent une antémémoire appelée cache de quelques méga-octets qui contient des copies de petits blocs de la RAM appelés pages, 256 octets par exemple.

L’accès à ce cache interne est beaucoup plus rapide (10 à 100 fois, et prend quelques milliardièmes de secondes avec les rythmes d’horloge interne des CPU de plusieurs gigahertz) que l’accès à la RAM. Les programmes de l’OS ou les applications sont composés d’instructions souvent situées dans des zones contiguës. Cela demande fréquemment l’accès à des données elles-mêmes souvent situées dans des zones contiguës. On comprend donc que l’amélioration des performances puisse être très importante. Les échanges entre RAM et cache sont permanents et dépendent des besoins d’exécution des programmes au fil du temps.

c – Principe d’isolation des données

Comme plusieurs programmes sont actifs en même temps, il convient d’éviter qu’un programme n’aille lire/écrire dans les données d’un autre programme ou celles de l’OS. Les mécanismes utilisés sont variables : par exemple un bit de protection pour chaque mémoire de l’OS, une violation de l’isolation entraînant aussitôt un appel à l’OS qui peut « tuer » le programme fautif.

d – L’exécution des programmes

L’exécution de chaque instruction (se trouvant quelque part dans une page du cache) par le CPU demande la réalisation d’un certain nombre d’étapes : décodage de l’instruction, calcul de l’adresse de chaque opérande, lecture des opérandes avec chargement éventuel des pages concernées, calcul du résultat, réécriture des pages modifiées en RAM, etc. Chaque étape est réalisée dans des « execution units » spécifiques.

Pour écouler le plus rapidement possible le flot d’instructions à traiter, il est important que les unités d’exécution soient constamment occupées, comme dans une usine de voitures où l’on n’attend pas que la millième voiture soit peinte avant de commencer les soudures de la mille et unième. Un certain parallélisme d’exécution des instructions est donc réalisé, même si dans certains cas, les dépendances entre instructions n et n+1, ou des évènements tels que les violations d’isolation impliquent de revenir en arrière. Ce procédé est appelé « speculative execution ». Notons que ce qui est décrit ici ne concerne qu’un seul « core », et le « multicore » présent sur les CPU actuels n’a rien à voir avec ces vulnérabilités.

III – Comment connaître la valeur x d’un octet à une adresse protégée a

a – le principe d’exécution de séquence

Un premier programme P contient un pointeur A, initialisé avec a, un tableau T de 216 octets et deux variables u et v ; on suppose que les pages font 256 octets et que T est aligné sur une frontière de page.

P exécute une séquence d’instruction du type :

u=(A) ; (u en cache est chargé avec l’octet dont l’adresse est dans A : x)

v=T[u*256] ; (v en cache est chargé avec l’octet de T d’index u*256)

Que va provoquer cette séquence ?

Avec l’exécution spéculative, cette séquence de deux instructions sera exécutée en partie, avant qu’une exception ne tue ce programme P qui sort de son espace alloué, et les variables u et v ne seront pas réécrites en RAM. Il n’y a donc pas de divulgation de la valeur x dans la variable u.

Mais l’important est, à cause de la deuxième instruction, le chargement en cache d’une page contenant les octets du tableau à partir de x*256. Un deuxième programme P’ partageant T avec P va alors lire T[i*256] pour i variant de 0 à 255 ; lorsque i sera égal à x, la lecture sera beaucoup plus rapide que pour i#x car dans ce cas, ces plages d’adresse ne seront pas en cache, car non encore lues par P. Le temps de réponse peut être mesuré par P’ avec un « timer» : registre du CPU s’incrémentant au rythme de l’horloge CPU, et accessible en lecture par les programmes.

P’ connaît donc la valeur x de l’octet à l’adresse a.

b – Comment faire un dump de la mémoire protégée

Tout devient simple : il suffit de répéter ce qui précède pour toutes les adresses a « intéressantes » pour l’attaquant ! Les auteurs de ces attaques annoncent une vitesse de lecture de 500kb/s.

IV – Remarques sur les attaques Spectre et Meltdown

La fragilité réelle d’un CPU dépend de détails très fins d’implémentation concernant ces diverses fonctions d’accélération et d’isolation.

Ainsi, Meltdown ne fonctionne pas sur les CPU AMD car il semblerait que la fonction isolation y empêche le chargement de page décrit ci-dessus. Ce n’est pas le cas des CPU INTEL ou ARM pour les smartphones.

Les différences entre Spectre et Meltdown sont du deuxième ordre par rapport à ce papier de vulgarisation. Dans ces 2 attaques, on utilise donc le fait que l’exécution parallèle des instructions peut dans certains cas donner des informations observables (temps d’exécution) et créer un « canal caché » vers un attaquant.

En conclusion, à l’heure où l’économie mondiale est gouvernée par des échanges numériques, il est essentiel de s’assurer que de telles failles informatiques soient rapidement identifiées et résolues. Même si aucune attaque n’a encore été officiellement détectée, il va sans dire que certaines transactions sont aujourd’hui exposées à une divulgation des données sensibles. Créés il y a plus de dix ans, les processus (exécution out-of-order ou spéculative) exploités par Meltdown et Spectre, ont été ajoutés aux processeurs dans le but d’optimiser leurs performances. A l’époque, le gain en performance prévalait sur les aspects sécuritaires et ces techniques d’optimisation ont été exploitées pendant des années sans jamais être réellement remises en cause par les industriels du secteur. Maintenant que ces vulnérabilités ont été mises en lumière, les constructeurs ont déjà réagi en diffusant des patchs logiciels. Des correctifs sont déjà en cours d’élaboration et de déploiement. Mais, en attendant et au-delà des aspects théoriques, que ce soit sur le desktop ou sur les smartphones, l’association EESTEL possède des experts capables d’analyser les impacts et d’apporter des éléments concrets de solutions.

Pour en savoir plus :

A propos de l’auteur : Jean-Claude PAILLES – Ancien consultant chez Orange R&D – Enseignant à l’ENSI Caen, à Supelec Rennes et consultant pour SFR – Expert en sécurité des smartphones.