„Microsoft“ atidaro CHERIoT – aparatinės įrangos sprendimą, skirtą C kodo saugai pagerinti

„Microsoft“ atrado patobulinimų, susijusių su projektu CHERIoT (Capability Hardware Extension to RISC-V for Things-V), skirtu blokuoti esamo kodo C ir C++ saugumo problemas. CHERIoT siūlo sprendimą, leidžiantį apsaugoti esamas C/C++ kodų bazes, jų neperdirbant. Apsauga įgyvendinama naudojant modifikuotą kompiliatorių, kuris naudoja specialų išplėstinį procesoriaus instrukcijų rinkinį (ISA), kurį pateikia procesorius ir aparatūros lygiu stebi prieigą prie atminties, tikrina darbo su rodyklėmis teisingumą ir užtikrina kodų blokų izoliavimą.

Projektas buvo sukurtas atsižvelgiant į tai, kad žemo lygio C kalbos pobūdis tampa klaidų šaltiniu dirbant su atmintimi, dėl ko gali kilti problemų, tokių kaip buferio perpildymas, prieiga prie jau atlaisvintos atminties, rodyklės nukrypimai ar dvigubi atlaisvinimai. . Praktika rodo, kad net didelės korporacijos, tokios kaip „Google“ ir „Microsoft“, kurios taiko griežtą pakeitimų peržiūros politiką ir naudoja modernius kūrimo metodus bei statinės analizės įrankius, negali garantuoti, kad dirbant su atmintimi nebus klaidų (pavyzdžiui, apie 70 proc. „Microsoft“ spragų). ir „Google“ atsiranda dėl nesaugaus atminties tvarkymo).

Problema gali būti išspręsta naudojant programavimo kalbas, kurios garantuoja saugų veikimą su atmintimi, arba surišimus su papildomais patikrinimais, pavyzdžiui, vietoj įprastų rodyklių, tokių kaip MiraclePtr (raw_ptr), kuris atlieka papildomus patikrinimus, kad būtų pasiektos atlaisvintos atminties zonos. Tačiau tokie metodai labiau tinka naujam kodui, o esamų C/C++ projektų pertvarkymas yra gana problemiškas, ypač jei jie skirti veikti ribotų išteklių aplinkoje, pavyzdžiui, įterptosiose sistemose ir daiktų interneto įrenginiuose.

CHERIoT aparatūros komponentai yra sukurti kaip mikrovaldiklis, pagrįstas RISC-V architektūra, įgyvendinantis apsaugotą CHERI (Capability Hardware Extension to RISC-V) procesoriaus architektūrą, kuri suteikia valdomos prieigos prie atminties modelį, pagrįstą „galima“ (kiekvienas skaitymas ir rašymas). operacija į atmintį leidžiama). Remiantis CHERIoT pateikta instrukcijų rinkinio architektūra (ISA), sukurtas programinės įrangos modelis, garantuojantis darbo su atmintimi saugumą atskirų objektų lygyje, apsaugantis nuo prieigos prie jau atlaisvintos atminties ir įdiegiantis lengvą atminties prieigos izoliavimo sistemą. . Nurodytas programinės įrangos apsaugos modelis tiesiogiai atsispindi C/C++ kalbos modelyje, kuris leidžia jį naudoti esamoms programoms apsaugoti (reikia tik perkompiliuoti ir paleisti ISA CHERIoT palaikančioje įrangoje).

Siūlomas sprendimas leidžia blokuoti klaidas, dėl kurių objektas peržengia atminties ribas, neleidžia keisti rodyklės (visos rodyklės turi būti generuojamos iš esamų rodyklių) ir stebi prieigą prie atminties po atlaisvinimo (bet kokia prieiga prie atminties naudojant neteisingą rodyklė arba rodyklė, nurodanti atlaisvintą objektą, sukelia išimtis). Pavyzdžiui, naudojant CHERIoT galima įdiegti automatinį ribų tikrinimą, atminties eksploatavimo trukmės stebėjimą ir rodyklės vientisumo užtikrinimą komponentuose, kurie tvarko nepatikimus duomenis nereikalaujant jokių kodo pakeitimų.

Projektas apima išplėstinės CHERIoT instrukcijų rinkinio architektūros specifikaciją, 32 bitų RISC-V procesoriaus, palaikančio CHERIoT ISA, pamatinį įgyvendinimą ir modifikuotą LLVM įrankių rinkinį. CPU prototipų diagramos ir aparatinės įrangos blokų aprašymai Verilog platinami pagal Apache 2.0 licenciją. „Ibex“ branduolys iš „lowRISC“ projekto buvo naudojamas kaip procesoriaus pagrindas. CHERIoT ISA kodo modelis yra apibrėžtas Sail kalba ir yra licencijuotas pagal BSD licenciją.

Be to, siūlomas CHERIoT RTOS realaus laiko operacinės sistemos prototipas, suteikiantis galimybę atskirti skyrius net įterptosiose sistemose su 256 MB RAM. CHERIoT RTOS kodas parašytas C++ kalba ir platinamas pagal MIT licenciją. Pagrindiniai OS komponentai, tokie kaip įkrovos įkroviklis, planuoklis ir atminties paskirstymo sistema, yra suprojektuoti skyrių pavidalu.

CHERIoT RTOS skyrius yra izoliuotas kodo ir visuotinių kintamųjų derinys, panašus į bendrinamą biblioteką, tačiau skirtingai nei pastaroji, ji gali pakeisti savo būseną (kintama) ir veikti atskirame saugos kontekste. Joks kodas iš išorės negali perduoti valdymo į kodą skyriuje ir pasiekti objektus, nebent pasiekiant specialiai apibrėžtus įėjimo taškus ir naudojant nuorodas į objektus, aiškiai perduodamus skambinant kitam skyriui. Vientisumas ir konfidencialumas yra garantuojami kodui ir globaliems objektams skyriuje.

Šaltinis: opennet.ru

Добавить комментарий