Néhány napja A Google bejelentette a Sandboxed API projekt megnyitásátHogy lehetővé teszi a homokozó létrehozásának folyamatát tetszőleges könyvtárak izolált futtatásához C és C ++ nyelven.
A kód elkülönítése a könyvtárakból lehetővé teszi a könyvtárak által biztosított fogantyúk elleni lehetséges védekezés elleni védelmet, további akadályt állítva fel arra az esetre, ha a kódban vannak olyan sérülékenységek, amelyek kihasználhatók a könyvtárba belépő külső adatokkal végzett manipulációk révén. A kód az Apache 2.0 licenc alatt van megnyitva.
Az elszigeteltségvagy a Sandbox2 futásidején belül történik, amelyben a névtereket, a csoportokat és a seccomp-bpf-t használják.
A külön folyamatban futó homokozóba szállított kód, amelyhez hozzáférést biztosít a rendszerhívásokhoz és az erőforrásokhoz, valamint a fájlok és a hálózati kapcsolatok korlátozottak.
A folyamatok csak az olyan rendszerek képességeihez férnek hozzá, amelyek közvetlenül szükségesek az elszigetelt kód végrehajtásához.
A Sandbox2 meghatározza a folyamat futtatásához szükséges összetevőketvagy alkalmazza az elkülönítési szabályokat és támogassa a későbbi végrehajtást.
Homokozó2 a Sandbox API-tól külön használható nemcsak könyvtárak, hanem tetszőleges folyamatok elkülönítésére is.
A fokozott védelem mellett a kód különálló folyamatokban történő megszüntetésének pozitív pontja a könyvtár és a CPU memóriafogyasztásának korlátjainak külön szabályozásának lehetősége, valamint a hibák elleni védelem: a könyvtár nem okozza az egész alkalmazás összeomlását.
A Sandboxed API-ról
A Sandboxed API egy bővítmény a Sandbox2 számára amely leegyszerűsíti a meglévő könyvtárak elszigetelt módban történő futtatását.
API sandboxing köztes szoftveres felületet biztosít, amely lehetővé teszi a könyvtár kódjának futtatását sandbox környezetbenvalamint a könyvtár hívásának megszervezése homokozó környezetben, valamint a könyvtár eredményeinek a fő programba juttatásának biztosítása.
Se az izolált könyvtárhoz egy speciális RPC-n keresztül jut el a ProtoBuffs protokoll alapján.
A a könyvtár fejlesztőknek számos lehetőséget kínálnak, amelyek hozzáférést biztosítanak a változókhoz, az alapalkalmazástól elszigetelt fájlleírók, pufferek és könyvtári funkciók, beleértve az automatizált és vezérelt memóriaszinkronizálási eszközöket tömbök és struktúrák megosztására.
Amikor egy ilyen adatot elemző szoftverkönyvtár elég összetett, akkor bizonyos típusú biztonsági rések áldozatává válhat: memóriasérülési hibák vagy az elemzési logikával kapcsolatos más típusú problémák (például útvonal-átjárási problémák).). Ezeknek a biztonsági réseknek komoly biztonsági következményei lehetnek.
Ezen túlmenően, API biztosított az elszigetelt folyamatok működésének figyelemmel kísérésére és meghibásodások esetén újraindítására.
Az elkülönített könyvtár esetében az elkülönített függvények kommentárkódja automatikusan generálódik a Bazel összeszerelő rendszer és a program interfész (SAPI) számára az alap- és az elkülönített folyamatok közötti interakcióhoz.
A fejlesztőnek létre kell hoznia egy fejlécfájlt is, amely tartalmazza az összes engedélyezett rendszerhívást és műveletet meghatározó elszigetelési szabályokat (olvasás, írás, fájlok megnyitása, hozzáférés az időhöz, a jelkezelők telepítésének képessége, a memória kiosztásának támogatása malloc-on keresztül stb.).
A fájlokat és könyvtárakat, amelyekhez a könyvtárnak hozzáféréssel kell rendelkezniük, külön határozzuk meg.
Telepítés
Jelenleg a projekt csak Linuxra érhető el, de a jövőben azt ígérik, hogy támogatást nyújtanak a macOS és BSD rendszerekhez, hosszú távon pedig a Windowshoz. Igen a sandboxos api telepítéséhez kövesse a megadott utasításokat ebben a linkben.
A tervek közül azt is megjegyzik a könyvtárak elkülönítésének képessége a C és C ++ nyelvektől eltérő nyelveken, további futásidejű támogatás az elkülönítéshez (pl. hardveres virtualizáción alapul) és a CMake és más szerelő rendszerek használatának képessége (a támogatás most a Bazel build rendszerre korlátozódik).
forrás: https://security.googleblog.com