Mozilla zahájila implementaci technologie izolace knihoven RLBox

Výzkumníci ze Stanfordské univerzity, Kalifornské univerzity v San Diegu a Texaské univerzity v Austinu vyvinuli nástroje RLBox, 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 plánuje použít RLBox v linuxových verzích Firefoxu 74 a macOS verzích Firefoxu 75 pro izolaci provádění knihovny Graphite, 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. Výsledky RLBox se distribují pod licencí MIT. V současnosti RLBox podporuje práci na platformách Linux a macOS, podpora Windows se očekává později.

Mechanismus 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í wasi-sdk.

Pro přímé provádění se modul WebAssembly kompiluje do strojového kódu pomocí kompilátoru Lucet 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 Cranelift, 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í.

Mozilla zahájila implementaci technologie izolace knihoven RLBox

Vývojářům je nabízena vysoká úroveň API, 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 standardní knihovny). 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í tainted-štítků a pro 'vyčištění' vyžadují verifikaci 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster