La virtualisation sûre chiffrée des processeurs AMD déjà contournée

Avec sa gamme EPYC de processeurs pour centres de traitement de données, et sa gamme Ryzen Pro pour ordinateurs professionnels, AMD a lancé de nouvelles fonctionnalités de sécurité comme SEV – Secure Encrypted Virtualization, virtualisation sûre chiffrée.

Elle consiste à chiffrer et déchiffrer à la volée la mémoire vive d’une machine virtuelle, afin que ni l’hyperviseur, ni le système d’exploitation hôte, ni une autre machine virtuelle ne puisse espionner une machine virtuelle protégée.

Avec SEV, un client d’un service d’informatique en nuage ou d’hébergement de machines virtuelles n’a pas besoin de faire entièrement confiance à son fournisseur, ni à l’hyperviseur qu’il utilise, puisque ses machines virtuelles sont protégées.

Quatre chercheurs du Fraunhofer AISEC ont pourtant déjà contourné cette sécurité, avec une technique nommée SEVered, un jeu de mots sur le verbe sever : couper, rompre.

Elle est d’autant plus dommageable qu’elle ne nécessite ni un accès physique au serveur ciblé, ni même une machine virtuelle de connivence. Un service de communication à distance, tel qu’un serveur web, SSH ou FTP, tournant dans la machine cible, ainsi qu’un hyperviseur corrompu, est tout ce dont on a besoin.

Les deux faiblesses que SEVered exploite sont 1) que l’intégrité du chiffrement de la mémoire, page par page, n’est pas protégée : si la traduction de l’adresse virtuelle de l’invité (GVA) à ou de l’adresse physique de l’invité (GPA) est bien contrôlée par la machine virtuelle, la traduction de second niveau d’adresse est gérée par l’hyperviseur ; et 2) qu’il est possible de suivre les accès de la machine virtuelle à la GPA.

Par un processus itératif, on identifie une ressource en obtenant la liste des GPAs qui ont le plus de chance de la contenir.

Puis dans un deuxième processus itératif, on manipule la Host Page Table, HPT, table des pages de l’hôte, pour que leurs GPAs pointent sur les pages de mémoire que l’on veut extraire (voire figure), puis on effectue une requête pour obtenir la ressource ciblée. Comme on a réorganisé les pages de la ressource, le service répond involontairement en renvoyant les données des pages que l’on a choisi d’extraire. En répétant ces deux étapes pour réorganiser les GPAs pour toutes les régions de mémoire intéressante, on finit par obtenir par déduction les ressources souhaitées en clair.

Les chercheurs montrent ainsi qu’on peut exfiltrer toute la mémoire d’une machine virtuelle, dans un temps raisonnable.

Le lecteur souhaitant lire une description détaillée des techniques exploitées peut lire l’article académique SEVered:SubvertingAMD’sVirtualMachineEncryption.