Stanford Ălikooli, San Diegos asuva California Ălikooli ja Austini Texas Ălikooli teadlased tööriistakomplekt , mis vĂ”ib toimida tĂ€iendava isoleerimise tasandina, et blokeerida haavatavusi funktsioonide raamatukogudes. RLBox keskendub mittevĂ”rgu kĂ”rvaliste teekide turvaprobleemi lahendamisele, mis ei ole arendajate kontrolli all, kuid mille haavatavused vĂ”ivad ohustada pĂ”hiprojekti.
EttevÔte Mozilla rakendada RLBox Linuxi versioonides Firefox 74 ja macOS versioonides Firefox 75, et isoleerida teegi tÀitmine , mis vastutab fondide joonistamise eest. RLBox ei ole Firefoxile spetsiifiline ja seda saab kasutada igasuguste teekide isoleerimiseks erinevates projektides. RLBox MIT litsentsi alusel. Praegu toetab RLBox Linuxi ja macOS platvorme, Windowsi tugi on ootel.
RLBox'i töö seisneb C/C++ koodi isolatsiooni teegi kompileerimises madalama taseme vahefailikoodiks WebAssembly, mis seejÀrel vormistatakse WebAssembly moodulina, mille Ôigused on mÀÀratud ainult sellele moodulile (nÀiteks stringide töötlemise teek ei saa avada vÔrgusokke ega faile). C/C++ koodi muundamine WebAssembly'ks toimub .
Kohese tĂ€itmise jaoks kompileeritakse WebAssembly moodul masina koodiks kompilatori ja see tĂ€idetakse eraldi "nanoprotsessis", mis on eraldatud rakenduse ĂŒlejÀÀnud mĂ€lust. Lucet'i kompilaator pĂ”hineb samal koodil, mis JIT-mootoril , mida kasutatakse Firefoxis WebAssembly tĂ€itmiseks.
Kogutud moodul töötab eraldi mĂ€lu piirkonnas ja ei pÀÀse juurde ĂŒlejÀÀnud aadressiruumile. Raamatukogu haavatavuse Ă€rakasutamisel on rĂŒndajal piiratud juurdepÀÀs ning ta ei saa pöörduda pĂ”hiprotsessi mĂ€lu alade ega edastada juhtimist vĂ€ljapoole isoleeritud keskkonda.
Arendajatele on pakutud kĂ”rgetasemeline , mis vĂ”imaldab kutsuda raamatukogu funktsioone isoleeritud reĆŸiimis. WebAssembly' töötlejad vajavad peaaegu ĂŒldse tĂ€iendavaid ressursse ja suhtlemine nendega ei ole oluliselt aeglasem kui tavaliste funktsioonide kutsumine (raamatukogu funktsioonid tĂ€idetakse natiivse koodina ning lisakulud tekivad ainult andmete kopeerimise ja kontrollimise kĂ€igus isoleeritud keskkonnaga suhtlemisel). Isoleeritud raamatukogu funktsioone ei saa otseselt kutsuda ning nendele juurdepÀÀsuks on vajalik rakendada
vahekihti invoke_sandbox_function().
Omakorda, kui raamatukogust on vaja vÀliseid funktsioone kutsuda, peavad need funktsioonid olema selgelt mÀÀratletud meetodi register_callback abil (eelnevalt RLBox vÔimaldab juurdepÀÀsu funktsioonidele ). MÀlu ohutu toimimise tagamiseks (memory safety) ei piisa koodi tÀitmise isoleerimisest ja on vajalik ka tagada tagastatud andmevoogude kontrollimine.
Isoleeritud keskkonnas genereeritud vÀÀrtused mÀrgistatakse kui usaldamatud, neid piiratakse ja 'puhastamiseks' on vajalik ja kopeerimine rakenduse mÀllu.
Ilma puhastamiseta, katse kasutada tainted-andmeid kontekstis, kus on nÔutud tavalised andmed (ja vastupidi) pÔhjustab kompileerimise etapis vigu. VÀiksed funktsioonide argumendid, tagastatavad vÀÀrtused ja struktuurid edastatakse lÀbi kopeerimise protsessi mÀlu ja isoleeritud keskkonna mÀlu vahel. Suurte andmekogumite puhul eraldatakse mÀlu isoleeritud keskkonnas ning pÔhiprotsessile tagastatakse otseviit 'sandbox-reference'.
Allikas: opennet.ru
