security lua environment-variables sandbox capability

security - Capacidades para Lua: ¿qué experiencia hay?



environment-variables sandbox (1)

No puedo hablar con Lua, pero para Javascript, Caja tiene herramientas para crear un recinto de seguridad apropiado, lo que limita el acceso solo a ciertas funciones. Originalmente fue creado para construir un sandbox para widgets HTML / JS (como los utilizados en iGoogle).

http://code.google.com/p/google-caja/

Aquí hay una descripción del proyecto desde su página de inicio:

Caja (pronunciado "KA-ha"), es una palabra en español que significa caja, banco, caja registradora, bóveda; un contenedor para objetos de valor. Un desarrollador web usa herramientas tradicionales como HTML, JavaScript y CSS; y Caja proporciona un compilador (un "cajoler") que toma la aplicación web y produce una aplicación web HTML "engatusada". La herramienta de comprobación intenta verificar las propiedades de seguridad haciendo un análisis estático, y cuando no puede, reescribe la entrada para agregar comprobaciones de tiempo de ejecución.

Dado que las aplicaciones web hacen un uso común de las API del navegador, por ejemplo, las API de DOM, que otorgan una gran cantidad de control sobre la página web, Caja proporciona API domesticadas que virtualizan partes del DOM. Una página que contiene puede configurar el entorno de la aplicación de integración para que la aplicación incorporada piense que está interactuando con el DOM de una página completa, pero de hecho solo está manipulando una parte limitada de la página que contiene un mecanismo llamado iframes virtuales.

El JavaScript que utiliza una aplicación Caja está escrito en un subconjunto de detención de fallas de JavaScript (en realidad, EcmaScript5). Este subconjunto, llamado "Valija", incluye casi todo el lenguaje de JavaScript, pero elimina algunas construcciones propensas a errores como, por ejemplo, y restringe cómo se puede usar eval.

Se ha debatido sobre la lista de correo cap-talk sobre si Lua y Javascript soportan el modelo de capacidad de objeto, con la conclusión de que debido al soporte para restringir el entorno a funciones llamadas a través de setfenv , y la posibilidad de referencias imborrables a objetos inmutables, el OCM podría ser implementado.

¿Hemos visto cómo funciona esto? Estoy interesado en eliminar exploits de una aplicación existente con soporte de scripting generoso y muy útil en Lua que desafortunadamente permite el acceso completo de shell en todo tipo de casos. Se necesita acceso a shell: el modelo de capacidad de objeto parece ser una buena forma de administrar las cosas. Pero me preocupa lo convincente que pueda ser que este enfoque sea realmente seguro en la práctica desordenada.

Algunos enlaces:

  1. Pregunta SO más antigua: ¿Cómo puedo crear un entorno seguro Lua?
  2. Antecedentes en erights.org: de los objetos a las capacidades
  3. Lua wiki: SandBoxes y ReadOnlyTables - muestra setfenv en acción; muestra una idea básica detrás de las tablas que, en las circunstancias adecuadas, se puede leer solo