Kompania Microsoft ka hapur zhvillimet e lidhura me projektin CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), i cili ka si qëllim bllokimin e problemeve me sigurinë në kodin ekzistues në gjuhët C dhe C++. CHERIoT ofron një zgjidhje që siguron mbrojtjen e bazave të kodit ekzistente në C/C++ pa pasur nevojë për riemërtesë. Mbrojtja realizohet përmes përdorimit të një kompilersh të modifikuar, që përdor një set të veçantë të instruksioneve të zgjeruara të procesorit (ISA), të cilat ofrohen nga procesori dhe që në nivel hardueri ndjekin qasjen në memorie, kontrollojnë korrektësinë e operacioneve me tregues dhe sigurojnë izolimin e blloqeve të kodit.
Projekti është krijuar duke pasur parasysh karakterin e nivelit të ulët të gjuhës C, që bëhet burim gabimesh gjatë punës me memorien, duke çuar në probleme të tilla si mbushja e buffer-it, akses në memorien e çliruar, dereferencimi i pointer-ave ose lirimi i dyfishtë i memories. Praktika tregon se edhe korporata të mëdha si Google dhe Microsoft, të cilat kanë një politikë të fortë rishikimi të ndryshimeve dhe përdorin metoda moderne të zhvillimit dhe mjete të analizës statike, nuk mund të garantojnë mungesën e gabimeve në punën me memorien (p.sh., rreth 70% e dobësive në produktet software të Microsoft dhe Google shkaktohen nga puna e pasigurt me memorien).
Problemi mund të zgjidhet duke përdorur gjuhë programimi që sigurojnë punë të sigurt me memorien, ose ndihma me kontrolle shtesë, për shembull, duke përdorur në vend të treguesve të zakonshëm tipin MiraclePtr (raw_ptr), i cili kryen kontrollime shtesë në lidhje me qasje në zona të lira të memories. Por këto metoda janë më të përshtatshme për kodin e ri, ndërsa ri-ndërtimi i projekteve ekzistuese në C/C++ është mjaft problematik, veçanërisht nëse ato janë të destinuara për t'u ekzekutuar në mjedise me burime të kufizuara, si sistemet e integruara dhe pajisjet e Internetit të Gjërave.
Komponentët harduerikë të CHERIoT janë të organizuar si një mikroproçesor mbi bazën e arkitekturës RISC-V, duke realizuar një arkitekturë procesori të mbrojtur CHERI (Capability Hardware Extension to RISC-V), e cila ofron një model të kontrolluar të aksesit në memorie të bazuar në "capability" (çdo operacion leximi dhe shkruajti në memorie autorizohet). Në bazë të arkitekturës së ofruar nga CHERIoT e grupit të komandave (ISA) është ndërtuar një model programor, që garanton sigurinë e punës me memorien në nivelin e objekteve të veçanta, duke ofruar mbrojtje nga qasja në memorien e liruar dhe duke realizuar një sistem të lehtë izolimi të aksesit në memorie. Ky model programor mbrojtjeje pasqyrohet drejtpërdrejt në modelin gjuhësor C/C++, çka lejon aplikimin e tij për të mbrojtur aplikacionet ekzistuese (nevojitet vetëm rikompilimi dhe ekzekutimi në pajisjet që përkrahin ISA CHERIoT).
Zgjidhja e propozuar lejon bllokimin e gabimeve që shkaktojnë daljen përjashta kufijve të objektit në memorie, nuk lejon ndërrimin e treguesve (të gjitha treguesit duhet të lindin nga tregues të ekzistueshëm), ndjek aksesin në memori pas çlirimit (çdo akses në memori përmes një treguesi të gabuar ose një treguesi që referon te një objekt të çliruar ndjek si rezultat gjenerimin e një përjashtimi). Për shembull, aplikimi i CHERIoT lejon realizimin e kontrollit automatik të kufijve, ndjekjen e jetës së hapësirave të memories dhe sigurimin e integritetit të treguesve në komponentët që përpunojnë të dhëna të pavlerësuara, pa bërë ndryshime në kod.
Projekti përfshin specifikimin e arkitekturës së avancuar të grupit të komandave CHERIoT, një implementim referencë të CPU RISC-V 32-bit me mbështetje për ISA CHERIoT dhe një mjet të modifikuar LLVM. Skemat e prototipit të CPU dhe përshkrimet e blloqeve harduerike në gjuhën Verilog shpërndahen nën licencën Apache 2.0. Si bazë për CPU është përdorur bërthama Ibex nga projekti lowRISC. Modeli i kodit të CHERIoT ISA është përcaktuar në gjuhën Sail dhe shpërndahen nën licencën BSD.
Propozimi përfshin një prototip të sistemit operativ të kohës reale CHERIoT RTOS, që ofron mundësinë e izolimit të kompartmenteve (compartment) edhe në sisteme të integruara me 256 MB RAM. Kodi i CHERIoT RTOS është shkruar në gjuhën C++ dhe shpërndahet nën licencën MIT. Komponentët bazë të sistemit operativ janë organizuar në forma kompartmente, siç janë ngarkuesi, planifikuesi dhe sistemi i ndarjes së memories.
Një kompartament në CHERIoT RTOS përbën një kombinim të izoluar të kodit dhe variablave globalë, që është e ngjashme me një libër të ndarë, por ndryshe nga ky i fundit, mund të ndryshojë gjendjen e saj (mutable) dhe të ekzekutohet në një kontekst të veçantë të sigurisë. Asnjë kod jashtë nuk mund të kalojë kontrollin në kodin brenda kompartamentit dhe të aksesojë objektet, përveç nëse i drejtohet pikave të veçanta të hyrjes dhe përdoruesit të treguesve të objekteve që janë dhënë qartë gjatë thirrjes së një kompartamenti tjetër. Integriteti dhe konfidencialiteti për kodin dhe objektet globale brenda kompartamentit garantohen.
Burimi: opennet.ru
