Microsoft otevírá CHERIoT, hardwarové řešení pro zlepšení zabezpečení kódu C

Společnost Microsoft zveřejnila svou práci na projektu CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), jehož cílem je zmírnit bezpečnostní zranitelnosti ve stávajícím kódu v jazycích C a C++. CHERIoT nabízí řešení, které chrání stávající kódové základny v jazycích C/C++ bez nutnosti jejich přepracovávání. Této ochrany je dosaženo použitím upraveného kompilátoru, který využívá speciální rozšířenou instrukční sadu (ISA) poskytovanou procesorem a monitoruje přístup k paměti na hardwarové úrovni, ověřuje správné zpracování ukazatelů a zajišťuje izolaci bloků kódu.

Projekt byl vytvořen s vědomím, že nízkoúrovňová povaha jazyka C je zdrojem chyb paměti, což vede k problémům, jako je přetečení vyrovnávací paměti, přístup k dříve uvolněné paměti, dereference ukazatelů a dvojité uvolnění. Zkušenosti ukazují, že ani velké korporace jako Google a Microsoft, které mají přísné zásady kontroly změn a používají moderní vývojové postupy a nástroje statické analýzy, nemohou zaručit absenci chyb paměti (například přibližně 70 % zranitelností v softwarových produktech společností Microsoft a Google je způsobeno nebezpečnou manipulací s pamětí).

Problém lze vyřešit použitím programovacích jazyků, které zaručují bezpečnost paměti, nebo použitím frameworků s dodatečnými kontrolami, například použitím MiraclePtr (raw_ptr) místo standardních ukazatelů, který provádí dodatečné kontroly přístupů k uvolněným oblastem paměti. Takové metody jsou však vhodnější pro nový kód, zatímco přepracování stávajících C/C++ projektů je poměrně náročné, zejména pokud jsou určeny pro prostředí s omezenými zdroji, jako jsou vestavěné systémy a zařízení IoT.

Hardwarové komponenty CHERIoT se skládají z mikrokontroléru založeného na RISC-V, který implementuje bezpečnou architekturu procesoru CHERI (Capability Hardware Extension to RISC-V), jež poskytuje model řízeného přístupu k paměti založený na schopnostech (každá operace čtení a zápisu do paměti je autorizována). Architektura instrukční sady CHERIoT (ISA) se používá k vytvoření softwarového modelu, který zaručuje zabezpečení paměti na objektové úrovni, chrání před přístupem k dříve uvolněné paměti a implementuje odlehčený systém izolace přístupu k paměti. Tento model ochrany softwaru je přímo mapován na model jazyka C/C++, což umožňuje jeho použití k ochraně stávajících aplikací (vyžaduje pouze rekompilaci a spuštění na hardwaru, který podporuje CHERIoT ISA).

Navrhované řešení blokuje chyby, které způsobují chyby typu „mimo hranice paměti“, zabraňuje substituci ukazatelů (všechny ukazatele musí být odvozeny z existujících ukazatelů) a monitoruje přístup k paměti po uvolnění (jakýkoli přístup k paměti prostřednictvím neplatného ukazatele nebo ukazatele odkazujícího na uvolněný objekt vede k výjimce). Například použití CHERIoT umožňuje automatickou kontrolu hranic, monitorování životnosti paměti a zajištění integrity ukazatelů v komponentách zpracovávajících nedůvěryhodná data bez nutnosti změn kódu.

Projekt zahrnuje specifikaci architektury rozšířené instrukční sady CHERIOT, referenční implementaci 32bitového CPU RISC-V podporujícího CHERIOT ISA a upravený nástrojový řetězec LLVM. Schémata prototypu CPU a popisy hardwarových bloků ve Verilogu jsou licencovány pod licencí Apache 2.0. CPU je založeno na jádře Ibex z projektu lowRISC. Kódový model CHERIOT ISA je definován v jazyce Sail a licencován pod licencí BSD.

Dále byl navržen prototyp operačního systému CHERIOT RTOS pro práci v reálném čase, který umožňuje kompartmentovou izolaci i na vestavěných systémech s 256 MB RAM. Kód CHERIOT RTOS je napsán v jazyce C++ a distribuován pod licencí MIT. Základní komponenty operačního systému, jako je bootloader, plánovač a systém alokace paměti, jsou implementovány jako kompartmenty.

Kompartment v CHERIOT RTOS je izolovaná kombinace kódu a globálních proměnných, připomínající sdílenou knihovnu, ale na rozdíl od sdílené knihovny je měnitelný a běží v samostatném bezpečnostním kontextu. Žádný externí kód nemůže předat řízení kódu v rámci kompartmentu ani přistupovat k objektům, s výjimkou přístupu k určeným vstupním bodům a použití ukazatelů na objekty explicitně předávaných při volání jiného kompartmentu. Integrita a důvěrnost kódu a globálních objektů v rámci kompartmentu jsou zaručeny.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster