Microsoft hap CHERIOT, një zgjidhje harduerike për të përmirësuar sigurinë e kodit C

Microsoft ka zbuluar zhvillime në lidhje me projektin CHERIOT (Capability Hardware Extension to RISC-V for Internet of Things), që synon bllokimin e problemeve të sigurisë në kodin ekzistues në C dhe C++. CHERIOT ofron një zgjidhje që ju lejon të mbroni bazat ekzistuese të kodeve C/C++ pa pasur nevojë t'i ripunoni ato. Mbrojtja zbatohet përmes përdorimit të një përpiluesi të modifikuar që përdor një grup të veçantë të zgjeruar të udhëzimeve të procesorit (ISA), të ofruara nga procesori dhe në nivelin e harduerit monitoron aksesin e kujtesës, kontrollon korrektësinë e punës me tregues dhe siguron izolimin e blloqeve të kodit.

Projekti u krijua duke pasur parasysh faktin se natyra e nivelit të ulët të gjuhës C bëhet një burim gabimesh kur punoni me kujtesën, duke çuar në probleme të tilla si tejmbushjet e buferit, aksesi në memorien tashmë të liruar, çreferencat e treguesve ose lirimi i dyfishtë . Praktika tregon se edhe korporatat e mëdha si Google dhe Microsoft, të cilat kanë një politikë rishikimi të rreptë të ndryshimeve dhe përdorin metoda moderne zhvillimi dhe mjete të analizës statike, nuk mund të garantojnë mungesën e gabimeve gjatë punës me memorie (për shembull, rreth 70% e dobësive në Microsoft dhe Google shkaktohen nga trajtimi i pasigurt i memories).

Problemi mund të zgjidhet duke përdorur gjuhë programimi që garantojnë funksionim të sigurt me kujtesën, ose lidhje me kontrolle shtesë, për shembull, duke përdorur në vend të treguesve të zakonshëm si MiraclePtr (raw_ptr), i cili kryen kontrolle shtesë për të hyrë në zonat e liruara të memories. Por metoda të tilla janë më të përshtatshme për kodin e ri dhe ripërpunimi i projekteve ekzistuese C/C++ është mjaft problematik, veçanërisht nëse ato janë krijuar për t'u ekzekutuar në mjedise me burime të kufizuara, siç janë sistemet e ngulitura dhe pajisjet Internet of Things.

Komponentët e harduerit CHERIoT janë projektuar si një mikrokontrollues i bazuar në arkitekturën RISC-V, duke zbatuar arkitekturën e mbrojtur të procesorit CHERI (Capability Hardware Extension to RISC-V), e cila ofron një model të aksesit të kontrolluar të memories bazuar në "aftësinë" (secila lexim dhe shkrim operimi në memorie është i autorizuar). Bazuar në arkitekturën e grupit të instruksioneve (ISA) të ofruar në CHERIOT, është ndërtuar një model softuerësh që garanton sigurinë e punës me kujtesën në nivelin e objekteve individuale, siguron mbrojtje kundër aksesit në memorien tashmë të çliruar dhe zbaton një sistem të lehtë izolimi të aksesit në memorie. . Modeli i specifikuar i mbrojtjes së softuerit pasqyrohet drejtpërdrejt në modelin e gjuhës C/C++, i cili lejon që ai të përdoret për të mbrojtur aplikacionet ekzistuese (kërkohet vetëm rikompilimi dhe ekzekutimi në pajisje që mbështesin ISA CHERIOT).

Zgjidhja e propozuar ju lejon të bllokoni gabimet që bëjnë që një objekt të shkojë përtej kufijve të memories, nuk lejon zëvendësimin e treguesit (të gjithë treguesit duhet të krijohen nga treguesit ekzistues) dhe monitoron aksesin e memories pas çlirimit (çdo akses në memorie duke përdorur një të pasaktë treguesi ose një tregues që i referohet një objekti të çliruar rezulton në një përjashtim që hidhet). Për shembull, përdorimi i CHERIOT ju lejon të zbatoni kontrollin automatik të kufijve, gjurmimin e jetëgjatësisë së kujtesës dhe zbatimin e integritetit të treguesit në komponentët që trajtojnë të dhëna të pabesueshme pa kërkuar ndonjë ndryshim kodi.

Projekti përfshin një specifikim të arkitekturës së zgjeruar të grupit të instruksioneve CHERIOT, një zbatim referencë të një CPU RISC-V 32-bit që mbështet CHERIOT ISA dhe një paketë veglash të modifikuar LLVM. Diagramet e prototipit të CPU-së dhe përshkrimet e bllokut të harduerit në Verilog shpërndahen nën licencën Apache 2.0. Bërthama Ibex nga projekti lowRISC u përdor si bazë për CPU. Modeli i kodit CHERIOT ISA është përcaktuar në gjuhën Sail dhe është i licencuar sipas licencës BSD.

Për më tepër, propozohet një prototip i sistemit operativ në kohë reale CHERIOT RTOS, i cili ofron mundësinë e izolimit të ndarjeve edhe në sistemet e integruara me 256 MB RAM. Kodi CHERIOT RTOS është shkruar në C++ dhe shpërndahet nën licencën MIT. Komponentët bazë të sistemit operativ, siç janë ngarkuesi, programuesi dhe sistemi i shpërndarjes së memories, janë projektuar në formën e ndarjeve.

Një ndarje në CHERIOT RTOS është një kombinim i izoluar i kodit dhe variablave globale që i ngjan një biblioteke të përbashkët, por ndryshe nga kjo e fundit, ajo mund të ndryshojë gjendjen e saj (të ndryshueshme) dhe të ekzekutohet në një kontekst të veçantë sigurie. Asnjë kod nga jashtë nuk mund të transferojë kontrollin te kodi në një ndarje dhe të aksesojë objektet, përveçse duke hyrë në pikat e hyrjes të përcaktuara posaçërisht dhe duke përdorur tregues për objektet e transmetuara në mënyrë eksplicite kur thirret një ndarje tjetër. Integriteti dhe konfidencialiteti janë të garantuara për kodin dhe objektet globale në një ndarje.

Burimi: opennet.ru

Shto një koment