Microsoft obre CHERIoT, una solució de maquinari per millorar la seguretat del codi C

Microsoft ha descobert desenvolupaments relacionats amb el projecte CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), destinat a bloquejar problemes de seguretat en el codi existent en C i C++. CHERIoT ofereix una solució que us permet protegir les bases de codi C/C++ existents sense necessitat de reelaborar-les. La protecció s'implementa mitjançant l'ús d'un compilador modificat que utilitza un conjunt estès especial d'instruccions de processador (ISA), proporcionat pel processador i a nivell de maquinari supervisant l'accés a la memòria, comprovant la correcció del treball amb punters i assegurant l'aïllament dels blocs de codi.

El projecte es va crear tenint en compte que la naturalesa de baix nivell del llenguatge C es converteix en una font d'errors quan es treballa amb memòria, provocant problemes com ara desbordaments de memòria intermèdia, accés a memòria ja alliberada, desreferències de punters o dobles lliures. . La pràctica demostra que fins i tot grans corporacions com Google i Microsoft, que tenen una política estricta de revisió de canvis i utilitzen mètodes de desenvolupament moderns i eines d'anàlisi estàtica, no poden garantir l'absència d'errors quan es treballa amb memòria (per exemple, al voltant del 70% de les vulnerabilitats de Microsoft). i Google són causats per un maneig de memòria no segur).

El problema es pot resoldre utilitzant llenguatges de programació que garanteixen un funcionament segur amb memòria, o enllaços amb comprovacions addicionals, per exemple, utilitzant en comptes de punters habituals com MiraclePtr (raw_ptr), que realitza comprovacions addicionals per accedir a àrees de memòria alliberades. Però aquests mètodes són més adequats per al codi nou i la reelaboració dels projectes C/C++ existents és bastant problemàtic, sobretot si estan dissenyats per executar-se en entorns amb recursos limitats, com ara sistemes incrustats i dispositius d'Internet de les coses.

Els components de maquinari CHERIoT estan dissenyats com un microcontrolador basat en l'arquitectura RISC-V, implementant l'arquitectura de processador protegida CHERI (Capability Hardware Extension to RISC-V), que proporciona un model d'accés controlat a la memòria basat en la "capacitat" (cada lectura i escriptura). l'operació a la memòria està autoritzada). A partir de l'arquitectura de conjunt d'instruccions (ISA) proporcionada a CHERIoT, es construeix un model de programari que garanteix la seguretat de treballar amb memòria a nivell d'objectes individuals, proporciona protecció contra l'accés a la memòria ja alliberada i implementa un sistema d'aïllament d'accés a memòria lleuger. . El model de protecció de programari especificat es reflecteix directament en el model de llenguatge C/C++, que permet utilitzar-lo per protegir les aplicacions existents (només cal recompilar i executar-se en equips compatibles amb ISA CHERIoT).

La solució proposada us permet bloquejar els errors que fan que un objecte vagi més enllà dels límits de la memòria, no permet la substitució de punters (tots els punters s'han de generar a partir de punters existents) i supervisa l'accés a la memòria després de l'alliberament (qualsevol accés a la memòria utilitzant un punter incorrecte). punter o un punter que fa referència a un objecte alliberat dóna com a resultat una excepció). Per exemple, l'ús de CHERIoT us permet implementar la comprovació automàtica de límits, el seguiment de la vida útil de la memòria i l'aplicació de la integritat del punter en components que gestionen dades no fiables sense requerir cap canvi de codi.

El projecte inclou una especificació de l'arquitectura ampliada del conjunt d'instruccions CHERIoT, una implementació de referència d'una CPU RISC-V de 32 bits que admet el CHERIoT ISA i un conjunt d'eines LLVM modificat. Els diagrames de prototipus de CPU i les descripcions de blocs de maquinari a Verilog es distribueixen sota la llicència Apache 2.0. El nucli Ibex del projecte lowRISC es va utilitzar com a base per a la CPU. El model de codi CHERIoT ISA es defineix en el llenguatge Sail i té llicència sota la llicència BSD.

A més, es proposa un prototip del sistema operatiu en temps real CHERIoT RTOS, que ofereix la possibilitat d'aïllar compartiments fins i tot en sistemes incrustats amb 256 MB de RAM. El codi CHERIoT RTOS està escrit en C++ i es distribueix sota la llicència MIT. Els components bàsics del sistema operatiu, com ara el carregador d'arrencada, el programador i el sistema de distribució de memòria, estan dissenyats en forma de compartiments.

Un compartiment a CHERIoT RTOS és una combinació aïllada de codi i variables globals que s'assembla a una biblioteca compartida, però a diferència d'aquesta última, pot canviar el seu estat (mutable) i executar-se en un context de seguretat independent. Cap codi de l'exterior pot transferir el control al codi d'un compartiment i accedir a objectes, excepte accedint a punts d'entrada especialment definits i utilitzant punters a objectes passats explícitament quan es crida a un altre compartiment. La integritat i la confidencialitat estan garantides per al codi i els objectes globals en un compartiment.

Font: opennet.ru

Afegeix comentari