Microsoft odpre CHERIOT, rešitev strojne opreme za izboljšanje varnosti kode C

Microsoft je odkril razvoj v zvezi s projektom CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), katerega cilj je blokiranje varnostnih težav v obstoječi kodi v C in C++. CHERIOT ponuja rešitev, ki vam omogoča zaščito obstoječih kodnih baz C/C++, ne da bi jih bilo treba predelovati. Zaščita se izvaja z uporabo modificiranega prevajalnika, ki uporablja poseben razširjeni nabor procesorskih navodil (ISA), ki ga zagotavlja procesor in na ravni strojne opreme spremlja dostop do pomnilnika, preverja pravilnost dela s kazalci in zagotavlja izolacijo kodnih blokov.

Projekt je bil ustvarjen ob upoštevanju dejstva, da nizkonivojska narava jezika C postane vir napak pri delu s pomnilnikom, kar vodi do težav, kot so prelivanje medpomnilnika, dostop do že sproščenega pomnilnika, dereference kazalcev ali dvojna osvoboditve . Praksa kaže, da tudi velike korporacije, kot sta Google in Microsoft, ki imajo strogo politiko pregleda sprememb in uporabljajo sodobne razvojne metode ter orodja za statično analizo, ne morejo zagotoviti odsotnosti napak pri delu s pomnilnikom (na primer približno 70% ranljivosti v Microsoftu in Google so posledica nevarnega ravnanja s pomnilnikom).

Težavo je mogoče rešiti z uporabo programskih jezikov, ki zagotavljajo varno delovanje s pomnilnikom, ali z vezavami z dodatnimi preverjanji, na primer z uporabo namesto običajnih kazalcev, kot je MiraclePtr (raw_ptr), ki izvaja dodatna preverjanja dostopa do sproščenih pomnilniških območij. Toda takšne metode so bolj primerne za novo kodo, predelava obstoječih projektov C/C++ pa je precej problematična, zlasti če so zasnovani za delovanje v okoljih z omejenimi viri, kot so vgrajeni sistemi in naprave interneta stvari.

Komponente strojne opreme CHERIoT so zasnovane kot mikrokrmilnik, ki temelji na arhitekturi RISC-V, ki izvaja zaščiteno procesorsko arhitekturo CHERI (Capability Hardware Extension to RISC-V), ki zagotavlja model nadzorovanega dostopa do pomnilnika na podlagi "zmožnosti" (vsako branje in pisanje operacija v pomnilnik je dovoljena). Na podlagi arhitekture nabora ukazov (ISA), ki je na voljo v CHERIOT, je zgrajen programski model, ki zagotavlja varnost dela s pomnilnikom na ravni posameznih objektov, zagotavlja zaščito pred dostopom do že sproščenega pomnilnika in implementira lahek sistem izolacije dostopa do pomnilnika. . Naveden model zaščite programske opreme se neposredno odraža v jezikovnem modelu C/C++, ki omogoča njegovo uporabo za zaščito obstoječih aplikacij (potrebno je samo ponovno prevajanje in izvajanje na opremi, ki podpira ISA CHERIOT).

Predlagana rešitev vam omogoča blokiranje napak, ki povzročijo, da objekt preseže meje pomnilnika, ne dovoljuje zamenjave kazalcev (vsi kazalci morajo biti generirani iz obstoječih kazalcev) in spremlja dostop do pomnilnika po sprostitvi (vsak dostop do pomnilnika z uporabo nepravilnega kazalec ali kazalec, ki se sklicuje na sproščeni objekt, povzroči vrženo izjemo). Na primer, uporaba CHERIOT vam omogoča implementacijo samodejnega preverjanja meja, sledenje življenjske dobe pomnilnika in uveljavljanje celovitosti kazalca v komponentah, ki obravnavajo nezaupljive podatke, ne da bi bilo treba spremeniti kodo.

Projekt vključuje specifikacijo razširjene arhitekture nabora ukazov CHERIOT, referenčno izvedbo 32-bitnega CPU RISC-V, ki podpira CHERIoT ISA, in spremenjen komplet orodij LLVM. Diagrami prototipov procesorja in opisi blokov strojne opreme v Verilogu se distribuirajo pod licenco Apache 2.0. Za osnovo CPU je bilo uporabljeno jedro Ibex iz projekta lowRISC. Kodni model CHERIOT ISA je definiran v jeziku Sail in je licenciran pod licenco BSD.

Poleg tega je predlagan prototip operacijskega sistema v realnem času CHERIoT RTOS, ki zagotavlja možnost izolacije predelkov tudi na vgrajenih sistemih z 256 MB RAM-a. Koda CHERIOT RTOS je napisana v C++ in se distribuira pod licenco MIT. Osnovne komponente OS, kot so zagonski nalagalnik, razporejevalnik in sistem za distribucijo pomnilnika, so oblikovane v obliki predelkov.

Predel v CHERIOT RTOS je izolirana kombinacija kode in globalnih spremenljivk, ki je podobna knjižnici v skupni rabi, vendar za razliko od slednje lahko spremeni svoje stanje (spremenljivo) in deluje v ločenem varnostnem kontekstu. Nobena koda od zunaj ne more prenesti nadzora na kodo v predelku in dostopati do objektov, razen z dostopom do posebej definiranih vstopnih točk in uporabo kazalcev na objekte, ki so eksplicitno posredovani pri klicu drugega predelka. Celovitost in zaupnost sta zagotovljeni za kodo in globalne objekte v predelku.

Vir: opennet.ru

Dodaj komentar