Ten projekt typu open source Sandboxed API (SAPI) powstał na podstawie opracowanego przez Google projektu open source Sandbox2. Jego celem jest ułatwienie stosowania piaskownicy do bibliotek C/C++.
Interfejs Sandboxed API ma 3 główne zalety:
Zamiast umieszczania całych programów w piaskownicy lub zmiany kodu źródłowego w celu przejścia do piaskownicy części programu, tak jak w przypadku Sandbox2, za pomocą interfejsu SAPI możesz umieszczać w piaskownicy poszczególne biblioteki C/C++. W rezultacie dzięki SAPI główny program jest izolowany od luk w zabezpieczeniach podczas wykonywania kodu w bibliotece C/C++.
Nasze motto brzmi: Piaskownica: używaj jej wszędzie. Biblioteki zapisane w piaskownicy za pomocą interfejsu API w trybie piaskownicy można łatwo wykorzystać ponownie, co ułatwia obsługę przyszłych projektów. Wcześniej piaskownice dostępne do użytku w Google wymagały dodatkowej pracy wdrożeniowej z każdą nową instancją projektu, który miał być w piaskownicy, nawet jeśli ta sama biblioteka oprogramowania była w nim używana. Zasady piaskownicy 2 i inne ograniczenia stosowane w procesie piaskownicy musiały być za każdym razem ponownie wdrażane, a mechanizmy wymiany danych między zaufanymi i niezaufanymi częściami kodu musieli być zaprojektowane od podstaw.
Każda biblioteka SAPI stosuje ściśle zdefiniowaną zasadę zabezpieczeń, w odróżnieniu od typowego projektu w trybie piaskownicy, w którym zasady zabezpieczeń muszą obejmować całkowity zasięg połączeń syscall/zasobów wszystkich używanych bibliotek.
Projekt SAPI został zaprojektowany, opracowany i zarządzany przez członków zespołu Google Sandbox. Wykorzystuje też naszą przetestowaną w terenie usługę Sandbox2. Obecnie wiele projektów wewnętrznych korzysta z interfejsu SAPI, aby izolować produkcyjne zbiory zadań.
Szybki start
Aby zacząć korzystać z interfejsu Sandboxed API, wykonaj te czynności:
- Zainstaluj wymagane zależności (przy założeniu, że korzystasz z pomijania Debiana 10):
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" |
sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
python3-pip libclang-7-dev $ pip3 install clang - Sklonuj i uruchom kompilację:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- Wypróbuj jeden z przykładów:
$ bazel run //sandboxed_api/examples/stringop:main_stringop
Dostępna dokumentacja
Więcej informacji o interfejsie Sandboxed API znajdziesz tutaj:
Objaśnienie interfejsu API w trybie piaskownicy – opis interfejsu Sandboxed API (SAPI) i jego podstawowych pojęć.
Pierwsze kroki – zawiera wskazówki, które pomogą Ci utworzyć własną wersję interfejsu API w trybie piaskownicy SAPI.
Reguły tworzenia – wyjaśnia, jak użyć reguły kompilacji sapi_library() do stworzenia biblioteki SAPI.
Zmienne – omawia zastosowanie typów SAPI wymaganych podczas przekazywania wskaźników do prostych typów i bloków pamięci.
Transakcje – wyjaśnia, jak używać modułu transakcji SAPI do monitorowania wywołań funkcji.
Glosariusz
Sandbox2 | Projekt Google typu open source, który udostępnia warstwę piaskownicy w interfejsie SAPI. |
Piaskownica | Plik binarny uruchamiany w piaskownicy Sandbox2 znajdziesz w dokumentacji piaskownicy. W kontekście SAPI jest to biblioteka C/C++ w trybie piaskownicy. |
interfejs SAPI | Sandboxed API, projekt Google typu open source, który udostępnia funkcje tworzenia bibliotek w trybie piaskownicy. |
Biblioteka SAPI | Biblioteka wygenerowana przez SAPI, zawierająca bibliotekę Sandboxed Library, kod Sandbox2 i kod środowiska wykonawczego SAPI. |
Obiekt SAPI | Zawarty w kodzie hosta obiekt C++ udostępniający interfejs biblioteki piaskownicy za pomocą typów SAPI zamiast oryginalnych. |
Typy SAPI | SAPI udostępnia specjalne typy wymagane przy przekazywaniu wskaźników do prostych typów i bloków pamięci. |
Transakcja SAPI | Moduł służący do zarządzania stanem piaskownicy biblioteki między uruchomieniami. |
Fragment kodu RPC | Fragment komunikacji RPC (zdalne wywołanie procedury) ujęty w Sandbox2 i używany do przekazywania danych między obiektem SAPI a biblioteką w trybie piaskownicy. |
Kod hosta | Kod, który korzysta z biblioteki piaskownicy i zawiera obiekt SAPI. |
Udział w interfejsie Sandboxed API
Jeśli chcesz podzielić się z nami swoją opinią, przeczytaj artykuł CONTRIBUTING.md i wyślij nam prośby o dodanie funkcji.Możesz też zgłaszać błędy lub prośby o dodanie funkcji.
Jeśli chcesz rozmawiać z deweloperami lub otrzymywać powiadomienia o najważniejszych aktualizacjach usługi, dołącz do naszej grupy dyskusyjnej Google: sandboxed-api-users.