Binuksan ng Microsoft ang CHERIoT, isang Hardware Solution para Pahusayin ang C Code Security

Natuklasan ng Microsoft ang mga pagpapaunlad na nauugnay sa proyektong CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), na naglalayong hadlangan ang mga problema sa seguridad sa umiiral na code sa C at C++. Nag-aalok ang CHERIoT ng isang solusyon na nagbibigay-daan sa iyong protektahan ang mga umiiral nang C/C++ codebase nang hindi na kailangang i-rework ang mga ito. Ang proteksyon ay ipinatupad sa pamamagitan ng paggamit ng isang binagong compiler na gumagamit ng isang espesyal na pinalawig na hanay ng mga tagubilin ng processor (ISA), na ibinigay ng processor at sa antas ng hardware na pagsubaybay sa pag-access sa memorya, sinusuri ang kawastuhan ng trabaho gamit ang mga pointer at tinitiyak ang paghihiwalay ng mga bloke ng code.

Ang proyekto ay nilikha na may isang mata sa katotohanan na ang mababang antas na likas na katangian ng wikang C ay nagiging pinagmumulan ng mga error kapag nagtatrabaho sa memorya, na humahantong sa mga problema tulad ng buffer overflows, pag-access sa nakalaya na memorya, pointer dereferences, o double frees. . Ipinapakita ng pagsasanay na kahit na ang malalaking korporasyon gaya ng Google at Microsoft, na may mahigpit na patakaran sa pagsusuri ng pagbabago at gumagamit ng mga modernong paraan ng pag-unlad at mga static na tool sa pagsusuri, ay hindi magagarantiya ng kawalan ng mga error kapag nagtatrabaho gamit ang memorya (halimbawa, mga 70% ng mga kahinaan sa Microsoft at ang Google ay sanhi ng hindi ligtas na paghawak ng memorya).

Ang problema ay maaaring malutas sa pamamagitan ng paggamit ng mga programming language na ginagarantiyahan ang ligtas na operasyon na may memorya, o mga binding na may karagdagang mga pagsusuri, halimbawa, sa pamamagitan ng paggamit sa halip ng mga ordinaryong pointer tulad ng MiraclePtr (raw_ptr), na nagsasagawa ng mga karagdagang pagsusuri para sa pag-access sa mga lugar ng libreng memorya. Ngunit ang mga ganitong pamamaraan ay mas angkop para sa bagong code, at ang muling paggawa ng mga kasalukuyang C/C++ na proyekto ay medyo may problema, lalo na kung ang mga ito ay idinisenyo upang tumakbo sa resource-constrained environment, tulad ng mga naka-embed na system at Internet of Things device.

Ang mga bahagi ng hardware ng CHERIoT ay idinisenyo bilang isang microcontroller batay sa arkitektura ng RISC-V, na nagpapatupad ng protektadong CHERI (Capability Hardware Extension to RISC-V) na arkitektura ng processor, na nagbibigay ng isang modelo ng kontroladong pag-access sa memorya batay sa "kapabilidad" (bawat magbasa at magsulat ang pagpapatakbo sa memorya ay awtorisado). Batay sa instruction set architecture (ISA) na ibinigay sa CHERIoT, binuo ang isang modelo ng software na ginagarantiyahan ang kaligtasan ng pagtatrabaho gamit ang memory sa antas ng mga indibidwal na bagay, nagbibigay ng proteksyon laban sa pag-access sa nakalaya na memorya, at nagpapatupad ng magaan na memory access isolation system . Ang tinukoy na modelo ng proteksyon ng software ay direktang makikita sa modelo ng wikang C/C++, na nagbibigay-daan dito na magamit upang protektahan ang mga umiiral nang application (ang pagre-recompile at pagpapatakbo lamang sa mga kagamitan na sumusuporta sa ISA CHERIoT ay kinakailangan).

Ang iminungkahing solusyon ay nagpapahintulot sa iyo na harangan ang mga error na nagiging sanhi ng isang bagay na lumampas sa mga hangganan ng memorya, hindi pinapayagan ang pagpapalit ng pointer (lahat ng mga pointer ay dapat mabuo mula sa mga umiiral na pointer), at sinusubaybayan ang pag-access sa memorya pagkatapos ng pagpapalaya (anumang pag-access sa memorya gamit ang isang hindi tama pointer o pointer na tumutukoy sa isang pinalayang bagay ay nagreresulta sa isang pagbubukod na itinapon). Halimbawa, ang paggamit ng CHERIoT ay nagbibigay-daan sa iyo na magpatupad ng awtomatikong pagsuri ng mga hangganan, pagsubaybay sa habambuhay ng memorya, at pagpapatupad ng integridad ng pointer sa mga bahagi na humahawak ng hindi pinagkakatiwalaang data nang hindi nangangailangan ng anumang mga pagbabago sa code.

Kasama sa proyekto ang isang detalye ng pinalawig na arkitektura ng set ng pagtuturo ng CHERIoT, isang reference na pagpapatupad ng isang 32-bit na RISC-V na CPU na sumusuporta sa CHERIoT ISA, at isang binagong toolkit ng LLVM. Ang mga CPU prototype diagram at mga paglalarawan ng hardware block sa Verilog ay ipinamamahagi sa ilalim ng lisensya ng Apache 2.0. Ang Ibex core mula sa lowRISC na proyekto ay ginamit bilang batayan para sa CPU. Ang modelo ng code ng CHERIoT ISA ay tinukoy sa wikang Sail at lisensyado sa ilalim ng lisensya ng BSD.

Bukod pa rito, iminungkahi ang isang prototype ng real-time na operating system na CHERIoT RTOS, na nagbibigay ng kakayahang ihiwalay ang mga compartment kahit sa mga naka-embed na system na may 256 MB ng RAM. Ang CHERIoT RTOS code ay nakasulat sa C++ at ipinamamahagi sa ilalim ng lisensya ng MIT. Ang mga pangunahing bahagi ng OS, tulad ng bootloader, scheduler at memory distribution system, ay idinisenyo sa anyo ng mga compartment.

Ang isang compartment sa CHERIoT RTOS ay isang nakahiwalay na kumbinasyon ng code at mga pandaigdigang variable na kahawig ng isang shared library, ngunit hindi tulad ng huli, maaari nitong baguhin ang estado nito (nababago) at tumakbo sa isang hiwalay na konteksto ng seguridad. Walang code mula sa labas ang maaaring maglipat ng kontrol sa code sa isang compartment at mag-access ng mga bagay, maliban sa pamamagitan ng pag-access sa mga espesyal na tinukoy na entry point at paggamit ng mga pointer sa mga bagay na tahasang ipinapasa kapag tumatawag sa isa pang compartment. Ang integridad at pagiging kumpidensyal ay ginagarantiyahan para sa code at mga pandaigdigang bagay sa isang compartment.

Pinagmulan: opennet.ru

Magdagdag ng komento