Stanford Egyetem kutatói-ban University of California in san diego y la Texasi Egyetem Austinban Kialakultak egy sor eszköz, aminek a nevét adták "RLBox", hogy további szigetelési szintként használható a függvénykönyvtárak sebezhetőségének blokkolásához.
Az RLBox célja a harmadik féltől származó könyvtárak biztonsági problémájának megoldása nem megbízhatóak, amelyeket nem a fejlesztők irányítanak, hanem azok a biztonsági rések, amelyekben a fő projekt veszélybe kerülhet.
A Mozilla az RLBox használatát tervezi a Firefox 74-es verzióiban Linux és összeállításai macOS a Firefox 75-ben a Graphite könyvtár végrehajtásának elkülönítésére, amely felelős a források képviseletéért.
Ugyanakkor az RLBox nem Firefox-specifikus, és tetszőleges projektekben bármely könyvtár elkülönítésére használható.
Az RLBox-ról
A működési mechanizmus Az RLBox abból áll, hogy az elszigetelt könyvtárból származó C / C ++ kódot közbenső WebAssembly kódba állítja össze alacsony szintű, amelyet ezután WebAssembly modulként adnak ki, és amelynek jogosultsága csak ehhez a modulhoz van kötve (például a karakterláncok feldolgozására szolgáló könyvtár nem nyithat meg socketet vagy hálózati fájlt) C / C ++ kód konverzió a webes összeállítás a wasi-sdk használatával történik.
Közvetlen végrehajtáshoz, a WebAssembly modult gépkódba fordítják a Lucet fordító segítségével és az alkalmazás többi memóriájától elkülönülő "nanoprocesszorban" fut. A Lucet fordító ugyanazon a kódon alapszik, mint a Cranelift JIT motor, amelyet a Firefox használ a WebAssembly futtatásához.
Az összeszerelt modul külön memóriaterületen működik és nincs hozzáférése a címtér többi részéhez. A könyvtár sérülékenységének kihasználása esetén a támadó korlátozott lesz, és nem lesz képes hozzáférni a fő folyamat memóriaterületeihez, vagy átadni a vezérlést a homokozón kívül.
A fejlesztők számára biztosított egy magas szintű API, amely lehetővé teszi a könyvtárfunkciók izolált módban történő meghívását.
sok A WebAssembly vezérlők szinte nem igényelnek további erőforrásokat és a velük való interakció nem sokkal lassabb, mint a közönséges függvények meghívása (a könyvtárfunkciókat natív kód formájában hajtják végre, és a túlterhelés csak az adatok másolásakor és ellenőrzésénél jelentkezik a homokozóval való interakció során). .
Az elszigetelt könyvtár funkcióit nem lehet közvetlenül meghívni, és ezek eléréséhez a fóliát kell használni invoke_sandbox_function().
Viszont ha külső függvényeket kell meghívniuk a könyvtárból, ezeket a függvényeket kifejezetten meg kell határozni a register_callback módszerrel (alapértelmezés szerint az RLBox hozzáférést biztosít a szokásos könyvtárfunkciókhoz).
A memória biztonságos működése érdekében a kódfuttatás elkülönítése nem elég és meg kell adnia a visszaküldött adatfolyamok ellenőrzését.
Az elszigetelt környezetben létrehozott értékeket megbízhatatlannak, szennyezett címkékkel korlátozzák, és a "tisztításhoz" ellenőrizni és az alkalmazás memóriájába kell másolni.
Tisztítás nélkül a szennyezett adatok felhasználásának megkísérlése olyan körülmények között, amelyek rendszeres adatokat igényelnek (és fordítva), hibákat generálnak az összeállítás szakaszában.
A kis funkció argumentumokat, visszatérési értékeket és struktúrákat a folyamatmemória és a sandbox memória közötti másolással adják át. Nagy adathalmazok esetén a memóriát egy elszigetelt környezetben osztják ki, és egy közvetlen "homokozó referencia" mutató kerül vissza a fő folyamatba.
Az RLBox fejlesztéseket az MIT licenc alatt terjesztik. Az RLBox jelenleg támogatja a Linuxot és a macOS-t és várhatóan később kompatibilis lesz a Windows rendszerrel.
Ha többet szeretne megtudni erről az új technológiáról, amelyet a Mozilla a Firefoxban tervez bevezetni, konzultálhat a fejlesztésével és tesztelheti az API-t A következő linken.