Výzkumníci ze Stanfordské univerzity, Kalifornské univerzity v San Diegu a Texaské univerzity v Austinu nástroje , který může sloužit jako další úroveň izolace pro blokování zranitelností v funkčních knihovnách. RLBox je zaměřen na řešení problému s bezpečností nedůvěryhodných třetích stran knihoven, které nemá pod kontrolou vývojář, ale jejich zranitelnosti mohou ohrozit hlavní projekt.
Společnost Mozilla použít RLBox v linuxových verzích Firefoxu 74 a macOS verzích Firefoxu 75 pro izolaci provádění knihovny , která se stará o vykreslování písem. RLBox není specifický pro Firefox a může být použit pro izolaci jakýchkoli knihoven v libovolných projektech. RLBox pod licencí MIT. V současnosti RLBox podporuje práci na platformách Linux a macOS, podpora Windows se očekává později.
funkce RLBox spočívá v kompilaci kódu C/C++ z isolované knihovny do nízkoúrovňového mezikódu WebAssembly, který je následně zabaleno jako WebAssembly modul, jehož oprávnění jsou nastavena pouze na tento modul (například knihovna pro zpracování řetězců nebude moci otevřít síťový socket nebo soubor). Převod kódu C/C++ na WebAssembly se provádí pomocí .
Pro přímé provádění se modul WebAssembly kompiluje do strojového kódu pomocí kompilátoru a je vykonáván v samostatném „nanoprocesu“, který je izolován od zbývající paměti aplikace. Kompilátor Lucet je založen na stejném kódu jako JIT engine , používaný v Firefoxu pro provádění WebAssembly.
Sestavený modul pracuje v oddělené oblasti paměti a nemá přístup k ostatnímu adresnímu prostoru. V případě zneužití zranitelnosti v knihovně bude útočník omezen a nebude mít možnost přistupovat k oblastem paměti hlavního procesu nebo předat řízení mimo izolované prostředí.
Vývojářům je nabízena vysoká úroveň , který umožňuje volání funkcí knihovny v izolovaném režimu. WebAssembly zpracovatele téměř nevyžadují další zdroje a interakce s nimi není mnohem pomalejší než volání běžných funkcí (funkce knihovny se provádějí ve formě nativního kódu a náklady vznikají pouze při kopírování a kontrole dat během interakce s izolovaným prostředím). Funkce izolované knihovny nelze volat přímo a pro jejich vyvolání je nutné použít
vrstvu invoke_sandbox_function().
Na oplátku, pokud je z knihovny potřeba volat externí funkce, tyto funkce musí být explicitně definovány pomocí metody register_callback (ve výchozím nastavení RLBox poskytuje přístup k funkcím ). Pro zajištění bezpečné práce s pamětí (memory safety) izolace provádění kódu nestačí a je také nutné zajistit kontrolu vracených datových toků.
Hodnoty vytvořené v izolovaném prostředí jsou označovány jako nedůvěryhodné, jsou omezeny pomocí a pro 'vyčištění' vyžadují a kopírování do paměti aplikace.
Bez vyčištění, pokus o použití tainted-dat v kontextu, který vyžaduje běžná data (a naopak) vede k chybám během kompilace. Malé argumenty funkcí, vracené hodnoty a struktury se přenášejí kopírováním mezi pamětí procesu a pamětí izolovaného prostředí. Pro velké množství dat je paměť alokována v izolovaném prostředí a hlavnímu procesu se vrací přímý ukazatel 'sandbox-reference'.
Zdroj: opennet.ru
