Microsoft avas projekt CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) seotud arendused, mis on suunatud olemasoleva C ja C++ koodi turvaprobleemide lahendamisele. CHERIoT pakub lahendust, mis kaitseb olemasolevaid C/C++ koodibaase ilma nende uuesti kirjutamiseta. Kaitse rakendatakse modifitseeritud kompilaatori kasutamise kaudu, mis töötab spetsiaalse laiendatud kÀsu komplektiga (ISA), mida toetab protsessor ning mis jÀlgib riistvaraliselt juurdepÀÀsu mÀlule, kontrollib pointer'ite töötamise korrektsust ning tagab koodiplokkide isolatsiooni.
Projekt on loodud silmas pidades, et C keele madal tasemeline iseloom muutub mĂ€luga töötamisel vigade allikaks, mis toob kaasa selliseid probleeme nagu puhverĂŒlekanne, juba vabastatud mĂ€llesaamine, viidatud de-referentsieelised vĂ”i kahekordne mĂ€lu vabastamine. Praktika nĂ€itab, et isegi suured korporatsioonid, nagu Google ja Microsoft, kellel on range muudatuste ĂŒlevaatamise poliitika ning kes rakendavad kaasaegseid arendusmeetodeid ja staatilise analĂŒĂŒsi tööriistu, ei saa garanteerida mĂ€luga töötamisel vigu puudumist (nt umbes 70% Microsofti ja Google'i tarkvaratoote haavatavustest tuleneb ebaohutust mĂ€luga töötamisest).
Probleem vĂ”ib lahendada, kasutades programmeerimiskeeli, mis tagavad mĂ€lu turvalise kĂ€sitsemise, vĂ”i lisakontrollidega mĂ€histe abil, nĂ€iteks tavapĂ€raste nĂ€idikute, nagu MiraclePtr (raw_ptr), asemel, mis teostab tĂ€iendavaid kontrolle vabastatud mĂ€lu aladele juurdepÀÀsu osas. Kuid sellised meetodid sobivad rohkem uue koodi jaoks, samas kui olemasolevaid C/C++ projekte on keeruline ĂŒmber töötada, eriti kui need on ette nĂ€htud ressursside piiratud keskkondades, nagu sisseehitatud sĂŒsteemid ja asjade interneti seadmed.
CHERIoT-i riistvarakomponendid on kujundatud RISC-V arhitektuuril pĂ”hineva mikrokontrollerina, mis rakendab CHERI (Capability Hardware Extension to RISC-V) kaitstud protsessori arhitektuuri, pakkudes mĂ€lule juurdepÀÀsu kontrollimise mudelit kujutiste pĂ”hjal (iga lugemis- ja kirjutamisoperatsioon mĂ€lus on autoriseeritud). CHERIoT-i kĂ€su komplekti (ISA) pĂ”hjal on vĂ€lja töötatud tarkvaramudel, mis tagab mĂ€luhalduse ohutuse objekti tasemel, pakkudes kaitset juba vabastatud mĂ€lu juurde pÀÀsemise eest ning rakendades kerget mĂ€lule juurdepÀÀsu isolatsioonisĂŒsteemi. Antud kaitsemudel kajastub otse C/C++ keelemudelis, vĂ”imaldades selle rakendamist olemasolevate rakenduste kaitseks (on vajalik vaid uuesti koostamine ja kĂ€ivitamine ISA CHERIoT toetaval riistvaral).
Pakutud lahendus vĂ”imaldab blokeerida mĂ€lus esinevad objekti ĂŒletamise vead, keelab pointerite ĂŒlekirjutamise (kĂ”ik pointerid peavad olema loodud juba olemasolevatest pointeritest), jĂ€lgib mĂ€lupöördusi pĂ€rast vabastamist (kĂ”ik juurdepÀÀsud mĂ€lule vale pointeri vĂ”i vabastatud objekti osutava pointeriga pĂ”hjustavad erandi genereerimise). NĂ€iteks vĂ”imaldab CHERIoT-i rakendamine automaatsete piirikontrollide teostamist, mĂ€lu piirkondade eluiga jĂ€lgimist ja pointerite terviklikkuse tagamist komponentides, mis töötlevad usaldusvÀÀrseid andmeid, koodimuudatusi tegemata.
Projekt hĂ”lmab CHERIoT pikendatud arhitektuuri kĂ€skude komplekti spetsifikatsiooni, RISC-V 32-bitise CPU ehtsuse rakendust koos CHERIoT ISA toega ja muudetud LLVM tööriistu. CPU prototĂŒĂŒpide skeemid ja seadmeplokkide kirjeldused Verilogi keeles levitatakse Apache 2.0 litsentsi alusel. CPU aluseks on Ibexi tuum lowRISC projektist. CHERIoT ISA koodimudel on mÀÀratletud Sail keeles ja levitatakse BSD litsentsi alusel.
TĂ€iendavalt on esitatud reaalajas operatsioonisĂŒsteemi prototĂŒĂŒp CHERIoT RTOS, mis vĂ”imaldab compartment (kompartimendi) isolatsiooni isegi 256 MB RAM-iga sisseehitatud sĂŒsteemides. CHERIoT RTOS-i kood on kirjutatud C++ keeles ning see levib MIT litsentsi alusel. Kompartimendid hĂ”lmavad operatsioonisĂŒsteemi pĂ”hikomponente, nagu bootloader, planeerija ja mĂ€lu jaotussĂŒsteem.
Kompartiment CHERIoT RTOS-is on isoleeritud koodikombinatsioon ja globaalsete muutujate kogum, mis meenutab jagatud teeki, kuid erinevalt viimasest vĂ”ib see muuta oma olekut (mutable) ja kĂ€ivituda eraldi turvakontekstis. Ăkski vĂ€line kood ei saa edasi anda kontrolli kompartimendis olevale koodile ega pÀÀseda objektidele ligi, vĂ€lja arvatud ĂŒhendus spetsiaalselt mÀÀratletud sisenemispunktide kaudu ja objektide kasutamine, mis on selgelt edastatud teise kompartimendi kutsumise ajal. Kompartimendis oleva koodi ja globaalsete objektide puhul tagatakse terviklikkus ja konfidentsiaalsus.
Allikas: opennet.ru
