Co to jest interfejs API w trybie piaskownicy?

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:

  1. 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
  2. Sklonuj i uruchom kompilację:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. 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.