Mozilla alustab RLBoxi raamatukogu eraldamise tehnoloogia juurutamist

Stanfordi ülikooli, San Diego California ülikooli ja Austini Texase ülikooli teadlased arenenud tööriistad RLBox, mida saab kasutada täiendava isolatsioonikihina funktsiooniteekide haavatavuste blokeerimiseks. RLBox on suunatud ebausaldusväärsete kolmandate osapoolte raamatukogude turvaprobleemide lahendamisele, mis ei ole arendajate kontrolli all, kuid mille haavatavused võivad põhiprojekti kahjustada.

Mozilla ettevõte plaanid kasutage RLBoxi Firefox 74 Linuxi järgus ja Firefox 75 macOS-i järgus, et isoleerida teegi täitmine Grafiit, vastutab fontide renderdamise eest. RLBox ei ole aga Firefoxi spetsiifiline ja seda saab kasutada suvaliste projektide teekide eraldamiseks. Arengud RLBox levima MIT litsentsi alusel. RLBox toetab praegu Linuxi ja macOS-i platvorme ning Windowsi tuge on oodata hiljem.

Mehhanism RLBoxi töö taandub eraldatud teegi C/C++ koodi kompileerimisele madala taseme vahepealseks WebAssembly koodiks, mis seejärel kujundatakse WebAssembly moodulina, mille õigused on seatud ainult selle mooduli (näiteks teegi) suhtes. stringide töötlemiseks ei saa võrgupesa ega faili avada) . C/C++ koodi teisendamine WebAssemblyks toimub kasutades wasi-sdk.

Otsese täitmise jaoks kompileeritakse WebAssembly moodul kompilaatori abil masinkoodiks Lucet ja töötab eraldi "nanoprotsessis", mis on eraldatud ülejäänud rakenduse mälust. Luceti kompilaator põhineb samal koodil nagu JIT mootor Kranelift, mida kasutatakse Firefoxis WebAssembly käivitamiseks.

Kokkupandud moodul töötab eraldi mälualal ja sellel puudub juurdepääs ülejäänud aadressiruumile. Kui teegi haavatavust kasutatakse ära, on ründaja piiratud ega pääse ligi põhiprotsessi mälupiirkondadele ega edasta juhtimist isoleeritud keskkonda väljapoole.

Mozilla alustab RLBoxi raamatukogu eraldamise tehnoloogia juurutamist

Arendajatele pakutakse kõrgetasemelist teavet API, mis võimaldab helistada teegi funktsioone isolatsioonirežiimis. WebAssembly töötlejad peaaegu ei vaja lisaressursse ja nendega suhtlemine pole palju aeglasem kui tavaliste funktsioonide kutsumine (teegi funktsioone täidetakse algkoodi kujul ja üldkulud tekivad ainult andmete kopeerimisel ja kontrollimisel isoleeritud keskkonnaga suhtlemisel). Eraldatud teegi funktsioone ei saa otse välja kutsuda ja neile tuleb juurde pääseda kasutades
kiht invoke_sandbox_function().

Kui aga on vaja teegist välja kutsuda väliseid funktsioone, siis tuleb need funktsioonid selgesõnaliselt defineerida kasutades register_callback meetodit (vaikimisi annab RLBox ligipääsu funktsioonidele standardne raamatukogu). Mälu ohutuse tagamiseks ei piisa koodi täitmise isoleerimisest ja see nõuab ka tagastatud andmevoogude kontrollimist.

Eraldatud keskkonnas loodud väärtused on märgitud ebausaldusväärseks ja piiratud kasutusega määrdunud jäljed ja "puhastamiseks" nad nõuavad kontrollimine ja kopeerimine rakenduse mällu.
Ilma puhastamiseta põhjustab rikutud andmete kasutamine kontekstis, mis nõuab regulaarseid andmeid (ja vastupidi), kompileerimise ajal vigu. Väikesed funktsiooniargumendid, tagastatavad väärtused ja struktuurid edastatakse protsessimälu ja liivakastimälu vahel kopeerimise teel. Suurte andmekogumite jaoks eraldatakse mälu isoleeritud keskkonnas ja otsene liivakasti viitekursor tagastatakse põhiprotsessile.

Allikas: opennet.ru

Lisa kommentaar