¿Qué es la API de Sandboxed?

El proyecto de código abierto de la API de Sandboxed (SAPI) se basa en el proyecto de código abierto Sandbox2 de Google y tiene como objetivo hacer que el aislamiento de bibliotecas de C/C++ sea menos engorroso.

La API de Sandboxed proporciona tres beneficios principales:

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

  • Nuestro lema de trabajo es: Crea un sandbox una vez y úsalo en cualquier lugar. Las bibliotecas aisladas con la API de Sandboxed se pueden reutilizar fácilmente, lo que elimina la carga de proyectos futuros. Antes de la API de Sandboxed, las zonas de pruebas disponibles para su uso en Google requerían trabajo de implementación adicional con cada instancia nueva de un proyecto que se pretendía aislar en una zona de pruebas, incluso si se reutilizaba la misma biblioteca de software. Las políticas de Sandbox2 y otras restricciones aplicadas al proceso en zona de pruebas debían volver a implementarse cada vez, y los mecanismos de intercambio de datos entre las partes confiables y no confiables del código debían diseñarse desde cero.

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

El proyecto de la SAPI fue diseñado, desarrollado y es mantenido por miembros del equipo de Google Sandbox. También usa nuestro Sandbox2, probado en el campo. Actualmente, muchos proyectos internos usan la SAPI para aislar sus cargas de trabajo de producción.

Inicio rápido

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

  1. Instala las dependencias requeridas (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 encontrar más información sobre la API de Sandboxed aquí:

  • Explicación de la API en zona de pruebas: Describe la API en zona de pruebas (SAPI) y sus conceptos básicos.

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

  • Build Rules: Explica cómo usar la regla de compilación sapi_library() para compilar tu biblioteca de SAPI.

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

  • Transacciones: Explica cómo usar el módulo de transacciones de la SAPI para supervisar las llamadas a funciones.

Glosario

Sandbox2 Proyecto de código abierto de Google que proporciona la capa de zona de pruebas en la SAPI.
Sandboxee Es el ejecutable binario que se ejecuta en la zona de pruebas de Sandbox2. Consulta la documentación de Sandbox2. En el contexto de la SAPI, esta es la biblioteca C/C++ en zona de pruebas.
SAPI API de Sandboxed: Proyecto de código abierto de Google que proporciona la funcionalidad para compilar bibliotecas de Sandboxed.
Biblioteca de SAPI Biblioteca generada por la SAPI, que contiene la biblioteca en zona de pruebas, el código de Sandbox2 y el código de tiempo de ejecución de la SAPI.
Objeto SAPI Objeto de C++, incluido en el código del host, que proporciona una interfaz a la biblioteca en zona de pruebas con tipos de SAPI en lugar de los originales.
Tipos de SAPI La SAPI proporciona tipos especiales necesarios cuando se pasan punteros a tipos simples y bloques de memoria.
Transacción de la API de SAPI Módulo que se usa para administrar el estado de zona de pruebas de la biblioteca con zona de pruebas entre ejecuciones.
Stub de RPC Stub de comunicación de llamada de procedimiento remoto (RPC) encapsulado en Sandbox2 y que se usa para pasar datos entre el objeto de la SAPI y la biblioteca en zona de pruebas.
Código de anfitrión Es el código que usa la biblioteca aislada y que incluye el objeto de la SAPI.

Cómo contribuir con la API en zona de pruebas

Si quieres 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 las actualizaciones importantes del producto, puedes unirte a nuestro Grupo de Google: sandboxed-api-users.