Mozilla sāk RLBox bibliotēkas izolācijas tehnoloģijas ieviešanu

Pētnieki no Stenfordas Universitātes, Kalifornijas Universitātes Sandjego un Teksasas Universitātes Ostinā izstrādāta instrumenti RLBox, ko var izmantot kā papildu izolācijas slāni, lai bloķētu ievainojamības funkciju bibliotēkās. RLBox mērķis ir atrisināt drošības problēmu neuzticamām trešo pušu bibliotēkām, kuras nav izstrādātāju kontrolē, bet kuru ievainojamības var apdraudēt galveno projektu.

Uzņēmums Mozilla plāni izmantojiet RLBox Firefox 74 Linux versijās un Firefox 75 MacOS būvējumos, lai izolētu bibliotēkas izpildi grafīts, kas atbild par fontu renderēšanu. Tomēr RLBox nav specifisks Firefox, un to var izmantot, lai izolētu jebkuras bibliotēkas patvaļīgos projektos. Notikumi RLBox izplatīties saskaņā ar MIT licenci. RLBox pašlaik atbalsta Linux un macOS platformas, un Windows atbalsts ir paredzēts vēlāk.

mehānisms RLBox darbs ir saistīts ar izolētas bibliotēkas C/C++ koda kompilēšanu zema līmeņa starpposma WebAssembly kodā, kas pēc tam tiek veidots kā WebAssembly modulis, kura atļaujas ir iestatītas tikai attiecībā uz šo moduli (piemēram, bibliotēkai). virkņu apstrādei nevarēs atvērt tīkla ligzdu vai failu) . C/C++ koda konvertēšana uz WebAssembly tiek veikta, izmantojot wasi-sdk.

Tiešai izpildei WebAssembly modulis tiek kompilēts mašīnkodā, izmantojot kompilatoru Lucet un darbojas atsevišķā "nanoprocesā", kas ir izolēts no pārējās lietojumprogrammas atmiņas. Lucet kompilators ir balstīts uz to pašu kodu kā JIT dzinējs Celtņa pacēlājs, ko izmanto pārlūkprogrammā Firefox, lai izpildītu WebAssembly.

Samontētais modulis darbojas atsevišķā atmiņas apgabalā, un tam nav piekļuves pārējai adrešu telpai. Ja tiek izmantota bibliotēkas ievainojamība, uzbrucējs būs ierobežots un nevarēs piekļūt galvenā procesa atmiņas apgabaliem vai nodot kontroli ārpus izolētas vides.

Mozilla sāk RLBox bibliotēkas izolācijas tehnoloģijas ieviešanu

Izstrādātājiem tiek nodrošināta augsta līmeņa informācija API, kas ļauj izsaukt bibliotēkas funkcijas izolācijas režīmā. WebAssembly apstrādātāji gandrīz neprasa papildu resursus, un mijiedarbība ar tiem nav daudz lēnāka nekā parasto funkciju izsaukšana (bibliotēkas funkcijas tiek izpildītas vietējā koda veidā, un pieskaitāmās izmaksas rodas tikai kopējot un pārbaudot datus mijiedarbības laikā ar izolēto vidi). Izolētas bibliotēkas funkcijas nevar izsaukt tieši, un tām ir jāpiekļūst, izmantojot
slānis invoke_sandbox_function().

Savukārt, ja ir nepieciešams izsaukt ārējās funkcijas no bibliotēkas, šīs funkcijas ir skaidri jādefinē, izmantojot register_callback metodi (pēc noklusējuma RLBox nodrošina piekļuvi funkcijām standarta bibliotēka). Lai nodrošinātu atmiņas drošību, ar koda izpildes izolāciju nepietiek, un ir jāpārbauda arī atgrieztās datu plūsmas.

Vērtības, kas ģenerētas izolētā vidē, ir atzīmētas kā neuzticamas un ierobežotas izmantošanas aptraipītas zīmes un "tīrīšanai" tie ir nepieciešami pārbaude un kopēšana lietojumprogrammas atmiņā.
Bez tīrīšanas, mēģinot izmantot bojātus datus kontekstā, kurā nepieciešami regulāri dati (un otrādi), kompilēšanas laikā tiek ģenerētas kļūdas. Mazie funkciju argumenti, atgriešanas vērtības un struktūras tiek nodotas, kopējot starp procesa atmiņu un smilškastes atmiņu. Lielām datu kopām atmiņa tiek piešķirta izolētā vidē un tiešā smilškastes atsauces rādītājs tiek atgriezts galvenajam procesam.

Avots: opennet.ru

Pievieno komentāru