Co to jest interfejs API w trybie piaskownicy?

Projekt open source Sandboxed API (SAPI) jest oparty na projekcie open source Google Sandbox2 i ma na celu ułatwienie tworzenia piaskownicy dla bibliotek C/C++.

Sandboxed API ma 3 główne zalety:

  • W przeciwieństwie do Sandbox2, w którym trzeba umieścić w piaskownicy całe programy lub zmienić kod źródłowy, aby można było umieścić w niej część programu, SAPI umożliwia umieszczanie w piaskownicy poszczególnych bibliotek C/C++. Dzięki SAPI program główny jest odizolowany od luk w zabezpieczeniach związanych z wykonywaniem kodu w bibliotece C/C++.

  • Nasze motto to: Sandbox raz, używaj w dowolnym miejscu. Biblioteki w piaskownicy z interfejsem Sandboxed API można łatwo ponownie wykorzystać, co eliminuje obciążenie w przypadku przyszłych projektów. Przed wprowadzeniem interfejsu Sandboxed API piaskownice dostępne do użytku w Google wymagały dodatkowych prac wdrożeniowych w przypadku każdej nowej instancji projektu, który miał być umieszczony w piaskownicy, nawet jeśli korzystał z tej samej biblioteki oprogramowania. Zasady Sandbox2 i inne ograniczenia stosowane w procesie w piaskownicy musiały być za każdym razem wdrażane od nowa, a mechanizmy wymiany danych między zaufanymi i niezaufanymi częściami kodu musiały być projektowane od zera.

  • Każda biblioteka SAPI korzysta ze ściśle określonych zasad bezpieczeństwa, w przeciwieństwie do typowego projektu w piaskownicy, w którym zasady bezpieczeństwa muszą obejmować wszystkie wywołania systemowe i zasoby wykorzystywane przez wszystkie używane biblioteki.

Projekt SAPI został zaprojektowany, opracowany i jest utrzymywany przez członków zespołu Google Sandbox. Korzysta też z naszej sprawdzonej w praktyce Sandbox2. Obecnie wiele projektów wewnętrznych korzysta z SAPI do izolowania zadań produkcyjnych.

Szybki start

Aby zacząć korzystać z interfejsu Sandboxed API, wykonaj te czynności:

  1. Zainstaluj wymagane zależności (zakładamy, że używasz systemu Debian 10 Buster):
    $ 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 tych przykładów:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop

Dostępna dokumentacja

Więcej informacji o interfejsie Sandboxed API znajdziesz tutaj:

  • Wyjaśnienie interfejsu Sandboxed API – opis interfejsu Sandboxed API (SAPI) i jego podstawowych koncepcji.

  • Wprowadzenie – zawiera wskazówki, które pomogą Ci utworzyć własną wersję interfejsu API w piaskownicy SAPI.

  • Build Rules (Reguły kompilacji) – wyjaśnia, jak używać reguły kompilacji sapi_library() do kompilowania biblioteki SAPI.

  • Zmienne – omówienie użycia typów SAPI, które są potrzebne 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.

Słowniczek

Sandbox2 Projekt open source Google, który zapewnia warstwę piaskownicy w SAPI.
Sandboxee Plik binarny wykonywany w piaskownicy Sandbox2. Więcej informacji znajdziesz w dokumentacji Sandbox2. W kontekście SAPI jest to biblioteka C/C++ w piaskownicy.
SAPI Sandboxed API to projekt open source Google, który umożliwia tworzenie bibliotek w piaskownicy.
Biblioteka SAPI Biblioteka wygenerowana przez SAPI, zawierająca bibliotekę w piaskownicy, kod Sandbox2 i kod środowiska wykonawczego SAPI.
Obiekt SAPI Obiekt C++, który jest częścią kodu hosta i zapewnia interfejs do biblioteki w środowisku izolowanym za pomocą typów SAPI zamiast oryginalnych.
Typy interfejsu SAPI SAPI udostępnia specjalne typy potrzebne podczas przekazywania wskaźników do prostych typów i bloków pamięci.
SAPI Transaction Moduł służący do zarządzania stanem piaskownicy biblioteki w piaskownicy między uruchomieniami.
RPC Stub Stubs komunikacji RPC (Remote Procedure Call) opakowane w Sandbox2 i używane do przekazywania danych między obiektem SAPI a biblioteką w piaskownicy.
Kod hosta Kod, który korzysta z biblioteki w piaskownicy i zawiera obiekt SAPI.

Współtworzenie interfejsu Sandboxed API

Jeśli chcesz pomóc w rozwoju projektu, przeczytaj plik CONTRIBUTING.md i prześlij nam prośby o scalenie.Możesz też zgłaszać błędy lub przesyłać prośby o dodanie funkcji.

Jeśli chcesz porozmawiać z deweloperami lub otrzymywać powiadomienia o ważnych aktualizacjach usługi, możesz dołączyć do naszej grupy Google: sandboxed-api-users.