Mozilla započinje implementaciju tehnologije izolacije knjižnice RLBox
Istraživači sa Sveučilišta Stanford, Sveučilišta Kalifornija u San Diegu i Sveučilišta Texas u Austinu razvijena alata RLBox, koji se može koristiti kao dodatni izolacijski sloj za blokiranje ranjivosti u bibliotekama funkcija. RLBox je usmjeren na rješavanje sigurnosnih problema nepouzdanih biblioteka trećih strana koje nisu pod kontrolom programera, ali čije ranjivosti mogu ugroziti glavni projekt.
Tvrtka Mozilla planovi koristite RLBox u verzijama Linuxa Firefoxa 74 i verzijama macOS-a Firefoxa 75 za izolaciju izvršavanja biblioteke Grafit, odgovoran za iscrtavanje fontova. Međutim, RLBox nije specifičan za Firefox i može se koristiti za izolaciju bilo koje biblioteke u proizvoljnim projektima. Razvoj događaja RLBox širenje pod licencom MIT-a. RLBox trenutno podržava Linux i macOS platforme, dok se podrška za Windows očekuje kasnije.
mehanizam Rad RLBoxa svodi se na kompajliranje C/C++ koda izolirane biblioteke u WebAssembly kod srednje razine niske razine, koji je zatim dizajniran kao WebAssembly modul, čije su dozvole postavljene samo u odnosu na ovaj modul (na primjer, biblioteka za obradu nizova neće moći otvoriti mrežnu utičnicu ili datoteku) . Pretvaranje C/C++ koda u WebAssembly vrši se pomoću wasi-sdk.
Za izravno izvođenje, modul WebAssembly kompilira se u strojni kod pomoću prevoditelja Lucet i radi u zasebnom "nanoprocesu" izoliranom od ostatka memorije aplikacije. Kompajler Lucet temelji se na istom kodu kao JIT motor Dizalica, koji se koristi u Firefoxu za izvođenje WebAssemblyja.
Sastavljeni modul radi u zasebnom memorijskom području i nema pristup ostatku adresnog prostora. Ako se iskoristi ranjivost u knjižnici, napadač će biti ograničen i neće moći pristupiti memorijskim područjima glavnog procesa ili prenijeti kontrolu izvan izoliranog okruženja.
Informacije na visokoj razini pružaju se programerima API, koji vam omogućuje pozivanje funkcija knjižnice u izoliranom načinu rada. WebAssembly rukovatelji ne zahtijevaju gotovo nikakve dodatne resurse i interakcija s njima nije puno sporija od poziva običnih funkcija (funkcije knjižnice se izvršavaju u obliku izvornog koda, a režijski troškovi nastaju samo kod kopiranja i provjere podataka tijekom interakcije s izoliranim okruženjem). Izolirane funkcije knjižnice ne mogu se izravno pozvati i mora im se pristupiti pomoću
sloj invoke_sandbox_function().
Zauzvrat, ako je potrebno pozvati vanjske funkcije iz biblioteke, te funkcije moraju biti eksplicitno definirane pomoću metode register_callback (prema zadanim postavkama RLBox omogućuje pristup funkcijama standardna knjižnica). Kako bi se osigurala sigurnost memorije, izolacija izvršenja koda nije dovoljna i također zahtijeva provjeru vraćenih tokova podataka.
Vrijednosti generirane u izoliranom okruženju označene su kao nepouzdane i ograničene upotrebe zaražene oznake a za "čišćenje" zahtijevaju verifikacija i kopiranje u memoriju aplikacije.
Bez čišćenja, pokušaj korištenja zaraženih podataka u kontekstu koji zahtijeva regularne podatke (i obrnuto) rezultira generiranjem pogrešaka tijekom kompilacije. Mali argumenti funkcije, povratne vrijednosti i strukture prosljeđuju se kopiranjem između memorije procesa i memorije sandboxa. Za velike skupove podataka memorija se dodjeljuje u izoliranom okruženju, a izravni referentni pokazivač sandboxa vraća se u glavni proces.