Microsoft-ek CHERIoT irekitzen du, C kodearen segurtasuna hobetzeko hardware-irtenbidea

Microsoft-ek CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) proiektuarekin lotutako garapenak aurkitu ditu, C eta C++-n dagoen kodean segurtasun-arazoak blokeatzera zuzenduta. CHERIoT-ek lehendik dauden C/C++ kode-oinarriak babesteko aukera ematen duen irtenbide bat eskaintzen du, haiek berritu beharrik gabe. Babesa prozesadorearen instrukzio hedatu berezi bat (ISA) erabiltzen duen konpiladore aldatu baten bidez ezartzen da, prozesadoreak emandakoa eta hardware mailan memoria sarbidea kontrolatuz, erakusleekin lanaren zuzentasuna egiaztatuz eta kode blokeen isolamendua bermatuz.

Proiektua C lengoaiaren behe-mailako izaera akatsen iturri bilakatzen dela memoriarekin lan egitean, buffer gainezkatzea, lehendik askatuta dagoen memoriarako sarbidea, erakusleen deserreferentziak edo aske bikoitzak bezalako arazoak sortzen direla ikusita sortu zen. . Praktikak erakusten du Google eta Microsoft bezalako korporazio handiek ere, aldaketak berrikusteko politika zorrotza duten eta garapen-metodo modernoak eta analisi estatikoko tresnak erabiltzen dituztenak, ezin dutela bermatu memoriarekin lan egiten dutenean errorerik ez dagoela (adibidez, Microsoft-en ahultasunen % 70 inguru). eta Google-k memoria ez-seguruaren tratamenduak eragiten ditu).

Arazoa konpon daiteke memoriarekin funtzionamendu segurua bermatzen duten programazio-lengoaiak erabiliz, edo egiaztapen gehigarriekin loturak erabiliz, adibidez, MiraclePtr (raw_ptr) bezalako erakusle arrunten ordez, libretutako memoria-eremuetan sartzeko egiaztapen gehigarriak egiten dituena. Baina horrelako metodoak egokiagoak dira kode berrirako, eta lehendik dauden C/C++ proiektuak birlantzea nahiko problematikoa da, batez ere baliabideak mugatutako inguruneetan exekutatzeko diseinatuta badaude, hala nola sistema txertatuetan eta Gauzen Interneteko gailuetan.

CHERIoT hardware-osagaiak RISC-V arkitekturan oinarritutako mikrokontrolagailu gisa diseinatuta daude, babestutako CHERI (Capability Hardware Extension to RISC-V) prozesadore-arkitektura inplementatzen du, "gaitasunean" (bakoitzak irakurri eta idazteko) oinarritutako memoria kontrolatzeko sarbidearen eredu bat eskaintzen duena. memoriarako eragiketa baimenduta dago). CHERIoT-en emandako instrukzio-multzoen arkitekturan (ISA) oinarrituta, memoriarekin lan egiteko segurtasuna bermatzen duen objektu indibidualen mailan, dagoeneko libre dagoen memoriara sartzeko babesa eskaintzen duen software-eredu bat eraikitzen da, eta memoriarako sarbidea isolatzeko sistema arin bat ezartzen du. . Zehaztutako software babesteko eredua zuzenean islatzen da C/C++ hizkuntza ereduan, eta horri esker lehendik dauden aplikazioak babesteko erabil daiteke (ISA CHERIoT onartzen duten ekipoetan birkonpilatu eta exekutatu behar da soilik).

Proposatutako irtenbideak objektu bat memoriaren mugetatik haratago gainditzea eragiten duten akatsak blokeatzeko aukera ematen du, ez du erakusleen ordezkapena onartzen (erakusle guztiak lehendik dauden erakusleetatik sortu behar dira) eta askatu ondoren memoriarako sarbidea kontrolatzen du (memorirako edozein sarbide okerra erabiliz). erakusleak edo askatutako objektu bati erreferentzia egiten dion erakusleak salbuespen bat botatzen du). Esate baterako, CHERIoT erabiliz mugak automatikoki egiaztatzea, memoriaren iraupenaren jarraipena eta erakusleen osotasuna betearaztea ahalbidetzen du fidagarriak ez diren datuak kudeatzen dituzten osagaietan, kode aldaketarik behar izan gabe.

Proiektuak CHERIoT instrukzio-multzo hedatuaren arkitekturaren zehaztapena, CHERIoT ISA onartzen duen 32 biteko RISC-V CPU baten erreferentziazko inplementazioa eta LLVM tresna-kit aldatua biltzen ditu. CPU prototipoaren diagramak eta hardware blokeen deskribapenak Verilog-en Apache 2.0 lizentziapean banatzen dira. LowRISC proiektuko Ibex nukleoa CPUrako oinarri gisa erabili zen. CHERIoT ISA kode eredua Sail hizkuntzan definituta dago eta BSD lizentziapean dago.

Gainera, CHERIoT RTOS denbora errealeko sistema eragilearen prototipo bat proposatzen da, 256 MB RAM duten sistema txertatuetan ere konpartimentuak isolatzeko gaitasuna eskaintzen duena. CHERIoT RTOS kodea C++-n idatzita dago eta MIT lizentziapean banatzen da. OSaren oinarrizko osagaiak, hala nola, abio-kargatzailea, programatzailea eta memoria banatzeko sistema, konpartimentu moduan diseinatuta daude.

CHERIoT RTOS-en konpartimentu bat kode eta aldagai globalen konbinazio isolatu bat da, partekatutako liburutegi baten antza duena, baina azken honek ez bezala, bere egoera alda dezake (aldagarria) eta segurtasun-testuinguru bereizi batean exekutatu. Kanpotik datorren kode batek ezin dio kontrola transferitu konpartimentu bateko kodeari eta atzitu objektuei, bereziki definitutako sarrera puntuetara sartuz eta beste konpartimentu bati deitzean esplizituki pasatako objektuetarako erakusleak erabiliz izan ezik. Osotasuna eta konfidentzialtasuna bermatuta daude konpartimentu bateko kodea eta objektu globalentzat.

Iturria: opennet.ru

Gehitu iruzkin berria