Des chercheurs de l'UniversitĂ© scientifique et technologique de dĂ©fense de l'ArmĂ©e populaire de libĂ©ration de la Chine, de l'UniversitĂ© nationale de Singapour et de l'Ăcole polytechnique fĂ©dĂ©rale de Zurich ont dĂ©veloppĂ© une nouvelle mĂ©thode d'attaque sur les enclaves isolĂ©es Intel SGX (Software Guard eXtensions). Cette attaque, nommĂ©e SmashEx, est causĂ©e par des problĂšmes de rĂ©entrance lors du traitement des exceptions dans les composants runtime d'Intel SGX. La mĂ©thode d'attaque proposĂ©e permet, en ayant le contrĂŽle du systĂšme d'exploitation, de dĂ©terminer les donnĂ©es confidentielles stockĂ©es dans l'enclave ou d'organiser la copie de son propre code dans la mĂ©moire de l'enclave et son exĂ©cution.
Des prototypes d'exploits ont été préparés pour les enclaves avec runtime basé sur Intel SGX SDK (CVE-2021-0186) et Microsoft Open Enclave (CVE-2021-33767). Dans le premier cas, la possibilité d'extraction de la clé RSA utilisée sur le serveur web pour HTTPS a été démontrée, tandis que dans le second cas, il a été possible de déterminer le contenu obtenu via l'outil cURL exécuté à l'intérieur de l'enclave. La vulnérabilité a déjà été corrigée par un correctif dans les versions Intel SGX SDK 2.13 et Open Enclave 0.17.1. En plus des paquets Intel SGX SDK et Microsoft Open Enclave, la vulnérabilité se manifeste également dans les SDK de Google Asylo, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX et Veracruz.
Rappelons que la technologie SGX (Software Guard Extensions) est apparue dans les processeurs Intel Core de sixiĂšme gĂ©nĂ©ration (Skylake) et propose une sĂ©rie d'instructions permettant de dĂ©finir des zones de mĂ©moire sĂ©curisĂ©es â enclaves â pour les applications de niveau utilisateur, dont le contenu ne peut pas ĂȘtre lu ou modifiĂ© mĂȘme par le noyau et le code s'exĂ©cutant en modes ring0, SMM et VMM. Il n'est pas possible de transmettre le contrĂŽle au code dans l'enclave par des fonctions de transition traditionnelles et des manipulations avec les registres et la pile â la transmission du contrĂŽle Ă l'enclave utilise de nouvelles instructions spĂ©cifiquement créées, EENTER, EEXIT et ERESUME, qui effectuent une vĂ©rification des autorisations. Le code placĂ© dans l'enclave peut utiliser des mĂ©thodes d'appel classiques pour accĂ©der aux fonctions Ă l'intĂ©rieur de l'enclave ainsi qu'une instruction spĂ©ciale pour appeler des fonctions externes. Pour protĂ©ger contre les attaques matĂ©rielles, telles que le branchement au module DRAM, un chiffrement de la mĂ©moire de l'enclave est appliquĂ©.

Le problĂšme rĂ©side dans le fait que la technologie SGX permet au systĂšme d'exploitation d'interrompre l'exĂ©cution de l'enclave en gĂ©nĂ©rant une exception matĂ©rielle, et que l'enclave ne met pas correctement en Ćuvre les primitives pour le traitement atomique de telles exceptions. Contrairement au kernel du systĂšme d'exploitation et aux applications ordinaires, le code Ă l'intĂ©rieur des enclaves n'a pas accĂšs aux primitives pour organiser des actions atomiques pendant le traitement des exceptions asynchrones. Sans ces primitives atomiques, l'enclave peut ĂȘtre interrompue Ă tout moment et renvoyĂ©e Ă l'exĂ©cution, mĂȘme lorsque des sections critiques sont en cours d'exĂ©cution et qu'elle se trouve dans un Ă©tat non sĂ©curisĂ© (par exemple, lorsque les registres du CPU ne sont pas sauvegardĂ©s/restaurĂ©s).

Pour un fonctionnement normal, la technologie SGX permet d'interrompre l'exécution de l'enclave par des exceptions matérielles configurables. Cette caractéristique permet aux environnements d'exécution des enclaves de traiter les exceptions intra-enclave ou les signaux, mais cela peut également provoquer des erreurs de réentrance. L'attaque SmashEx repose sur l'exploitation des lacunes dans le SDK qui ne gÚrent pas correctement la situation d'appel répété du gestionnaire d'exception. Il est important de noter que, pour exploiter cette vulnérabilité, l'attaquant doit avoir la capacité d'interrompre l'exécution de l'enclave, c'est-à -dire qu'il doit contrÎler l'environnement systÚme.
AprĂšs la gĂ©nĂ©ration d'une exception, l'attaquant obtient une petite fenĂȘtre de temps pendant laquelle il peut intercepter le flux d'exĂ©cution en manipulant les paramĂštres d'entrĂ©e. En particulier, s'il a accĂšs au systĂšme (environnement Ă l'extĂ©rieur de l'enclave), il peut crĂ©er une nouvelle exception immĂ©diatement aprĂšs l'exĂ©cution de l'instruction d'entrĂ©e dans l'enclave (EENTER), ce qui entraĂźnera le retour du contrĂŽle au systĂšme Ă un stade oĂč la configuration de la pile pour l'enclave n'est pas encore terminĂ©e, Ă©tat dans lequel est Ă©galement sauvegardĂ© le statut des registres CPU.
Le systĂšme peut ensuite rendre le contrĂŽle au sein de l'enclave, mais comme la pile de l'enclave n'a pas Ă©tĂ© configurĂ©e pendant l'interruption, l'enclave s'exĂ©cutera avec la pile qui se trouve dans la mĂ©moire du systĂšme, ce qui peut ĂȘtre utilisĂ© pour appliquer des mĂ©thodes d'exploitation basĂ©es sur la programmation orientĂ©e retour (ROP - Return-Oriented Programming). Lors de l'utilisation de la technique ROP, l'attaquant ne tente pas de placer son code en mĂ©moire, mais utilise dĂ©jĂ des morceaux d'instructions machine prĂ©sents dans les bibliothĂšques chargĂ©es, se terminant par une instruction de retour au contrĂŽle (gĂ©nĂ©ralement, ce sont les terminaisons de fonctions de bibliothĂšque). Le fonctionnement de l'exploitation se rĂ©sume Ă construire une chaĂźne d'appels de blocs similaires (« gadgets ») pour obtenir la fonctionnalitĂ© dĂ©sirĂ©e.


Source : opennet.ru
