Stanfordi ülikooli, San Diegoto ülikooli ja Texas ülikooli teadlased tööriistakomplekt , mis võib kasutada täiendava isoleerimise tasemena funktsioonide raamatukogude haavatavuste blokeerimiseks. RLBox on suunatud usaldusväärsete kolmandate osapoolte raamatukogude turvaprobleemide lahendamisele, millele arendajad ei pääse ligi, kuid mille haavatavused võivad kompromiteerida põhiprojekti.
Ettevõte Mozilla kasutada RLBox'i Linuxi Firefox 74 versioonis ja macOS'i Firefox 75 versioonis raamatukogu käitamise isoleerimiseks , mis vastutab fontide renderdamise eest. Samuti ei ole RLBox spetsiifiline Firefoxile ja seda saab kasutada mis tahes raamatukogude isoleerimiseks juhuslikes projektides. RLBox MIT litsentsi all. Praegu toetab RLBox töötamist Linuxi ja macOS platvormidel, Windowsi tugi on oodata hiljem.
RLBoxi töö seisneb isoleeritud raamatukogu C/C++ koodi kompileerimises madala taseme vahekokku WebAssembly'ks, mis seejärel vormistatakse WebAssembly mooduliks, mille õigused on seotud ainult selle mooduliga (näiteks stringide töötlemise raamatukogu ei saa avada võrgusoket ega faili). C/C++ koodi teisendamine WebAssembly-ks toimub kasutades .
Otse WebAssembly täitmiseks kompileeritakse moodul masinkoodiks kasutades kompilaatorit ja see täidetakse eraldi 'nanoprotsessis', mis on isoleeritud ülejäänud rakenduse mälu eest. Lucet'i kompilaator põhineb samal koodil nagu JIT-mootor , mida kasutatakse Firefoxis WebAssembly täitmiseks.
Kokku pandud moodul toimib eraldi mälupiirkonnas ja ei pääse juurde ülejäänud aadressiruumile. Kui raamatukogu haavatavust ära kasutada, jääb ründaja piiratud ja ei saa pääseda peamise protsessi mälupiirkondadele või edastada juhtimist väljapoole isoleeritud keskkonda.
Arendajatele on saadaval kõrgtasemeline , mis võimaldab kutsuda välja teegi funktsioone isoleeritud režiimis. WebAssembly töötlejad vajavad peaaegu mitte mingit lisajõudlust ja nende kasutamine ei ole palju aeglasem kui tavaliste funktsioonide kutsumine (teegi funktsioonid täidetakse kohalikus koodis ning lisakulud tekivad vaid andmete kopeerimise ja kontrollimise protsessis, kui suheldakse isoleeritud keskkonnaga). Isoleeritud teegi funktsioone ei saa kutsuda otse ning nendele juurdepääsuks tuleb kasutada
vahekihti invoke_sandbox_function().
Omakorda, kui teegist on vaja kutsuda väliseid funktsioone, peavad need funktsioonid olema selgelt määratletud meetodi register_callback abil (vaikimisi võimaldab RLBox juurdepääsu funktsioonidele ). Mälu (memory safety) ohutuks kasutamiseks ei piisa ainult koodi täitmise isoleerimisest; samuti tuleb kontrollida tagastatavaid andmevooge.
Isoleeritud keskkonnas genereeritud väärtused märgistatakse kui usaldamatud, neid piiratakse ja nende "puhastamiseks" on vajalik ja ja rakenduse mällu.
Ilma puhastamiseta, katse kasutada reostatud andmeid kontekstis, kus vajatakse normaalseid andmeid (ja vastupidi) toob kaasa kompileerimisvead. Väikesed funktsioonide argumendid, tagastatud väärtused ja struktuurid edastatakse protsessi mälu ja isoleeritud keskkonna mälu vahel kopeerimise teel. Suurte andmesettide puhul eraldatakse mälu isoleeritud keskkonnas, millele põhiprotsessile tagastatakse otsene viide 'sandbox-reference'.
Allikas: opennet.ru
