Mozilla aloittaa RLBox-kirjaston eristysteknologian käyttöönoton

Tutkijat Stanfordin yliopistosta, Kalifornian yliopistosta San Diegosta ja Texasin yliopistosta Austinissa kehitetty työkaluja RLBox, jota voidaan käyttää ylimääräisenä eristyskerroksena estämään funktiokirjastojen haavoittuvuudet. RLBox on tarkoitettu ratkaisemaan epäluotettavien kolmannen osapuolen kirjastojen tietoturvaongelmat, jotka eivät ole kehittäjien hallinnassa, mutta joiden haavoittuvuudet voivat vaarantaa pääprojektin.

Mozilla Company suunnitelmia käytä RLBoxia Firefox 74:n Linux-versioissa ja Firefox 75:n macOS-koontiversioissa kirjaston suorittamisen eristämiseen grafiitti, joka vastaa fonttien hahmontamisesta. RLBox ei kuitenkaan ole erityinen Firefoxille, ja sitä voidaan käyttää minkä tahansa kirjastojen eristämiseen mielivaltaisissa projekteissa. Kehitys RLBox levitän MIT-lisenssillä. RLBox tukee tällä hetkellä Linux- ja macOS-alustoja, ja Windows-tukea odotetaan myöhemmin.

Механизм RLBoxin työ tiivistyy eristetyn kirjaston C/C++-koodin kääntämiseen matalan tason WebAssembly-välikoodiksi, joka sitten suunnitellaan WebAssembly-moduuliksi, jonka käyttöoikeudet on asetettu suhteessa vain tähän moduuliin (esim. kirjastoon). merkkijonojen käsittelyä varten ei voi avata verkkopistoketta tai tiedostoa) . C/C++-koodin muuntaminen WebAssemblyksi tapahtuu käyttämällä wasi-sdk.

Suoraa suoritusta varten WebAssembly-moduuli käännetään konekoodiksi kääntäjällä Lucet ja toimii erillisessä "nanoprosessissa", joka on eristetty muusta sovelluksen muistista. Lucet-kääntäjä perustuu samaan koodiin kuin JIT-moottori nosturinosturi, jota käytetään Firefoxissa WebAssemblyn suorittamiseen.

Koottu moduuli toimii erillisessä muistialueella, eikä sillä ole pääsyä muuhun osoiteavaruuteen. Jos kirjaston haavoittuvuutta hyödynnetään, hyökkääjä on rajoitettu, eikä hän voi käyttää pääprosessin muistialueita tai siirtää hallintaa eristetyn ympäristön ulkopuolelle.

Mozilla aloittaa RLBox-kirjaston eristysteknologian käyttöönoton

Kehittäjille tarjotaan korkeatasoista tietoa API, jonka avulla voit kutsua kirjastotoimintoja eristystilassa. WebAssembly-käsittelijät eivät juuri vaadi ylimääräisiä resursseja ja vuorovaikutus niiden kanssa ei ole paljon hitaampaa kuin tavallisten funktioiden kutsuminen (kirjastotoiminnot suoritetaan natiivikoodin muodossa ja lisäkustannuksia syntyy vain kopioitaessa ja tarkastaessa tietoja eristetyn ympäristön kanssa vuorovaikutuksessa). Eristettyjä kirjastotoimintoja ei voi kutsua suoraan, vaan niitä on käytettävä käyttämällä
kerros invoke_sandbox_function().

Jos puolestaan ​​on tarpeen kutsua ulkoisia toimintoja kirjastosta, nämä funktiot on määriteltävä erikseen register_callback-menetelmällä (oletusarvoisesti RLBox tarjoaa pääsyn funktioihin tavallinen kirjasto). Muistin turvallisuuden varmistamiseksi koodin suorittamisen eristäminen ei riitä, vaan vaatii myös palautettujen tietovirtojen tarkistamisen.

Eristetyssä ympäristössä luodut arvot on merkitty epäluotettaviksi ja rajoitetusti käytettäväksi likaisia ​​jälkiä ja "puhdistukseen" ne vaativat vahvistus ja kopiointi sovelluksen muistiin.
Jos yritetään käyttää pilaantuneita tietoja kontekstissa, joka vaatii säännöllistä dataa (ja päinvastoin), ilman puhdistusta syntyy virheitä käännösvaiheessa. Pienet funktion argumentit, palautusarvot ja rakenteet välitetään kopioimalla prosessimuistin ja hiekkalaatikkomuistin välillä. Suuria tietojoukkoja varten muisti varataan eristetyssä ympäristössä ja suora hiekkalaatikko-viittausosoitin palautetaan pääprosessiin.

Lähde: opennet.ru

Lisää kommentti