Revise la secuencia de comandos de Python cargada por problemas de seguridad antes de ejecutarla

1

Permitiría que un usuario cargue scripts de Python y los ejecute en mi servidor. La aplicación base está en Java y estoy usando ProcessBuilder para hacer que Python se ejecute desde mi aplicación Java. ¿Cómo podría probar las amenazas de seguridad del usuario final cuando cargan su script para que se ejecute en mi servidor?

    
pregunta Rowana Ravenclaw 15.09.2018 - 01:58
fuente

2 respuestas

2

Lamento decirlo, pero esto parece una cosa realmente cuestionable de hacer. Periodo.

Hay un blog famoso de Microsoft llamado " Diez leyes inmutables de seguridad ". La Ley # 1 es:

  

Ley # 1: si un malvado puede persuadirte de que ejecutes su programa en tu computadora, ya no es solo tu computadora.

Hay una razón por la que es el número 1; crear una lista de "cosas malas" para bloquear es un juego perdido: para un lenguaje completo y complejo como python, siempre habrá formas más creativas de hacer cosas malas que no están en tu lista.

Le animo a considerar por qué necesita permitir que los usuarios carguen scripts, y si puede lograr la misma funcionalidad a través de un conjunto de interfaces de usuario, API REST o algún otro método estándar donde la seguridad se entiende bien .

Si absolutamente necesita permitir scripts (python o cualquier otro idioma), entonces descifraré la cantidad mínima de sintaxis de python que los usuarios necesitan para realizar lo que sea que haga su sitio y rechazaré cualquier script que use algo que no esté en eso lista. Haga su investigación sobre cada elemento en esa lista y si podría usarse para hacer una llamada al sistema o para cambiar los archivos en su sistema de archivos. Si esa lista incluye import , entonces sabrá que está perdido de inmediato porque entonces tendrá que tratar de enumerar todo en su sys.path y bloquear las "cosas malas", o de enumerar qué módulos utilizan los usuarios. necesitan, qué métodos dentro de esos módulos necesitan, y verificando manualmente que no se pueda hacer nada malo con ellos. Incluso suponiendo que tenga buenas listas bien investigadas, construir las expresiones regulares para aplicarlas adecuadamente es probablemente una tarea difícil en sí misma.

El otro enfoque es asumir que el servidor está totalmente comprometido todo el tiempo, no lo use para ninguna otra cosa, manténgalo en su propia red de aislamiento lejos de cualquier otro servidor que le interese, cortafuegos fuera del tráfico saliente, y derríbalo y levántate uno nuevo de vez en cuando.

La idea de permitir que los usuarios carguen y ejecuten scripts en su servidor parece un poco como permitir que adolescentes aleatorios experimenten con fuegos artificiales en su sala de estar.

    
respondido por el Mike Ounsworth 15.09.2018 - 02:48
fuente
1

Como señala Mike, esta es generalmente una muy mala idea. Sin embargo, si está listo para hacerlo, lo que podría hacer es crear una máquina virtual separada que sea responsable de ejecutar el código Python no confiable y luego imponer restricciones a los recursos a los que puede acceder la máquina virtual, y oran para que nadie cargue algo que puede eludir esas restricciones.

Tratar de escanear el código de Python para detectar problemas, que es lo que parece tener en mente, no es una forma confiable de determinar si tiene problemas de seguridad.

Para tener una idea del tipo de peligro que está pensando asumir, consulte los siguientes enlaces:

respondido por el Swashbuckler 19.09.2018 - 20:08
fuente

Lea otras preguntas en las etiquetas