Google abrió un sistema para crear entornos de espacio aislado para C / C++

Hace algunos días Google anuncio la apertura del proyecto de la API Sandboxed, que permite automatizar el proceso de creación de entornos de sandbox para la ejecución aislada de bibliotecas arbitrarias en C y C ++.

El aislamiento del código de las bibliotecas le permite protegerse contra posibles ataques en los manejadores proporcionados por las bibliotecas, creando una barrera adicional en caso de que existan vulnerabilidades en su código que puedan ser explotadas a través de manipulaciones con los datos externos que ingresan a la biblioteca. El código está abierto bajo la licencia Apache 2.0.

El aislamiento se realiza utilizando dentro del runtime de Sandbox2, en el que se utilizan los espacios de nombres, cgroups y seccomp-bpf.

El código entregado a la sandbox que se ejecuta en un proceso separado, para el cual el acceso a las llamadas y recursos del sistema, así como archivos y conexiones de red, es limitado.

Los procesos obtienen acceso solo a las capacidades del sistema que se requieren directamente para ejecutar el código aislado.

Sandbox2 define los componentes para ejecutar el proceso, aplicarle las reglas de aislamiento y respaldar la ejecución posterior.

Sandbox2 se puede usar por separado de la API de Sandbox para aislar no solo bibliotecas, sino también procesos arbitrarios.

Además de aumentar la protección, un punto positivo en la eliminación del código en procesos separados es la posibilidad de una regulación separada de los límites en el consumo de memoria de la biblioteca y la CPU, así como la protección contra fallas: una falla en la biblioteca no provoca el colapso de toda la aplicación.

Sobre Sandboxed API

Sandboxed API es un complemento de Sandbox2 que simplifica el transporte de bibliotecas existentes para que se ejecuten en modo aislado.

Sandboxed API proporciona una interfaz de software intermedia que le permite ejecutar el código de la biblioteca en un entorno de sandbox, así como organizar una llamada a una biblioteca en un entorno de sandbox y garantizar la entrega de los resultados de la biblioteca al programa principal.

Se accede a la biblioteca aislada a través de un RPC especializado basado en el protocolo ProtoBuffs.

A los desarrolladores de bibliotecas se les ofrece un conjunto de opciones que permiten el acceso a variables, descriptores de archivos, buffers y funciones de biblioteca aisladas desde la aplicación base, incluidas herramientas para la sincronización automática y controlada de la memoria para compartir arreglos y estructuras.

Cuando una biblioteca de software que analiza dichos datos es lo suficientemente compleja, puede ser víctima de ciertos tipos de vulnerabilidades de seguridad: errores de corrupción de memoria u otros tipos de problemas relacionados con la lógica de análisis (por ejemplo , problemas de recorrido de ruta ). Esas vulnerabilidades pueden tener serias implicaciones de seguridad.

Además, se proporciona una API para monitorear la operación de procesos aislados y reiniciarlos en caso de fallas.

Para la biblioteca aislada, se genera automáticamente un código con anotaciones de las funciones aisladas para el sistema de ensamblaje Bazel y la interfaz del programa (SAPI) para la interacción entre los procesos básicos y aislados.

El desarrollador también debe crear un archivo de encabezado con reglas de aislamiento que definan todas las llamadas y operaciones permitidas del sistema (lectura, escritura, archivos abiertos, acceso al tiempo, la capacidad de instalar manejadores de señales, soporte para la asignación de memoria a través de malloc, etc.).

Los archivos y directorios a los que la biblioteca debe tener acceso se determinan por separado.

Instalacion

Actualmente, el proyecto está disponible solo para Linux, pero en el futuro prometen agregar soporte para los sistemas macOS y BSD, y en el largo plazo, y para Windows. Si quieres instalar sandboxed api puedes seguir las instrucciones dadas en este enlace.

De los planes, también se señala la posibilidad de aislamiento de bibliotecas en lenguajes distintos de C y C ++, soporte para el runtime adicional para el aislamiento (por ejemplo, basado en virtualización de hardware) y la posibilidad de usar CMake y otros sistemas de ensamblaje (el soporte ahora está limitado al sistema de compilación de Bazel).

Fuente: https://security.googleblog.com


Sé el primero en comentar