Mozilla begynner implementeringen av RLBox Library Isolation Technology

Forskere fra Stanford University, University of California i San Diego og University of Texas i Austin utviklet verktøy RLBox, som kan brukes som et ekstra isolasjonslag for å blokkere sårbarheter i funksjonsbiblioteker. RLBox er rettet mot å løse sikkerhetsproblemet til upålitelige tredjepartsbiblioteker som ikke er under kontroll av utviklere, men hvis sårbarheter kan kompromittere hovedprosjektet.

Mozilla Company planer bruk RLBox i Linux-bygg av Firefox 74 og macOS-bygg av Firefox 75 for å isolere bibliotekkjøring grafitt, ansvarlig for gjengivelse av fonter. RLBox er imidlertid ikke spesifikk for Firefox og kan brukes til å isolere alle biblioteker i vilkårlige prosjekter. Utviklinger RLBox spre under MIT-lisens. RLBox støtter for tiden Linux- og macOS-plattformer, med Windows-støtte forventet senere.

Механизм RLBox sitt arbeid kommer ned til å kompilere C/C++-koden til et isolert bibliotek til lavnivå-mellomliggende WebAssembly-kode, som deretter er utformet som en WebAssembly-modul, hvis tillatelser kun er satt i forhold til denne modulen (for eksempel et bibliotek for behandling av strenger vil ikke kunne åpne en nettverkskontakt eller fil) . Konvertering av C/C++-kode til WebAssembly gjøres ved å bruke wasi-sdk.

For direkte kjøring kompileres WebAssembly-modulen til maskinkode ved hjelp av en kompilator Lucet og kjører i en egen "nanoprosess" isolert fra resten av applikasjonens minne. Lucet-kompilatoren er basert på samme kode som JIT-motoren Kranløft, brukt i Firefox for å utføre WebAssembly.

Den sammensatte modulen opererer i et eget minneområde og har ikke tilgang til resten av adresseplassen. Hvis en sårbarhet i biblioteket utnyttes, vil angriperen være begrenset og vil ikke kunne få tilgang til minneområder i hovedprosessen eller overføre kontroll utenfor det isolerte miljøet.

Mozilla begynner implementeringen av RLBox Library Isolation Technology

Informasjon på høyt nivå er gitt for utviklere API, som lar deg kalle bibliotekfunksjoner i isolasjonsmodus. WebAssembly-behandlere krever nesten ingen ekstra ressurser, og interaksjon med dem er ikke mye tregere enn å kalle vanlige funksjoner (biblioteksfunksjonene utføres i form av naturlig kode, og overheadkostnader oppstår kun når du kopierer og sjekker data under interaksjon med det isolerte miljøet). Isolerte bibliotekfunksjoner kan ikke kalles direkte og må åpnes ved hjelp av
lag invoke_sandbox_function().

I sin tur, hvis det er nødvendig å kalle eksterne funksjoner fra biblioteket, må disse funksjonene være eksplisitt definert ved hjelp av register_callback-metoden (som standard gir RLBox tilgang til funksjoner standard bibliotek). For å sikre minnesikkerhet er ikke isolering av kodeutførelse nok og må også sikre at de returnerte datastrømmene er validert.

Verdier generert i et isolert miljø er merket som upålitelige og begrenset bruk flekkete merker og for "rengjøring" trenger de verifisering og kopiering til applikasjonsminne.
Uten opprydding vil forsøk på å bruke forurensede data i en kontekst som krever vanlige data (og omvendt) resultere i at feil genereres ved kompilering. Små funksjonsargumenter, returverdier og strukturer sendes gjennom kopiering mellom prosessminne og sandkasseminne. For store datasett tildeles minne i et isolert miljø og en direkte sandkassereferansepeker returneres til hovedprosessen.

Kilde: opennet.ru

Legg til en kommentar