Exploitation de la microarchitecture par le logiciel

Caractรฉristiques des jeux dโ€™instructions

Le jeu dโ€™instructions ou ISA influe directement sur lโ€™implรฉmentation du processeur. Selon les opรฉrations dรฉfinies, ce dernier devra รชtre conรงu pour les implรฉmenter. Ainsi, il existe plusieurs types de jeu dโ€™instructions, qui peuvent varier dans leur maniรจre de reprรฉsenter les donnรฉes ou les instructions.
Reprรฉsentation des donnรฉes Une instruction spรฉcifie รฉgalement les donnรฉes avec lesquelles ont lieu les opรฉrations. Ces donnรฉes, selon les architectures, peuvent prendre diffรฉrentes formes. Voici quelques modรจles :
– Le modรจle ร  accumulateur possรจde un registre interne utilisรฉ par dรฉfaut pour stocker le rรฉsultat des instructions. Des instructions de load et de store sont nรฉcessaires pour respectivement recevoir ou envoyer des donnรฉes en mรฉmoire.
– Le modรจle mรฉmoire-mรฉmoire nโ€™effectue des opรฉrations que sur des donnรฉes en mรฉmoire. Le rรฉsultat est ainsi directement stockรฉ en mรฉmoire. Plusieurs accรจs sont donc nรฉcessaires pour chaque instruction.
– Le modรจle registre-registre effectue des opรฉrations uniquement sur des donnรฉes contenues dans des registres. De mรชme, le rรฉsultat est stockรฉ dans un registre. Ce modรจle nรฉcessite lui aussi des instructions dรฉdiรฉes de load et de store pour accรฉder ร  la mรฉmoire.
Les ISA utilisรฉes actuellement suivent quasiment toute le modรจle registre-registre. Les mรฉmoires รฉtant trop lentes, chaque accรจs ralentit le systรจme. Le modรจle registre-registre offre une flexibilitรฉ intรฉressante au programmeur qui dispose de plusieurs emplacements rapides dโ€™accรจs pour stocker des donnรฉes. Les accรจs mรฉmoires pour rรฉcupรฉrer des donnรฉes ne sont pas systรฉmatiques. Pour la suite de ce manuscrit, sauf indication contraire, nous ne considรจrerons donc que ce modรจle lร . Familles de jeu dโ€™instructions Les diffรฉrents jeux dโ€™instructions peuvent รฉgalement varier dans leur choix de reprรฉsentation des opรฉrations. En voici les trois principales familles :
1. Les ISA de type Reduced Instruction Set Computer (RISC) visent ร  associer des opรฉrations simples ร  chaque instruction. Chacune ne nรฉcessite donc que peu de cycles dโ€™horloge pour รชtre exรฉcutรฉe.
Un autre avantage est la simplicitรฉ dโ€™implรฉmentation : un nombre rรฉduit dโ€™opรฉrations รฉlรฉmentaires est suffisant. Le logiciel est ensuite responsable de les combiner pour rรฉaliser des opรฉrations pluscomplexes.
2. Les ISA de type Complex Instruction Set Computer (CISC) visent ร 
associer des opรฉrations complexes ร  chaque instruction. Contrairement au RISC, un plus grand nombre de cycles dโ€™horloge est
nรฉcessaire pour exรฉcuter chaque instruction. De plus, lโ€™implรฉmentation est complexifiรฉe : chaque instruction mรจne ร  plusieurs
sous-opรฉrations au niveau du matรฉriel. En revanche, ce jeu dโ€™instructions est intรฉressant du point de vue logiciel de par la variรฉtรฉ
dโ€™opรฉrations quโ€™il offre. Une seule instruction CISC peut-รชtre lโ€™รฉquivalent de plusieurs instructions RISC. Cela impacte รฉgalement la taille des programmes et des mรฉmoires : moins dโ€™instructions sont nรฉcessaires pour des opรฉrations complexes.
3. Les ISA de type Very Long Instruction Word (VLIW) visent ร  regrouper plusieurs sous-opรฉrations dans des instructions trรจs longues. Lโ€™objectif de ce genre dโ€™architecture est de permettre au processeur de rรฉaliser un grand nombre dโ€™opรฉrations en mรชme temps. Pour cela, le compilateur joue un rรดle essentiel : il sโ€™assure que les diffรฉrentes parties dโ€™une mรชme instruction utilisent des mรฉcanismes diffรฉrents du processeur. Cela permet dโ€™รฉviter des conflits internes dโ€™accรจs aux ressources lors de lโ€™exรฉcution.
Historiquement, les caractรฉristiques des processeurs RISC et CISC รฉtaient opposรฉes. Ce contraste est maintenant obsolรจte et se rรฉsume ร  un compromis entre coรปt de dรฉcodage (traduction de lโ€™instruction en opรฉrations matรฉrielles) et coรปt mรฉmoire (place pour stocker les instructions).
Architectures dโ€™ISA existantes Plusieurs ISA ont รฉtรฉ dรฉveloppรฉes. Chacune dโ€™entre elles a des caractรฉristiques qui lui sont propres. Par la suite, trois dโ€™entre elles seront particuliรจrement รฉvoquรฉes :
1. Lโ€™ISA propriรฉtaire x86 dโ€™Intel. Cโ€™est un jeu dโ€™instructions CISC que lโ€™on retrouve dans les processeurs dโ€™Intel et dโ€™AMD, notamment ร  destination des serveurs ou ordinateurs personnels.
2. Lโ€™ISA proriรฉtaire ARM dโ€™Arm. Cโ€™est un jeu dโ€™instructions RISC que lโ€™on retrouve majoritairement dans les processeurs dโ€™Arm principalement ร  destination des systรจmes embarquรฉs et tรฉlรฉphones.
3. Lโ€™ISA libre et ouverte RISC-V maintenue par la fondation du mรชme nom. Cโ€™est la cinquiรจme version dโ€™ISA RISC dรฉveloppรฉe par lโ€™Universitรฉ de Berkeley. Au dรฉpart dรฉveloppรฉe pour des travaux de recherche, elle est ces derniรจres annรฉes au cล“ur de nombreux projets industriels.

Mรฉmoires caches

Nous avons vu que la latence mรฉmoire est un facteur limitant dans les performances des processeurs. Celui-ci est ainsi capable dโ€™exรฉcuter bien plus vite les instructions (une chaque cycle) que la mรฉmoire nโ€™est capable de lui en envoyer (plusieurs dizaines de cycles). Un mรฉcanisme pour tenter de contrer ce problรจme est lโ€™utilisation de mรฉmoires caches.
Une mรฉmoire cache est une mรฉmoire plus rapide que la mรฉmoire principale (gรฉnรฉralement de la mรฉmoire dynamique) : moins de cycles dโ€™horloge sont nรฉcessaires pour accรฉder ร  ses donnรฉes. En contrepartie, les mรฉmoires caches ont une contenance rรฉduite. Augmenter la taille dโ€™une mรฉmoire cache augmente รฉgalement sa complexitรฉ. Chaque donnรฉe doit รชtre accessible ร  tout moment : certains mรฉcanismes matรฉriels sont pour cela nรฉcessaires. Un plus grand nombre de donnรฉes implique donc plus dโ€™opรฉrations matรฉrielles ร  rรฉaliser et une latence accrue. Ainsi, ces mรฉmoires sont gรฉnรฉralement conรงues pour contenir une quantitรฉ limitรฉe de donnรฉes, en plus du fait quโ€™elles nรฉcessitent des technologies de fabrications onรฉreuses.
Le but des mรฉmoires caches est de stocker localement une copie de certaines donnรฉes ou instructions situรฉes dans la mรฉmoire principale.
Ces copies deviennent plus rapidement accessibles. Cependant, seule une petite partie de la mรฉmoire principale peut รชtre placรฉe dans un cache.
Lors dโ€™un accรจs du processeur ร  une donnรฉe, on appelle un cache hit le fait que la donnรฉe demandรฉe se trouve dans le cache. Du point de vue du pipeline, cela revient ร  effectuer un accรจs mรฉmoire accรฉlรฉrรฉ : moins de cycles dโ€™horloge sont nรฉcessaires. ร€ lโ€™inverse, si la donnรฉe demandรฉe nโ€™est pas dans le cache, on appelle cela un cache miss. Cela revient donc ร  effectuer un accรจs mรฉmoire ralenti : plus de cycles dโ€™horloge sont nรฉcessaires pour aller accรฉder ร  la mรฉmoire principale.
Finalement, le choix des donnรฉes ou instructions placรฉes dans un cache est essentiel. Il dรฉtermine directement quels accรจs effectuรฉs par le pipeline seront accรฉlรฉrรฉs (hit) ou ralentis (miss). Pour maximiser lโ€™efficacitรฉ, ce choix se base sur le principe de localitรฉ.

Spรฉculation

La spรฉculation est un principe utilisรฉ pour accรฉlรฉrer lโ€™exรฉcution des instructions. Lโ€™idรฉe gรฉnรฉrale est de prรฉvoir les futurs รฉvรจnements (redirection du flot dโ€™exรฉcution, accรจs mรฉmoires, etc.) pour les anticiper et rรฉduire leur impact sur les performances.

Pipeline et exรฉcution dans le dรฉsordre

Le mรฉcanisme le plus simple usant de spรฉculation dans un processeur est le pipeline lui-mรชme. Le fait de rรฉcupรฉrer en avance les prochaines instructions en mรฉmoire avant dโ€™avoir complรจtement exรฉcutรฉ les prรฉcรฉdentes est une forme dโ€™anticipation. Cependant, le fonctionnement basique dโ€™un pipeline impose rapidement des limites ร  la spรฉculation.
Dรฉpendances de donnรฉes Il existe au sein des programmes des dรฉpendances entre les instructions. Par exemple, lโ€™opรฉrande dโ€™une instruction peut รชtre le rรฉsultat dโ€™une instruction prรฉcรฉdente. Le Code 2.2 reprรฉsentele cas classique dโ€™un calcul de PGCD, un algorithme mathรฉmatique simpliste. On y retrouve alors plusieurs cas de dรฉpendances (e.g. les lignes 3 et 5, 4 et 5, 18 et 20 etc.). Ces dรฉpendances peuvent crรฉer des bulles au sein du pipeline : il faut attendre que le rรฉsultat soit disponible avant de faire avancer la prochaine instruction. Ces mรชmes bulles peuvent aussi รชtre crรฉรฉes dans le cas oรน un accรจs mรฉmoire est ralenti ร  cause dโ€™un cache miss par exemple (e.g. si la ligne 3 est un miss, la ligne 4 devra attendre รฉgalement). Des mรฉcanismes de renvoi de registre (register forwarding) existent pour limiter lโ€™impact des dรฉpendances de donnรฉes. Ils servent ร  rendre utilisable un rรฉsultat dรจs quโ€™il est calculรฉ. ร€ lโ€™รฉchelle dโ€™un pipeline, un rรฉsultat est donc disponible en interne avant quโ€™il ne soit stockรฉ dans un GPR par le dernier รฉtage.
Les dรฉpendances deviennent un facteur limitant dโ€™autant plus important dans le cas de processeurs superscalaires. Ces derniers cherchent ร  augmenter le dรฉbit dโ€™exรฉcution en traitant plusieurs instructions ร  la fois dans chaque รฉtage. Pour cela, la plupart des mรฉcanismes sont dupliquรฉs (e.g. plusieurs dรฉcodeurs et unitรฉs dโ€™exรฉcutions). Ainsi, en cas de bulle, le nombre dโ€™instructions ralenties est dโ€™autant plus important.
Or, le nombre dโ€™instructions en cours dโ€™exรฉcution รฉtant plus grand, le nombre de dรฉpendances ร  gรฉrer lโ€™est รฉgalement.
Rรฉorganisation dynamique des instructions Un mรฉcanisme utilisรฉ dans les processeurs complexes pour diminuer les blocages dus aux dรฉpendances est lโ€™exรฉcution dans le dรฉsordre. Son rรดle est dโ€™optimiser les cas oรน aucune dรฉpendance nโ€™est bloquante. Lโ€™objectif devient alors dโ€™exรฉcuter une instruction dรจs que toutes ses dรฉpendances sont rรฉsolues.
Cela sโ€™oppose donc au format linรฉaire dโ€™un pipeline basique, oรน une instruction nโ€™est forcรฉment exรฉcutรฉe quโ€™aprรจs toutes les prรฉcรฉdentes. Des mรฉcanismes matรฉriels sont alors responsables de prรฉserver lโ€™ordre du programme. Ils sโ€™assurent que si les instructions sont exรฉcutรฉes dans un ordre diffรฉrent de celui prรฉvu par le logiciel, lโ€™รฉtat architectural 20 2. Composants microarchitecturaux (celui visible par le logiciel) reste celui attendu. Mรชme dans le cas dโ€™un algorithme simple comme celui du Code 2.2, on retrouve plusieurs cas oรน cette optimisation peut รชtre bรฉnรฉfique. Par exemple, en cas de blocage de la ligne 10, les lignes 11 et 12 peuvent tout de mรชme รชtre exรฉcutรฉes.
Si les opรฉrandes se situent gรฉnรฉralement dans des registres, il existe รฉgalement des opรฉrations rรฉalisant des accรจs mรฉmoires. De la mรชme maniรจre, des dรฉpendances se crรฉent si des instructions accรจdent ร  une mรชme adresse. Il existe donc des processeurs qui รฉtendent lโ€™exรฉcution dans le dรฉsordre ร  ces accรจs mรฉmoire. Ils tentent alors de prรฉdire les adresses utilisรฉes ainsi que les valeurs lues/รฉcrites.
Pour รชtre implรฉmentรฉe au niveau matรฉriel, lโ€™exรฉcution dans le dรฉsordre demande un grand nombre de ressources coรปteuses. Des tables sont par exemple nรฉcessaires pour mรฉmoriser lโ€™ordre original du programme, rรฉaliser des sauvegardes temporaires des รฉtats en cas dโ€™erreur etc. Ce mรฉcanisme est donc gรฉnรฉralement rรฉservรฉ aux processeurs avec dโ€™importantes contraintes sur les performances. Cโ€™est par exemple le cas de la plupart des processeurs grand public (e.g. les processeurs Intel ou AMD) fabriquรฉs depuis de nombreuses annรฉes.

Exploitation de la microarchitecture par le logiciel

Rรฉsumรฉ du chapitre : Dans ce chapitre, nous nous intรฉressons aux attaques logicielles exploitant les mรฉcanismes de la microarchitecture. De nombreux travaux ont montrรฉ que des programmes normalement isolรฉs pouvaient interagir grรขce au matรฉriel : un principe microarchitectural comme le partage de ressources est notamment utilisรฉ. Aprรจs quelques rappels sur des รฉlรฉments et concepts nรฉcessaires, nous รฉtudions les diffรฉrentes attaques exploitant la microarchitecture en quatre parties : les attaques par analyses des variations temporelles, les attaques par contention dynamique de ressources, les attaques par exรฉcution transitoire et enfin les attaques par canaux contrรดlรฉs.

Objectifs de sรฉcuritรฉ

Contexte Nous avons vu dans le chapitre prรฉcรฉdent que les processeurs sont des composants รฉlectroniques essentiels. Ils sont responsables de lโ€™exรฉcution des calculs au sein de systรจmes variรฉs, que ce soit des ordinateurs, des serveurs, de tรฉlรฉphones ou dโ€™autres systรจmes embarquรฉs. Selon les cas dโ€™application, ils peuvent รชtre utilisรฉs pour le traitement de donnรฉes sensibles et confidentielles. Ils doivent alors รชtre capables dโ€™assurer la protection de ces donnรฉes.
Ce dernier aspect a longtemps รฉtรฉ nรฉgligรฉ au profit des performances. Lโ€™existence de potentielles failles exploitables est connue depuis de nombreuses annรฉes. Lโ€™ajout de nouveaux mรฉcanismes, comme vu prรฉcรฉdemment, nโ€™a fait quโ€™accroรฎtre les faiblesses de ces systรจmes. Cela mรจne aux processeurs modernes de ces derniรจres annรฉes, cibles dโ€™attaques certes plus complexes, mais surtout plus puissantes.
Modรจle dโ€™attaquant Un modรจle dโ€™attaquant dรฉfinit les capacitรฉs dโ€™un attaquant. Il dรฉtermine la maniรจre dont ce dernier peut influer sur le systรจme et quelles actions il peut mener. De la mรชme maniรจre, ce modรจle dรฉlimite les menaces que doivent considรฉrer les solutions mises en place. Dans ce manuscrit, nous nous intรฉressons aux attaques logicielles exploitant la microarchitecture. Elles peuvent รชtre dรฉfinies comme des programmes qui, au cours de leur exรฉcution, utilisent les diffรฉrents mรฉcanismes matรฉriels ร  disposition ร  des fins malveillantes (e.g. retrouver des informations secrรจtes).
Dans notre cas, nous considรฉrons donc un attaquant capable dโ€™exรฉcuter des programmes sur un processeur et dโ€™effectuer des mesures de temps. Gรฉnรฉralement, les ISA incluent des instructions permettant de connaรฎtre le nombre de cycles exรฉcutรฉs. Cette fonctionnalitรฉ est commune et essentielle pour de nombreux programmes. En exรฉcutant deux mesures de cycles, un attaquant est capable de dรฉduire le nombre de cycles qui sโ€™est รฉcoulรฉ entre ces deux instructions. Il peut ainsi connaรฎtre le temps quโ€™a utilisรฉ le processeur pour exรฉcuter les instructions entre ces deux mesures. Dans notre modรจle, lโ€™attaquant dispose du minimum de droits sur le systรจme. Il nโ€™est donc pas privilรฉgiรฉ et nโ€™a accรจs quโ€™ร  ses propres donnรฉes.

Le rapport de stage ou le pfe est un document dโ€™analyse, de synthรจse et dโ€™รฉvaluation de votre apprentissage, cโ€™est pour cela chatpfe.com propose le tรฉlรฉchargement des modรจles complet de projet de fin dโ€™รฉtude, rapport de stage, mรฉmoire, pfe, thรจse, pour connaรฎtre la mรฉthodologie ร  avoir et savoir comment construire les parties dโ€™un projet de fin dโ€™รฉtude.

Table des matiรจres

Remerciements
Sommaire
Liste des figures
Liste des tableaux
Liste des codes
Liste des acronymes
1. Introduction
1.1. Contexte
1.2. Sรฉcuritรฉ dans les systรจmes
1.3. Objectifs et contributions
1.4. Organisation du manuscrit
Comprendre les microarchitectures modernes
2. Composants microarchitecturauxย 
2.1. Principes gรฉnรฉraux
Circuits logiques et mรฉmoires
Organisation du processeur
Caractรฉristiques des jeux dโ€™instructions
2.2. Lโ€™enjeu des performances
Limites du modรจle de base
Utilisation dโ€™un pipeline
Mรฉmoires caches
2.3. Spรฉculation
Pipeline et exรฉcution dans le dรฉsordre
Prรฉdiction dynamique de branchement
Prefetcher
2.4. Parallรฉlisme des exรฉcutions
2.5. Mรฉmoire virtuelle
2.6. Mรฉcanismes de sรฉcuritรฉ
Privilรจges
Exceptions et interruptions
2.7. Conclusion
3. Exploitation de la microarchitecture par le logiciel
3.1. Objectifs de sรฉcuritรฉ
3.2. Principes microarchitecturaux exploitรฉs
3.3. Attaques par analyse des variations temporelles
Principes
Attaques sur les mรฉmoires caches
ร‰tude gรฉnรฉralisรฉe du systรจme
3.4. Attaques par contention dynamique de ressources
Principes
Impact sur les timings
3.5. Attaques par exรฉcution transitoire
Principes
Spectre
Meltdown
ร‰chantillonnage des donnรฉes microarchitecturales
3.6. Attaques par canal contrรดlรฉ
3.7. Synthรจse et conclusion
4. Solutions existantes contre lโ€™exploitation logicielle
4.1. Solutions pour la gestion des ressources partagรฉes
Suppression des mรฉcanismes
Effacement des traces
Partitionnement des ressources
4.2. Solutions pour la gestion de la spรฉculation
Modifications du logiciel
Renforcement du matรฉriel
4.3. Solutions de gestion du temps et des รฉvรจnements
Modification des รฉvรจnements microarchitecturaux
Indรฉterminisme du fonctionnement
Altรฉration des mesures de temps
Exรฉcution en temps constant
4.4. Stratรฉgie globale
Prise en compte ciblรฉe des failles
Rรดles des couches dโ€™abstraction
4.5. Conclusion et suite
Repenser le jeu dโ€™instructions
5. Modifier lโ€™ISA pour la sรฉcuritรฉ
5.1. Principes de base
5.2. Organisation des domaines de sรฉcuritรฉ
Hiรฉrarchie statique
Hiรฉrarchie hybride
Hiรฉrarchie dynamique
5.3. Politique dโ€™isolation microarchitecturale dans lโ€™ISA
Forme des modifications de lโ€™ISA
Stratรฉgies dโ€™abstraction du matรฉriel
5.4. Conclusion
6. Domes
6.1. Stratรฉgie de modification de lโ€™ISA
ISA de base : RISC-V 32 bits
Objectifs dโ€™implรฉmentation
6.2. Proposition dโ€™implรฉmentation
Modรจles et reprรฉsentation
Opรฉrations et instructions
Utilisation des capacitรฉs : les exceptions
6.3. Support dโ€™une politique dโ€™isolation
6.4. Impact sur le logiciel
Conception de la hiรฉrarchie
Compilation
Scรฉnario de dome.switch frรฉquents
6.5. Extension du modรจle
Accรจs aux compteurs de performances
Intรฉgritรฉ du flot dโ€™exรฉcution
Chiffrement et authentification de la mรฉmoire
Augmentation du nombre de domes
6.6. Version rรฉtrocompatible avec les privilรจges statiques
6.7. Conclusion
Adapter la microarchitecture
7. Conception des ressources partagรฉesย 
7.1. Dรฉfinitions
Ressource partagรฉe
Problรฉmatique et objectifs
7.2. Allocation statique des ressources
Principe
Mรฉcanismes pour lโ€™implรฉmentation
7.3. Sรฉparation des ressources
Principes
Mรฉcanismes pour lโ€™implรฉmentation
7.4. Suppression des traces
Principe
Mรฉcanismes pour lโ€™implรฉmentation
7.5. Homogรฉnรฉitรฉ
7.6. Modรจle mรฉmoire et renforcement des frontiรจres
Objectif
Accรจs contrรดlรฉ
Duplication
Cohรฉrence
7.7. Conclusion
8. Implรฉmentation dโ€™une politique dโ€™isolationย 
8.1. Contexte
8.2. Processeur Aubrac
Description de lโ€™architecture de base
Support des domes
8.3. Processeur Salers
Description de lโ€™architecture de base
Support des domes
8.4. Mรฉmoire cache
Fonctionnement gรฉnรฉral des caches
Partie ยซย mรฉmoireย ยป des caches
Partie ยซย contrรดleurย ยป des caches
Partie ยซย busย ยป des caches
8.5. Gรฉnรฉricitรฉ de lโ€™approche
8.6. Autres mรฉcanismes
8.7. Conclusion
9. ร‰valuationย 
9.1. Timesecbench : une suite de tests pour la sรฉcuritรฉ
Objectif et contraintes de dรฉveloppement
Scรฉnario dโ€™attaquant
Vulnรฉrabilitรฉs couvertes par Timesecbench
9.2. Mesure dโ€™efficacitรฉ des contremesures
Comparaison des implรฉmentations vulnรฉrables et sรฉcurisรฉes
Isolation temporelle
Isolation spatiale
9.3. Analyse des performances et du coรปt
Performances
Coรปt en ressources matรฉrielles
9.4. Bilan et conclusion
10. Conclusion
10.1. Rรฉsumรฉ des travaux
10.2. Bilan synthรฉtique
10.3. Travaux futurs et perspectives
Publications et communications
Bibliographie
Annexes
A. Paramรจtres des processeurs
A.1. Processeur Aubrac
A.2. Processeur Salers
B. Liste des instructions pour les domes

Lire le rapport complet

Tรฉlรฉcharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiรฉe. Les champs obligatoires sont indiquรฉs avec *