A Microsoft megnyitja a CHERIoT hardvermegoldást a C kód biztonságának javítására

A Microsoft felfedezte a CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) projekthez kapcsolódó fejlesztéseket, amelyek célja a biztonsági problémák blokkolása a meglévő C és C++ kódokban. A CHERIoT olyan megoldást kínál, amely lehetővé teszi a meglévő C/C++ kódbázisok védelmét anélkül, hogy át kellene dolgozni őket. A védelmet egy módosított fordító segítségével valósítják meg, amely speciális kiterjesztett processzorutasítás-készletet (ISA) használ, amelyet a processzor biztosít, és hardver szinten figyeli a memória-hozzáférést, ellenőrzi a mutatókkal végzett munka helyességét és biztosítja a kódblokkok elkülönítését.

A projektet annak figyelembevételével hozták létre, hogy a C nyelv alacsony szintű jellege hibák forrásává válik a memóriával való munka során, ami olyan problémákhoz vezet, mint a puffer túlcsordulása, a már felszabadult memóriához való hozzáférés, a mutató hivatkozások vagy a dupla felszabadulás. . A gyakorlat azt mutatja, hogy még a szigorú változtatás-ellenőrzési szabályzatot alkalmazó, modern fejlesztési módszereket és statikus elemzési eszközöket használó nagyvállalatok, mint például a Google és a Microsoft sem tudják garantálni a hibák hiányát a memóriával végzett munka során (például a Microsoft biztonsági résének körülbelül 70%-a). és a Google-t a nem biztonságos memóriakezelés okozza).

A probléma megoldható olyan programozási nyelvek használatával, amelyek garantálják a memória biztonságos működését, vagy további ellenőrzésekkel történő kötésekkel, például a szokásos mutatók helyett, mint a MiraclePtr (raw_ptr), amely további ellenőrzéseket végez a felszabadult memóriaterületek elérésére. De az ilyen módszerek alkalmasabbak új kódokhoz, és a meglévő C/C++ projektek átdolgozása meglehetősen problematikus, különösen, ha erőforrás-korlátos környezetben való futtatásra tervezték őket, például beágyazott rendszerekben és a dolgok internetes eszközeiben.

A CHERIoT hardverkomponensei a RISC-V architektúrán alapuló mikrokontrollerként készültek, amely a védett CHERI (Capability Hardware Extension to RISC-V) processzorarchitektúrát valósítja meg, amely a „képességen” (mindegyik olvasási és írási) alapuló vezérelt memóriaelérés modelljét adja meg. a memóriába való művelet engedélyezett). A CHERIoT-ban biztosított utasításkészlet-architektúra (ISA) alapján olyan szoftvermodellt é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ű memóriaelérés-elválasztó rendszert valósít meg. . A megadott szoftvervédelmi modell közvetlenül tükröződik a C/C++ nyelvi modellben, amely lehetővé teszi a meglévő alkalmazások védelmére való használatát (csak az ISA CHERIoT-ot támogató berendezéseken való újrafordítás és futtatás szükséges).

A javasolt megoldás lehetővé teszi az olyan hibák blokkolását, amelyek miatt egy objektum túllép a memória határain, nem teszi lehetővé a mutató helyettesítését (minden mutatót a meglévő mutatókból kell előállítani), és figyeli a memória-hozzáférést a felszabadítás után (bármilyen memória-hozzáférés helytelen mutató vagy egy felszabadult objektumra hivatkozó mutató kivételt eredményez). Például a CHERIoT használatával automatikus határellenőrzést, memória-élettartam-követést és mutatóintegritás-érvényesítést hajthat végre olyan összetevőkben, amelyek nem megbízható adatokat kezelnek anélkül, hogy kódmódosítást igényelnének.

A projekt tartalmazza a kiterjesztett CHERIoT utasításkészlet architektúra specifikációját, a CHERIoT ISA-t támogató 32 bites RISC-V CPU referencia megvalósítását és egy módosított LLVM eszközkészletet. A Verilog CPU prototípus diagramjai és hardverblokk-leírásai az Apache 2.0 licenc alatt kerülnek terjesztésre. A lowRISC projekt Ibex magját használták a CPU alapjául. A CHERIoT ISA kódmodell a Sail nyelven van definiálva, és a BSD licenc alatt van licencelve.

Ezenkívül a CHERIoT RTOS valós idejű operációs rendszer prototípusát javasolják, amely lehetővé teszi a rekeszek elkülönítését még 256 MB RAM-mal rendelkező beágyazott rendszereken is. A CHERIoT RTOS kód C++ nyelven íródott, és az MIT licenc alatt kerül terjesztésre. Az operációs rendszer alapvető összetevői, mint például a rendszerbetöltő, az ütemező és a memóriaelosztó rendszer, rekeszek formájában vannak kialakítva.

A CHERIoT RTOS egyik rekeze kód és globális változók izolált kombinációja, amely egy megosztott könyvtárra hasonlít, de ez utóbbival ellentétben megváltoztathatja állapotát (változható), és külön biztonsági környezetben futhat. Semmilyen kívülről érkező kód nem tudja átadni a vezérlést a rekeszben lévő kódnak, és nem férhet hozzá az objektumokhoz, kivéve a speciálisan meghatározott belépési pontokhoz való hozzáférést és a kifejezetten átadott objektumokra mutató mutatókat egy másik rekesz hívásakor. A rekeszben lévő kód és globális objektumok integritása és titkossága garantált.

Forrás: opennet.ru

Hozzászólás