Microsoft otevřel CHERIoT, hardwarové řešení pro zvýšení bezpečnosti kódu v jazyce C

Společnost Microsoft zveřejnila výzkumy související s projektem CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), jehož cílem je eliminovat problémy se zabezpečením v existujícím kódu v jazycích C a C++. CHERIoT nabízí řešení, které chrání existující kódové základny v C/C++ bez nutnosti jejich přepracování. Ochrana je zajištěna prostřednictvím modifikovaného kompilátoru, který využívá speciální rozšířenou sadu procesorových instrukcí (ISA), poskytovaných procesorem a na hardwarové úrovni sledujících přístup k paměti, kontrolujících správnost práce s ukazateli a zajišťujících izolaci bloků kódu.

Projekt byl vytvořen s ohledem na to, že nízkoúrovňová povaha jazyka C se stává zdrojem chyb při práci s pamětí, což vede k problémům jako je přetečení zásobníku, přístup k již uvolněné paměti, dereferencování ukazatelů nebo dvakrát uvolněná paměť. Praxe ukazuje, že i velké korporace, jako Google a Microsoft, které mají přísnou politiku přezkumu změn a používají moderní vývojové metody a nástroje pro statickou analýzu, nemohou zaručit absenci chyb při práci s pamětí (například přibližně 70 % zranitelností v softwarových produktech Microsoftu a Googlu je způsobeno nebezpečnou prací s pamětí).

Problém může být řešen použitím programovacích jazyků, které zaručují bezpečnou práci s pamětí, nebo obalovými komponentami s dalšími kontrolami, například použitím místo běžných ukazatelů typu MiraclePtr (raw_ptr), který provádí dodatečné kontroly přístupu k uvolněným oblastem paměti. Ale takové metody jsou vhodnější pro nový kód, a již existující projekty v C/C++ je poměrně obtížné přepracovat, zvláště pokud jsou určeny pro provádění v prostředích s omezenými zdroji, jako jsou vestavěné systémy a zařízení internetových věcí.

Hardwarové komponenty CHERIoT jsou navrženy jako mikrokontroler na bázi architektury RISC-V, který implementuje zabezpečenou procesorovou architekturu CHERI (Capability Hardware Extension to RISC-V), poskytující model řízeného přístupu do paměti založený na "capability" (každá operace čtení a zápisu do paměti je autorizována). Na základě architektury instrukční sady (ISA) CHERIoT byla vytvořena softwarová model, která zaručuje bezpečnost práce s pamětí na úrovni jednotlivých objektů, poskytuje ochranu před přístupem k již uvolněné paměti a realizuje lehký systém izolace přístupu k paměti. Tento softwarový model ochrany se přímo odráží ve jazykovém modelu C/C++, což umožňuje jeho použití k ochraně stávajících aplikací (je vyžadována pouze překompilace a spuštění na hardwaru podporujícím ISA CHERIoT).

Navrhované řešení umožňuje blokovat chyby, které způsobují překročení hranic objektu v paměti, nedovoluje podvrh ukazatelů (všechny ukazatele musí být odvozeny od již existujících ukazatelů), sleduje přístup do 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 vygenerování výjimky). Například použití CHERIoT umožňuje bez změn v kódu implementovat automatickou kontrolu hranic, sledování životnosti oblastí paměti a zajištění integrity ukazatelů v komponentách zpracovávajících nedůvěryhodná data.

Projekt zahrnuje specifikaci rozšířené architektury instrukční sady CHERIoT, referenční implementaci 32bitového CPU RISC-V s podporou ISA CHERIoT a modifikované nástroje LLVM. Schémata prototypu CPU a popisy hardwarových bloků v jazyce Verilog jsou distribuovány pod licencí Apache 2.0. Jako základ pro CPU bylo použito jádro Ibex z projektu lowRISC. Model kódu CHERIoT ISA je definován v jazyce Sail a je distribuován pod licencí BSD.

Dále byl navržen prototyp operačního systému reálného času CHERIoT RTOS, který umožňuje izolaci compartmentů i na vestavěných systémech s 256 MB RAM. Kód CHERIoT RTOS je napsán v jazyce C++ a je distribuován pod licencí MIT. V podobě compartmentů jsou navrženy základní komponenty OS, jako je bootloader, plánovač a systém správy paměti.

Kompartiment v CHERIoT RTOS představuje izolovanou kombinaci kódu a globálních proměnných, která připomíná sdílenou knihovnu, ale na rozdíl od ní může měnit svůj stav (mutable) a spouštět se v odděleném bezpečnostním kontextu. Žádný kód zvenčí nemůže předat řízení kódu v kompartimentu a získat přístup k objektům, kromě volání speciálně definovaných vstupních bodů a používání ukazatelů na objekty, které byly výslovně předány při volání jiného kompartimentu. Pro kód a globální objekty v kompartimentu je zaručena integrita a důvěrnost.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster