Forskere fra Stanford University, University of California San Diego og University of Texas i Austin værktøjer , som kan anvendes som et ekstra isoleringsniveau for at blokere sårbarheder i funktionsbiblioteker. RLBox sigter mod at løse problemet med usikre tredjepartsbiblioteker, som ikke er under kontrol af udviklerne, men hvor sårbarheder kan kompromittere hovedprojektet.
Mozilla Company implementere RLBox i Linux-udgaver af Firefox 74 og macOS-udgaver af Firefox 75 for at isolere udførelsen af biblioteket , som er ansvarlig for rendering af skrifttyper. RLBox er ikke specifik for Firefox og kan anvendes til at isolere alle biblioteker i vilkårlige projekter. RLBox under MIT-licensen. I øjeblikket understøtter RLBox drift på Linux- og macOS-platforme, mens Windows-support forventes senere.
RLBox's funktionalitet reduceres til at kompilere C/C++-koden fra det isolerede bibliotek til lavniveau WebAssembly-intermediær kode, som derefter pakkes som et WebAssembly-modul, hvis beføjelser er bundet udelukkende til dette modul (for eksempel kan et bibliotek til strengebehandling ikke åbne en netværkssocket eller en fil). Kodekonvertering fra C/C++ til WebAssembly udføres ved hjælp af .
For direkte udførelse kompilieres WebAssembly-modulet til maskinkode ved hjælp af kompileringsværktøjet og udføres i en separat "nano-proces", der er isoleret fra restens hukommelse af applikationen. Kompileren Lucet er baseret på den samme kode som JIT-motoren , der anvendes i Firefox til at udføre WebAssembly.
Det samlede modul kører i et separat hukommelsesområde og har ikke adgang til det øvrige adresseområde. I tilfælde af udnyttelse af en sårbarhed i biblioteket vil angriberen være begrænset og ikke kunne få adgang til hukommelsesområderne i hovedprocessen eller overføre styringen uden for det isolerede miljø.
Til udviklere er der givet et høj-niveau , som gør det muligt at kalde funktioner fra biblioteket i en isoleret tilstand. WebAssembly-håndterere kræver næsten ingen ekstra ressourcer, og interaktionen med dem er ikke meget langsommere end kaldet til almindelige funktioner (biblioteksfunktionerne udføres i form af sikker kode, og omkostningerne opstår kun ved kopiering og kontrol af data i interaktionen med det isolerede miljø). Funktionerne fra det isolerede bibliotek kan ikke kaldes direkte, og for at få adgang til dem skal man anvende
mellemlaget invoke_sandbox_function().
Hvis man derimod skal kalde eksterne funktioner fra biblioteket, skal disse funktioner være eksplicit defineret ved hjælp af metoden register_callback (som standard giver RLBox adgang til funktionerne ). For at sikre sikker arbejde med hukommelsen (memory safety) er udførelsesisolering alene ikke tilstrækkeligt, og der kræves også kontrol af de returnerede datastreams.
Værdier dannet i det isolerede miljø markereres som ikke betroede, begrænses ved hjælp af , og for at 'rensning' kræves og kopiering til applikationens hukommelse.
Uden rensning vil et forsøg på at bruge tainted-data i en sammenhæng, der kræver almindelige data (og omvendt), føre til fejl under kompileringen. Små funktionsargumenter, returnerede værdier og strukturer overføres ved kopiering mellem procesens hukommelse og hukommelsen i det isolerede miljø. For større datasæt tildeles hukommelse i det isolerede miljø, og der returneres en direkte henvisning til hovedprocessen kaldet 'sandbox-reference'.
Kilde: opennet.ru
