Sandboxozás
A Sandbox egy olyan biztonsági minta, amely lehetővé teszi, hogy böngészője bármilyen webhelyről JavaScriptet futtasson, telefonja bármely fejlesztőtől származó alkalmazásokat, laptopja pedig e-mail mellékletek megnyitását – mindezt anélkül, hogy ezek a programok képesek lennének olvasni a bankszámlafájlt. Ez az a technológiai réteg, amely a nem megbízható kódot sebezhetőségből funkcióvá változtatta.
A cikk teljes szövege alább olvasható angol nyelven.
Sandboxing a kód futtatásának gyakorlata egy korlátozott környezetben, amely megakadályozza, hogy a határain kívüli erőforrásokhoz férhessen hozzá. A sandbox korlátozza, hogy milyen fájlokat olvashat, milyen hálózati kapcsolatokat létesíthet, milyen más folyamatokkal kommunikálhat, és milyen rendszerhívásokat hívhat meg. Ha a kód rosszindulatúnak vagy hibásnak bizonyul, a kárt meg kell őrizni.
Miért számít a homokozó?
A modern számítástechnika a futó kódon múlik, amelyben nem bízunk teljesen:
- JavaScript bármely webhelyről, amelyet a böngésző meglátogat XPLZ1 ellenőrzött)
- Böngészőbővítmények, IDE-bővítmények, függőségek a kódban
- Makrók a dokumentumokban, az e-mailekhez csatolt szkriptek
- Konténer-munkaterhelések a felhő infrastruktúrájában
Ezek a homokozók támadásaival minden várakozás nélkülözhetetlen lenne történjen meg. A homokozó az, ami lehetővé teszi a modell működését.
Hogyan épülnek fel a homokozók
A megvalósítási technikák, rétegzett:
- Folyamat elkülönítése. A modern böngészőben minden lap külön operációs rendszer-folyamat. A böngésző kernel dönti el, hogy a folyamat mit tehet.
- seccomp-bpf Linuxon – kernel által kényszerített szűrő, amelyen a folyamatok rendszerhívásokat hajthatnak végre. A sandbox deklarálja a szükséges rendszerhívásokat (olvasás, írás, mmap stb.), a kernel pedig minden mást elutasít.
- Névterek és képességek Linuxon – a fájlrendszer, folyamatok, hálózat és így tovább elszigetelt nézetei. A tárolók ezekből a primitívekből épülnek fel.
- App Sandbox macOS/iOS rendszeren – deklaratív jogosultságok, amelyek leírják, hogy az alkalmazásnak mely képességekre van szüksége (kamera-elérés, hálózat, meghatározott útvonalak). A jogosultságokkal nem rendelkező alkalmazások nem férhetnek hozzá ezekhez a funkciókhoz.
- AppContainer / Windows Sandbox – a Microsoft egyenértékű elkülönítési modellje.
- Site Isolation a Chrome-ban és a Firefox – eredetenként különálló folyamatok, amelyek megakadályozzák, hogy egy másik webhely explo-memóriája beolvassa egy másik webhely kerneljét. talált.
Böngésző sandboxok részleteiben
A böngésző a számítástechnika legnyilvánosabb, legtöbbet támadott homokozója. A böngésző kernel megbízható folyamatként fut. Minden megjelenítő folyamat – laponként egy vagy több – nem megbízható folyamatként fut, minimális képességekkel. A renderer képes:
- memóriát lefoglalni
- kommunikálni a böngésző kernellel IPC-n keresztül nagyon specifikus műveletekhez.
- Render grafikus pufferben
- JavaScript és WebAssembly futtatása. XPLZ6 nem tud:
- Fájlok megnyitása a sandbox könyvtárán kívül
- Tetszőleges hálózati célokkal beszélhet (a böngésző kernel hozza létre ezeket a kapcsolatokat)
- Spawn más folyamatok
- Olvassa el a többi folyamatot 10 fizetős memória8PLXPLZ7 milliós bug jutalmak kifejezetten a sandbox-menekülési sebezhetőségekért. A Chrome legjövedelmezőbb egyszeri jutalma (több mint 200 000 dollár) egy teljes láncra vonatkozik, amely elkerüli a homokozót.
Mobile app sandboxing
iOS és Android a sandboxot a logikai szélsőségébe viszi: minden alkalmazás saját UID-jén fut, saját szűk fájlrendszer-csatornákkal látja, és csak az IPC-n keresztül tudnak kommunikálni az operációs rendszerekkel. (Intents Androidon, URL-sémák és AppExtensions iOS-en). Az operációs rendszer felkéri a felhasználót a képesség-stílusú engedélyekre (kamera, mikrofon, névjegyek) futás közben. Az eredmény: a telefonon lévő rosszindulatú programok sokkal szorosabban vannak elhelyezve, mint az asztali számítógépeken.
WebAssembly és az új sandbox
WebAssembly a kezdetektől fogva úgy lett kialakítva, hogy a sandbox első osztályú tulajdonság. A WASM modulnak nincs saját rendszerhívása; mindent a gazdagép környezetnek kell biztosítania (WASI a rendszerhívás típusú API-khoz, webes API-k böngészőkben). Ez teszi a WASM-et erős jelöltté a nem megbízható beépülő modulok megbízható alkalmazásokon belüli futtatására – egy olyan használati eset, amely korábban nagy folyamatszigetelést igényelt. Az olyan eszközök, mint a wasmtime és a wasmer használják ezt a modellt.
Amikor a sandboxok meghiúsulnak
A homokozó menekülési sebezhetőségei valósak és értékesek. Az ismétlődő hibamódok:
- Bugok a kernel felületén. Még a seccomp által korlátozott folyamatok is kihasználhatják néha az engedélyezett rendszerhívásokon keresztül elérhető kernelhibákat.
- IPC-hibák. A sandbox által a közvetítői folyamattal való kommunikációra használt interfészek. csatornák. Spectre és Meltdown kimutatta, hogy a CPU-optimalizálások során adatok szivároghatnak át a folyamathatárokon. A modern homokozók enyhítik ezt, de a mögöttes probléma továbbra is hardverszintű probléma.
- Sandbox-profilhibák. A kezelők időnként meglazítják a homokozó profilokat, hogy a szoftver működjön, véletlenül lyukakat nyitnak ki.
A homokdoboz használata kiküszöböli a védelmét, növeli a valószínűséget. A mélyreható védelem egyesíti a homokozót más intézkedésekkel (memóriabiztos nyelvek, fertőtlenítők, támadási felület csökkentése).
Mit jelent a sandbox az Ön számára
A végfelhasználók számára a sandboxing többnyire láthatatlan. A gyakorlati következtetés: tartsa naprakészen a böngészőket és az operációs rendszereket, mivel a sandbox escape a legmagasabb prioritású biztonsági javítások. Kerülje a sandbox-funkciók letiltását (egyes Linux-felhasználók kikapcsolják a seccomp-profilokat, néhány gyakorlott felhasználó letiltja a Chrome sandbox-jelzőit), hacsak nem érti a következményeket. A böngészők alapértelmezés szerint keményítettek; az alapértelmezett szinte minden felhasználó számára megfelelő.
Gyakran ismételt kérdések
- A sandbox ugyanaz, mint a virtualizáció?
- Átfedik egymást, de nem azonosak. A virtualizáció teljes operációs rendszert futtat egy emulátoron belül; az elkülönítés a hardver-virtualizáció szintjén van. A Sandboxing általában ugyanazon az operációs rendszeren belül futtatja a folyamatokat, kernel által kényszerített korlátozásokkal. A virtualizáció nehezebb, de erősebb elszigeteltséget biztosít; a modern dizájnok gyakran kombinálják mindkettőt (Firecracker virtuális gépek kiszolgáló nélküli, gVisor konténerekhez).
- A homokozó lelassítja a dolgokat?
- Szerény többletköltség – jellemzően egyszámjegyű százalék a rendszerhívási szűréshez, valamivel több a folyamatleválasztáshoz. A teljesítmény költségeit a hardveres támogatás (Intel CET, ARM PAC) aktívan csökkentette, így a modern sandboxok gyakorlatilag ingyenesek a legtöbb munkaterheléshez.
- Egy VPN kikerülhet a homokozóból?
- A VPN-kliens szoftverek általában több jogosultságot igényelnek, mint a sandbox-alkalmazások – ezek konfigurálják az útválasztást és a hálózati interfészeket. MacOS és iOS rendszeren speciális API-kat (NetworkExtension framework) használnak ennek biztonságos elvégzéséhez. Maga a VPN-kliens kiváltságos; a rajta átfolyó adatok átlátszatlanok más alkalmazások számára.
- A kód Docker-tárolóban való futtatása ugyanaz, mint a homokozó?
- A Docker-tárolók Linux névtereket és seccomp-ot használnak az elkülönítéshez, ami a sandboxing egyik formája. Az elkülönítés gyengébb, mint a virtualizáció alapú sandboxok (a konténerek megosztják a gazdagép kernelt), és gyengébb, mint a felhasználói terület homokozói, amelyek tiltják a legtöbb rendszerhívást (a tárolók sok ilyet megengednek). A megbízhatatlan munkaterhelések esetén az olyan projektek, mint a gVisor vagy a Kata Containers, erősebb elszigeteltséget vonnak be a Docker UX köré.
- Miért használ ennyi memóriát a Chrome?
- Webhely elkülönítése. Minden eredet a saját folyamatában fut – a különböző helyek 50 lapja 50 folyamatot jelent, mindegyik saját memóriával rendelkezik. A költség RAM; előnye, hogy az egyik lap exploitja nem tudja olvasni a másik lap adatait (jelszavakat, munkameneteket). A modern Chrome több erőfeszítést tesz a memóriamegosztás optimalizálására, hogy csökkentse a hatást, de az architektúra eredendően a memóriát a biztonságért cseréli.