¿Qué es la API de Sandboxed?

El proyecto de la API de Sandboxed de código abierto (SAPI) se basa en el proyecto de código abierto Sandbox2 de Google y tiene como objetivo reducir la carga de la zona de pruebas de las bibliotecas C/C++.

La API de Sandboxed ofrece tres beneficios principales:

  • En lugar de hacer una zona de pruebas de programas completos o tener que cambiar el código fuente para poder hacer una zona de pruebas de una parte de un programa, como sucede con Sandbox2, con SAPI puedes hacer una zona de pruebas de bibliotecas de C/C++ individuales. Como resultado, con SAPI, el programa principal se aísla de las vulnerabilidades de ejecución del código en la biblioteca C/C++.

  • Nuestro lema es Sandbox una vez, usa cualquier lugar. Las bibliotecas de zonas de pruebas con la API de Sandboxed se pueden volver a usar fácilmente, lo que quita la carga de proyectos futuros. Antes de la API de Sandboxed, las zonas de pruebas disponibles para usar en Google requerían trabajo de implementación adicional con cada instancia nueva de un proyecto que se pensaba como zona de pruebas, incluso si reutilizaba la misma biblioteca de software. Las políticas de Sandbox2 y otras restricciones aplicadas al proceso de la zona de pruebas tuvieron que volver a implementarse cada vez, y los mecanismos de intercambio de datos entre partes del código que eran confiables y no confiables tuvieron que diseñarse desde cero.

  • Cada biblioteca de SAPI utiliza una política de seguridad bien definida, a diferencia del proyecto típico de zona de pruebas, en el que las políticas de seguridad deben cubrir la huella total de las llamadas de sistema y los recursos de todas las bibliotecas utilizadas.

Los miembros del equipo de Google Sandbox de Google se encargan de diseñar, desarrollar y mantener el proyecto de SAPI. También usa nuestra herramienta Sandbox2 probado en campo. En la actualidad, muchos proyectos internos usan SAPI para aislar las cargas de trabajo de producción.

Inicio rápido

Para comenzar a usar la API de Sandboxed, sigue estos pasos:

  1. Instala las dependencias necesarias (se supone que ejecutas 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. Clona y ejecuta la compilación:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. Prueba uno de los ejemplos:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop
    

Documentación disponible

Puedes obtener más información sobre la API de Sandboxed aquí:

  • Explicación de la API de Sandboxed: Describe la API de Sandboxed (SAPI) y sus conceptos principales.

  • Primeros pasos: Proporciona orientación para ayudarte a crear tu propia versión de zona de pruebas de SAPI de una API.

  • Reglas de compilación: Se explica cómo usar la regla de compilación sapi_library() para compilar tu biblioteca SAPI.

  • Variables: Se analiza el uso de tipos de SAPI, que se necesitan cuando se pasan punteros a tipos simples y bloques de memoria.

  • Transacciones: Se explica cómo usar el módulo de transacciones de SAPI para supervisar llamadas a funciones.

Glosario

Sandbox2 Proyecto de código abierto de Google que proporciona la capa de zona de pruebas en SAPI.
Zona de pruebas El objeto binario que se ejecuta en la zona de pruebas de Sandbox2. Consulta la documentación de Sandbox2. En el contexto de SAPI, esta es la biblioteca C/C++ de zona de pruebas.
SAPI API de Sandboxed: Proyecto de código abierto de Google que proporciona la funcionalidad para compilar bibliotecas de zona de pruebas.
Biblioteca SAPI Biblioteca generada por SAPI que contiene la biblioteca de Sandboxed, el código de Sandbox2 y el código de entorno de ejecución SAPI.
Objeto de la API Un objeto C++, incluido en el código de host, que proporciona una interfaz a la biblioteca de la zona de pruebas mediante tipos de SAPI en lugar de los originales.
Tipos de SAPI SAPI proporciona tipos especiales necesarios cuando se pasan punteros a tipos simples y bloques de memoria.
Transacción de SAPI Un módulo que se usa para administrar el estado de la zona de pruebas de la biblioteca de la zona de pruebas entre ejecuciones.
stub de RPC stub de comunicación de llamada de procedimiento remoto (RPC) unido en Sandbox2 y que se usa para pasar datos entre el objeto SAPI y la biblioteca de la zona de pruebas.
Código de host El código que usa la biblioteca de zona de pruebas e incluye el objeto SAPI.

Contribuye a la API de Sandboxed

Si deseas contribuir, lee CONTRIBUTING.md y envíanos solicitudes de extracción.También puedes informar errores o presentar solicitudes de funciones.

Si deseas hablar con los desarrolladores o recibir notificaciones sobre actualizaciones importantes de productos, te recomendamos unirte a nuestro Grupo de Google: sandboxed-api-users.