Microsoft otvara CHERIoT, hardversko rješenje za poboljšanje sigurnosti C koda

Microsoft je otkrio razvoj u vezi sa projektom CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), čiji je cilj blokiranje sigurnosnih problema u postojećem kodu u C i C++. CHERIoT nudi rješenje koje vam omogućava da zaštitite postojeće C/C++ baze koda bez potrebe da ih prerađujete. Zaštita se realizuje korišćenjem modifikovanog kompajlera koji koristi poseban prošireni skup procesorskih instrukcija (ISA), koje obezbeđuje procesor i na hardverskom nivou prati pristup memoriji, proverava ispravnost rada sa pokazivačima i obezbeđuje izolaciju kodnih blokova.

Projekt je kreiran s obzirom na činjenicu da niskorazinska priroda jezika C postaje izvor grešaka pri radu s memorijom, što dovodi do problema kao što su prekoračenje bafera, pristup već oslobođenoj memoriji, dereferenciranje pokazivača ili dvostruko oslobađanje . Praksa pokazuje da čak i velike korporacije kao što su Google i Microsoft, koje imaju strogu politiku pregleda promjena i koriste savremene razvojne metode i alate za statičku analizu, ne mogu garantirati odsustvo grešaka pri radu s memorijom (na primjer, oko 70% ranjivosti u Microsoftu i Google uzrokovani nesigurnim rukovanjem memorijom).

Problem se može riješiti korištenjem programskih jezika koji garantiraju siguran rad s memorijom, ili povezivanja s dodatnim provjerama, na primjer, korištenjem umjesto običnih pokazivača poput MiraclePtr (raw_ptr), koji vrši dodatne provjere za pristup oslobođenim memorijskim područjima. Ali takve metode su pogodnije za novi kod, a prerada postojećih C/C++ projekata je prilično problematična, posebno ako su dizajnirani za rad u okruženjima sa ograničenim resursima, kao što su ugrađeni sistemi i uređaji Interneta stvari.

CHERIoT hardverske komponente su dizajnirane kao mikrokontroler zasnovan na RISC-V arhitekturi, implementirajući zaštićenu CHERI (Capability Hardware Extension to RISC-V) procesorsku arhitekturu, koja obezbeđuje model kontrolisanog pristupa memoriji zasnovan na "sposobnosti" (svako čitanje i pisanje operacija u memoriji je odobrena) . Na osnovu arhitekture skupa instrukcija (ISA) koju pruža CHERIoT, izgrađen je softverski model koji garantuje sigurnost rada sa memorijom na nivou pojedinačnih objekata, pruža zaštitu od pristupa već oslobođenoj memoriji i implementira lagani sistem izolacije pristupa memoriji. . Navedeni model zaštite softvera se direktno odražava u modelu jezika C/C++, što mu omogućava da se koristi za zaštitu postojećih aplikacija (potrebno je samo ponovno kompajliranje i pokretanje na opremi koja podržava ISA CHERIoT).

Predloženo rješenje vam omogućava da blokirate greške koje uzrokuju da objekt ide izvan granica memorije, ne dozvoljava zamjenu pokazivača (svi pokazivači moraju biti generirani iz postojećih pokazivača) i prati pristup memoriji nakon oslobađanja (svaki pristup memoriji koristeći neispravan pokazivač ili pokazivač koji upućuje na oslobođeni objekat rezultira izbacivanjem izuzetka). Na primjer, korištenje CHERIoT-a vam omogućava da implementirate automatsku provjeru granica, praćenje životnog vijeka memorije i provođenje integriteta pokazivača u komponentama koje rukuju nepouzdanim podacima bez potrebe za bilo kakvim promjenama koda.

Projekat uključuje specifikaciju proširene arhitekture CHERIoT skupa instrukcija, referentnu implementaciju 32-bitnog RISC-V CPU-a s podrškom za CHERIoT ISA i modificirani LLVM alat. Dijagrami prototipa CPU-a i opisi hardverskih blokova u Verilog-u se distribuiraju pod licencom Apache 2.0. Ibex jezgro iz lowRISC projekta je korišteno kao osnova za CPU. CHERIoT ISA kodni model definiran je u jeziku Sail i licenciran je pod BSD licencom.

Dodatno, predložen je prototip operativnog sistema u realnom vremenu CHERIoT RTOS, koji pruža mogućnost izolacije pregrada čak i na ugrađenim sistemima sa 256 MB RAM-a. CHERIoT RTOS kod je napisan u C++ i distribuira se pod MIT licencom. Osnovne komponente OS-a, kao što su bootloader, planer i sistem za distribuciju memorije, dizajnirane su u obliku odjeljaka.

Kompartment u CHERIoT RTOS-u je izolovana kombinacija koda i globalnih varijabli koja liči na dijeljenu biblioteku, ali za razliku od ove druge, može promijeniti svoje stanje (promjenjivo) i raditi u zasebnom sigurnosnom kontekstu. Nijedan kod izvana ne može prenijeti kontrolu na kod u odjeljku i pristupiti objektima, osim pristupanjem posebno definiranim ulaznim točkama i korištenjem pokazivača na objekte koji su eksplicitno proslijeđeni prilikom pozivanja drugog odjeljka. Integritet i povjerljivost su zagarantovani za kod i globalne objekte u odjeljku.

izvor: opennet.ru

Dodajte komentar