Table of Contents
Les processeurs superscalaires sont l'épine dorsale du calcul moderne à haute performance, permettant aux processeurs d'exécuter plusieurs instructions par cycle d'horloge à travers des techniques avancées comme le parallélisme d'instruction (ILP), l'exécution hors-commande et l'exécution spéculative. Bien que ces fonctionnalités offrent des gains de débit remarquables pour tout, des serveurs cloud aux appareils mobiles, elles introduisent également une classe de vulnérabilités de sécurité qui sont largement absentes dans des architectures scalaires plus simples.
Quels sont les processeurs superscalaires?
Pour comprendre les implications de sécurité, il faut d'abord comprendre comment les processeurs superscalaires diffèrent de leurs homologues plus simples. Un processeur scalaire exécute au plus une instruction par cycle d'horloge, les instructions de traitement dans un ordre rigide et séquentiel. En revanche, un processeur superscalaire contient plusieurs unités d'exécution (par exemple, les ULA entiers, les unités à point flottant, les unités de chargement/stockage) et peut émettre plusieurs instructions simultanément – souvent deux, quatre, ou même plus par cycle.
Les mécanismes clés qui permettent l'exécution superscalaire comprennent :
- Unités fonctionnelles multiples:[ Blocs matériels dédiés qui peuvent fonctionner en parallèle, tels que des unités séparées pour l'arithmétique, l'accès à la mémoire et la résolution de branche.
- Exécution hors ordre (OoOE):[ Le processeur réordonne les instructions dynamiquement pour garder les unités d'exécution occupées, tout en préservant l'illusion de la retraite dans l'ordre par un tampon de réordre.
- Enregistrer le nom:[ Élimine les fausses dépendances de données (Write-après-Read, Write-après-Erite) en mapper les registres architecturaux dans un plus grand bassin de registres physiques.
- Exécution spécifique:[ Le processeur prédit le résultat des branches et exécute les instructions à l'avance, en rejetant les résultats si la prédiction est erronée.
- Prédiction des branches:[ Des prédicteurs avancés (p. ex., TAGE, prédicteurs neuronaux) devinent la direction et la cible des branches avec une grande précision, alimentant le pipeline spéculatif.
Bien que ces caractéristiques soient essentielles pour la performance, elles exposent également l'état microarchitectural du processeur, caches, tampons, étapes de pipeline, à une observation et manipulation potentielles par les attaquants. Contrairement aux conceptions scalaires où le chemin d'exécution est déterministe et facilement observable, les processeurs superscalaires contiennent des états internes cachés qui peuvent être sondés par le timing, la puissance et les canaux latéraux électromagnétiques.
Vulnérabilités de sécurité spécifiques aux architectures superscalaires
La complexité des conceptions superscalaires donne lieu à des vulnérabilités qui ne sont pas présentes dans des processeurs simples en ordre, à un seul problème.Ces faiblesses se divisent généralement en deux grandes catégories : les attaques à canal latéral qui fuient l'information par des observations physiques ou temporelles, et les attaques d'exécution spéculatives qui exploitent l'état microarchitectural pour contourner les frontières renforcées par les logiciels.
1. Attaques à la Manche latérale
Les processeurs Superscalar disposent d'unités d'exécution parallèles et en pipelines profonds qui présentent des variations mesurables de la consommation d'énergie, du rayonnement électromagnétique et du temps d'exécution selon les données traitées.
- Cathèmes latéraux basés sur les caches:[ La catégorie la plus bien étudiée. Les processeurs Superscalar comptent sur des hiérarchies de cache à plusieurs niveaux pour combler l'écart de vitesse entre le cœur et la mémoire principale. Parce que les temps d'accès au cache diffèrent considérablement des accès à la mémoire non calés (par ordre de grandeur), un attaquant peut surveiller quelles lignes de cache sont expulsées ou remplies par un processus de victime. Des techniques comme Prime+Probe, Flush+Reload et Evict+Reload permettent à un attaquant de reconstruire les modèles d'accès à la mémoire d'une victime, y compris les tables de recherche secrètes dans les algorithmes de chiffrement. Par exemple, un fil espion peut remplir à plusieurs reprises un ensemble de cache, puis mesurer son propre temps d'accès pour détecter si la victime a expulsé ses données, révélant l'adresse mémoire de la victime.
- Analyse de puissance: Les processeurs superscalaires tirent différentes quantités de puissance selon le mélange des instructions en cours d'exécution, les valeurs de données et les unités fonctionnelles actives. L'analyse de puissance simple (SPA) et l'analyse de puissance différentielle (DPA) peuvent extraire des clés cryptographiques de cartes à puce ou de dispositifs embarqués, bien que ces attaques soient plus difficiles à monter à distance sur des processeurs multicore.
- Attaques de timing: Le temps d'exécution des instructions varie en fonction des valeurs d'opérande (p. ex., multiplication, division) et de la disponibilité des unités d'exécution. Les attaquants peuvent mesurer les temps de réponse d'un service distant pour déduire des secrets – une vulnérabilité classique exploitée dans les attaques sur les implémentations SSL/TLS.
- Émanations électromagnétiques (EM) :[ Le changement rapide de transistors dans les pipelines superscalaires génère des radiations EM qui peuvent être captées avec des sondes spécialisées. Les attaquants sophistiqués peuvent démoduler ces signaux pour reconstruire des séquences d'instruction ou des valeurs de données.
Ces canaux latéraux sont amplifiés dans les conceptions superscalaires parce que le parallélisme accru signifie des transitions plus simultanées, une consommation d'énergie plus élevée et des interactions plus complexes entre les phases de pipeline. Les techniques d'isolement qui travaillent sur des processeurs plus simples (p. ex., caches désactivants, programmation à temps constant) deviennent plus difficiles à appliquer sans sacrifier les gains de performance que les architectures superscalaires promettent.
2. Variantes de spectre et de fond
Spectre et Meltdown, révélés début 2018, ont choqué la communauté de l'architecture informatique en démontrant que l'exécution spéculative – pierre angulaire de la performance superscalaire – pourrait être militée pour la fuite de données arbitraires au-delà des frontières de sécurité. Bien que ces vulnérabilités ne soient pas exclusives aux processeurs superscalaires (elles affectent également certains processeurs en ordre avec accès à la mémoire spéculative), l'exécution agressive hors-ordre et spéculative dans les superscalaires modernes amplifie considérablement la surface d'attaque.
- Meldown (CVE-2017-5754): Exploite l'exécution hors-commande sur Intel et certains processeurs ARM pour lire la mémoire du noyau depuis l'espace utilisateur. Lorsqu'une instruction espace utilisateur tente d'accéder à une adresse du noyau protégée, le processeur soulève une exception. Cependant, en raison de OoOE, l'instruction peut avoir déjà terminé – et laissé des traces dans le cache – avant que l'exception ne soit gérée. Un attaquant peut sonder le cache pour récupérer les données qui ont été chargées spéculativement.
- Spectre Variante 1 (CVE-2017-5753) — Boussole de vérification des limites: Trick the Branch predictor injectedly executing instructions au-delà d'un contrôle de limites de tableau, fuite des données par le temps du cache. Cette attaque fonctionne parce que les pipelines superscalaires modernes exécutent le chemin prédit avant que l'adresse réelle soit calculée.
- Spectre Variante 2 (CVE-2017-5715) — Branch Target Injection: Poison le tampon cible de branche (BTB) d'un processus de victime pour le faire exécuter spéculativement code à une adresse choisie par l'attaquant, même dans les domaines de privilège.
- Spectre Variantes 3a, 4, et au-delà: Des recherches ultérieures ont révélé des variantes exploitant les tampons de retour de la pile (RSB), l'acheminement entre les magasins et les charges et l'injection de valeur de charge (LVI).
Ces attaques sont particulièrement dangereuses parce qu'elles brisent les garanties fondamentales d'isolement des systèmes d'exploitation et des hyperviseurs sans nécessiter de vulnérabilité logicielle. Elles peuvent fuir les clés de chiffrement, les mots de passe et même les contenus de mémoire d'autres machines virtuelles sur un hôte cloud partagé. La prévalence des processeurs super-scalaires dans chaque segment de l'informatique – des smartphones aux fermes de serveurs – signifie que la surface d'attaque est énorme.
3. Changements de calendrier dans les ressources partagées
En plus des caches, les processeurs super-scaires partagent de nombreuses autres ressources microarchitecturales entre les fils et les cœurs : le prédicteur de branche, les TLB (supprimes de lookaside), le tampon de magasin et le tampon d'ordre mémoire. La teneur sur ces ressources crée des différences de temps qui peuvent être mesurées par un fil malveillant pour déduire l'activité ou les données d'une victime co-localisée. Par exemple, l'attaque PortSmash (CVE-2018-5407) exploite la dispute sur le port d'exécution utilisé par les frères et sœurs SMT pour divulguer des informations sur les hyperfils. La technique Collide+Load permet d'exploiter l'accès spéculatif à des lignes de cache partagées qui sont invalidées par une victime.
Défis à relever pour sécuriser les processeurs superscalaires
La sécurisation des processeurs supercalaires est fondamentalement plus difficile que la sécurisation des architectures scalaires plus simples. Plusieurs facteurs contribuent à cette difficulté :
- Complexité de la vérification:[ L'espace de conception d'un noyau superscalaire moderne comprend des milliards d'états possibles dus au parallélisme, à la spéculation et au renommage. La vérification formelle des propriétés de sécurité (p. ex., flux d'information, non-interférence) est impossible à calculer même avec la vérification avancée du modèle.
- Bon nombre des mesures d'atténuation des attaques d'exécution spéculatives – comme le switch en mode de fonctionnement, les instructions de sérialisation de pipelines ou l'arrêt de la production de SMT – imposent des pénalités de performance importantes. Une étude de 2018 a estimé que les mesures d'atténuation de Spectre/Meltdown pourraient coûter jusqu'à 30 % sur certaines charges de travail.
- Les limitations de patchage de logiciels :[ Contrairement aux vulnérabilités logicielles, les failles microarchitecturales ne peuvent souvent pas être entièrement corrigées par des mises à jour de microcodes. De nombreuses variantes Spectre nécessitent des patchs système d'exploitation, des modifications de compilateur ou une refonte matérielle.
- Évolution du paysage de menaces:[ De nouvelles variantes continuent de se manifester des années après les divulgations initiales. Chaque nouvelle attaque peut nécessiter une atténuation spécifique, et la combinaison de plusieurs atténuations peut créer des interactions inattendues ou de nouveaux canaux latéraux.
- L'absence de visibilité des utilisateurs: La plupart des utilisateurs finaux et même de nombreux administrateurs de systèmes ont peu de compréhension des caractéristiques microarchitecturales de leurs processeurs. Il est donc difficile d'évaluer les risques ou d'appliquer des mesures d'atténuation appropriées.
Ces défis signifient qu'il n'y a pas de puce argentée pour sécuriser les processeurs super-scalaires. Au lieu de cela, une approche en couches combinant matériel, firmware, logiciel, et contrôles opérationnels est nécessaire.
Stratégies pour atténuer les vulnérabilités
Malgré les difficultés, l'industrie a fait des progrès importants pour atténuer les vulnérabilités uniques en matière de sécurité des architectures superscalaires. Les stratégies les plus efficaces combinent des améliorations matérielles, des mises à jour de microcodes, des correctifs logiciels et des pratiques exemplaires architecturales.
Solutions matérielles
Les vendeurs de silicone ont introduit de nombreuses fonctionnalités matérielles pour réduire la surface d'attaque:
- Les environnements de démarrage sécurisé et d'exécution de confiance:[ Les technologies comme Intel SGX, AMD SEV et ARM TrustZone fournissent des enclaves isolées qui sont protégées même contre un OS compromis. Cependant, les enclaves elles-mêmes ont été vulnérables aux attaques latérales et spéculatives (par exemple, SGAxe, SmashEx).
- Scorement et coloration de cache:[ La technologie d'allocation de cache Intel (CAT) permet à l'OS d'attribuer des moyens de cache à des cœurs ou des processus spécifiques, empêchant les attaques de canaux latéraux croisés par l'expulsion de cache.
- Mécanismes de contrôle de spécification:[ Intel a ajouté l'instruction de sérialisation et les fonctionnalités [/ (Spéculation restreinte de la branche indirecte) pour limiter l'exécution spéculative à travers les niveaux de privilèges. AMD a introduit le contrôle (SSBD).
- Surveillance des logiciels :[ Certains prototypes de recherche proposent la détection en temps réel de l'activité des canaux latéraux en surveillant les taux de pannes de cache ou en interrompant les latences.
- Unités d'exécution à temps constant:[ La conception d'unités cryptographiques qui ont un timing indépendant des données (p. ex., en utilisant la multiplication de Montgomery dans le matériel) réduit les canaux latéraux de timing.
Mises à jour du microcode et du micrologiciel
Les mises à jour régulières des microcodes des fournisseurs de CPU sont essentielles pour fermer les vulnérabilités nouvellement découvertes :
- Atténutions de microcodes Spectre v2 : Intel et AMD ont publié des mises à jour de microcodes mettant en oeuvre la barrière de prédiction de la branche indirecte (IBPB) et les prédicteurs de la branche indirecte à simple fil (STIBP) pour empêcher l'injection de la cible de la branche dans tous les contextes.
- Atténutions de fond: Table de la page de noyau Isolation (KPTI) a été mis en œuvre dans les systèmes d'exploitation, mais il repose sur des mises à jour de microcodes pour une pleine efficacité sur certains anciens processeurs. Microcode peut également désactiver certaines fonctionnalités spéculatives sur une base par cœur.
- Raversage du cache basé sur le logiciel de mise à jour : Certaines mises à jour du firmware ajoutent un rinçage automatique du cache sur les commutateurs contextuels ou interrompent les gestionnaires pour réduire la fenêtre pour les attaques basées sur le cache.
Cependant, les mises à jour de microcodes ont des limites. Elles ne peuvent pas fondamentalement redessiner le pipeline et elles introduisent souvent des régressions de performance. De plus, certains processeurs plus anciens ne reçoivent pas de mises à jour, les laissant ainsi définitivement vulnérables.
Mesures d'atténuation des logiciels et du niveau de l'OS
Les systèmes d'exploitation, les hyperviseurs et les chaînes d'outils compilateurs jouent un rôle crucial :
- Kernel Page Table Isolation (KPTI): Ce système d'exploitation sépare les tables de pages utilisateur-espace et noyau-espace pour empêcher les lectures comme Meltdown. Il est activé par défaut sur Linux (patchs KAISER) et Windows après la divulgation Meltdown.
- Retpoline: Un logiciel qui remplace les branches indirectes par une séquence sérialisée pour empêcher l'injection de la cible de branche.
- Barrières de spécification:[ Insérer ou après des contrôles de limites (Spectre v1) ou après une désinfection par pointeur. Les compilateurs peuvent insérer automatiquement ces barrières lors de la compilation avec des options comme ou .
- Cache rinçage sur les commutateurs de contexte:[ Les noyaux OS peuvent rincer ou partitionner des caches pour empêcher les fuites d'informations entre les processus.
- Désactivation de SMT/hyperthreading:[ De nombreux guides de sécurité recommandent l'invalidation de Multithreading simultané (SMT) sur des systèmes multitenants non fiables parce que les hyperthreads partagent des ressources d'exécution et sont vulnérables aux attaques de canaux latéraux croisés (p. ex. PortSmash, TLBleed).
- Les tests et durcissements de temps:[ Des outils comme (Linux) et des scripts spécifiques aux fournisseurs peuvent vérifier quelles mesures d'atténuation sont actives.
Principes de conception des logiciels de sécurité
Dans l'avenir, l'approche la plus efficace consiste à intégrer la sécurité dans le processus de conception du processeur dès le début :
- Exécution spéculative sécurisée:[ Des propositions académiques telles que InvisiSpec (retardant les frappes spéculatives de cache jusqu'à ce que l'instruction soit engagée), Speculative Taint Tracking (traçant les données spéculatives dans le matériel), et Hiding des accès spéculatifs à la mémoire visent à empêcher la fuite de l'état microarchitectural. Certaines de ces idées se retrouvent dans des conceptions commerciales, comme la "protection de canal latéral d'exécution sélective" d'Intel ajoutée dans Alder Lake.
- L'isolement physique des ressources essentielles à la sécurité :[ Séparer l'état prédicteur de la branche par processus ou par niveau de privilège (p. ex., identification de la cible de la branche Arm's) réduit les fuites entre les domaines.
- Architectures basées sur la capacité:[ Des projets de recherche comme CHERI (Capability Hardware Enhanced RISC Instructions) offrent une protection de la mémoire fine qui peut atténuer des classes entières de vulnérabilités logicielles, y compris celles qui pourraient être exploitées par spéculation.
- Vérification formelle des propriétés de sécurité: Bien que la vérification complète d'un noyau superscalaire soit encore hors de portée, l'application de méthodes formelles aux composants microarchitecturaux critiques (comme la logique de commande de mémoire ou le prédicteur de branche) peut aider à attraper des bugs subtils avant de faire un enregistrement.
Dans la pratique, une combinaison d'améliorations matérielles, de mises à jour de microcodes et de durcissement logiciel est essentielle. Aucune couche unique fournit une protection complète, mais les défenses en couches rendent beaucoup plus difficile pour un attaquant d'exploiter avec succès les vulnérabilités superscalaires.
Conclusion
Les mêmes qualités qui permettent un débit élevé – exécution parallèle, traitement hors-commande, exécution spéculative et ressources microarchitecturales partagées – créent des pistes pour les attaques sur canaux latéraux et les exploits d'exécution spéculative qui peuvent briser l'isolement entre les processus, les utilisateurs et les machines virtuelles. Les attaques de synchronisation basées sur les caches comme les variantes Prime+Probe et Spectre continuent d'évoluer, exigeant une vigilance constante des fournisseurs de processeurs, des développeurs d'OS et des administrateurs système.
Cependant, une combinaison de caractéristiques d'isolement matériel (parcellage de cache, contrôles de spéculation), de mises à jour régulières des microcodes, d'atténuations logicielles (KPTI, retpoline, codage à temps constant) et de principes de conception de sécurité-concept offre une voie viable. À mesure que la recherche progresse et que les normes de l'industrie mûrissent, nous pouvons nous attendre à ce que les futurs processeurs superscalaires intègrent une protection plus robuste contre les fuites d'information, en réduisant la surface d'attaque sans sacrifier les gains de performance qui conduisent à l'innovation.
Pour plus de détails sur les vulnérabilités et les atténuations spécifiques, consultez les documents originaux Spectre et Meltdown (SpectreAttack.com, le site Web Meltdown et les avis de sécurité d'Intel (Intel Security Center[).Pour une étude plus vaste, le document «A Survey of Microarchitectural Side-Chhannel Vulnérabilités, Attaques et Défenses in Modern Microprocesseurs» fournit un aperçu complet.