Microsoft har öppnat upp sina forskningsinsatser kopplade till projektet CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), som syftar till att blockera sÀkerhetsproblem i befintlig kod skriven i sprÄken C och C++. CHERIoT erbjuder en lösning som skyddar befintliga kodbaser i C/C++ utan att de behöver omskrivas. Skyddet implementeras genom att anvÀnda en modifierad kompilator som tillÀmpar ett specialiserat utökat processorinstruktionsset (ISA), vilket tillhandahÄlls av processorn och pÄ hÄrdvarunivÄ spÄrar Ätkomst till minnet, kontrollerar korrektheten av pekaroperationer och sÀkerstÀller isoleringen av kodblock.
Projektet har skapats med tanke pÄ att den lÄgnivÄkaraktÀr som C-sprÄket har ofta leder till minnesfel, vilket ger upphov till problem som buffertöverflöde, Ätkomst till redan frigjorda minnen, dereferensiering av pekare eller dubbelfrigöring av minne. Erfarenheten visar att Àven stora företag som Google och Microsoft, som har en strikt förÀndringsgranskningspolicy och anvÀnder moderna utvecklingsmetoder samt statiska analysverktyg, inte kan garantera att det inte uppstÄr minnesfel (till exempel orsakas omkring 70% av sÄrbarheterna i mjukvaruprodukterna frÄn Microsoft och Google av osÀker minneshantering).
Problemet kan lösas genom att anvÀnda programmeringssprÄk som garanterar sÀker minneshantering, eller genom att anvÀnda wrappers med ytterligare kontroller, till exempel genom att anvÀnda istÀllet för vanliga pekare av typen MiraclePtr (raw_ptr), som genomför ytterligare kontroller av Ätkomst till frigjorda minnesomrÄden. Men sÄdana metoder passar bÀttre för ny kod, och det Àr ganska problematiskt att omskriva redan existerande projekt i C/C++, sÀrskilt om de Àr avsedda att köras i resursbegrÀnsade miljöer, sÄsom inbyggda system och enheter i Internet of Things.
CHERIoT:s hÄrdvarukomponenter Àr utformade som en mikrokontroller baserad pÄ RISC-V arkitekturen, som implementerar den skyddade processorarkitekturen CHERI (Capability Hardware Extension for RISC-V), vilket erbjuder en modell för kontrollerad minnesÄtkomst baserad pÄ "kapabiliteter" (varje lÀs- och skrivoperation till minnet godkÀnns). Den programvarumodell som bygger pÄ CHERIoT:s instruktionuppsÀttning (ISA) garanterar sÀker hantering av minne pÄ objektiv nivÄ, skyddar mot Ätkomst till redan frigjort minne och implementerar ett lÀttviktsisolationssystem för minnesÄtkomst. Denna skyddande programvarumodell Äterspeglas direkt i C/C++ sprÄkmodellen, vilket gör att den kan tillÀmpas för att skydda befintliga applikationer (det krÀvs endast omkompilering och körning pÄ hÄrdvara som stöder CHERIoT ISA).
Den föreslagna lösningen möjliggör blockering av fel som orsakar grÀnsöverskridande Ätkomst i minnet, förhindrar pekarbyte (alla pekare mÄste hÀrstamma frÄn redan existerande pekare), spÄrar Ätkomst till minne efter frigöring (all Ätkomst till minne via en ogiltig pekare eller en pekare som refererar till ett frigjort objekt leder till ett undantag). Till exempel möjliggör anvÀndningen av CHERIoT automatiskt grÀnskontroll, spÄrning av livslÀngden för minnesomrÄden och sÀkerstÀllande av pekarintegritet i komponenter som hanterar otillförlitliga data utan att göra Àndringar i koden.
Projektet omfattar specifikationen av den utvidgade CHERIoT instruktionuppsÀttningen, en referensimplementation av en 32-bitars RISC-V CPU med stöd för CHERIoT ISA och ett modifierat LLVM-verktyg. Prototypens CPU-schema och beskrivningar av hÄrdvarublock pÄ Verilog-sprÄket distribueras under Apache 2.0-licensen. CPU:n Àr baserad pÄ Ibex-kÀrnan frÄn lowRISC-projektet. CHERIoT ISA kodmodellen Àr definierad i Sail-sprÄket och distribueras under BSD-licensen.
Dessutom har prototypen för det realtidsoperativsystemet CHERIoT RTOS föreslagits, vilket möjliggör isolering av kompartments Àven pÄ inbyggda system med 256 MB RAM. Koden för CHERIoT RTOS Àr skriven i C++ och distribueras under MIT-licensen. De grundlÀggande komponenterna i operativsystemet, sÄsom bootloader, schemalÀggare och minneshanteringssystem, Àr formade som kompartments.
Ett kompartments i CHERIoT RTOS Àr en isolerad kombination av kod och globala variabler som liknar ett delat bibliotek, men till skillnad frÄn det kan den Àndra sitt tillstÄnd (mutable) och köras i en separat sÀkerhetskontext. Ingen extern kod kan överföra kontroll till koden i kompartments eller fÄ tillgÄng till objekt, förutom genom specifikt definierade ingÄngspunkter och anvÀndning av pekare till objekt som uttryckligen överförts vid anrop av ett annat kompartments. Integritet och konfidentialitet garanteras för kod och globala objekt i kompartments.
KĂ€lla: opennet.ru
