Mozilla rozpoczyna wdrażanie technologii izolacji bibliotek RLBox

Badacze z Uniwersytetu Stanforda, Uniwersytetu Kalifornijskiego w San Diego i Uniwersytetu Teksaskiego w Austin opracowali narzędzia RLBox, który może być stosowany jako dodatkowy poziom izolacji w celu blokowania luk w bibliotekach funkcji. RLBox ma na celu rozwiązanie problemu z bezpieczeństwem niegodnych zaufania zewnętrznych bibliotek, które nie są kontrolowane przez programistów, ale luki w nich mogą skompromitować główny projekt.

Firma Mozilla zapowiada wdrożyć RLBox w wersjach Linux Firefox 74 oraz macOS Firefox 75 w celu izolacji wykonania biblioteki Graphite, odpowiedzialnej za renderowanie czcionek. RLBox nie jest specyficzny dla Firefox i może być stosowany do izolacji dowolnych bibliotek w różnych projektach. Osiągnięcia RLBox są rozpowszechniane na licencji MIT. Obecnie RLBox działa na platformach Linux i macOS, wsparcie dla Windows przewidywane jest w późniejszym terminie.

Mechanizm działanie RLBox polega na kompilacji kodu C/C++ z izolowanej biblioteki do niskopoziomowego kodu pośredniego WebAssembly, który następnie jest przekształcany w moduł WebAssembly, którego uprawnienia są ograniczone tylko do tego modułu (na przykład biblioteka do przetwarzania łańcuchów nie będzie mogła otworzyć gniazda sieciowego ani pliku). Transformacja kodu C/C++ do WebAssembly odbywa się za pomocą wasi-sdk.

Aby wykonać moduł WebAssembly, jest on kompilowany do kodu maszynowego za pomocą kompilatora Lucet i jest wykonywany w oddzielnym "nanoprocesie", izolowanym od reszty pamięci aplikacji. Kompilator Lucet oparty jest na tym samym kodzie, co silnik JIT Cranelift, stosowanym w Firefox do wykonywania WebAssembly.

Zbudowany moduł działa w oddzielnym obszarze pamięci i nie ma dostępu do reszty przestrzeni adresowej. W przypadku wykorzystania luki w bibliotece napastnik będzie ograniczony i nie będzie mógł uzyskać dostępu do obszarów pamięci głównego procesu ani przekazać kontroli poza izolowane środowisko.

Mozilla rozpoczyna wdrażanie technologii izolacji bibliotek RLBox

Dla programistów dostępny jest wyspecjalizowany API, który umożliwia wywoływanie funkcji biblioteki w trybie izolacji. WebAssembly-handlerzy prawie nie wymagają dodatkowych zasobów, a interakcja z nimi nie jest znacznie wolniejsza niż wywołanie zwykłych funkcji (funkcje biblioteki są wykonywane w formie kodu natywnego, a dodatkowe koszty pojawiają się jedynie podczas kopiowania i sprawdzania danych w trakcie interakcji z izolowanym środowiskiem). Funkcje izolowanej biblioteki nie mogą być wywoływane bezpośrednio, a ich użycie wymaga zastosowania
pośrednika invoke_sandbox_function().

Z kolei, jeśli z biblioteki trzeba wywołać zewnętrzne funkcje, te funkcje muszą być wyraźnie zdefiniowane za pomocą metody register_callback (domyślnie RLBox udostępnia dostęp do funkcji standardowej biblioteki). Aby zapewnić bezpieczną obsługę pamięci (memory safety), izolacja wykonywanego kodu nie wystarcza, a konieczne jest również zapewnienie weryfikacji zwracanych strumieni danych.

Wartości utworzone w izolowanym środowisku są oznaczane jako niewiarygodne, ograniczane za pomocą metek tainted i wymagają weryfikacji oraz kopiowania do pamięci aplikacji.
Bez oczyszczenia, próba użycia danych tainted w kontekście wymagającym zwykłych danych (i odwrotnie) prowadzi do generowania błędów na etapie kompilacji. Małe argumenty funkcji, zwracane wartości i struktury są przekazywane przez kopiowanie pomiędzy pamięcią procesu a pamięcią izolowanego środowiska. Dla dużych zestawów danych pamięć jest alokowana w izolowanym środowisku, a głównemu procesowi zwraca się bezpośredni wskaźnik "sandbox-reference".

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster