A Mozilla megkezdi az RLBox Library Isolation Technology bevezetését

A Stanford Egyetem, a San Diego-i Kaliforniai Egyetem és az austini Texasi Egyetem kutatói fejlett eszközöket RLBox, amely további izolációs rétegként használható a függvénykönyvtárak sebezhetőségeinek blokkolására. Az RLBox célja a nem megbízható, harmadik féltől származó könyvtárak biztonsági problémájának megoldása, amelyek nincsenek a fejlesztők ellenőrzése alatt, de amelyek sebezhetősége veszélyeztetheti a fő projektet.

Mozilla Company terveket használja az RLBoxot a Firefox 74 Linux és a Firefox 75 macOS buildjeiben a könyvtár végrehajtásának elkülönítésére Grafit, felelős a betűtípusok megjelenítéséért. Az RLBox azonban nem kifejezetten a Firefoxra vonatkozik, és tetszőleges projektekben használható könyvtárak elkülönítésére. Fejlesztések RLBox terjedés MIT licenc alatt. Az RLBox jelenleg Linux és macOS platformokat támogat, a Windows-támogatás pedig később várható.

Механизм Az RLBox munkája egy izolált könyvtár C/C++ kódjának alacsony szintű köztes WebAssembly kódba történő fordításában áll, amelyet aztán WebAssembly modulként terveznek meg, amelynek engedélyei csak ehhez a modulhoz (például egy könyvtárhoz) vannak beállítva. A karakterláncok feldolgozásához nem lesz képes megnyitni a hálózati socketet vagy fájlt). A C/C++ kód WebAssembly-re konvertálása a segítségével történik wasi-sdk.

A közvetlen végrehajtáshoz a WebAssembly modult egy fordító segítségével gépi kódba fordítják Lucet és az alkalmazás többi memóriájától elkülönített külön "nanofolyamatban" fut. A Lucet fordító ugyanazon a kódon alapul, mint a JIT motor Darufelvonó, Firefoxban a WebAssembly végrehajtására használják.

Az összeszerelt modul külön memóriaterületen működik, és nem fér hozzá a címtér többi részéhez. Ha a könyvtár egy biztonsági rését kihasználják, a támadó korlátozott lesz, és nem tud hozzáférni a fő folyamat memóriaterületeihez, és nem tudja átvinni az irányítást az elszigetelt környezeten kívülre.

A Mozilla megkezdi az RLBox Library Isolation Technology bevezetését

Magas szintű információk állnak rendelkezésre a fejlesztők számára API, amely lehetővé teszi könyvtári funkciók elkülönített módban történő meghívását. A WebAssembly kezelők szinte semmilyen további erőforrást nem igényelnek, és a velük való interakció nem sokkal lassabb, mint a közönséges függvények meghívása (a könyvtári funkciók natív kód formájában futnak, és az általános költségek csak az adatok másolásakor és ellenőrzésekor merülnek fel az elszigetelt környezettel való interakció során). Az elkülönített könyvtári függvények nem hívhatók meg közvetlenül, és a használatával kell elérni őket
réteg invoke_sandbox_function().

Ha viszont külső függvényeket kell hívni a könyvtárból, akkor ezeket a függvényeket kifejezetten meg kell határozni a register_callback metódussal (alapértelmezés szerint az RLBox hozzáférést biztosít a függvényekhez szabványos könyvtár). A memória biztonsága érdekében a kódvégrehajtás elkülönítése nem elegendő, hanem a visszaküldött adatfolyamok ellenőrzését is szükségessé teszi.

Az elszigetelt környezetben generált értékek megbízhatatlanokként vannak megjelölve és korlátozottan használhatók szennyezett nyomok a „takarításhoz” pedig megkövetelik igazolás és másolás az alkalmazás memóriájába.
Tisztítás nélkül a szennyezett adatok olyan környezetben történő felhasználásának kísérlete, amely rendszeres adatokat igényel (és fordítva), a fordítás során hibák keletkeznek. A kis függvényargumentumok, visszatérési értékek és struktúrák a folyamatmemória és a sandbox memória közötti másoláson keresztül kerülnek átadásra. Nagy adathalmazok esetén a memória elkülönített környezetben kerül lefoglalásra, és egy közvetlen sandbox-referencia mutató kerül vissza a fő folyamathoz.

Forrás: opennet.ru

Hozzászólás