Mozilla zahajuje implementaci technologie izolace knihoven RLBox

Výzkumníci ze Stanfordské univerzity, Kalifornské univerzity v San Diegu a Texaské univerzity v Austinu se vyvinuly nástroje RLBox, kterou lze použít jako další izolační vrstvu k blokování zranitelností ve funkčních knihovnách. RLBox je zaměřen na řešení bezpečnostního problému nedůvěryhodných knihoven třetích stran, které nejsou pod kontrolou vývojářů, ale jejichž zranitelnost může ohrozit hlavní projekt.

Společnost Mozilla plány použijte RLBox v Linuxových sestaveních Firefoxu 74 a MacOS sestaveních Firefoxu 75 k izolaci spouštění knihoven Grafit, zodpovědný za vykreslování písem. RLBox však není specifický pro Firefox a lze jej použít k izolaci libovolných knihoven v libovolných projektech. Vývoj RLBox šíření pod licencí MIT. RLBox aktuálně podporuje platformy Linux a macOS, podpora Windows se očekává později.

Механизм Práce RLBox spočívá v kompilaci kódu C/C++ izolované knihovny do nízkoúrovňového středně pokročilého kódu WebAssembly, který je následně navržen jako modul WebAssembly, jehož oprávnění jsou nastavena pouze ve vztahu k tomuto modulu (např. pro zpracování řetězců nebude možné otevřít síťový soket nebo soubor). Převod kódu C/C++ na WebAssembly se provádí pomocí wasi-sdk.

Pro přímé spuštění je modul WebAssembly zkompilován do strojového kódu pomocí kompilátoru Lucet a běží v samostatném „nanoprocesu“ izolovaném od zbytku paměti aplikace. Kompilátor Lucet je založen na stejném kódu jako JIT engine Jeřábový výtah, který se používá ve Firefoxu ke spuštění WebAssembly.

Sestavený modul pracuje v oddělené oblasti paměti a nemá přístup ke zbytku adresního prostoru. V případě zneužití zranitelnosti v knihovně bude útočník omezen a nebude moci získat přístup k paměťovým oblastem hlavního procesu ani přenést řízení mimo izolované prostředí.

Mozilla zahajuje implementaci technologie izolace knihoven RLBox

Vývojářům jsou poskytovány informace na vysoké úrovni API, který umožňuje volat funkce knihovny v režimu izolace. Obsluhy WebAssembly nevyžadují téměř žádné další zdroje a interakce s nimi není o mnoho pomalejší než volání běžných funkcí (funkce knihovny jsou vykonávány ve formě nativního kódu a režijní náklady vznikají pouze při kopírování a kontrole dat při interakci s izolovaným prostředím). Izolované funkce knihovny nelze volat přímo a je nutné k nim přistupovat pomocí
vrstva invoke_sandbox_function().

Pokud je naopak nutné volat externí funkce z knihovny, musí být tyto funkce explicitně definovány pomocí metody register_callback (standardně RLBox poskytuje přístup k funkcím standardní knihovna). K zajištění bezpečnosti paměti nestačí izolace provádění kódu a vyžaduje také kontrolu vrácených datových toků.

Hodnoty generované v izolovaném prostředí jsou označeny jako nedůvěryhodné a s omezeným použitím poskvrněné značky a pro „úklid“ potřebují ověření a kopírování do paměti aplikace.
Bez vyčištění vede pokus o použití poškozených dat v kontextu, který vyžaduje pravidelná data (a naopak), k chybám, které se generují v době kompilace. Argumenty malých funkcí, návratové hodnoty a struktury jsou předávány kopírováním mezi pamětí procesu a pamětí karantény. U velkých souborů dat je paměť alokována v izolovaném prostředí a hlavnímu procesu je vrácen přímý referenční ukazatel karantény.

Zdroj: opennet.ru

Přidat komentář