A Stanford Egyetem, a San Diego-i Kaliforniai Egyetem és az austini Texasi Egyetem kutatói eszközöket , 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 engedélyezd az RLBox-ot Linux- Firefox 74 verziók és macOS-A Firefox 75-ös verziói elkülönítik a könyvtár végrehajtását , 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. RLBox MIT licenc alatt. Az RLBox jelenleg a következő platformokat támogatja: Linux и macOS, támogatás Windows várhatóan később.
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 .
A közvetlen végrehajtáshoz a WebAssembly modult egy fordító segítségével gépi kódba fordítják é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 , 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.
Magas szintű információk állnak rendelkezésre a fejlesztők számára , 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 ). 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 a „takarításhoz” pedig megkövetelik é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
