Microsoft avab C-koodi turvalisuse parandamiseks mõeldud riistvaralahenduse CHERIoT

Microsoft on avastanud arendused, mis on seotud projektiga CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), mille eesmärk on blokeerida C ja C++ olemasoleva koodi turvaprobleemid. CHERIoT pakub lahendust, mis võimaldab kaitsta olemasolevaid C/C++ koodibaase ilma neid ümber töötamata. Kaitset rakendatakse modifitseeritud kompilaatori abil, mis kasutab spetsiaalset protsessori poolt pakutavat laiendatud protsessorikäskude komplekti (ISA) ja jälgib riistvara tasemel juurdepääsu mälule, kontrollides osutitega töö õigsust ja tagades koodiplokkide isoleerimise.

Projekt loodi, pidades silmas tõsiasja, et C-keele madal olemus muutub mäluga töötamisel vigade allikaks, mis toob kaasa selliseid probleeme nagu puhvri ületäitumine, juurdepääs juba vabastatud mälule, osuti viited või topeltvabadused. . Praktika näitab, et isegi suured korporatsioonid nagu Google ja Microsoft, millel on range muudatuste ülevaatuse poliitika ning kasutavad kaasaegseid arendusmeetodeid ja staatilise analüüsi tööriistu, ei suuda mäluga töötamisel tagada vigade puudumist (näiteks umbes 70% Microsofti haavatavustest). ja Google on põhjustatud ebaturvalisest mälukäsitlusest).

Probleemi saab lahendada kasutades programmeerimiskeeli, mis tagavad ohutu töö mäluga, või lisakontrolliga sidumisi, näiteks kasutades tavaliste osutite asemel MiraclePtr (raw_ptr), mis teostab täiendavaid kontrolle vabade mälupiirkondade juurde pääsemiseks. Kuid sellised meetodid sobivad rohkem uue koodi jaoks ja olemasolevate C/C++ projektide ümbertöötamine on üsna problemaatiline, eriti kui need on loodud töötama piiratud ressursiga keskkondades, nagu manussüsteemid ja asjade Interneti seadmed.

CHERIoT riistvarakomponendid on konstrueeritud RISC-V arhitektuuril põhinevate mikrokontrolleritena, mis rakendavad kaitstud CHERI (Capability Hardware Extension to RISC-V) protsessori arhitektuuri, mis pakub juhitud mälule juurdepääsu mudelit, mis põhineb "võimel" (iga lugemis- ja kirjutamisvõime). toiming mällu on lubatud). CHERIoT-is pakutava käsukomplekti arhitektuuri (ISA) põhjal on ehitatud tarkvaramudel, mis tagab mäluga töötamise ohutuse üksikute objektide tasemel, pakub kaitset juurdepääsu eest juba vabastatud mälule ja rakendab kerge mälu juurdepääsu eraldamise süsteemi. . Määratud tarkvara kaitsemudel kajastub otseselt C/C++ keelemudelis, mis võimaldab seda kasutada olemasolevate rakenduste kaitsmiseks (vajalik on vaid ümberkompileerimine ja ISA CHERIoT-i toetavatel seadmetel töötamine).

Kavandatud lahendus võimaldab blokeerida vigu, mis põhjustavad objekti väljumise mälu piiridest, ei luba kursori asendamist (kõik osutid tuleb genereerida olemasolevatest osutitest) ja jälgib mälule juurdepääsu pärast vabastamist (mis tahes juurdepääs mälule, kasutades vale kursori või vabastatud objektile viitava osuti tulemuseks on erand). Näiteks võimaldab CHERIoT kasutamine rakendada automaatset piiride kontrolli, mälu eluea jälgimist ja osuti terviklikkuse jõustamist komponentides, mis käitlevad ebausaldusväärseid andmeid ilma koodi muutmist nõudmata.

Projekt sisaldab laiendatud CHERIoT käsukomplekti arhitektuuri spetsifikatsiooni, CHERIoT ISA toega 32-bitise RISC-V CPU võrdlusrakendust ja muudetud LLVM-i tööriistakomplekti. Verilogi protsessori prototüübi diagramme ja riistvaraplokkide kirjeldusi levitatakse Apache 2.0 litsentsi alusel. Protsessori alusena kasutati lowRISC projekti Ibexi tuuma. CHERIoT ISA koodimudel on määratletud Sail keeles ja on litsentsitud BSD litsentsi alusel.

Lisaks pakutakse välja reaalajas operatsioonisüsteemi CHERIoT RTOS prototüüp, mis võimaldab eraldada sektsioone isegi 256 MB muutmäluga manustatud süsteemides. CHERIoT RTOS kood on kirjutatud C++ keeles ja seda levitatakse MIT litsentsi all. OS-i põhikomponendid, nagu alglaadur, planeerija ja mälujaotussüsteem, on kujundatud sektsioonide kujul.

CHERIoT RTOS-i sektsioon on koodi ja globaalsete muutujate isoleeritud kombinatsioon, mis sarnaneb jagatud teegiga, kuid erinevalt viimasest võib selle olekut muuta (muutuva) ja töötada eraldi turbekontekstis. Ükski väljastpoolt tulev kood ei saa juhtimist üle anda sektsioonis olevale koodile ja juurdepääsu objektidele, välja arvatud spetsiaalselt määratletud sisenemispunktide juurde pääsemine ja osutite kasutamine objektidele, mis on selgesõnaliselt edastatud teise sektsiooni kutsumisel. Sektsioonis oleva koodi ja globaalsete objektide terviklikkus ja konfidentsiaalsus on garanteeritud.

Allikas: opennet.ru

Lisa kommentaar