A Microsoft bejelentette a CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) projekthez kapcsolódó munkálatait, amelynek célja a C és C++ nyelveken írt meglévő kódok biztonsági problémáinak megoldása. A CHERIoT egy megoldást kínál, amely lehetővé teszi a C/C++ meglévő kódalapjainak védelmét anélkül, hogy azokat újra kellene írni. A védelem egy módosított fordító használatával valósul meg, amely egy speciális, kibővített processzorutasítás-készletet (ISA) alkalmaz, amely nyomon követi a memória-hozzáférést, ellenőrzi a pointerekkel való helyes működést és biztosítja a kódblokkok elkülönítését.
A projektet figyelembe véve hozták létre, hogy a C nyelv alacsony szintű természete memóriakezelési hibák forrásává válik, amelyek olyan problémákhoz vezetnek, mint a puffertúlcsordulás, felszabadított memória elérése, pointerek dereferálása vagy a memória többszöri felszabadítása. A gyakorlat azt mutatja, hogy még a nagyvállalatok, mint a Google és a Microsoft, amelyek szigorú változtatási felülvizsgálati politikát alkalmaznak, és modern fejlesztési módszereket és statikus analízis eszközöket használnak, sem tudják garantálni a memória kezeléséhez kapcsolódó hibák hiányát (például a Microsoft és a Google szoftvertermékeiben található sebezhetőségek körülbelül 70%-a a nem biztonságos memória-kezelés miatt következik be).
A probléma megoldható olyan programozási nyelvek alkalmazásával, amelyek garantálják a memória biztonságos kezelését, vagy olyan kötések révén, amelyek további ellenőrzéseket végeznek. Például a szokásos pointerek helyett MiraclePtr (raw_ptr) használatával, amely további ellenőrzéseket végez a felszabadított memória-területek elérésére. De ezek a módszerek inkább az új kódra vonatkoznak, míg a már meglévő C/C++ projektek átdolgozása meglehetősen problémás, különösen ha korlátozott erőforrásokkal rendelkező környezetekben, például beágyazott rendszerekben és IoT eszközökben kell futtatni őket.
A CHERIoT hardverkomponensei egy RISC-V architektúrára épülő mikrokontroller formájában kerültek megvalósításra, amely végrehajtja a CHERI (Capability Hardware Extension to RISC-V) védett processzorarchitektúrát, amely egy capability-alapú, vezérelt memóriahozzáférési modellt biztosít (minden memóriaolvasási és -írási művelet hitelesítve van). A CHERIoT által biztosított utasításkészlet-architektúra (ISA) alapján egy programozási modell épül, amely garantálja a memória biztonságát különálló objektumok szintjén, védelmet nyújt a már felszabadított memória elérésével szemben, és megvalósít egy könnyű memóriához való hozzáférés-izolációs rendszert. Ez a védelmi programozási modell közvetlenül tükröződik a C/C++ nyelvi modellen, lehetővé téve annak alkalmazását meglévő alkalmazások védelmére (csak a forrást kell újrakonfigurálni és futtatni a CHERIoT ISA-t támogató hardveren).
A javasolt megoldás lehetővé teszi a memóriaobjektumok határain túllépő hibák blokkolását, megakadályozza a pointerek cseréjét (minden pointernek már létező pointerekből kell származnia), és nyomon követi a felszabadítás után történő memóriahozzáférést (bármilyen hozzáférés a memóriához nem korrekt pointerrel vagy felszabadított objektumra mutató pointerrel kivétel generálását eredményezi). Például a CHERIoT alkalmazása lehetővé teszi a kódmódosítások nélküli automatikus határellenőrzés, a memória területek élettartamának nyomon követése és a pointerek integritásának biztosítása révén, a megbízhatatlan adatokkal foglalkozó komponensekben.
A projekt magában foglalja a CHERIoT bővített utasításkészlet-architektúrájának specifikációját, egy 32 bites RISC-V CPU referenciaimplementációját a CHERIoT ISA támogatásával és egy módosított LLVM eszközkészletet. A CPU prototípusának sémái és a Verilog nyelven írt hardverblokkok leírása az Apache 2.0 licenc alatt terjesztésre kerülnek. A CPU alapjául a lowRISC projektből származó Ibex mag van használva. A CHERIoT ISA kódmodellje Sail nyelven van definiálva és BSD licenc alatt terjesztik.
Továbbiakban bemutatásra kerül a CHERIoT RTOS valós idejű operációs rendszer prototípusa, amely lehetőséget biztosít a kompartmentek (compartment) izolálására még 256 MB RAM-mal rendelkező beágyazott rendszereken is. A CHERIoT RTOS kódja C++ nyelven készült, és MIT licenc alatt terjesztik. A kompartmentek formájában az operációs rendszer alapvető komponensei találhatók, mint például az indítóprogram, az ütemező és a memóriaelosztó rendszer.
A CHERIoT RTOS compartment is an isolated combination of code and global variables that resembles a shared library, but unlike the latter, it can change its state (mutable) and run in a separate security context. No external code can transfer control to the code in the compartment or access objects, except through specially defined entry points and by using pointers to objects explicitly passed when invoking another compartment. The integrity and confidentiality of code and global objects in the compartment are guaranteed.
Forrás: opennet.ru
