Microsoft tutvustas CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), projekti, mille eesmĂ€rk on takistada turvaprobleeme olemasolevas C- ja C++-keeles kirjutatud koodis. CHERIoT pakub lahendust, mis kaitseb olemasolevaid C/C++ koodibaase ilma nende ĂŒmberkirjutamiseta. Kaitse saavutatakse tĂ€nu muudetud kompilaatori kasutamisele, mis rakendab spetsiifilist laiendatud protsessorijuhiste kogumit (ISA), andes protsessorile ja riistvaraliselt jĂ€lgides mĂ€lu juurdepÀÀsu, kontrollides pointerite Ă”igsust ja tagades koodiplokkide isoleerimise.
Projekt on loodud silmas pidades, et C-keele madal tase toob kaasa vigu mĂ€lu haldamisel, mis pĂ”hjustavad probleeme nagu puhvri ĂŒlevood, juba vabastatud mĂ€lu juurde pÀÀsemine, pointerite dereferentseerimine vĂ”i topeltmĂ€lulehtede vabastamine. Praktika nĂ€itab, et isegi suured korporatsioonid, nagu Google ja Microsoft, kellel on ranged muudatuste ĂŒlevaatamise poliitikad ja kes kasutavad kaasaegseid arendustehnikate ja staatilise analĂŒĂŒsi tööriistu, ei suuda tagada mĂ€lu kĂ€sitlemisel vigu (nĂ€iteks on umbes 70% Microsofti ja Google'i tarkvaratoodete haavatavustest pĂ”hjustatud ebaohutust mĂ€lu kĂ€sitlemises).
Probleemi saab lahendada programmeerimiskeelte kasutamisega, mis garanteerivad mĂ€lu ohutuse, vĂ”i lisakontrollidega, nĂ€iteks tavaliste pointerite asemel kasutades MiraclePtr (raw_ptr), mis teostab lisakontrolle vabastatud mĂ€lu aladele juurdepÀÀsemisel. Kuid sarnased meetodid sobivad pigem uue koodi jaoks ning olemasolevate C/C++ projektide ĂŒmbertegemine on ĂŒsna keeruline, eriti kui need on mĂ”eldud töötama piiratud ressurssidega keskkondades, nagu sisseehitatud sĂŒsteemid ja asjade interneti seadmed.
CHERIoT poolt pakutavad riistvarakomponendid on kujundatud mikrokontrollerina, mis pĂ”hineb RISC-V arhitektuuril ning rakendab CHERI (Capability Hardware Extension for RISC-V) kaitstud protsessori arhitektuuri, mis annab vĂ”imaluse hallata mĂ€lule ligipÀÀsu mudelit pĂ”hineb "capability"-l (iga mĂ€lu lugemise ja kirjutamise operatsioon on autoriseeritud). CHERIoT arhitektuuri pĂ”hjal on loodud kĂ€su komplekti (ISA) tarkvaraline mudel, mis tagab mĂ€luga tegelemise turvalisuse ĂŒksikute objektide tasemel, pakkudes kaitset mahajĂ€etud mĂ€lu juurdepÀÀsu eest ja rakendades kergkaalu mĂ€lule ligipÀÀsu isoleerimissĂŒsteemi. Antud tarkvaramudeli kaitse kajastub otseselt C/C++ keelemudelis, mis vĂ”imaldab seda kasutada olemasolevate rakenduste kaitsmiseks (vajalik on vaid uuesti kompileerimine ja kĂ€itamine seadmetel, mis toetavad CHERIoT ISA-d).
Pakutud lahendus vĂ”imaldab blokeerida vea, mis pĂ”hjustab objekti mĂ€lu ĂŒletamist, ei luba nĂ€idikute muutmist (kĂ”ik nĂ€idikud peavad olema loodud juba olemasolevatest nĂ€idikutest), jĂ€lgib ligipÀÀsu mĂ€lule pĂ€rast vabastamist (igal ligipÀÀsul mĂ€lule vale nĂ€idiku kaudu vĂ”i nĂ€idiku kaudu, mis viitab vabastatud objektile, tekib erand). NĂ€iteks vĂ”imaldab CHERIoT automaatset piirde kontrollimist, mĂ€lupiirkondade eluea jĂ€lgimist ja nĂ€idikute terviklikkuse tagamist komponentides, mis töötlevad usaldamatuid andmeid, ilma koodi muutmata.
Projekt sisaldab CHERIoT laiendatud kĂ€su komplekti arhitektuuri spetsifikatsiooni, RISC-V 32-bitise CPU prototĂŒĂŒbi standardimplementatsiooni, mis toetab CHERIoT ISA-d, ja muudetud LLVM tööriistakomplekti. CPU prototĂŒĂŒbi skeemid ja riistvarablokki kirjeldavad dokumendid on loodud Verilog keeles ning levitatakse Apache 2.0 litsentsi alusel. CPU aluseks on Ibex sĂŒdamik lowRISC projektist. CHERIoT ISA koodimudel on mÀÀratletud Sail keeles ja levitatakse BSD litsentsi alusel.
Lisaks on esitatud CHERIoT RTOS reaalajas operatsioonisĂŒsteemi prototĂŒĂŒp, mis vĂ”imaldab isoleerida kompartemente (compartment) isegi 256 MB RAM-iga sisseehitatud sĂŒsteemides. CHERIoT RTOSi kood on kirjutatud C++ keeles ja jaotatakse MIT litsentsi alusel. Kompartementide vormis on kujundatud OS-i pĂ”hi komponendid, nagu laadija, ajakavaga tegelev ja mĂ€lu jaotussĂŒsteem.
Kompartement CHERIoT RTOS-is on isoleeritud koodide ja globaalsete muutujate kombinatsioon, 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 suunata juhtimist kompartemendis oleva koodi poole ega pÀÀseda objektidele juurde, vĂ€lja arvatud spetsiaalselt mÀÀratud sisenemispunktide kaudu ning objektide pointerite kasutamisega, mis on selgelt edastatud teise kompartemendi vĂ€ljakutsumise kĂ€igus. Koodile ja globaalsetele objektidele kompartemendis tagatakse terviklikkus ja konfidentsiaalsus.
Allikas: opennet.ru
