A Stanford Egyetem, a San Diego-i Kaliforniai Egyetem és a texasi Austin Egyetem kutatói eszközkészlet , amely további elszigetelési szintként alkalmazható a funkciókönyvtárak sebezhetőségeinek blokkolására. Az RLBox célja a megbízhatatlan külső könyvtárak biztonsági problémájának megoldása, amelyek nincsenek a fejlesztők irányítása alatt, de sebezhetőségeik veszélybe sodorhatják a fő projektet.
A Mozilla vállalat az RLBox alkalmazása a Linux-összeállításokban a Firefox 74 és a macOS-összeállításokban a Firefox 75 számára a könyvtár végrehajtási elszigetelésére , amely a betűk megjelenítéséért felelős. Az RLBox nem specifikus a Firefox számára, és bármilyen könyvtár elszigetelésére használható tetszőleges projektekben. RLBox MIT licenc alatt. Jelenleg az RLBox támogatja a Linux és macOS platformokat, a Windows támogatása később várható.
az RLBox munkája a C/C++ kódnak az elszigetelt könyvtár alacsony szintű WebAssembly közbenső kódra való lefordítására korlátozódik, amelyet ezután WebAssembly-modulként formálnak meg, amelynek jogosultságait csak ehhez a modulhoz kötik (például egy karakterlánc-kezelő könyvtár nem tud hálózati socketet vagy fájlt megnyitni). A C/C++ kód WebAssembly-ra való átalakítása a .
segítségével történik. A WebAssembly modul közvetlen végrehajtásához a modul gépi kódra fordításához a fordítót használják, és a modul egy külön „nano-processzben” fut, amely el van szigetelve az alkalmazás többi memóriájától. A Lucet fordító ugyanarra a kódra épül, mint a JIT motor , amelyet a Firefox WebAssembly végrehajtásához alkalmaz.
A létrehozott modul külön memóriaterületen működik, és nincs hozzáférése a fő memória címtartományához. Ha egy könyvtárban sebezhetőséget kihasználva támadás történik, a támadó korlátozott lesz, és nem férhet hozzá a fő folyamat memória területeihez vagy nem adhat vezérlést a szigetelt környezeten kívül.
A fejlesztők számára magas szintű , amely lehetővé teszi a könyvtár funkcióinak hívását elszigetelt módban. A WebAssembly-kezeltetők szinte nem igényelnek további erőforrásokat, és velük való interakció nem sokkal lassabb, mint a normál funkciók hívása (a könyvtár funkcióit natív kódként hajtják végre, és a költségek csak az adatok átvitelének és ellenőrzésének folyamatában merülnek fel az elszigetelt környezettel való interakció során). Az elszigetelt könyvtár funkcióit nem lehet közvetlenül hívni, és hozzáférésükhöz
az invoke_sandbox_function() réteget kell alkalmazni.
Ha viszont a könyvtárból külső funkciókat kívánunk hívni, ezeket a funkciókat egyértelműen meg kell határozni a register_callback metódus segítségével (alapértelmezés szerint az RLBox hozzáférést biztosít a ). A memóriával való biztonságos munkához (memory safety) a kód végrehajtásának elszigetelése nem elegendő, és szükséges a visszatérő adatfolyamok ellenőrzése is.
Az elszigetelt környezetben létrehozott értékeket megbízhatatlannak címkézik, és korlátozzák a és „tiszta” adatokra van szükségük a és az alkalmazás memóriájába való átvitelhez.
Tisztítás nélkül a tainted adatok használatának megkísérlése egy olyan kontextusban, amely normál adatokat igényel (és fordítva), fordítási hibákhoz vezet. A kis függvényargumentumokat, visszatérési értékeket és struktúrákat másolással továbbítják a folyamat memóriája és az elszigetelt környezet memóriája között. Nagyobb adathalmaszok esetén a memóriát elszigetelt környezetben osztják ki, és az alapvető folyamat közvetlen „sandbox-reference” mutatót kap.
Forrás: opennet.ru
