Kilka dni temu Google ogłosił otwarcie projektu Sandboxed APIŻe Umożliwia zautomatyzowanie procesu tworzenia piaskownicy w celu izolowanego wykonywania dowolnych bibliotek w językach C i C ++.
Izolowanie kodu z bibliotek pozwala zabezpieczyć się przed możliwymi atakami na klamki udostępniane przez biblioteki, tworząc dodatkową barierę na wypadek, gdyby w kodzie znajdowały się luki w zabezpieczeniach, które można wykorzystać poprzez manipulowanie danymi zewnętrznymi, które trafiają do biblioteki. Kod jest otwarty na licencji Apache 2.0.
Izolacjalub odbywa się to w środowisku wykonawczym Sandbox2, w którym używane są przestrzenie nazw, cgroups i seccomp-bpf.
Kod dostarczany do piaskownicy, która działa w oddzielnym procesie, dla którego ma dostęp do wywołań systemowych i zasobów, podobnie jak pliki i połączenia sieciowe, jest ograniczona.
Procesy uzyskują dostęp tylko do funkcji systemu, które są bezpośrednio wymagane do wykonania izolowanego kodu.
Sandbox2 definiuje komponenty do uruchomienia procesulub zastosuj reguły izolacji i wesprzyj późniejsze wykonanie.
Piaskownica2 może być używany niezależnie od interfejsu Sandbox API do izolowania nie tylko bibliotek, ale także dowolnych procesów.
Oprócz zwiększenia ochrony pozytywnym punktem w eliminacji kodu w oddzielnych procesach jest możliwość osobnej regulacji limitów wykorzystania pamięci biblioteki i procesora, a także ochrona przed awariami: awaria w biblioteka nie powoduje awarii całej aplikacji.
Informacje o interfejsie API Sandboxed
Sandboxed API to wtyczka Sandbox2 co upraszcza transport istniejących bibliotek do pracy w trybie izolowanym.
Interfejs API w trybie piaskownicy zapewnia pośredni interfejs oprogramowania, który umożliwia uruchamianie kodu biblioteki w środowisku piaskownicya także zorganizowanie rozmowy telefonicznej z biblioteką w środowisku sandbox i zapewnienie dostarczenia wyników biblioteki do programu głównego.
Se uzyskuje dostęp do izolowanej biblioteki za pośrednictwem wyspecjalizowanego RPC opartego na protokole ProtoBuffs.
A programistom bibliotek oferuje się zestaw opcji, które umożliwiają dostęp do zmiennych, deskryptory plików, bufory i funkcje biblioteczne odizolowane od aplikacji podstawowej, w tym narzędzia do automatycznej i kontrolowanej synchronizacji pamięci w celu współdzielenia tablic i struktur.
Gdy biblioteka oprogramowania analizująca takie dane jest wystarczająco złożona, może paść ofiarą pewnych rodzajów luk w zabezpieczeniach: błędów uszkodzenia pamięci lub innych problemów związanych z logiką analizy (na przykład problemy z przemierzaniem ścieżek). Te luki mogą mieć poważne konsekwencje dla bezpieczeństwa.
Ponadto, Udostępniono interfejs API do monitorowania działania izolowanych procesów i ponownego ich uruchamiania w przypadku awarii.
Dla wyodrębnionej biblioteki automatycznie generowany jest kod adnotacji wydzielonych funkcji dla systemu montażowego Bazel i interfejsu programu (SAPI) do interakcji między procesami podstawowymi i izolowanymi.
Deweloper musi również utworzyć plik nagłówkowy z regułami izolacji, które definiują wszystkie dozwolone wywołania systemowe i operacje (odczyt, zapis, otwieranie plików, dostęp do czasu, możliwość instalacji programów obsługi sygnałów, obsługa alokacji pamięci przez malloc itp.).
Pliki i katalogi, do których biblioteka powinna mieć dostęp, są określane osobno.
Instalacja
Obecnie projekt jest dostępny tylko dla Linuksa, ale w przyszłości obiecują dodać wsparcie dla systemów macOS i BSD, aw dłuższej perspektywie i dla Windows. tak chcesz zainstalować interfejs API w trybie piaskownicy, postępuj zgodnie z podanymi instrukcjami w tym linku.
Z planów jest również odnotowany umiejętność wyodrębniania bibliotek w językach innych niż C i C ++, dodatkowe wsparcie w czasie wykonywania dla izolacji (np. w oparciu o wirtualizację sprzętową) oraz możliwość korzystania z CMake i innych systemów montażowych (obsługa jest teraz ograniczona do systemu budowania Bazel).
źródło: https://security.googleblog.com