Recherche de site Web

Comment protéger votre serveur contre les vulnérabilités Meltdown et Spectre


Qu'est-ce que Meltdown et Spectre ?

Le 4 janvier 2018, plusieurs vulnérabilités dans la conception des processeurs modernes ont été divulguées. En tirant parti de certaines optimisations de performance des processeurs, ces vulnérabilités—appelées Meltdown et Spectre—permettent aux attaquants de forcer les applications à révéler le contenu de la mémoire du système et des applications lorsqu'elles sont manipulées correctement. Ces attaques fonctionnent parce que le comportement normal de vérification des privilèges au sein du processeur est contourné grâce à l'interaction de fonctionnalités telles que l'exécution spéculative, la prédiction de branchement, l'exécution hors ordre et la mise en cache.

Meltdown a été divulgué dans CVE-2017-5754. Spectre a été divulgué dans CVE-2017-5753 et CVE-2017-5715.

Pour des informations plus détaillées, consultez les sections comment fonctionne Meltdown ? et comment fonctionne Spectre ? ci-dessous.

Suis-je affecté par Meltdown et Spectre ?

Meltdown et Spectre affectent la majorité des processeurs modernes. Les optimisations du processeur utilisées dans ces vulnérabilités sont une caractéristique de conception centrale de la plupart des CPU, ce qui signifie que la plupart des systèmes sont vulnérables jusqu'à ce qu'ils soient spécifiquement corrigés. Cela inclut les ordinateurs de bureau, les serveurs et les instances de calcul fonctionnant dans des environnements Cloud.

Des correctifs pour se protéger contre Meltdown sont publiés par les fournisseurs de systèmes d'exploitation. Bien que des mises à jour soient également publiées pour Spectre, celui-ci représente une classe entière de vulnérabilités, il nécessitera donc probablement une remediation continue plus étendue.

Dans les environnements cloud et virtualisés, les fournisseurs devront mettre à jour l'infrastructure sous-jacente pour protéger leurs invités. Les utilisateurs devront mettre à jour leurs serveurs pour atténuer l'impact au sein des systèmes d'exploitation invités.

Comment puis-je me protéger ?

Une protection complète contre cette classe de vulnérabilité nécessitera probablement des changements dans la conception du CPU. En attendant, les mises à jour logicielles peuvent offrir une atténuation contre les exploits en désactivant ou en contournant certains des comportements optimisés qui conduisent à ces vulnérabilités.

Malheureusement, comme ces correctifs affectent les routines d'optimisation au sein du processeur, les correctifs d'atténuation peuvent réduire les performances de votre serveur. L'ampleur du ralentissement dépend fortement du type de travail effectué, les processus intensifs en E/S subissant l'impact le plus important.

Statut actuel du correctif d'atténuation

Au moment de la rédaction (9 janvier 2018), les distributions Linux ont commencé à distribuer des correctifs, mais aucune distribution n'est encore entièrement corrigée.

Les distributions qui ont publié des mises à jour du noyau avec une atténuation partielle (corrigé pour Meltdown ET la variante 1 de Spectre) incluent :

  • CentOS 7 : noyau 3.10.0-693.11.6
  • CentOS 6 : noyau 2.6.32-696.18.7

Les distributions qui ont publié des mises à jour du noyau avec une atténuation partielle (corrigé pour Meltdown) incluent :

  • Fedora 27 : noyau 4.14.11-300
  • Fedora 26 : noyau 4.14.11-200
  • Ubuntu 17.10 : noyau 4.13.0-25-générique
  • Ubuntu 16.04 : noyau 4.4.0-109-générique
  • Ubuntu 14.04 : noyau 3.13.0-139-générique
  • Debian 9 : noyau 4.9.0-5-amd64
  • Debian 8 : noyau 3.16.0-5-amd64
  • Debian 7 : noyau 3.2.0-5-amd64
  • Fedora 27 Atomic : noyau 4.14.11-300.fc27.x86_64
  • CoreOS : noyau 4.14.11-coreos

Si votre noyau est mis à jour au moins à la version correspondant à ce qui précède, certaines mises à jour ont été appliquées.

Les systèmes d'exploitation qui n'ont pas encore publié de noyaux avec des mesures d'atténuation incluent :

  • FreeBSD 11.x
  • FreeBSD 10.x

Ubuntu 17.04, qui atteindra sa fin de vie le 13 janvier 2018 ne recevra pas de correctifs. Il est fortement recommandé aux utilisateurs de mettre à jour ou de migrer.

Avertissement : Nous recommandons fortement de mettre à jour ou de migrer à partir de toute version qui a atteint sa fin de vie. Ces versions ne reçoivent pas de mises à jour de sécurité critiques pour des vulnérabilités comme Meltdown et Spectre, ce qui peut mettre vos systèmes et utilisateurs en danger.

En raison de la gravité de cette vulnérabilité, nous recommandons d'appliquer les mises à jour dès qu'elles sont disponibles plutôt que d'attendre un ensemble complet de correctifs. Cela peut nécessiter de mettre à niveau le noyau et de redémarrer plus d'une fois dans les jours et semaines à venir.

Comment appliquer les mises à jour ?

Pour mettre à jour vos serveurs, vous devez mettre à jour votre logiciel système dès que des correctifs sont disponibles pour votre distribution. Vous pouvez mettre à jour en exécutant votre gestionnaire de paquets habituel pour télécharger la dernière version du noyau, puis en redémarrant votre serveur pour passer au code corrigé.

Remarque : Cet article a été rédigé pour être généralement applicable et indépendant de la plateforme. Si vous utilisez Linux-Console.net comme fournisseur d'hébergement et que vous utilisez un ancien Droplet, vous devrez peut-être effectuer une étape supplémentaire avant de commencer.

Le système de gestion des noyaux hérité de Linux-Console.net utilisait des noyaux gérés en externe qui pouvaient être modifiés dans le panneau de contrôle. Si votre Droplet utilise ce système, vous devrez le configurer pour utiliser la gestion interne des noyaux avant de continuer (les Droplets plus récents utilisent ce système automatiquement). Pour vérifier si vous devez passer aux noyaux internes et pour apprendre comment effectuer la transition, lisez notre article Comment mettre à jour le noyau d’un serveur Linux-Console.net.

Pour les serveurs Ubuntu et Debian, vous pouvez mettre à jour vos logiciels système en actualisant votre index de paquets local puis en mettant à niveau vos logiciels système :

sudo apt-get update

sudo apt-get dist-upgrade

Pour les serveurs CentOS, vous pouvez télécharger et installer le logiciel mis à jour en tapant :

sudo yum update

Pour les serveurs Fedora, utilisez plutôt l'outil dnf :

sudo dnf update

Quel que soit le système d'exploitation, une fois les mises à jour appliquées, redémarrez votre serveur pour passer au nouveau noyau :

sudo reboot

Une fois que le serveur est de nouveau en ligne, connectez-vous et vérifiez le noyau actif par rapport à la liste ci-dessus pour vous assurer que votre noyau a été mis à jour. Vérifiez fréquemment les nouvelles mises à jour pour vous assurer de recevoir d'autres correctifs dès qu'ils deviennent disponibles.

Contexte supplémentaire

La famille de vulnérabilités Meltdown et Spectre exploite les fonctionnalités d'amélioration des performances des processeurs modernes. Une combinaison de fonctionnalités du processeur telles que l'exécution spéculative, la vérification des privilèges, l'exécution hors ordre et la mise en cache du processeur permet d'accéder en lecture à des emplacements mémoire qui devraient être hors limites. Le résultat est que des programmes non privilégiés peuvent être contraints de révéler des données sensibles de leur mémoire ou d'accéder à la mémoire privilégiée du noyau ou d'autres applications.

Comment fonctionne Meltdown ?

La vulnérabilité Meltdown fonctionne en trompant un processeur pour qu'il lise un emplacement mémoire hors limites en tirant parti des défauts d'une optimisation du CPU appelée exécution spéculative. L'idée générale fonctionne ainsi :

  • Une demande est faite pour un emplacement mémoire illégal.
  • Une seconde requête est faite pour lire conditionnellement une adresse mémoire valide si la première requête contenait une certaine valeur.
  • En utilisant l'exécution spéculative, le processeur complète le travail en arrière-plan pour les deux requêtes avant de vérifier que la requête initiale est invalide. Une fois que le processeur comprend que les requêtes concernent une mémoire hors limites, il refuse correctement les deux requêtes. Bien que les résultats ne soient pas renvoyés par le processeur après que le code de vérification des privilèges a identifié l'accès à la mémoire comme invalide, les deux emplacements accédés restent dans le cache du processeur.
  • Une nouvelle requête est maintenant faite pour l'emplacement mémoire valide. Si elle retourne rapidement, alors l'emplacement était déjà dans le cache du CPU, indiquant que la requête conditionnelle précédente a été exécutée. L'utilisation itérative de ces conditionnelles peut être utilisée pour comprendre la valeur dans les emplacements mémoire hors limites.

Meltdown représente une vulnérabilité spécifique contre laquelle il est possible de se protéger par un correctif.

Comment fonctionne Spectre ?

Spectre fonctionne également en trompant un processeur pour qu'il utilise de manière incorrecte l'exécution spéculative afin de lire des valeurs restreintes. Les avis de divulgation décrivent deux variantes avec des niveaux de complexité et d'impact différents.

Pour la variante 1 de Spectre, le processeur est trompé pour exécuter de manière spéculative une lecture avant qu'une vérification des limites soit effectuée. D'abord, l'attaquant incite le processeur à accéder de manière spéculative à une position mémoire au-delà de ses limites valides. Ensuite, comme avec Meltdown, une instruction supplémentaire charge conditionnellement une adresse légale dans le cache en fonction de la valeur hors limites. Mesurer le temps nécessaire pour accéder ensuite à l'adresse légale révèle si elle a été chargée dans le cache. Cela peut, à son tour, révéler la valeur de la position mémoire hors limites.

Variante 2 de Spectre est la plus compliquée à la fois à exploiter et à atténuer. Les processeurs exécutent souvent de manière spéculative des instructions même lorsqu'ils rencontrent une instruction conditionnelle qui ne peut pas encore être évaluée. Ils le font en devinant le résultat le plus probable de la condition à l'aide d'un mécanisme appelé prédiction de branchement.

La prédiction de branche utilise l'historique des exécutions précédentes d'un chemin de code pour choisir un chemin à exécuter de manière spéculative. Cela peut être utilisé par les attaquants pour préparer un processeur à prendre une décision spéculative incorrecte. Comme l'historique de sélection des branches ne stocke pas de références absolues à la décision, un processeur peut être trompé pour choisir une branche dans une partie du code même lorsqu'il a été entraîné dans une autre. Cela peut être exploité pour révéler des valeurs en mémoire en dehors de la plage acceptable.

Conclusion

Spectre et Meltdown représentent des vulnérabilités de sécurité graves ; le plein potentiel de leur impact possible est encore en développement.

Pour vous protéger, soyez vigilant dans la mise à jour du logiciel de votre système d'exploitation dès que des correctifs sont publiés par les fournisseurs et continuez à surveiller les communications relatives aux vulnérabilités Meltdown et Spectre.