Cybersec Watch Report : Janvier 2018

Co-écrit par Florian Boudot et Charles Le Reun, avec la participation de Tristan Bertin.

Quand on parle « attaque informatique » en ce moment, on pense tout de suite aux ransomwares comme WannaCry, Locky… mais malheureusement les dernières vulnérabilités révélées laissent présager des attaques encore plus dangereuses. Dans ce Cybersec Watch report, nous allons revenir sur deux vulnérabilités, qui ont déjà fait couler beaucoup d’encre et donnent encore aujourd’hui des sueurs froides aux géants de l’informatique : Meltdown et Spectre.

Avant de détailler les caractéristiques de Meltdown et Spectre, rappelons trois éléments remarquables d’un appareil (ordinateur, serveur, téléphone portable…) : le Central Processing Unit (CPU), la mémoire vive (RAM) et le noyau.

  • Le Central Processing Unit (CPU) est le chef d’orchestre d’un appareil… il ordonne et exécute une liste d’instructions envoyées par les différents programmes en cours d’exécution. Evidemment, en tant que pièce maîtresse d’un PC, le CPU recense des informations très sensibles comme des mots de passe ou des clés secrètes de chiffrement.
  • La mémoire vive (RAM) est utilisée par toutes les applications de l’unité, pour stocker et utiliser des données nécessaires à leur bon fonctionnement. Un dispositif de sécurité fondamental est cependant implémenté : l’isolation entre chaque programme – tout programme dispose d’une zone mémoire qui lui est propre et il ne peut accéder à la zone mémoire d’un autre programme (excepté dans des circonstances très spécifiques). Sans cette isolation, il serait par exemple possible pour l’application calculatrice de votre PC « d’écouter » tout ce que vous faites sur votre navigateur web préféré.
  • Enfin, le noyau* a un rôle très important car il va, entre autres, décider quelles adresses mémoires chaque programme pourra utiliser. Il doit donc pour cela garder en mémoire une liste d’adresses utilisées. Cette information étant extrêmement sensible, elle est elle aussi isolée des autres applications, et aucun programme n’est autorisé à lire la mémoire noyau.

CPU, RAM, etc : le contexte particulier de Meltdown et Spectre

Quelles sont les failles exploitées ?

1 – Meltdown

Lors d’une attaque informatique, l’attaquant va exploiter une erreur dans l’implémentation de la fonctionnalité « Out-of-order processing** » pour permettre à un processus non privilégié d’obtenir une copie de la mémoire noyau. L’exploitation de cette vulnérabilité casse toutes les barrières mises en place pour isoler l’exécution des programmes.

De très nombreux Proof Of Concept (POC) sont disponibles et laissent entrevoir l’intérêt porté à cette vulnérabilité, il est donc important d’installer les mises à jour proposées par les différents constructeurs afin de limiter au maximum votre exposition à la menace.

2 – Spectre

Spectre est beaucoup plus problématique que Meltdown. En effet, ce dernier va exploiter la faille d’une fonctionnalité mal implémentée. Pour Spectre, l’attaquant va utiliser le fonctionnement même d’une autre fonctionnalité, « l’exécution prédictive », et plus particulièrement la « branch prediction ».

Le principe est simple. Pour gagner du temps dans l’exécution des instructions, le processeur va essayer de « deviner » les instructions suivantes (on peut s’imaginer une arborescence pondérée sous forme de « branches »). Lorsque les instructions sont connues, les branches qui ne sont pas retenues sont nullifiées.

C’est ici que Spectre va opérer. Les différentes branches sont stockées dans un segment de mémoire temporaire (cache) le temps de savoir si la branche va être exécutée ou non. Spectre va accéder à ces zones de mémoire cache avant que ces dernières ne soient totalement supprimées.

Qui est vulnérable ?

Meltdown : La plupart des processeurs Intel récents, rendant vulnérables de très nombreux smartphones, ordinateurs, serveurs. La vulnérabilité n’est pas dépendante du système d’exploitation et impacte donc tout type de machines.

Spectre : La plupart des processeurs récents (Intel, AMD, ARM, IBM), rendant vulnérables presque tous les périphériques connus.

Quels sont les impacts ?

Meltdown : Un programme lancé avec des droits utilisateur peut avoir accès à des zones mémoires à haut privilèges, pouvant rendre des données sensibles lisibles.

Spectre : Peut forcer un programme à divulguer des informations en forçant l’exécution prédictive à accéder à ces données, tout en copiant ces informations stockées en mémoire cache, utilisées pour ces prédictions. Le processeur en lui-même doit être re-designé.

Quelles sont les contremesures ?

Meltdown : Installer les patchs mis à disposition par les constructeurs.

Spectre : Il n’est pas possible de patcher le processeur pour contrer cette vulnérabilité. Les constructeurs ont fourni des patchs limitant les capacités du processeur afin d’empêcher l’exploitation de cette vulnérabilité. Pour éviter de devoir réduire les capacités de votre processeur, il va certainement devoir attendre que chaque éditeur de chacun de vos programmes fournisse un patch.

L’augmentation des attaques et la complexité de correction

Bien qu’étant difficiles à exploiter, ces deux failles montrent les dangers auxquels sont confrontés vos processeurs. Fin janvier, plus de 139 nouveaux malwares exploitant les deux failles Spectre et Meltdown avaient déjà été détectés par l’institut AV-Test, même si cela ne suffit pas à affirmer que des attaques ont déjà eu lieu.

Ces derniers temps, les hackers ne sont pas insensibles aux attaques sur les composants physiques, en témoignent les récentes vulnérabilités découvertes sur les micrologiciels Intel AMT. Car la réelle difficulté est la mise à jour de ces composants pour corriger ces vulnérabilités, véritable aubaine pour les attaquants qui peuvent préparer et lancer des attaques pendant ce temps. On est loin d’en avoir terminé avec ce type de vulnérabilités…

 

* Nous ne nous attarderons dans cet article que sur la fonctionnalité vulnérable.

** Une des fonctionnalités des processeurs est appelée « Out-of-order processing ». A l’origine, les instructions à destination du processeur entraient dans une file d’attente et étaient exécutées une à une. Si une instruction n’était pas prête à être exécutée, le processeur attendait que cette dernière récupère les informations manquantes. « Out-of-order processing » permet à une instruction d’être exécutée dès qu’elle est prête, même si elle n’est pas la première dans la file d’attente.