Microsoft heeft zijn ontwikkelingen met betrekking tot het CHERIoT-project (Capability Hardware Extension to RISC-V for Internet of Things) geopend, dat gericht is op het blokkeren van beveiligingsproblemen in bestaande code geschreven in C en C++. CHERIoT biedt een oplossing die bestaande C/C++ codebases beschermt zonder dat ze volledig herschreven hoeven te worden. De bescherming wordt gerealiseerd door een gemodificeerde compiler die gebruikmaakt van een speciale uitgebreide set processorinstructies (ISA), die door de processor op hardware-niveau worden geleverd om toegang tot geheugen te volgen, de correctheid van pointermanipulatie te controleren en isolatie van codeblokken te garanderen.
Het project is ontworpen met het oog op het feit dat de laagdrempelige aard van de C-taal een bron van fouten kan zijn bij geheugengebruik, wat leidt tot problemen zoals buffer overflow, toegang tot al vrijgegeven geheugen, dereferencen van pointers of dubbele vrijgave van geheugen. De praktijk toont aan dat zelfs grote bedrijven zoals Google en Microsoft, die een strikte wijzigingsreviewbeleid hanteren en moderne ontwikkelingsmethoden en statische analysetools toepassen, niet kunnen garanderen dat er geen fouten optreden bij geheugengebruik (bijvoorbeeld, ongeveer 70% van de kwetsbaarheden in de softwareproducten van Microsoft en Google zijn te wijten aan onveilig geheugengebruik).
Het probleem kan worden opgelost door programmeertalen te gebruiken die een veilige omgang met geheugen garanderen, of door wrappers met extra controles, bijvoorbeeld door in plaats van reguliere pointers een type MiraclePtr (raw_ptr) te gebruiken, dat extra controles uitvoert bij toegang tot al vrijgegeven geheugengebieden. Maar dergelijke methoden zijn meer geschikt voor nieuwe code, terwijl bestaande projecten in C/C++ vaak moeilijk te herschrijven zijn, vooral als ze bedoeld zijn voor gebruik in omgevingen met beperkte middelen, zoals embedded systemen en Internet of Things-apparaten.
De hardwarecomponenten van CHERIoT zijn vormgegeven als een microcontroller op basis van de RISC-V-architectuur, die een beveiligde processorarchitectuur CHERI (Capability Hardware Extension voor RISC-V) implementeert. Dit biedt een model voor gecontroleerde toegang tot geheugen op basis van 'capabilities' (Elke lees- en schrijfbewerking in het geheugen wordt geautoriseerd). Op basis van de door CHERIoT aangeboden instructiesetarchitectuur (ISA) is een softwaremodel ontwikkeld dat de veiligheid van het werken met geheugen op het niveau van afzonderlijke objecten garandeert, bescherming biedt tegen toegang tot al vrijgegeven geheugen en een lichtgewicht systeem voor het isoleren van geheugentoegang implementeert. Dit softwarebeveiligingsmodel wordt rechtstreeks weerspiegeld in de taalmodellen C/C++, wat het mogelijk maakt om het te gebruiken voor de bescherming van bestaande applicaties (enkel recompilatie en uitvoering op hardware die ISA CHERIoT ondersteunt is vereist).
De voorgestelde oplossing maakt het mogelijk om fouten te blokkeren die leiden tot het overschrijden van objecten in het geheugen, voorkomt vervanging van pointers (alle pointers moeten worden afgeleid van al bestaande pointers), en volgt toegang tot geheugen na vrijgave (elke toegang tot geheugen via een onjuiste pointer of een pointer die verwijst naar een vrijgegeven object leidt tot het genereren van een uitzondering). Bijvoorbeeld, het gebruik van CHERIoT maakt het mogelijk om zonder wijzigingen in de code automatische grenscontrole te implementeren, de levensduur van geheugengebieden bij te houden en de integriteit van pointers te waarborgen in componenten die onbetrouwbare gegevens verwerken.
Het project omvat de specificatie van de uitgebreide architectuur van de CHERIoT-instructieset, een referentie-implementatie van een 32-bits RISC-V CPU met ondersteuning voor ISA CHERIoT en een gemodificeerde LLVM-toolchain. De schematics van de CPU-prototypen en de beschrijvingen van de hardwarecomponenten in Verilog worden verspreid onder de Apache 2.0-licentie. De basis voor de CPU is de Ibex-kern van het lowRISC-project. Het CHERIoT ISA-code model is gedefinieerd in de Sail-taal en wordt verspreid onder de BSD-licentie.
Daarnaast is er een prototype van het realtime besturingssysteem CHERIoT RTOS voorgesteld, dat isolatie van compartimenten (compartment) mogelijk maakt, zelfs op ingebedde systemen met 256 MB RAM. De code van CHERIoT RTOS is geschreven in C++ en wordt verspreid onder de MIT-licentie. De basiscomponenten van het besturingssysteem, zoals de bootloader, planner en geheugenverdelingssysteem, zijn in de vorm van compartimenten ingericht.
Een compartiment in CHERIoT RTOS is een geïsoleerde combinatie van code en globale variabelen die lijkt op een gedeelde bibliotheek, maar in tegenstelling tot deze kan het zijn toestand (mutable) veranderen en in een aparte beveiligingscontext worden uitgevoerd. Geen enkele externe code kan de controle aan de code in het compartiment overdragen of toegang krijgen tot objecten, behalve via speciaal gedefinieerde ingangen en het gebruik van pointers naar objecten die expliciet zijn doorgegeven bij het aanroepen van een ander compartiment. Voor de code en globale objecten in het compartiment wordt integriteit en vertrouwelijkheid gegarandeerd.
Bron: opennet.ru
