Sinimulan ng Mozilla ang Pagpapatupad ng RLBox Library Isolation Technology

Mga mananaliksik mula sa Stanford University, University of California sa San Diego at University of Texas sa Austin umunlad mga kasangkapan RLBox, na maaaring gamitin bilang karagdagang isolation layer upang harangan ang mga kahinaan sa mga function library. Ang RLBox ay naglalayong lutasin ang problema sa seguridad ng hindi pinagkakatiwalaang mga aklatan ng third-party na hindi nasa ilalim ng kontrol ng mga developer, ngunit ang mga kahinaan ay maaaring makompromiso ang pangunahing proyekto.

Mozilla Company mga plano gumamit ng RLBox sa Linux build ng Firefox 74 at macOS build ng Firefox 75 para ihiwalay ang library execution grapayt, responsable sa pag-render ng mga font. Gayunpaman, ang RLBox ay hindi partikular sa Firefox at maaaring gamitin upang ihiwalay ang anumang mga aklatan sa mga arbitraryong proyekto. Mga Pag-unlad RLBox kumalat sa ilalim ng lisensya ng MIT. Kasalukuyang sinusuportahan ng RLBox ang mga platform ng Linux at macOS, na may inaasahang suporta sa Windows sa ibang pagkakataon.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ang gawain ng RLBox ay bumaba sa pag-compile ng C/C++ code ng isang nakahiwalay na library sa mababang antas na intermediate WebAssembly code, na pagkatapos ay idinisenyo bilang isang WebAssembly module, ang mga pahintulot nito ay nakatakda kaugnay lamang sa module na ito (halimbawa, isang library para sa pagproseso ng mga string ay hindi makakapagbukas ng network socket o file) . Ang pag-convert ng C/C++ code sa WebAssembly ay tapos na gamit wasi-sdk.

Para sa direktang pagpapatupad, ang WebAssembly module ay pinagsama-sama sa machine code gamit ang isang compiler Lucet at tumatakbo sa isang hiwalay na "nanoprocess" na nakahiwalay sa natitirang memorya ng application. Ang Lucet compiler ay batay sa parehong code bilang JIT engine crane lift, na ginagamit sa Firefox upang isagawa ang WebAssembly.

Ang naka-assemble na module ay gumagana sa isang hiwalay na lugar ng memorya at walang access sa natitirang espasyo ng address. Kung ang isang kahinaan sa library ay pinagsamantalahan, ang umaatake ay magiging limitado at hindi maa-access ang mga lugar ng memorya ng pangunahing proseso o ilipat ang kontrol sa labas ng nakahiwalay na kapaligiran.

Sinimulan ng Mozilla ang Pagpapatupad ng RLBox Library Isolation Technology

Ang mataas na antas ng impormasyon ay ibinigay para sa mga developer API, na nagbibigay-daan sa iyong tumawag sa mga function ng library sa isolation mode. Ang mga humahawak ng WebAssembly ay halos hindi nangangailangan ng karagdagang mga mapagkukunan at ang pakikipag-ugnayan sa kanila ay hindi mas mabagal kaysa sa pagtawag sa mga ordinaryong function (ang mga function ng library ay isinasagawa sa anyo ng katutubong code, at ang mga gastos sa overhead ay lumitaw lamang kapag kinopya at sinusuri ang data sa proseso ng pakikipag-ugnayan sa nakahiwalay kapaligiran). Ang mga nakahiwalay na function ng library ay hindi maaaring direktang tawagan at dapat na ma-access gamit
layer invoke_sandbox_function().

Sa turn, kung kinakailangan na tumawag sa mga panlabas na function mula sa library, ang mga function na ito ay dapat na malinaw na tinukoy gamit ang register_callback method (bilang default, ang RLBox ay nagbibigay ng access sa mga function karaniwang aklatan). Upang matiyak ang kaligtasan ng memorya, ang paghihiwalay ng pagpapatupad ng code ay hindi sapat at nangangailangan din ng pagsusuri sa mga ibinalik na stream ng data.

Ang mga halagang nabuo sa isang nakahiwalay na kapaligiran ay minarkahan bilang hindi mapagkakatiwalaan at limitadong paggamit may bahid na marka at para sa "paglilinis" kailangan nila pagpapatunay at pagkopya sa memorya ng application.
Nang walang paglilinis, ang pagtatangka na gumamit ng may bahid na data sa isang konteksto na nangangailangan ng regular na data (at vice versa) ay nagreresulta sa mga error na nabuo sa oras ng pag-compile. Ang mga argumento ng maliliit na function, mga return value, at mga istruktura ay ipinapasa sa pamamagitan ng pagkopya sa pagitan ng memorya ng proseso at memorya ng sandbox. Para sa malalaking set ng data, ang memorya ay inilalaan sa isang nakahiwalay na kapaligiran at isang direktang sandbox-reference pointer ay ibinalik sa pangunahing proseso.

Pinagmulan: opennet.ru

Magdagdag ng komento