„Mozilla“ pradeda diegti RLBox bibliotekos izoliavimo technologiją

Tyrėjai iš Stanfordo universiteto, Kalifornijos universiteto San Diege ir Teksaso universiteto Ostine išvystyta įrankiai RLBox, kuris gali būti naudojamas kaip papildomas izoliacinis sluoksnis blokuojant funkcijų bibliotekų pažeidžiamumą. RLBox yra skirtas išspręsti nepatikimų trečiųjų šalių bibliotekų, kurių kūrėjai nekontroliuoja, tačiau kurių pažeidžiamumas gali pakenkti pagrindiniam projektui, saugumo problemą.

„Mozilla“ kompanija planus naudokite RLBox „Firefox 74“ Linux versijose ir „Firefox 75“ „MacOS“ versijose, kad atskirtumėte bibliotekos vykdymą grafitas, atsakingas už šriftų atvaizdavimą. Tačiau RLBox nėra būdingas „Firefox“ ir gali būti naudojamas atskirti bet kokias bibliotekas savavališkuose projektuose. Vystymai RLBox skleisti pagal MIT licenciją. RLBox šiuo metu palaiko Linux ir MacOS platformas, o Windows palaikymo tikimasi vėliau.

Mechanizmas RLBox darbas susijęs su izoliuotos bibliotekos C/C++ kodo kompiliavimu į žemo lygio tarpinį WebAssembly kodą, kuris vėliau suprojektuojamas kaip WebAssembly modulis, kurio leidimai nustatomi tik šiam moduliui (pavyzdžiui, bibliotekai). Norėdami apdoroti eilutes, negalėsite atidaryti tinklo lizdo arba failo). C/C++ kodo konvertavimas į WebAssembly atliekamas naudojant wasi-sdk.

Tiesioginiam vykdymui WebAssembly modulis sukompiliuojamas į mašinos kodą naudojant kompiliatorių Lucet ir veikia atskirame „nanoprocese“, atskirtame nuo likusios programos atminties. „Lucet“ kompiliatorius yra pagrįstas tuo pačiu kodu kaip ir JIT variklis „Cranelift“, naudojamas „Firefox“ vykdyti WebAssembly.

Surinktas modulis veikia atskiroje atminties srityje ir neturi prieigos prie likusios adresų erdvės. Jei bus išnaudojamas bibliotekos pažeidžiamumas, užpuolikas bus apribotas ir negalės pasiekti pagrindinio proceso atminties sričių arba perduoti valdymo už izoliuotos aplinkos.

„Mozilla“ pradeda diegti RLBox bibliotekos izoliavimo technologiją

Kūrėjams teikiama aukšto lygio informacija API, kuri leidžia iškviesti bibliotekos funkcijas izoliacijos režimu. WebAssembly tvarkyklės beveik nereikalauja papildomų išteklių, o sąveika su jais nėra daug lėtesnė nei įprastų funkcijų iškvietimas (bibliotekos funkcijos vykdomos vietinio kodo forma, o pridėtinės išlaidos atsiranda tik kopijuojant ir tikrinant duomenis sąveikaujant su izoliuotu aplinka). Izoliuotos bibliotekos funkcijos negali būti iškviečiamos tiesiogiai ir turi būti pasiekiamos naudojant
sluoksnis invoke_sandbox_function().

Savo ruožtu, jei reikia iškviesti išorines funkcijas iš bibliotekos, šios funkcijos turi būti aiškiai apibrėžtos naudojant registr_callback metodą (pagal numatytuosius nustatymus RLBox suteikia prieigą prie funkcijų standartinė biblioteka). Atminties saugumui užtikrinti neužtenka kodo vykdymo izoliavimo, reikia patikrinti ir grąžinamus duomenų srautus.

Vertės, sugeneruotos izoliuotoje aplinkoje, yra pažymėtos kaip nepatikimos ir ribotai naudojamos suteptų žymių o „valymui“ jiems reikia patikrinimas ir kopijuoti į programos atmintį.
Neišvalius bandymo naudoti sugadintus duomenis kontekste, kuriame reikia reguliarių duomenų (ir atvirkščiai), kompiliavimo metu atsiranda klaidų. Maži funkcijų argumentai, grąžinamos reikšmės ir struktūros perduodamos kopijuojant iš proceso atminties ir smėlio dėžės atminties. Dideliems duomenų rinkiniams atmintis paskirstoma izoliuotoje aplinkoje, o tiesioginė smėlio dėžės nuoroda grąžinama į pagrindinį procesą.

Šaltinis: opennet.ru

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