Microsoft otvára CHERIoT, hardvérové ​​riešenie na zlepšenie zabezpečenia kódu C

Microsoft objavil vývoj súvisiaci s projektom CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), ktorý je zameraný na blokovanie bezpečnostných problémov v existujúcom kóde v C a C++. CHERIoT ponúka riešenie, ktoré vám umožňuje chrániť existujúce kódové základne C/C++ bez potreby ich prepracovania. Ochrana je realizovaná pomocou upraveného kompilátora, ktorý využíva špeciálnu rozšírenú sadu inštrukcií procesora (ISA), ktorú zabezpečuje procesor a na hardvérovej úrovni monitoruje prístup do pamäte, kontroluje správnosť práce s ukazovateľmi a zabezpečuje izoláciu blokov kódu.

Projekt bol vytvorený s ohľadom na skutočnosť, že nízkoúrovňová povaha jazyka C sa stáva zdrojom chýb pri práci s pamäťou, čo vedie k problémom, ako je pretečenie vyrovnávacej pamäte, prístup k už uvoľnenej pamäti, dereferences ukazovateľa alebo dvojité uvoľnenie. . Prax ukazuje, že ani veľké korporácie ako Google a Microsoft, ktoré majú prísnu politiku kontroly zmien a používajú moderné vývojové metódy a nástroje statickej analýzy, nedokážu zaručiť absenciu chýb pri práci s pamäťou (napríklad asi 70 % zraniteľností v Microsoft a Google sú spôsobené nebezpečnou manipuláciou s pamäťou).

Problém je možné vyriešiť použitím programovacích jazykov, ktoré zaručujú bezpečnú prevádzku s pamäťou, alebo väzieb s dodatočnými kontrolami, napríklad použitím namiesto bežných ukazovateľov ako MiraclePtr (raw_ptr), ktorý vykonáva dodatočné kontroly prístupu k uvoľneným pamäťovým oblastiam. Takéto metódy sú však vhodnejšie pre nový kód a prepracovanie existujúcich projektov C/C++ je dosť problematické, najmä ak sú navrhnuté tak, aby fungovali v prostrediach s obmedzenými zdrojmi, ako sú napríklad vstavané systémy a zariadenia internetu vecí.

Hardvérové ​​komponenty CHERIoT sú navrhnuté ako mikrokontroléry založené na architektúre RISC-V, implementujúc chránenú architektúru procesora CHERI (Capability Hardware Extension to RISC-V), ktorá poskytuje model riadeného prístupu do pamäte na základe „schopnosti“ (každé čítanie a zápis operácia do pamäte je povolená). Na základe architektúry inštrukčnej sady (ISA) poskytovanej v CHERIoT je zostavený softvérový model, ktorý zaručuje bezpečnosť práce s pamäťou na úrovni jednotlivých objektov, poskytuje ochranu pred prístupom k už uvoľnenej pamäti a implementuje odľahčený systém izolácie prístupu do pamäte. . Uvedený model ochrany softvéru sa priamo odráža v modeli jazyka C/C++, čo umožňuje jeho použitie na ochranu existujúcich aplikácií (vyžaduje sa iba prekompilovanie a spustenie na zariadení, ktoré podporuje ISA CHERIoT).

Navrhované riešenie vám umožňuje blokovať chyby, ktoré spôsobia, že objekt prekročí hranice pamäte, neumožňuje nahradenie ukazovateľa (všetky ukazovatele musia byť vygenerované z existujúcich ukazovateľov) a monitoruje prístup do pamäte po uvoľnení (akýkoľvek prístup do pamäte pomocou nesprávneho ukazovateľ alebo ukazovateľ odkazujúci na uvoľnený objekt má za následok vyvolanie výnimky). Napríklad používanie CHERIoT vám umožňuje implementovať automatickú kontrolu hraníc, sledovanie životnosti pamäte a presadzovanie integrity ukazovateľov v komponentoch, ktoré spracúvajú nedôveryhodné údaje bez toho, aby vyžadovali akékoľvek zmeny kódu.

Projekt zahŕňa špecifikáciu rozšírenej architektúry inštrukčnej sady CHERIoT, referenčnú implementáciu 32-bitového RISC-V CPU s podporou CHERIoT ISA a upravenú sadu nástrojov LLVM. Diagramy prototypov CPU a popisy hardvérových blokov vo Verilog sú distribuované pod licenciou Apache 2.0. Ako základ pre CPU bolo použité jadro Ibex z projektu lowRISC. Model kódu CHERIoT ISA je definovaný v jazyku Sail a je licencovaný pod licenciou BSD.

Okrem toho je navrhnutý prototyp operačného systému v reálnom čase CHERIoT RTOS, ktorý poskytuje schopnosť izolovať priehradky aj na vstavaných systémoch s 256 MB RAM. Kód CHERIoT RTOS je napísaný v C++ a je distribuovaný pod licenciou MIT. Základné komponenty OS, ako je bootloader, plánovač a distribučný systém pamäte, sú navrhnuté vo forme priehradiek.

Oddiel v CHERIoT RTOS je izolovaná kombinácia kódu a globálnych premenných, ktorá sa podobá na zdieľanú knižnicu, ale na rozdiel od tej druhej môže zmeniť svoj stav (meniteľná) a bežať v samostatnom bezpečnostnom kontexte. Žiadny kód zvonku nemôže preniesť kontrolu na kód v priehradke a pristupovať k objektom, s výnimkou prístupu k špeciálne definovaným vstupným bodom a pomocou ukazovateľov na objekty, ktoré boli explicitne odovzdané pri volaní inej priehradky. Integrita a dôvernosť sú zaručené pre kód a globálne objekty v priehradke.

Zdroj: opennet.ru

Pridať komentár