Nemrég erről szólt a hír A Microsoft megnyitotta a CERIoT projekthez kapcsolódó fejlesztéseket (Képes hardverbővítés a RISC-V-hez a tárgyak internetéhez), célja, hogy blokkolja a biztonsági problémákat C és C++ kódokban létező. A CHERIoT megoldást kínál a meglévő C/C++ kódbázisok védelmére anélkül, hogy át kellene alakítani azokat.
A védelem egy módosított fordító segítségével valósul meg amely a processzor által biztosított speciális kiterjesztett processzorutasításkészletet (ISA) használ, és hardver szinten figyeli a memóriaelérést, mutatókkal ellenőrzi a feladatok helyességét, és kódblokk elkülönítést biztosít.
A CHERIOT-ról
A projekt azzal a tudattal jött létre, hogy a C nyelv alacsony szintű természete memóriahibák forrásává válik, ami olyan problémákhoz vezet, mint a puffer túlcsordulása, hozzáférés a már felszabadult memóriához, mutatóhivatkozás megszüntetése vagy dupla felszabadítás.
A gyakorlat azt mutatja, hogy még az olyan nagyvállalatok sem, mint a Google és a Microsoft, amelyek szigorú változás-ellenőrzési politikával rendelkeznek, és modern fejlesztési módszereket és statikus elemzési eszközöket használnak, nem tudják garantálni a memória hibamentes működését (például a Microsoft és a Google sebezhetőségeinek körülbelül 70%-a). nem biztonságos memóriakezelés okozza).
A probléma Megoldható olyan programozási nyelvek használatával, amelyek garantálják a biztonságos munkát.vagy memóriával vagy további vezérlőkkel rendelkező hivatkozásokkal, például a MiraclePtr (raw_ptr) használatával az általános mutatók helyett, amely további vezérlőket hajt végre a felszabadult memóriaterületek eléréséhez.
De az ilyen módszerek alkalmasabbak új kódokhoz y elég problémás a meglévő C/C++ projektek átdolgozása, különösen akkor, ha erőforrás-korlátozott környezetben, például beágyazott rendszerekben és IoT-eszközökben való futtatásra szánják őket.
sok A CHERIoT hardverelemeit mikrokontrollerként tervezték RISC-V architektúrára épül, a CHERI (Capacity Hardware Extension for RISC-V) biztonságos processzorarchitektúrát megvalósítva, szabályozott memóriaelérési modellt biztosítva.
Alapján az utasításkészlet architektúrája (EGY) A CHERIoT-ban egy olyan programozási modellt építenek, amely garantálja a memóriával való munkavégzés biztonságát az egyes objektumok szintjén, védelmet nyújt a már felszabadult memóriához való hozzáférés ellen, és egy könnyű elválasztó rendszert valósít meg a memóriaeléréshez.
Ez a programozott védelmi modell közvetlenül tükrözi a C/C++ nyelvi modellt, lehetővé téve a meglévő alkalmazások védelmét (csak az ISA CHERIoT-kompatibilis hardveren kell újrafordítani és futtatni).
A javasolt megoldás lehetővé teszi az olyan hibák blokkolását, amelyek a memóriában lévő objektum határain kívül esést okoznak, nem teszi lehetővé a mutató helyettesítését (minden mutatót meglévő mutatóból kell előállítani), felszabadítás után figyeli a memóriahozzáférést (a rossz mutató vagy a felszabadult objektumra hivatkozó mutató bármilyen memória-hozzáférése kivételt jelent).
Például a CHERIoT használata lehetővé teszi, hogy a kód módosítása nélkül automatikus határellenőrzést hajtson végre, nyomon kövesse a memóriaterületek élettartamát, és biztosítsa a mutatók integritását a megbízhatatlan adatokat feldolgozó összetevőkben.
A projekt tartalmaz egy specifikációt egy CHERIOT utasításkészlet architektúrához kiterjesztés, egy ISA CHERIoT-kompatibilis 32 bites RISC-V CPU referencia megvalósítása és egy módosított LLVM eszközkészlet.
Végül Ha érdekel, hogy többet tudjon meg róla, tudnia kell, hogy a prototípus diagramok A Verilog CPU- és hardverblokk-leírásai az Apache 2.0 licenc alatt kerülnek terjesztésre. A lowRISC projekt Ibex magja a CPU alapja, a CHERIoT ISA kódmodell pedig Sail nyelven van definiálva, és a BSD licenc alatt kerül terjesztésre.
Ezenkívül a CHERIoT RTOS valós idejű operációs rendszer prototípusát javasolják, amely lehetővé teszi a rekeszek (rekeszek) elkülönítését még 256 MB RAM-mal rendelkező beágyazott rendszereken is.
A kód CHERIOT RTOS C++ nyelven íródott, és MIT licenc alatt terjesztik. Rekeszek formájában megtervezik az operációs rendszer alapvető összetevőit, mint például a rendszertöltő, az ütemező és a memóriafoglalási rendszer.