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

Microsoft je otkrio razvoj povezan s 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ćuje zaštitu postojećih C/C++ kodnih baza bez potrebe za njihovom preradom. Zaštita se provodi upotrebom modificiranog prevoditelja koji koristi poseban prošireni skup procesorskih instrukcija (ISA), koje osigurava procesor i na hardverskoj razini nadzire pristup memoriji, provjerava ispravnost rada s pokazivačima i osigurava izolaciju kodnih blokova.

Projekt je kreiran imajući u vidu činjenicu da priroda niske razine jezika C postaje izvor pogrešaka pri radu s memorijom, što dovodi do problema kao što su prekoračenja međuspremnika, pristup već oslobođenoj memoriji, dereferenciranja pokazivača ili dvostruka oslobađanja . Praksa pokazuje da čak ni velike korporacije poput Googlea i Microsofta, koje imaju strogu politiku pregleda promjena i koriste suvremene razvojne metode i alate za statičku analizu, ne mogu jamčiti odsutnost pogrešaka pri radu s memorijom (na primjer, oko 70% ranjivosti u Microsoftu i Google uzrokovani su nesigurnim rukovanjem memorijom).

Problem se može riješiti korištenjem programskih jezika koji jamče siguran rad s memorijom, ili vezanja s dodatnim provjerama, primjerice 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 su metode prikladnije za novi kod, a prerada postojećih C/C++ projekata prilično je problematična, pogotovo ako su dizajnirani za rad u okruženjima s ograničenim resursima, kao što su ugrađeni sustavi i uređaji Interneta stvari.

CHERIoT hardverske komponente dizajnirane su kao mikrokontroler temeljen na RISC-V arhitekturi, implementirajući zaštićenu CHERI (Capability Hardware Extension to RISC-V) procesorsku arhitekturu, koja pruža model kontroliranog pristupa memoriji temeljen na "sposobnosti" (svako čitanje i pisanje radnja u memoriju je odobrena). Na temelju arhitekture skupa instrukcija (ISA) u CHERIoT-u izgrađen je softverski model koji jamči sigurnost rada s memorijom na razini pojedinačnih objekata, pruža zaštitu od pristupa već oslobođenoj memoriji i implementira lagani sustav izolacije pristupa memoriji . Navedeni model zaštite softvera izravno se odražava u jezičnom modelu C/C++, što mu omogućuje da se koristi za zaštitu postojećih aplikacija (potrebno je samo ponovno prevođenje i pokretanje na opremi koja podržava ISA CHERIOT).

Predloženo rješenje omogućuje blokiranje pogrešaka koje uzrokuju da objekt izađe izvan granica memorije, ne dopušta zamjenu pokazivača (svi pokazivači moraju biti generirani iz postojećih pokazivača) i nadzire pristup memoriji nakon oslobađanja (svaki pristup memoriji korištenjem netočnog pokazivač ili pokazivač koji referencira oslobođeni objekt rezultira izbacivanjem iznimke). Na primjer, korištenje CHERIOT-a omogućuje vam implementaciju automatske provjere granica, praćenje životnog vijeka memorije i provedbu integriteta pokazivača u komponentama koje rukuju nepouzdanim podacima bez potrebe za bilo kakvim promjenama koda.

Projekt uključuje specifikaciju proširene arhitekture skupa instrukcija CHERIOT, referentnu implementaciju 32-bitnog RISC-V CPU-a koji podržava CHERIoT ISA i modificirani LLVM alat. Dijagrami prototipa CPU-a i opisi hardverskih blokova u Verilogu distribuiraju se pod licencom Apache 2.0. Kao osnova za CPU korištena je jezgra Ibex iz lowRISC projekta. Model koda CHERIOT ISA definiran je u jeziku Sail i licenciran je pod BSD licencom.

Dodatno, predložen je prototip CHERIoT RTOS operativnog sustava u stvarnom vremenu, koji pruža mogućnost izolacije odjeljaka čak i na ugrađenim sustavima s 256 MB RAM-a. Kod CHERIOT RTOS napisan je u C++ i distribuira se pod licencom MIT. Osnovne komponente OS-a, kao što su bootloader, planer i sustav distribucije memorije, dizajnirane su u obliku odjeljaka.

Odjeljak u CHERIOT RTOS izolirana je kombinacija koda i globalnih varijabli koja nalikuje dijeljenoj biblioteci, ali za razliku od potonje, može promijeniti svoje stanje (promjenjivo) i izvoditi 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 se izričito prosljeđuju prilikom pozivanja drugog odjeljka. Za kod i globalne objekte u odjeljku zajamčeni su integritet i povjerljivost.

Izvor: opennet.ru

Dodajte komentar