
Backdoors matériels dans les CPU x86
: portes dérobées matérielles dans les CPU x86
github.com/xoreaxeaxeax/rosenbridge // domas // @xoreaxeaxeax
project:rosenbridge révèle une porte dérobée matérielle dans certains processeurs x86 de bureau, portables et embarqués.
La porte dérobée permet au code de l'anneau 3 (espace utilisateur) de contourner les protections du processeur pour lire et écrire librement les données de l'anneau 0 (noyau). Bien que la porte dérobée soit généralement désactivée (nécessitant une exécution en anneau 0 pour l'activer), nous avons constaté qu'elle est activée par défaut sur certains systèmes.
Ce dépôt contient des utilitaires pour vérifier si votre processeur est affecté, fermer la porte dérobée si elle est présente, ainsi que les recherches et outils utilisés pour découvrir et analyser la porte dérobée.
La porte dérobée rosenbridge est un petit cœur non-x86 intégré aux côtés du cœur x86 principal dans le CPU. Elle est activée par un bit de contrôle de registre spécifique au modèle, puis basculée avec une instruction de lancement. Le cœur intégré reçoit ensuite des commandes, enveloppées dans une instruction x86 spécialement formatée. Le cœur exécute ces commandes (que nous appelons le 'jeu d'instructions profondément intégré'), en contournant toutes les protections mémoire et les vérifications de privilèges.
Bien que la porte dérobée devrait nécessiter un accès au niveau du noyau pour être activée, il a été observé qu'elle est activée par défaut sur certains systèmes, permettant à tout code non privilégié de modifier le noyau.
La porte dérobée rosenbridge est totalement distincte des autres coprocesseurs connus publiquement sur les CPU x86, tels que le Management Engine ou le Platform Security Processor ; elle est plus profondément intégrée que tout coprocesseur connu, ayant accès non seulement à toute la mémoire du CPU, mais aussi à son fichier de registres et à son pipeline d'exécution.
On pense que seuls les CPU VIA C3 sont affectés par ce problème. Les processeurs de la série C sont commercialisés pour l'automatisation industrielle, les points de vente, les guichets automatiques et le matériel de santé, ainsi que pour une variété d'ordinateurs de bureau et portables grand public.
La portée de cette vulnérabilité est limitée ; les générations de CPU postérieures au C3 ne contiennent plus cette fonctionnalité.
Ce travail est publié en tant qu'étude de cas et expérience de pensée, illustrant comment des portes dérobées pourraient apparaître dans des processeurs de plus en plus complexes, et comment les chercheurs et les utilisateurs finaux pourraient identifier ces fonctionnalités. Les outils et recherches proposés ici fournissent le point de départ pour des recherches toujours plus approfondies sur les vulnérabilités des processeurs.
Pour vérifier si votre CPU est affecté :
git clone https://github.com/xoreaxeaxeax/rosenbridge
cd rosenbridge/util
make
sudo modprobe msr
sudo ./bin/check
L'utilitaire fourni doit être exécuté sur du bare metal (pas dans une machine virtuelle) et est dans un état alpha. Il peut planter, provoquer une panique ou bloquer les systèmes ne contenant pas la porte dérobée.
Les utilitaires fournis ici sont conçus autour d'une famille et d'un cœur de processeur spécifiques ; malheureusement, les outils manqueront la porte dérobée si elle a été ne serait-ce que légèrement modifiée par rapport à la forme étudiée.
Certains systèmes ont la porte dérobée activée par défaut, permettant à du code non privilégié d'obtenir un accès au niveau du noyau sans autorisation. Si les étapes de 'Vérifier votre CPU' indiquent que votre CPU est vulnérable, vous pouvez installer un script pour fermer la porte dérobée tôt dans le processus de démarrage :
cd fix
make
sudo make install
reboot
Notez que, même avec cela, un attaquant ayant un accès au niveau du noyau peut toujours réactiver la porte dérobée. Ce script est fourni comme une ébauche pour corriger le problème pendant le processus de démarrage, mais nécessitera une adaptation pour différents systèmes.
L'utilitaire sandsifter est largement utilisé dans cette recherche pour découvrir des instructions inconnues.
asm
Un assembleur pour le jeu d'instructions profondément intégré (DEIS). Il convertit les programmes écrits en assembleur rosenbridge personnalisé en instructions x86 qui, lorsqu'elles sont exécutées après l'instruction de lancement, enverront les commandes au cœur CPU caché.
esc
Une preuve de concept d'utilisation de la porte dérobée rosenbridge pour l'escalade de privilèges.
fix
Une ébauche pour fermer la vulnérabilité sur les systèmes affectés, dans la mesure du possible via des mises à jour de registres spécifiques au modèle.
fuzz
Une collection d'utilitaires utilisés pour fuzzer à la fois les cœurs x86 et rosenbridge, afin d'isoler l'instruction de lancement et l'instruction de pont inconnues, et de résoudre le format d'instruction du cœur rosenbridge.
deis
Le fuzzer utilisé pour explorer les effets et les capacités du cœur CPU caché.
exit
On pense que, sur certains processeurs, une séquence de sortie est nécessaire pour revenir au cœur x86 à la fin d'une séquence DEIS. Ce répertoire contient les utilitaires utilisés pour rechercher la séquence de sortie dans les premières étapes de la recherche, mais a été abandonné lorsqu'un processeur a été trouvé ne nécessitant aucune séquence de ce type.
manager
Une collection d'utilitaires Python conçus pour surveiller et gérer les tâches de fuzzing réparties sur un réseau de workers.
wrap
Une version allégée du fuzzer sandsifter, utilisée pour identifier l'instruction de pont qui enverra les commandes du cœur x86 au cœur rosenbridge caché.
kern
Une collection d'utilitaires d'aide utilisés pour surveiller la mémoire du noyau et les registres pour les modifications causées par les instructions DEIS fuzzées.
lock
Utilitaires pour verrouiller ou déverrouiller la porte dérobée rosenbridge.
proc
Un outil pour identifier des motifs à partir des journaux de fuzzing afin d'identifier des classes de comportements d'instructions DEIS.
test
Un outil utilisé au début de la recherche, pour tenter d'identifier l'architecture du cœur caché en exécutant des instructions RISC connues.
util
Un outil en état alpha pour détecter si un processeur est affecté par rosenbridge.
(TODO : lien vers le livre blanc)
(TODO : lien vers les diapositives)
Les détails et implications présentés dans ce travail sont les inférences et opinions des auteurs, dérivées de la recherche décrite. La recherche est effectuée et fournie dans le but d'identifier et de corriger une vulnérabilité de sécurité perçue sur les CPU décrits. Les processeurs VIA sont réputés pour leur faible consommation d'énergie et leur excellence dans les conceptions embarquées; nous croyons que la fonctionnalité décrite a été créée de bonne foi comme une fonctionnalité utile pour le marché embarqué, et a été involontairement laissée activée sur certaines générations précoces du processeur. Aucune intention malveillante n'est implicite.
project:rosenbridge est un effort de recherche de Christopher Domas (@xoreaxeaxeax).