Microsoft opent CHERioT, een hardwareoplossing om de C-codebeveiliging te verbeteren

Microsoft heeft ontwikkelingen ontdekt die verband houden met het CHERioT-project (Capability Hardware Extension to RISC-V for Internet of Things), gericht op het blokkeren van beveiligingsproblemen in bestaande code in C en C++. CHERioT biedt een oplossing waarmee u bestaande C/C++-codebases kunt beschermen zonder dat u ze hoeft te herwerken. De bescherming wordt geïmplementeerd door het gebruik van een aangepaste compiler die gebruik maakt van een speciale uitgebreide set processorinstructies (ISA), geleverd door de processor en op hardwareniveau die de geheugentoegang bewaakt, de juistheid van het werk controleert met pointers en zorgt voor isolatie van codeblokken.

Het project is gemaakt met het oog op het feit dat het lage karakter van de C-taal een bron van fouten wordt bij het werken met geheugen, wat leidt tot problemen zoals bufferoverflows, toegang tot reeds vrijgemaakt geheugen, pointer-dereferenties of dubbele bevrijdingen . De praktijk leert dat zelfs grote bedrijven als Google en Microsoft, die een strikt change review-beleid voeren en moderne ontwikkelmethoden en statische analysetools gebruiken, de afwezigheid van fouten bij het werken met geheugen niet kunnen garanderen (bijvoorbeeld ongeveer 70% van de kwetsbaarheden in Microsoft en Google worden veroorzaakt door onveilige omgang met geheugen).

Het probleem kan worden opgelost door programmeertalen te gebruiken die een veilige werking met geheugen garanderen, of bindingen met extra controles, bijvoorbeeld door in plaats van gewone pointers zoals MiraclePtr (raw_ptr) te gebruiken, die extra controles uitvoert voor toegang tot vrijgekomen geheugengebieden. Maar dergelijke methoden zijn geschikter voor nieuwe code, en het herwerken van bestaande C/C++-projecten is behoorlijk problematisch, vooral als ze zijn ontworpen om te worden uitgevoerd in omgevingen met beperkte middelen, zoals ingebedde systemen en Internet of Things-apparaten.

CHERioT-hardwarecomponenten zijn ontworpen als een microcontroller gebaseerd op de RISC-V-architectuur, waarbij de beschermde CHERI-processorarchitectuur (Capability Hardware Extension to RISC-V) wordt geïmplementeerd, die een model biedt van gecontroleerde geheugentoegang op basis van “capaciteit” (elke lees- en schrijfsnelheid). bewerking naar het geheugen is geautoriseerd). Gebaseerd op de instructiesetarchitectuur (ISA) die in CHERioT wordt geleverd, wordt een softwaremodel gebouwd dat de veiligheid van het werken met geheugen op het niveau van individuele objecten garandeert, bescherming biedt tegen toegang tot reeds vrijgemaakt geheugen en een lichtgewicht isolatiesysteem voor geheugentoegang implementeert . Het gespecificeerde softwarebeschermingsmodel wordt direct weerspiegeld in het C/C++-taalmodel, waardoor het kan worden gebruikt om bestaande applicaties te beschermen (alleen opnieuw compileren en draaien op apparatuur die ISA CHERioT ondersteunt is vereist).

Met de voorgestelde oplossing kunt u fouten blokkeren die ervoor zorgen dat een object de grenzen van het geheugen overschrijdt, staat geen pointervervanging toe (alle pointers moeten worden gegenereerd op basis van bestaande pointers) en bewaakt de geheugentoegang na het vrijmaken (elke toegang tot het geheugen met behulp van een onjuiste code). pointer of een pointer die naar een vrijgemaakt object verwijst, resulteert in het genereren van een uitzondering). Door CHERioT te gebruiken, kunt u bijvoorbeeld automatische grenscontrole, het bijhouden van de geheugenlevensduur en het afdwingen van de pointerintegriteit implementeren in componenten die niet-vertrouwde gegevens verwerken zonder dat er codewijzigingen nodig zijn.

Het project omvat een specificatie van de uitgebreide CHERioT-instructiesetarchitectuur, een referentie-implementatie van een 32-bit RISC-V CPU die de CHERioT ISA ondersteunt, en een aangepaste LLVM-toolkit. CPU-prototypediagrammen en hardwareblokbeschrijvingen in Verilog worden gedistribueerd onder de Apache 2.0-licentie. De Ibex-kern uit het lowRISC-project werd gebruikt als basis voor de CPU. Het CHERioT ISA-codemodel is gedefinieerd in de Sail-taal en is gelicentieerd onder de BSD-licentie.

Bovendien wordt een prototype van het real-time besturingssysteem CHERioT RTOS voorgesteld, dat de mogelijkheid biedt om compartimenten te isoleren, zelfs op ingebedde systemen met 256 MB RAM. De CHERioT RTOS-code is geschreven in C++ en wordt gedistribueerd onder de MIT-licentie. De basiscomponenten van het besturingssysteem, zoals de bootloader, planner en geheugendistributiesysteem, zijn ontworpen in de vorm van compartimenten.

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 de laatste kan het de status ervan veranderen (veranderlijk) en in een aparte beveiligingscontext draaien. Geen enkele code van buitenaf kan de controle overbrengen naar code in een compartiment en toegang krijgen tot objecten, behalve door toegang te krijgen tot speciaal gedefinieerde toegangspunten en verwijzingen te gebruiken naar objecten die expliciet worden doorgegeven bij het aanroepen van een ander compartiment. Integriteit en vertrouwelijkheid zijn gegarandeerd voor code en globale objecten in een compartiment.

Bron: opennet.ru

Voeg een reactie