Microsoft ouvre CHERIoT, une solution matérielle pour améliorer la sécurité du code C

Microsoft a découvert des développements liés au projet CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), visant à bloquer les problèmes de sécurité dans le code existant en C et C++. CHERIoT propose une solution qui vous permet de protéger les bases de code C/C++ existantes sans avoir besoin de les retravailler. La protection est mise en œuvre grâce à l'utilisation d'un compilateur modifié qui utilise un ensemble étendu spécial d'instructions de processeur (ISA), fourni par le processeur et surveillant au niveau matériel l'accès à la mémoire, vérifiant l'exactitude du travail avec des pointeurs et assurant l'isolement des blocs de code.

Le projet a été créé en tenant compte du fait que la nature de bas niveau du langage C devient une source d'erreurs lors du travail avec la mémoire, entraînant des problèmes tels que des débordements de tampon, l'accès à de la mémoire déjà libérée, des déréférences de pointeurs ou des doubles libérations. . La pratique montre que même les grandes entreprises telles que Google et Microsoft, qui ont une politique stricte d'examen des modifications et utilisent des méthodes de développement modernes et des outils d'analyse statique, ne peuvent garantir l'absence d'erreurs lors du travail avec la mémoire (par exemple, environ 70 % des vulnérabilités de Microsoft et Google sont causés par une gestion non sécurisée de la mémoire).

Le problème peut être résolu en utilisant des langages de programmation qui garantissent un fonctionnement sûr avec la mémoire, ou des liaisons avec des contrôles supplémentaires, par exemple en utilisant à la place des pointeurs ordinaires comme MiraclePtr (raw_ptr), qui effectue des contrôles supplémentaires pour accéder aux zones de mémoire libérées. Mais ces méthodes sont plus adaptées au nouveau code, et retravailler les projets C/C++ existants est assez problématique, surtout s'ils sont conçus pour s'exécuter dans des environnements aux ressources limitées, tels que les systèmes embarqués et les appareils Internet des objets.

Les composants matériels CHERIoT sont conçus comme un microcontrôleur basé sur l'architecture RISC-V, implémentant l'architecture de processeur protégée CHERI (Capability Hardware Extension to RISC-V), qui fournit un modèle d'accès mémoire contrôlé basé sur la « capacité » (chaque lecture et écriture l'opération en mémoire est autorisée) . Sur la base de l'architecture de jeu d'instructions (ISA) fournie dans CHERIoT, un modèle logiciel est construit qui garantit la sécurité du travail avec la mémoire au niveau des objets individuels, offre une protection contre l'accès à la mémoire déjà libérée et implémente un système léger d'isolation de l'accès à la mémoire. . Le modèle de protection logicielle spécifié est directement reflété dans le modèle de langage C/C++, ce qui lui permet d'être utilisé pour protéger les applications existantes (seules la recompilation et l'exécution sur un équipement prenant en charge ISA CHERIoT sont requises).

La solution proposée permet de bloquer les erreurs qui font qu'un objet dépasse les limites de la mémoire, ne permet pas la substitution de pointeurs (tous les pointeurs doivent être générés à partir de pointeurs existants) et surveille l'accès à la mémoire après la libération (tout accès à la mémoire utilisant un incorrect pointeur ou un pointeur référençant un objet libéré entraîne la levée d’une exception). Par exemple, l'utilisation de CHERIoT vous permet d'implémenter une vérification automatique des limites, un suivi de la durée de vie de la mémoire et une application de l'intégrité du pointeur dans des composants qui gèrent des données non fiables sans nécessiter de modification du code.

Le projet comprend une spécification de l'architecture de jeu d'instructions CHERIoT étendue, une implémentation de référence d'un processeur RISC-V 32 bits prenant en charge l'ISA CHERIoT et une boîte à outils LLVM modifiée. Les diagrammes de prototypes de processeur et les descriptions des blocs matériels dans Verilog sont distribués sous la licence Apache 2.0. Le noyau Ibex du projet lowRISC a été utilisé comme base pour le processeur. Le modèle de code CHERIoT ISA est défini dans le langage Sail et est sous licence BSD.

De plus, un prototype du système d'exploitation en temps réel CHERIoT RTOS est proposé, qui offre la possibilité d'isoler des compartiments même sur des systèmes embarqués dotés de 256 Mo de RAM. Le code CHERIoT RTOS est écrit en C++ et est distribué sous licence MIT. Les composants de base du système d'exploitation, tels que le chargeur de démarrage, le planificateur et le système de distribution de mémoire, sont conçus sous forme de compartiments.

Un compartiment dans CHERIoT RTOS est une combinaison isolée de code et de variables globales qui ressemble à une bibliothèque partagée, mais contrairement à cette dernière, il peut changer d'état (mutable) et s'exécuter dans un contexte de sécurité distinct. Aucun code extérieur ne peut transférer le contrôle au code d'un compartiment et accéder aux objets, sauf en accédant à des points d'entrée spécialement définis et en utilisant des pointeurs vers des objets explicitement transmis lors de l'appel d'un autre compartiment. L'intégrité et la confidentialité sont garanties pour le code et les objets globaux d'un compartiment.

Source: opennet.ru

Ajouter un commentaire