Firefox-Logo

Investigadores de la Universidad de Stanford, la Universidad de California en San Diego y la Universidad de Texas en Austin han desarrollado un conjunto de herramientas a las que les dieron el nombre de “RLBox”, que puede ser utilizado como un nivel adicional de aislamiento para bloquear vulnerabilidades en las bibliotecas de funciones.

RLBox tiene como objetivo resolver el problema de seguridad de las bibliotecas de terceros no confiables que no están controladas por los desarrolladores, pero las vulnerabilidades en las que podría comprometer el proyecto principal.

Mozilla planea usar RLBox en las compilaciones de Firefox 74 para Linux y las compilaciones de macOS en Firefox 75 para aislar la ejecución de la biblioteca Graphite, que se encarga de representar las fuentes.

Al mismo tiempo, RLBox no es específico de Firefox y puede usarse para aislar cualquier biblioteca en proyectos arbitrarios.

Sobre RLBox

El mecanismo de operación RLBox se reduce a compilar el código C/C++ de la biblioteca aislada en un código intermedio de WebAssembly de bajo nivel, que luego se emite como un módulo de WebAssembly, cuya autoridad está configurada para vincularse solo a este módulo (por ejemplo, una biblioteca para procesar cadenas no puede abrir un socket o archivo de red) la conversión de código C/C++ a WebAssembly se realiza mediante wasi-sdk.

Para la ejecución directa, el módulo WebAssembly se compila en el código de la máquina utilizando el compilador Lucet y se ejecuta en un “nanoproceso” separado del resto de la memoria de la aplicación. El compilador Lucet se basa en el mismo código que el motor Cranelift JIT utilizado en Firefox para ejecutar WebAssembly.

El módulo ensamblado funciona en un área de memoria separada y no tiene acceso al resto del espacio de direcciones. En el caso de la explotación de la vulnerabilidad en la biblioteca, el atacante estará limitado y no podrá acceder a las áreas de memoria del proceso principal o transferir el control fuera del entorno aislado.

Se proporciona una API de alto nivel para desarrolladores, que permite llamar a las funciones de la biblioteca en modo de aislamiento.

Los controladores de WebAssembly casi no requieren recursos adicionales y la interacción con ellos no es mucho más lenta que la llamada a funciones ordinarias (las funciones de la biblioteca se ejecutan en forma de código nativo, y la sobrecarga ocurre solo al copiar y verificar datos en el proceso de interacción con un entorno aislado).

Las funciones de una biblioteca aislada no se pueden invocar directamente, y para acceder a ellas, debe usar la capa invoke_sandbox_function ().

A su vez, si necesitan llamar a funciones externas desde la biblioteca, estas funciones deben definirse explícitamente utilizando el método register_callback (de forma predeterminada, RLBox proporciona acceso a las funciones de la biblioteca estándar).

Para garantizar un funcionamiento seguro con memoria, el aislamiento de la ejecución del código no es suficiente y también es necesario proporcionar la verificación de los flujos de datos devueltos.

Los valores generados en un entorno aislado están marcados como no dignos de confianza, limitados por etiquetas contaminadas y requieren verificación y copia en la memoria de la aplicación para “limpieza”.

Sin limpieza, un intento de usar datos contaminados en un contexto que requiere datos regulares (y viceversa) conduce a la generación de errores en la etapa de compilación.

Se pasan pequeños argumentos de función, valores de retorno y estructuras mediante la copia entre la memoria de proceso y la memoria del entorno aislado. Para conjuntos de datos grandes, la memoria se asigna en un entorno aislado y se devuelve un puntero directo de “referencia de sandbox” al proceso principal.

Los desarrollos de RLBox se distribuyen bajo la licencia MIT. RLBox actualmente es compatible con Linux y macOS y se espera que sea compatible con Windows más adelante.

Si quieres conocer mas al respecto sobre esta nueva tecnología que piensa implementar Mozilla en Firefox, puedes consultar su desarrollo así como poder probar la API en el siguiente enlace.

 

Fuente: desdelinux

¿Quién está en línea?

Hay 6030 invitados y ningún miembro en línea