Microsoft iepenet CHERIoT, in hardwareoplossing om C-koadebefeiliging te ferbetterjen

Microsoft hat ûntjouwings ûntdutsen yn ferbân mei it CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) projekt, rjochte op it blokkearjen fan feiligensproblemen yn besteande koade yn C en C++. CHERIoT biedt in oplossing wêrmei jo besteande C / C ++ codebases kinne beskermje sûnder de needsaak om se opnij te bewurkjen. Beskerming wurdt útfierd troch it brûken fan in wizige gearstaller dy't brûkt in spesjale útwreide set fan prosessor ynstruksjes (ISA), fersoarge troch de prosessor en op it hardware nivo tafersjoch op ûnthâld tagong, kontrolearjen fan de krektens fan wurk mei oanwizers en garandearje isolemint fan koade blokken.

It projekt is makke mei it each op it feit dat it leech-nivo aard fan 'e C-taal in boarne fan flaters wurdt by it wurkjen mei ûnthâld, wat liedt ta problemen lykas bufferoverflows, tagong ta al befrijd ûnthâld, pointer-ferwizings, of dûbele befrijingen . Praktyk lit sjen dat sels grutte bedriuwen lykas Google en Microsoft, dy't in strikt belied foar wizigingsbeoardieling hawwe en moderne ûntwikkelingsmetoaden en statyske analyse-ark brûke, de ôfwêzigens fan flaters net garandearje kinne by it wurkjen mei ûnthâld (bygelyks sawat 70% fan kwetsberens yn Microsoft en Google wurde feroarsake troch ûnfeilige ûnthâldôfhanneling).

It probleem kin wurde oplost troch programmeartalen te brûken dy't feilige operaasje garandearje mei ûnthâld, of ferbiningen mei ekstra kontrôles, bygelyks troch te brûken ynstee fan gewoane pointers lykas MiraclePtr (raw_ptr), dy't ekstra kontrôles útfiert foar tagong ta befrijde ûnthâldgebieten. Mar sokke metoaden binne mear geskikt foar nije koade, en it werwurkjen fan besteande C / C ++ projekten is frij problematysk, benammen as se binne ûntwurpen om te rinnen yn boarne-beheinde omjouwings, lykas ynbêde systemen en Internet of Things apparaten.

CHERIoT-hardware-komponinten binne ûntworpen as in mikrocontroller basearre op 'e RISC-V-arsjitektuer, mei ymplemintaasje fan' e beskerme CHERI (Capability Hardware Extension to RISC-V) prosessor-arsjitektuer, dy't in model leveret fan kontroleare ûnthâldtagong basearre op "mooglikheid" (elk lêzen en skriuwen) operaasje nei it ûnthâld is autorisearre). Op grûn fan de ynstruksje set-arsjitektuer (ISA) foarsjoen yn CHERIoT, wurdt in softwaremodel boud dat de feiligens garandearret fan it wurkjen mei ûnthâld op it nivo fan yndividuele objekten, soarget foar beskerming tsjin tagong ta al befrijd ûnthâld, en ymplementearret in lichtgewicht ûnthâld tagongsisolaasjesysteem . It spesifisearre softwarebeskermingsmodel wurdt direkt wjerspegele yn it C / C ++-taalmodel, wêrtroch it kin wurde brûkt om besteande applikaasjes te beskermjen (allinich opnij kompilearje en rinne op apparatuer dy't ISA CHERIoT stipet is fereaske).

De foarstelde oplossing kinne jo blokkearje flaters dy't feroarsaakje in foarwerp te gean bûten de grinzen fan ûnthâld, net tastean pointer ferfanging (alle pointers moatte wurde oanmakke út besteande pointers), en tafersjoch op ûnthâld tagong nei it befrijen (elke tagong ta ûnthâld mei help fan in ferkearde oanwizer as in oanwizer dy't ferwiist nei in befrijd objekt resultearret yn in útsûndering wurdt smiten). Bygelyks, mei it brûken fan CHERIoT kinne jo automatyske kontrôle fan grinzen, tracking fan ûnthâldlibben, en hanthavenjen fan oanwizerintegriteit yn komponinten ymplementearje dy't net fertroude gegevens behannelje sûnder koadewizigingen te fereaskje.

It projekt omfettet in spesifikaasje fan 'e útwreide CHERIoT-ynstruksje-arsjitektuer, in referinsje-ymplemintaasje fan in 32-bit RISC-V CPU dy't de CHERIoT ISA stipet, en in wizige LLVM-ark. CPU-prototype-diagrammen en hardwareblokbeskriuwingen yn Verilog wurde ferspraat ûnder de Apache 2.0-lisinsje. De Ibex-kearn fan it lowRISC-projekt waard brûkt as basis foar de CPU. It CHERIoT ISA-koademodel is definiearre yn 'e Sail-taal en wurdt lisinsje jûn ûnder de BSD-lisinsje.

Derneist wurdt in prototype fan it CHERIoT RTOS real-time bestjoeringssysteem foarsteld, dat de mooglikheid biedt om kompartementen te isolearjen sels op ynbêde systemen mei 256 MB RAM. De CHERIOT RTOS-koade is skreaun yn C++ en wurdt ferspraat ûnder de MIT-lisinsje. De basiskomponinten fan it OS, lykas de bootloader, planner en ûnthâldferdielingssysteem, binne ûntworpen yn 'e foarm fan kompartiminten.

In compartment yn CHERIoT RTOS is in isolearre kombinaasje fan koade en globale fariabelen dy't liket op in dielde bibleteek, mar yn tsjinstelling ta de lêste, it kin feroarje syn steat (feroarlik) en rinne yn in aparte feiligens kontekst. Gjin koade fan bûten kin oerdrage kontrôle oan koade yn in fak en tagong ta objekten, útsein troch tagong ta spesjaal definiearre yngong punten en mei help fan oanwizers oan objekten eksplisyt trochjûn as ropt in oar fak. Yntegriteit en fertroulikens wurde garandearre foar koade en globale objekten yn in fak.

Boarne: opennet.ru

Add a comment