2 points par GN⁺ 2023-11-15 | 1 commentaires | Partager sur WhatsApp

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 movsb utilisé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 movsb n’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 movs optimisé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

 
GN⁺ 2023-11-15
Commentaires Hacker News
  • L’équipe de Konrad Magnusson a découvert un problème lié à mimalloc.

    • Konrad Magnusson de Paradox Interactive a identifié un souci lié à mimalloc, qui pourrait être en lien avec une nouvelle vulnérabilité CPU découverte par des chercheurs de Google.
  • Plusieurs équipes de recherche chez Google ont découvert le bug indépendamment.

    • Plusieurs équipes de recherche au sein de Google, notamment l’équipe silifuzz et l’équipe Google Information Security Engineering, ont découvert le même bug de manière indépendante.
  • Le processeur signale une exception de vérification machine puis s’arrête.

    • Il est fait mention d’un phénomène où le processeur signale une exception de vérification machine et cesse de fonctionner.
  • Cela fait prendre conscience d’un manque de compréhension du matériel.

    • L’auteur reconnaît manquer de connaissances sur le hardware et se demande pourquoi un « préfixe » est nécessaire pour modifier le comportement d’une instruction.
  • Cela rappelle le diagnostic de qemu lorsqu’il a été confronté au problème repz ret.

    • Cela évoque la situation où qemu avait diagnostiqué le problème repz ret.
  • Des employés d’Intel eux-mêmes et des employés de Google ont signalé le problème.

    • Intel remercie ses propres employés ainsi que ceux de Google d’avoir découvert et signalé ce problème en interne.
  • C’est bien plus intéressant que l’article de Google.

    • L’auteur exprime que cette discussion est beaucoup plus intéressante 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é.

    • L’auteur s’interroge sur les problèmes de sécurité pouvant survenir lorsqu’on conçoit un CPU qui n’exécute pas les instructions dans l’ordre mais de manière spéculative, et demande si, à l’avenir, on s’orientera vers un modèle où chaque cœur A55 exécuterait indépendamment une application.
  • Explication de l’avis de sécurité d’Intel.

    • L’avis de sécurité d’Intel explique qu’il existe, sur certains processeurs Intel, des séquences d’instructions provoquant un comportement inattendu, permettant à un utilisateur authentifié de provoquer une élévation de privilèges, une divulgation d’informations ou un déni de service.