Kompania Microsoft hapi ndihmën e saj të lidhur me projektin CHERIoT (Capability Hardware Extension to RISC-V për Internetin e Things), i cili ka si qëllim parandalimin e problemeve me sigurinë në kodin ekzistues të shkruar në gjuhët C dhe C++. CHERIoT ofron një zgjidhje që lejon mbrojtjen e bazave ekzistuese të kodit në C/C++ pa nevojën për rinovimin e tyre. Mbrojtja realizohet përmes përdorimit të një kompajleri të modifikuar, i cili përdor një grup të posaçëm të instrukcioneve të zgjeruara të procesorëve (ISA), të cilat monitorojnë aksesin në memorie në nivelin e harduerit, verifikojnë saktësinë e punës me treguesit dhe sigurojnë izolim të blloqeve të kodit.
Projekti është krijuar me një vështrim ndaj natyrës së ulët të gjuhës C, e cila shndërrohet në burim gabimesh gjatë punës me memorie, duke çuar në probleme të tilla si tejkalimi i dukës, aksesimi i memories së liruar, dereferencimi i treguesve ose çlirimi i dyfishtë i memories. Praktika tregon se madje edhe korporatat e mëdha, si Google dhe Microsoft, të cilat kanë një politikë strikte të rishikimit të ndryshimeve dhe përdorin metoda moderne të zhvillimit dhe mjete të analizes statike, nuk mund të garantojnë mungesën e gabimeve gjatë punës me memorie (p.sh., rreth 70% e dobësive në produktet softuerike të Microsoft dhe Google shkaktohen nga ndihma e pasigurt me memorien).
Problemi mund të zgjidhet duke përdorur gjuhëprogramimi që garantojnë sigurinë në punën me memorie, ose duke përdorur mbështetje me kontrolle shtesë, për shembull, përmes përdorimit të treguesve të tipit MiraclePtr (raw_ptr), i cili realizon kontrolle shtesë për aksesin në zonat e memories së liruar. Por metodat e tilla janë më të përshtatshme për kodin e ri, ndërsa projektet ekzistuese në C/C++ janë të vështira për t'u rinovuar, sidomos nëse ato janë të destinuara për të funksionuar në mjedise me burime të kufizuara, si sistemet e integruara dhe pajisjet e Internetit të Gjërave.
Pjesët harduerike të CHERIoT janë të dizajnuara si një mikrokontroller mbi arkitekturën RISC-V, duke zbatuar arkitekturën e sigurisë të procesorit CHERI (Capability Hardware Extension to RISC-V), e cila ofron një model të menaxhuar të qasjes në memorje mbi bazën e "capability" (çdo operacion leximi dhe shkrimi në memorje autorizohet). Një model softuerik i bazuar në arkitekturën e kompletuar të komandave (ISA) që ofrohet në CHERIoT ndihmon në sigurimin e punës me memorjen në nivelin e objekteve të veçanta, duke ofruar mbrojtje nga qasja në memorjen e çliruar dhe duke implementuar një sistem të lehtë për izolimin e qasjes në memorje. Ky model i mbrojtjes softuerike pasqyrohet drejtpërdrejt në modelin gjuhësor C/C++, që lejon aplikimin e tij për mbrojtjen e aplikacioneve ekzistuese (kërkohet vetëm ri-kompilim dhe ekzekutim në pajisje që mbështesin ISA CHERIoT).
Zgjidhja e propozuar lejon bllokimin e gabimeve që shkaktojnë daljen jashtë kufijve të objekteve në memorje, nuk lejon shkëmbimin e treguesve (të gjithë treguesit duhet të krijohen nga treguesit ekzistues), ndjek qasjen në memorje pas çlirimit (çdo qasje në memorje përmes një treguesi të pavlefshëm ose një treguesi që referon një objekt të çliruar çon në gjenerimin e një përjashtimi). Për shembull, përdorimi i CHERIoT lejon implementimin automatik të kontrollit të kufijve, ndjekjen e jetës së zonave të memorjes dhe sigurinë e treguesve në komponentët që përpunojnë të dhëna të pasigurta, pa bërë ndryshime në kod.
Projekti përfshin specifikimin e arkitekturës së zgjeruar të setit të komandave CHERIoT, një implementim referent të CPU 32-bit RISC-V me mbështetje për ISA CHERIoT dhe një mjet të modifikuar LLVM. Skemat e prototipit të CPU-së dhe përshkrimet e blloqeve harduerike në gjuhën Verilog shpërndahen nën licencën Apache 2.0. Si bazë për CPU-në, është përdorur bërthama Ibex nga projekti lowRISC. Modeli i kodit CHERIoT ISA është përcaktuar në gjuhën Sail dhe shpërndahet nën licencën BSD.
Shtesë është propozuar një prototip i sistemit operativ në kohë reale CHERIoT RTOS, që ofron mundësinë e izolimit të kompartmenteve (compartment) edhe në sisteme të inkorporuara me 256 MB RAM. Kodi i CHERIoT RTOS është shkruar në gjuhën C++ dhe shpërndahet nën licencën MIT. Në formën e kompartmenteve janë formuar komponentët bazë të sistemit operativ, siç janë bootloaderi, planifikuesi dhe sistemi i ndarjes së memories.
Kompartamenti në CHERIoT RTOS paraqet një kombinim të izoluar të kodit dhe variablave globale, që ngjan me një bibliotekë të ndarë, por ndryshe nga kjo e fundit, mund të ndryshojë gjendjen e tij (mutable) dhe të ekzekutohet në një kontekst të veçantë sigurie. Asnjë kod nga jashtë nuk mund të kalojë kontrollin në kodin brenda kompartmentit dhe të ketë qasje në objektet, përveç se duke iu drejtuar pikave të veçanta të hyrjes dhe duke përdorur tregues për objektet, të cilat janë dhënë qartë gjatë thirrjes së kompartmentit tjetër. Për kodin dhe objektet globale në kompartment, garantohen integriteti dhe konfidencialiteti.
Burimi: opennet.ru
