2009-02-08 17 views
5

La implementación de un entorno 'sandbox' en Python solía hacerse con el módulo rexec (http://docs.python.org/library/rexec.html). Desafortunadamente, se ha desaprobado o eliminado debido a algunas vulnerabilidades de seguridad. ¿Hay una alternativa?¿Hay alguna alternativa a rexec para el sandboxing de Python?

Mi objetivo es que el código de Python ejecute scripts de Python de confianza. En un mundo perfecto, las llamadas a cualquier función fuera de un conjunto predefinido generarían excepciones. Por lo que he leído sobre la desaprobación de rexec, esto puede no ser posible. Así que me conformaré con todo lo que pueda. Puedo generar un proceso separado para ejecutar los scripts, lo que ayuda mucho. Pero aún podrían abusar de E/S o recursos de procesador/memoria.

+0

Por lo que parece, parece que mientras ulimit creación pid, rexec es seguro. – user2284570

Respuesta

4

Es posible que desee proporcionar su propio __import__ para evitar la inclusión de cualquier módulo que considere "abuso de E/S o recursos de procesador/memoria".

Es posible que desee comenzar con pypy y crear su propio intérprete con limitaciones y limitaciones en el uso de recursos.

+0

¡Proporcionar su propio __import__ es una gran idea, y es mucho mejor que cualquier otra solución que se haya hecho para sandboxing! – kylebrooks

+0

@kylebrooks: "mucho mejor que cualquier otra solución" es una cadena de bits. Le permite incluir en la lista blanca (y en la lista negra) los módulos, pero no impide o incluso detecta un proceso que intenta "abusar de E/S o recursos de procesador/memoria". –

+0

Solo puede incluir en la lista blanca o en la lista negra esos módulos si no tiene acceso a los objetos que contienen referencias a ellos (o una extensión c que omite por completo los módulos de nivel de pitón). La falta de encapsulación en python parece ser el mayor desafío de seguridad. – DylanYoung

2

en CPython "caja de arena" por razones de seguridad es una: "no hacerlo en sus hijos empresa" -cosa.

intento:

  • jython con Java "caja de arena"
  • PyPy -> Véase la respuesta de S. Lott
  • quizá IronPython tiene una solución?

ver Warning:

Advertencia

En Python 2.3 estos módulos se han desactivado debido a diversos agujeros de seguridad se pueden corregir fácilmente conocidos y no. Los módulos están documentados aquí para ayudar a leer el código antiguo que usa los módulos Rexec y Bastion.

+0

Parece que todos esos agujeros de seguridad requieren la creación de hilo o proceso. Entonces rexec es seguro si la creación pid es ulimit. – user2284570

0

Su mejor apuesta para la seguridad en cPython es utilizar los mecanismos de espacio aislado del sistema operativo y ejecutar el código que no es de confianza en un proceso separado restringido por el sistema operativo.

Esto es equivalente a usar 'jython with java "sandboxing"', según the answer above, pero probablemente sea un poco más difícil de configurar.

Cuestiones relacionadas