Mozilla rozpoczyna wdrażanie technologii izolacji bibliotek RLBox

Naukowcy z Uniwersytetu Stanforda, Uniwersytetu Kalifornijskiego w San Diego i Uniwersytetu Teksasu w Austin Opracowaliśmy narzędzia RLBox, który może służyć jako dodatkowa warstwa izolacyjna do blokowania luk w bibliotekach funkcji. RLBox ma na celu rozwiązanie problemu bezpieczeństwa niezaufanych bibliotek stron trzecich, które nie są pod kontrolą programistów, ale których luki mogą zagrozić głównemu projektowi.

Firma Mozilla plany użyj RLBox w kompilacjach przeglądarki Firefox 74 dla systemu Linux i wersji przeglądarki Firefox 75 dla systemu macOS, aby odizolować wykonanie biblioteki grafit, odpowiedzialny za renderowanie czcionek. Jednak RLBox nie jest specyficzny dla Firefoksa i może być używany do izolowania dowolnych bibliotek w dowolnych projektach. Rozwój RLBox rozpowszechnianie się na licencji MIT. RLBox obecnie obsługuje platformy Linux i macOS, a obsługa systemu Windows spodziewana jest później.

mechanizm Praca RLBox sprowadza się do kompilacji kodu C/C++ izolowanej biblioteki do niskopoziomowego kodu pośredniego WebAssembly, który następnie projektowany jest jako moduł WebAssembly, którego uprawnienia są ustawiane w odniesieniu tylko do tego modułu (np. do przetwarzania ciągów znaków nie będzie mógł otworzyć gniazda sieciowego ani pliku). Konwersja kodu C/C++ na WebAssembly odbywa się za pomocą wasi-sdk.

W celu bezpośredniego wykonania moduł WebAssembly jest kompilowany do kodu maszynowego za pomocą kompilatora Świeci się i działa w oddzielnym „nanoprocesie” odizolowanym od reszty pamięci aplikacji. Kompilator Lucet opiera się na tym samym kodzie, co silnik JIT Dźwig dźwigowy, używany w przeglądarce Firefox do wykonywania zestawu WebAssembly.

Zmontowany moduł pracuje w wydzielonym obszarze pamięci i nie ma dostępu do reszty przestrzeni adresowej. W przypadku wykorzystania luki w bibliotece atakujący będzie ograniczony i nie będzie mógł uzyskać dostępu do obszarów pamięci głównego procesu ani przenieść kontroli poza izolowane środowisko.

Mozilla rozpoczyna wdrażanie technologii izolacji bibliotek RLBox

Informacje wysokiego poziomu są udostępniane programistom API, co umożliwia wywoływanie funkcji bibliotecznych w trybie izolacji. Procedury obsługi WebAssembly nie wymagają prawie żadnych dodatkowych zasobów, a interakcja z nimi nie jest dużo wolniejsza niż wywoływanie zwykłych funkcji (funkcje biblioteczne wykonywane są w postaci natywnego kodu, a koszty ogólne powstają tylko podczas kopiowania i sprawdzania danych podczas interakcji z izolowanym środowiskiem). Izolowanych funkcji bibliotecznych nie można wywoływać bezpośrednio i należy uzyskać do nich dostęp za pomocą
warstwa invoke_sandbox_function().

Z kolei w przypadku konieczności wywołania funkcji zewnętrznych z biblioteki należy te funkcje jawnie zdefiniować przy pomocy metody rejestru_callback (domyślnie RLBox zapewnia dostęp do funkcji biblioteka standardowa). Aby zapewnić bezpieczeństwo pamięci, izolacja wykonania kodu nie wystarczy i wymaga także sprawdzania zwracanych strumieni danych.

Wartości wygenerowane w izolowanym środowisku są oznaczane jako niegodne zaufania i ograniczone w użyciu zabrudzone ślady i do „czyszczenia”, którego potrzebują weryfikacji, i kopiowanie do pamięci aplikacji.
Bez czyszczenia próba użycia skażonych danych w kontekście wymagającym zwykłych danych (i odwrotnie) powoduje wygenerowanie błędów w czasie kompilacji. Małe argumenty funkcji, wartości zwracane i struktury są przekazywane poprzez kopiowanie między pamięcią procesu a pamięcią piaskownicy. W przypadku dużych zestawów danych pamięć jest przydzielana w izolowanym środowisku, a bezpośredni wskaźnik odniesienia do piaskownicy jest zwracany do głównego procesu.

Źródło: opennet.ru

Dodaj komentarz