Studiues nga Universiteti i Stanfordit, Universiteti i Kalifornisë në San Diego dhe Universiteti i Teksasit në Austin mjetet , e cila mund të përdoret si një shtresë shtesë izolimi për të bllokuar dobësitë në libraritë e funksioneve. RLBox synon të adresojë problemin e sigurisë së librarive të palëve të treta të pabesueshme që nuk janë nën kontrollin e zhvilluesve, por dobësitë e të cilave mund të kompromentojnë projektin kryesor.
Kompania Mozilla aktivizo RLBox në Linux-ndërtime të Firefox 74 dhe macOS-Ndërtimet e Firefox 75 për të izoluar ekzekutimin e bibliotekës , i cili është përgjegjës për paraqitjen e fonteve. RLBox nuk është specifik për Firefox dhe mund të përdoret për të izoluar çdo bibliotekë në çdo projekt. RLBox sipas licencës MIT. RLBox aktualisht mbështet platformat Linux и macOS, mbështetje Windows pritet më vonë.
Operacioni i RLBox konsiston në kompilimin e kodit C/C++ të një biblioteke të izoluar në kod të nivelit të ulët të ndërmjetëm WebAssembly, i cili më pas formatohet si një modul WebAssembly, lejet e të cilit specifikohen vetëm për këtë modul (për shembull, një bibliotekë përpunimi vargjesh nuk do të jetë në gjendje të hapë një socket ose skedar rrjeti). Konvertimi i kodit C/C++ në WebAssembly kryhet duke përdorur .
Për ekzekutim të drejtpërdrejtë, moduli WebAssembly kompilohet në kod makine duke përdorur një kompajler. dhe funksionon në një "nanoproces" të veçantë, të izoluar nga pjesa tjetër e memories së aplikacionit. Kompiluesi Lucet bazohet në të njëjtin kod si motori JIT. , përdoret në Firefox për të ekzekutuar WebAssembly.
Moduli i montuar vepron në një zonë të veçantë memorieje dhe nuk ka qasje në pjesën tjetër të hapësirës së adresave. Nëse shfrytëzohet një dobësi në bibliotekë, sulmuesi do të jetë i kufizuar dhe i paaftë të hyjë në zonat e memories së procesit kryesor ose të transferojë kontrollin jashtë mjedisit të izoluar.
Zhvilluesve u ofrohen udhëzime të nivelit të lartë , e cila lejon thirrjen e funksioneve të bibliotekës në modalitetin e izolimit. Trajtuesit e WebAssembly nuk kërkojnë pothuajse asnjë burim shtesë, dhe bashkëveprimi me ta nuk është shumë më i ngadaltë sesa thirrja e funksioneve të rregullta (funksionet e bibliotekës ekzekutohen si kod vendas, dhe mbingarkesa lind vetëm kur kopjohen dhe verifikohen të dhënat gjatë bashkëveprimit me mjedisin e izoluar). Funksionet e izoluara të bibliotekës nuk mund të thirren drejtpërdrejt, dhe qasja në to kërkon përdorimin e
shtresa invoke_sandbox_function().
Nga ana tjetër, nëse është e nevojshme të thirren funksione të jashtme nga biblioteka, këto funksione duhet të përcaktohen në mënyrë të qartë duke përdorur metodën register_callback (si parazgjedhje, RLBox ofron qasje në funksione Për të siguruar sigurinë e memories, izolimi i ekzekutimit të kodit nuk është i mjaftueshëm; është gjithashtu e nevojshme të sigurohet kontrollimi i rrjedhave të të dhënave të kthyera.
Vlerat e gjeneruara në një mjedis të izoluar shënohen si të pabesueshme dhe të kufizuara duke përdorur dhe për "pastrim" ata kërkojnë dhe kopjimi në kujtesën e aplikacionit.
Pa pastrim, përpjekja për të përdorur të dhëna të dëmtuara në një kontekst që kërkon të dhëna të rregullta (dhe anasjelltas) rezulton në gabime në kohën e kompajlimit. Argumentet e vogla të funksionit, vlerat e kthimit dhe strukturat kopjohen midis memories së procesit dhe memories sandbox. Për grupe më të mëdha të dhënash, memoria ndahet në sandbox dhe një "referencë sandbox" e drejtpërdrejtë i kthehet procesit kryesor.
Burimi: opennet.ru
