Reptar
(lock.cmpxchg8b.com)Découverte d’un mystère CPU
- Si les erreurs susceptibles de survenir à l’intérieur des CPU modernes vous intéressent, la suite mérite la lecture.
- Si vous avez déjà écrit de l’assembleur x86, vous connaissez probablement l’instruction
rep movsbutilisée pour déplacer de la mémoire. - Après avoir défini la source, la destination, la direction et le compteur, le processeur se charge de tous les détails.
Interprétation des préfixes d’instruction
- L’une des caractéristiques du x86 est que le décodage des instructions est en général très flexible.
- Même si l’on utilise des préfixes dénués de sens ou en conflit avec d’autres, ils sont le plus souvent ignorés.
- Les compilateurs peuvent utiliser des préfixes superflus pour s’aligner sur la frontière d’alignement souhaitée.
Préfixe REX
- Le i386 disposait de 8 registres généraux, ce qui permettait de désigner un registre sur 3 bits.
- x86-64 a introduit 8 registres généraux supplémentaires, ce qui a nécessité davantage de bits.
- Le préfixe rex permet à l’instruction suivante d’emprunter des bits supplémentaires, rendant possible l’encodage de 16 registres généraux.
Règles d’encodage
- Le préfixe rex augmente l’espace disponible pour encoder les opérandes.
- Les préfixes inutiles ou redondants sont généralement ignorés en x86.
- L’instruction
rex.rxb rep movsbn’ayant pas d’opérandes, les bits rex n’ont pas de signification et le processeur ignore le préfixe rex.
Fast Short Repeat Move (FSRM)
- FSRM est une nouvelle fonctionnalité introduite avec Ice Lake pour résoudre les limites d’ERMS.
- Avec ERMS, la partie difficile des déplacements de chaînes efficaces consiste à aligner les buffers afin d’utiliser le stockage le plus large possible.
- FSRM vise à déplacer plus rapidement les chaînes courtes de 128 octets ou moins.
Découverte
- En utilisant Oracle Serialization, une technique de vérification des processeurs, les chercheurs ont vérifié si deux formes d’un programme généré aléatoirement aboutissaient au même état final.
- En août, le pipeline de vérification a découvert qu’ajouter un préfixe rex.r redondant à une opération
rep movsoptimisée pour FSRM entraînait des résultats imprévisibles. - Il a été confirmé que lorsque plusieurs cœurs déclenchent le même bug, le processeur signale une exception de vérification machine puis s’arrête.
Reproduction
- Les résultats de la recherche ont été publiés dans un dépôt de recherche en sécurité.
- Pour reproduire la faille, il est possible d’utiliser l’outil
icebreak. - Sur les systèmes non affectés, il ne devrait y avoir aucune sortie, tandis que sur les systèmes affectés, un
.s’affiche à chaque reproduction réussie.
Analyse
- Le fonctionnement du microcode sur les systèmes modernes restant secret, seules des théories fondées sur l’observation sont possibles.
- Le bug serait dû au fait que le frontend calcule mal la taille de l’instruction
movsb, ce qui associe les entrées suivantes du ROB (reorder buffer) à de mauvaises adresses.
Questions
- On peut se demander ce qu’il est possible de faire dans cet état de « glitch » inattendu.
- On sait qu’il est possible de corrompre suffisamment l’état du système pour provoquer une erreur de vérification machine, et qu’un thread peut influencer l’exécution de son processeur frère SMT.
- Faute de moyen pour déboguer l’exécution des μops, on ne sait pas s’il est possible d’obtenir une élévation de privilèges.
Solution
- Intel a publié un microcode mis à jour pour tous les processeurs affectés.
- Le fournisseur du système d’exploitation ou du BIOS propose peut-être déjà cette mise à jour.
Alternative
- Si la mise à jour est impossible, il est possible de désactiver les fast strings via le registre spécifique au modèle IA32_MISC_ENABLE.
- Cela entraîne une baisse de performances importante et ne doit donc être utilisé qu’en cas de nécessité absolue.
L’avis de GN⁺
Le point le plus important de cet article est qu’il met en évidence la découverte d’un état de « glitch » inattendu pouvant survenir dans les CPU modernes, et montre que cela peut déboucher sur des vulnérabilités de sécurité. Le texte pourra intéresser les ingénieurs logiciel et contribue à mieux faire comprendre la complexité des CPU ainsi que la fragilité potentielle des systèmes. Il aide aussi à saisir comment ce type de découverte peut mener à des menaces de sécurité concrètes et souligne l’importance du microcode mis à jour.
1 commentaires
Commentaires Hacker News
L’équipe de Konrad Magnusson a découvert un problème lié à mimalloc.
Plusieurs équipes de recherche chez Google ont découvert le bug indépendamment.
Le processeur signale une exception de vérification machine puis s’arrête.
Cela fait prendre conscience d’un manque de compréhension du matériel.
Cela rappelle le diagnostic de qemu lorsqu’il a été confronté au problème
repz ret.repz ret.Des employés d’Intel eux-mêmes et des employés de Google ont signalé le problème.
C’est bien plus intéressant que l’article de Google.
Question sur la possibilité de concevoir un CPU qui n’exécute pas les instructions dans l’ordre mais de façon spéculative, sans problèmes de sécurité.
Explication de l’avis de sécurité d’Intel.