Mozilla začína s implementáciou technológie izolácie knižníc RLBox

Výskumníci zo Stanfordskej univerzity, Kalifornskej univerzity v San Diegu a Texaskej univerzity v Austine vyvinuté nástrojov RLBox, ktorú možno použiť ako ďalšiu izolačnú vrstvu na blokovanie zraniteľností vo funkčných knižniciach. RLBox je zameraný na riešenie bezpečnostného problému nedôveryhodných knižníc tretích strán, ktoré nie sú pod kontrolou vývojárov, ale ktorých zraniteľnosť môže ohroziť hlavný projekt.

Spoločnosť Mozilla plány použite RLBox v Linuxových zostavách Firefoxu 74 a MacOS zostavách Firefoxu 75 na izoláciu spúšťania knižnice grafit, zodpovedný za vykresľovanie písiem. RLBox však nie je špecifický pre Firefox a môže byť použitý na izoláciu akýchkoľvek knižníc v ľubovoľných projektoch. Vývoj RLBox šírenie pod licenciou MIT. RLBox v súčasnosti podporuje platformy Linux a macOS, pričom podpora pre Windows sa očakáva neskôr.

mechanizmus Práca RLBox spočíva v kompilácii kódu C/C++ izolovanej knižnice do nízkoúrovňového stredného kódu WebAssembly, ktorý je potom navrhnutý ako modul WebAssembly, ktorého oprávnenia sú nastavené iba vo vzťahu k tomuto modulu (napríklad knižnica na spracovanie reťazcov nebude môcť otvoriť sieťový soket alebo súbor). Konverzia kódu C/C++ na WebAssembly sa vykonáva pomocou wasi-sdk.

Pre priame vykonávanie je modul WebAssembly skompilovaný do strojového kódu pomocou kompilátora Lucet a beží v samostatnom „nanoprocese“ izolovanom od zvyšku pamäte aplikácie. Kompilátor Lucet je založený na rovnakom kóde ako JIT engine žeriavový výťah, ktorý sa používa vo Firefoxe na spustenie WebAssembly.

Zostavený modul pracuje v oddelenej pamäťovej oblasti a nemá prístup k zvyšku adresného priestoru. Ak dôjde k zneužitiu zraniteľnosti v knižnici, útočník bude obmedzený a nebude môcť získať prístup k pamäťovým oblastiam hlavného procesu ani preniesť kontrolu mimo izolovaného prostredia.

Mozilla začína s implementáciou technológie izolácie knižníc RLBox

Vývojárom sa poskytujú informácie na vysokej úrovni API, ktorý umožňuje volať funkcie knižnice v režime izolácie. Obslužné programy WebAssembly nevyžadujú takmer žiadne dodatočné zdroje a interakcia s nimi nie je oveľa pomalšia ako volanie bežných funkcií (funkcie knižnice sa vykonávajú vo forme natívneho kódu a režijné náklady vznikajú iba pri kopírovaní a kontrole údajov počas interakcie s izolovaným prostredím). Izolované funkcie knižnice nie je možné volať priamo a je potrebné k nim pristupovať pomocou
vrstva invoke_sandbox_function().

Na druhej strane, ak je potrebné volať externé funkcie z knižnice, tieto funkcie musia byť explicitne definované pomocou metódy register_callback (štandardne RLBox poskytuje prístup k funkciám štandardná knižnica). Na zaistenie bezpečnosti pamäte nestačí izolácia spustenia kódu a musí tiež zabezpečiť, aby boli vrátené dátové toky validované.

Hodnoty generované v izolovanom prostredí sú označené ako nedôveryhodné a s obmedzeným použitím poškvrnené známky a na „čistenie“, ktoré vyžadujú overenie a kopírovanie do pamäte aplikácie.
Bez vyčistenia vedie pokus o použitie poškodených údajov v kontexte, ktorý vyžaduje pravidelné údaje (a naopak), k chybám, ktoré sa generujú v čase kompilácie. Argumenty malých funkcií, návratové hodnoty a štruktúry prechádzajú kopírovaním medzi pamäťou procesu a pamäťou karantény. Pri veľkých súboroch údajov je pamäť alokovaná v izolovanom prostredí a do hlavného procesu sa vráti priamy referenčný ukazovateľ karantény.

Zdroj: opennet.ru

Pridať komentár