Microsoft öppnar CHERIoT, en maskinvarulösning för att förbättra C-kodsäkerheten

Microsoft har upptäckt utvecklingar relaterade till CHERIoT-projektet (Capability Hardware Extension to RISC-V for Internet of Things), som syftar till att blockera säkerhetsproblem i befintlig kod i C och C++. CHERIoT erbjuder en lösning som låter dig skydda befintliga C/C++-kodbaser utan att behöva omarbeta dem. Skydd implementeras genom användning av en modifierad kompilator som använder en speciell utökad uppsättning processorinstruktioner (ISA), som tillhandahålls av processorn och på hårdvarunivå övervakar minnesåtkomst, kontrollerar korrektheten av arbetet med pekare och säkerställer isolering av kodblock.

Projektet skapades med tanke på att C-språkets lågnivåkaraktär blir en källa till fel när man arbetar med minne, vilket leder till problem som buffertspill, tillgång till redan frigjort minne, pekarreferenser eller dubbla frigörelser . Praxis visar att även stora företag som Google och Microsoft, som har en strikt policy för ändringsgranskning och använder moderna utvecklingsmetoder och statiska analysverktyg, inte kan garantera frånvaron av fel när de arbetar med minne (till exempel cirka 70 % av sårbarheterna i Microsoft och Google orsakas av osäker minneshantering).

Problemet kan lösas genom att använda programmeringsspråk som garanterar säker drift med minne, eller bindningar med ytterligare kontroller, till exempel genom att använda istället för vanliga pekare som MiraclePtr (raw_ptr), som utför ytterligare kontroller för att komma åt frigjorda minnesområden. Men sådana metoder är mer lämpade för ny kod, och omarbetning av befintliga C/C++-projekt är ganska problematiskt, speciellt om de är designade för att köras i resursbegränsade miljöer, såsom inbäddade system och Internet of Things-enheter.

CHERIoT-hårdvarukomponenter är designade som en mikrokontroller baserad på RISC-V-arkitekturen och implementerar den skyddade CHERI (Capability Hardware Extension to RISC-V)-processorarkitekturen, som ger en modell av kontrollerad minnesåtkomst baserad på "kapacitet" (varje läs- och skriv drift till minnet är tillåten). Baserat på instruktionsuppsättningsarkitekturen (ISA) som tillhandahålls i CHERIoT, byggs en mjukvarumodell som garanterar säkerheten att arbeta med minne på nivån för enskilda objekt, ger skydd mot tillgång till redan frigjort minne och implementerar ett lättviktigt minnesåtkomstisoleringssystem . Den specificerade mjukvaruskyddsmodellen återspeglas direkt i språkmodellen C/C++, vilket gör att den kan användas för att skydda befintliga applikationer (endast omkompilering och körning på utrustning som stöder ISA CHERIoT krävs).

Den föreslagna lösningen låter dig blockera fel som gör att ett objekt går utanför minnesgränserna, tillåter inte pekareersättning (alla pekare måste genereras från befintliga pekare) och övervakar minnesåtkomst efter frigöring (all åtkomst till minne med en felaktig pekare eller en pekare som hänvisar till ett frigjort objekt resulterar i att ett undantag kastas). Genom att till exempel använda CHERIoT kan du implementera automatisk kontroll av gränser, spårning av minneslivstid och upprätthållande av pekarintegritet i komponenter som hanterar opålitlig data utan att kräva några kodändringar.

Projektet inkluderar en specifikation av den utökade CHERIoT-instruktionsuppsättningsarkitekturen, en referensimplementering av en 32-bitars RISC-V CPU som stöder CHERIoT ISA och en modifierad LLVM-verktygssats. CPU-prototypdiagram och hårdvarublockbeskrivningar i Verilog distribueras under Apache 2.0-licensen. Ibex-kärnan från lowRISC-projektet användes som bas för CPU:n. CHERIoT ISA-kodmodellen är definierad på Sail-språket och är licensierad under BSD-licensen.

Dessutom föreslås en prototyp av realtidsoperativsystemet CHERIoT RTOS, som ger möjlighet att isolera fack även på inbyggda system med 256 MB RAM. CHERIOT RTOS-koden är skriven i C++ och distribueras under MIT-licensen. De grundläggande komponenterna i operativsystemet, såsom bootloader, schemaläggare och minnesdistributionssystem, är designade i form av fack.

Ett fack i CHERIoT RTOS är en isolerad kombination av kod och globala variabler som liknar ett delat bibliotek, men till skillnad från det senare kan det ändra sitt tillstånd (föränderligt) och köras i ett separat säkerhetssammanhang. Ingen kod utifrån kan överföra kontroll till kod i ett fack och komma åt objekt, förutom genom att komma åt speciellt definierade ingångspunkter och använda pekare till objekt som uttryckligen skickats när ett annat fack anropas. Integritet och konfidentialitet garanteras för kod och globala objekt i ett fack.

Källa: opennet.ru

Lägg en kommentar