Microsoft åbner CHERIoT, en hardwareløsning til at forbedre C-kodesikkerheden

Microsoft har opdaget udviklinger relateret til CHERIoT-projektet (Capability Hardware Extension to RISC-V for Internet of Things), der har til formål at blokere sikkerhedsproblemer i eksisterende kode i C og C++. CHERIoT tilbyder en løsning, der giver dig mulighed for at beskytte eksisterende C/C++ kodebaser uden at skulle omarbejde dem. Beskyttelse implementeres ved brug af en modificeret compiler, der bruger et særligt udvidet sæt processorinstruktioner (ISA), leveret af processoren og på hardwareniveau, der overvåger hukommelsesadgang, kontrollerer korrektheden af ​​arbejdet med pointere og sikrer isolering af kodeblokke.

Projektet blev skabt med henblik på, at C-sprogets lavniveau karakter bliver en kilde til fejl, når man arbejder med hukommelse, hvilket fører til problemer som bufferoverløb, adgang til allerede frigivet hukommelse, pointer-dereferencer eller dobbeltfrigørelser . Praksis viser, at selv store virksomheder som Google og Microsoft, som har en streng politik for ændringsgennemgang og bruger moderne udviklingsmetoder og statiske analyseværktøjer, ikke kan garantere fraværet af fejl, når de arbejder med hukommelse (f.eks. omkring 70 % af sårbarhederne i Microsoft og Google er forårsaget af usikker hukommelseshåndtering).

Problemet kan løses ved at bruge programmeringssprog, der garanterer sikker drift med hukommelse, eller bindinger med yderligere kontroller, for eksempel ved at bruge i stedet for almindelige pointere som MiraclePtr (raw_ptr), der udfører yderligere kontroller for at få adgang til frigjorte hukommelsesområder. Men sådanne metoder er mere velegnede til ny kode, og omarbejdelse af eksisterende C/C++-projekter er ret problematisk, især hvis de er designet til at køre i ressourcebegrænsede miljøer, såsom indlejrede systemer og Internet of Things-enheder.

CHERIoT hardwarekomponenter er designet som en mikrocontroller baseret på RISC-V arkitekturen, der implementerer den beskyttede CHERI (Capability Hardware Extension to RISC-V) processorarkitektur, som giver en model for kontrolleret hukommelsesadgang baseret på "kapacitet" (hver læser og skriver drift til hukommelsen er godkendt). Baseret på instruktionssæt-arkitekturen (ISA) tilvejebragt i CHERIoT er der bygget en softwaremodel, der garanterer sikkerheden ved at arbejde med hukommelse på niveau med individuelle objekter, giver beskyttelse mod adgang til allerede frigjort hukommelse og implementerer et letvægts hukommelsesadgangsisoleringssystem . Den specificerede softwarebeskyttelsesmodel afspejles direkte i C/C++ sprogmodellen, som gør det muligt at bruge den til at beskytte eksisterende applikationer (kun genkompilering og kørsel på udstyr, der understøtter ISA CHERIoT er påkrævet).

Den foreslåede løsning giver dig mulighed for at blokere fejl, der får et objekt til at gå ud over hukommelsens grænser, tillader ikke pointersubstitution (alle pointere skal genereres fra eksisterende pointere), og overvåger hukommelsesadgang efter frigivelse (enhver adgang til hukommelse ved hjælp af en forkert pointer eller en pointer, der refererer til et frigivet objekt, resulterer i, at en undtagelse kastes). For eksempel giver brug af CHERIoT dig mulighed for at implementere automatisk grænsekontrol, sporing af hukommelseslevetid og håndhævelse af pointerintegritet i komponenter, der håndterer upålidelige data uden at kræve kodeændringer.

Projektet omfatter en specifikation af den udvidede CHERIoT-instruktionssætarkitektur, en referenceimplementering af en 32-bit RISC-V CPU, der understøtter CHERIoT ISA, og et modificeret LLVM-værktøjssæt. CPU-prototypediagrammer og hardwareblokbeskrivelser i Verilog distribueres under Apache 2.0-licensen. Ibex-kernen fra lowRISC-projektet blev brugt som basis for CPU'en. CHERIoT ISA-kodemodellen er defineret i Sail-sproget og er licenseret under BSD-licensen.

Derudover foreslås en prototype af realtidsoperativsystemet CHERIoT RTOS, som giver mulighed for at isolere rum selv på indlejrede systemer med 256 MB RAM. CHERIOT RTOS-koden er skrevet i C++ og distribueres under MIT-licensen. De grundlæggende komponenter i operativsystemet, såsom bootloader, skemalægger og hukommelsesdistributionssystem, er designet i form af rum.

Et rum i CHERIoT RTOS er en isoleret kombination af kode og globale variabler, der ligner et delt bibliotek, men i modsætning til sidstnævnte kan det ændre sin tilstand (mutable) og køre i en separat sikkerhedskontekst. Ingen kode udefra kan overføre kontrol til kode i et rum og få adgang til objekter, undtagen ved at få adgang til særligt definerede indgangspunkter og ved at bruge pointere til objekter, der eksplicit sendes, når du kalder et andet rum. Integritet og fortrolighed er garanteret for kode og globale objekter i et rum.

Kilde: opennet.ru

Tilføj en kommentar