Mozilla počinje implementaciju RLBox tehnologije izolacije biblioteke
Istraživači sa Univerziteta Stanford, Univerziteta Kalifornije u San Dijegu i Univerziteta Teksasa u Austinu su se razvile alata RLBox, koji se može koristiti kao dodatni izolacijski sloj za blokiranje ranjivosti u bibliotekama funkcija. RLBox je usmjeren na rješavanje sigurnosnog problema nepouzdanih biblioteka trećih strana koje nisu pod kontrolom programera, ali čije ranjivosti mogu ugroziti glavni projekat.
Mozilla Company planovi koristite RLBox u Linux verzijama Firefoxa 74 i macOS verzijama Firefoxa 75 za izolaciju izvršavanja biblioteke Grafit, odgovoran za prikazivanje fontova. Međutim, RLBox nije specifičan za Firefox i može se koristiti za izolaciju bilo koje biblioteke u proizvoljnim projektima. Razvoj RLBox širenje pod MIT licencom. RLBox trenutno podržava Linux i macOS platforme, a podrška za Windows se očekuje kasnije.
Mehanizam RLBoxov rad se svodi na kompajliranje C/C++ koda izolirane biblioteke u srednji WebAssembly kod niskog nivoa, koji se zatim dizajnira kao WebAssembly modul, čije se dozvole postavljaju samo u odnosu na ovaj modul (na primjer, biblioteka za obradu stringova neće moći otvoriti mrežnu utičnicu ili datoteku) . Pretvaranje C/C++ koda u WebAssembly se vrši pomoću wasi-sdk.
Za direktno izvršenje, WebAssembly modul se kompajlira u mašinski kod pomoću kompajlera Lucet i radi u zasebnom "nanoprocesu" izoliranom od ostatka memorije aplikacije. Lucet kompajler je baziran na istom kodu kao i JIT motor Dizalica, koji se koristi u Firefoxu za izvršavanje WebAssembly.
Sastavljeni modul radi u posebnom memorijskom području i nema pristup ostatku adresnog prostora. Ako se iskoristi ranjivost u biblioteci, napadač će biti ograničen i neće moći pristupiti memorijskim područjima glavnog procesa ili prenijeti kontrolu izvan izolovanog okruženja.
Za programere su date informacije visokog nivoa API, što vam omogućava da pozovete funkcije biblioteke u izolacionom režimu. WebAssembly rukovatelji ne zahtijevaju gotovo nikakve dodatne resurse i interakcija s njima nije mnogo sporija od pozivanja običnih funkcija (bibliotečke funkcije se izvršavaju u obliku izvornog koda, a dodatni troškovi nastaju samo prilikom kopiranja i provjere podataka tokom interakcije sa izolovanim okruženjem). Izolirane bibliotečke funkcije ne mogu se pozvati direktno i mora im se pristupiti pomoću
sloj invoke_sandbox_function().
Zauzvrat, ako je potrebno pozvati eksterne funkcije iz biblioteke, ove funkcije moraju biti eksplicitno definirane pomoću metode register_callback (po defaultu, RLBox omogućava pristup funkcijama standardna biblioteka). Da bi se osigurala sigurnost memorije, izolacija izvršavanja koda nije dovoljna i zahtijeva i provjeru vraćenih tokova podataka.
Vrijednosti generirane u izoliranom okruženju označene su kao nepouzdane i ograničene upotrebe ukaljani tragovi a za “čišćenje” im je potrebno verifikacija i kopiranje u memoriju aplikacije.
Bez čišćenja, pokušaj korištenja zaraženih podataka u kontekstu koji zahtijeva redovne podatke (i obrnuto) rezultira greškama koje se generiraju u vrijeme kompajliranja. Argumenti malih funkcija, povratne vrijednosti i strukture prosljeđuju se kopiranjem između memorije procesa i memorije sandboxa. Za velike skupove podataka, memorija se dodeljuje u izolovanom okruženju i direktni referentni pokazivač sandbox-a se vraća glavnom procesu.