Byla představena finální verze specifikace programově-hardware platformy CHERIoT 1.0 (Capability Hardware Extension to RISC-V for Internet of Things), definující rozšíření instrukčního souboru (ISA) pro tvorbu zabezpečených zařízení. CHERIoT poskytuje hardwarové možnosti pro sledování přístupu k paměti, kontrolu správnosti práce s ukazateli a zajištění izolace bloků kódu. Zároveň byl zveřejněn stabilní release referenční formální modelu CHERIoT ISA, definovaného v jazyce Sail. Výsledky projektu jsou distribuovány pod licencí BSD.
Projekt CHERIoT byl vytvořen společností Microsoft pro řešení problémů s bezpečností v existujícím kódu v jazycích C a C++ a pro ochranu takového kódu bez nutnosti jeho předělání. Ochrana je realizována prostřednictvím modifikovaného kompilátoru, který používá rozšířenou sadu procesorových instrukcí (ISA) pro zajištění integrity ukazatelů, kontroly hranic při práci s pamětí a prevence přístupu k uvolněné paměti. V roce 2023 byly výsledky CHERIoT zpřístupněny a přetvořeny na společný projekt, do kterého se připojily i další společnosti.
Hardwarové komponenty CHERIoT jsou uspořádány ve formě mikrokontroléru založeného na architektuře RISC-V, realizující zabezpečenou procesorovou architekturu CHERI (Capability Hardware Extension to RISC-V) s modelem řízeného přístupu k paměti založeným na "capability" (každá operace čtení a zápisu do paměti je autorizována). Na základě poskytované architektury instrukčního souboru (ISA) v CHERIoT je postavena softwarová model, která zaručuje bezpečnost práce s pamětí na úrovni jednotlivých objektů, poskytující ochranu před přístupem k již uvolněné paměti a implementující lehký systém izolace přístupu k paměti.
Uvedený model softwarové ochrany se přímo promítá do jazykového modelu C/C++, což umožňuje jeho aplikaci pro stávající aplikace, u nichž je pro ochranu třeba pouze překompilace a spuštění na hardwaru podporujícím ISA CHERIoT. Například použití CHERIoT umožňuje bez nutnosti změn v kódu realizovat automatickou kontrolu hranic, sledování doby života oblastí paměti a zajištění integrity ukazatelů v komponentách zpracovávajících nedůvěryhodná data.
Mezi problémy, které jsou blokovány pomocí CHERIoT:
- Překročení hranic objektu v paměti;
- Zaměnění ukazatelů (při použití CHERIoT musí být všechny ukazatele odvozeny od již existujících ukazatelů);
- Přístup do paměti po uvolnění (jakýkoli přístup k paměti prostřednictvím nesprávného ukazatele nebo ukazatele, který odkazuje na uvolněný objekt, vede při použití CHERIoT k vyvolání výjimky).
Kromě specifikace a formálního modelu vyvíjí projekt referenční implementaci 32bitového RISC-V CPU Ibex s podporou ISA CHERIoT a modifikovaný nástroj LLVM. Schémata prototypu CPU a popisy hardwarových bloků ve Verilogu jsou šířeny pod licencí Apache 2.0. Jako základ pro CPU bylo použito jádro Ibex z projektu lowRISC. Na základě jádra CHERIoT se připravují k hromadné výrobě čipy ICENI, jejichž uvedení na trh je plánováno na příští rok. Společnost Microsoft také vyvíjí mikrokontrolér Kudu s podporou ISA CHERIoT. Ibex a Kudu již plně podporují specifikaci CHERIoT 1.0. Pracuje se na standardizaci CHERI-rozšíření pro procesory RISC-V v organizaci RISC-V International.
Dále se vyvíjí emulátor platformy na bázi FPGA a Docker kontejner pro vývojáře s předinstalovaným nástrojem a simulátorem CPU Ibex, realizovaným pomocí Verilatoru. Kromě toho byl na základě CHERIoT připraven 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 šířen pod licencí MIT. Základní komponenty operačního systému, jako jsou bootloader, plánovač a systém distribuce paměti, jsou strukturovány ve formě compartmentů.
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
