Ejecutando un código Python no confiable

2

Tengo un pequeño enrutador OpenWRT, en el que deseo ejecutar un demonio que es un script de Python. Sin embargo, aunque es de código abierto y simple de Python, todavía no confío en él y me gustaría aislarlo del resto del sistema tanto como sea posible. Tiene que hacer lo siguiente:

  • Enlazar y escuchar en un solo puerto TCP
  • Lee / escribe algunos archivos en su directorio de trabajo

Aparte de eso, no debería poder hacer nada. He pensado en hacer lo siguiente:

  • Inicie una secuencia de comandos de envoltura como raíz, vincule el puerto, luego elimine la membresía del grupo y colóquela en un nuevo usuario antes de import ing y ejecute la secuencia de comandos real
  • ejecutarlo en chroot

¿Perdí algo que ayudara a que se ejecute de manera más segura?

    
pregunta matega 01.01.2015 - 15:38
fuente

2 respuestas

2

Aquí hay algunas cosas que consideraría:

  • Revisa el código
  • Cree un nuevo usuario sin privilegios y utilícelo para ejecutar el script (en un puerto superior a 1023) y use IPtables para redirigir el tráfico de puerto bajo a su puerto alto.
  • Observe algo como los controles de recursos para evitar que el usuario / secuencia de comandos ocupe recursos (como abrir un millón de identificadores de archivos)

Los privilegios Chroot y Droping también son buenas opciones, siempre que mantengas tu sistema operativo host actualizado.

    
respondido por el u2702 01.01.2015 - 22:41
fuente
1

Chroot y soltar privilegios es un enfoque sensato. Para corregir un poco tu descripción:

  1. Como root, coloque un chroot en un árbol de directorios que contenga solo el mínimo necesario.
  2. Como root, enlace el puerto, si está por debajo de 1024. Un software como tcpd puede ser útil en esa etapa. Tenga en cuenta que para los puertos superiores a 1024, no necesita realizar el enlace como root.
  3. Eliminar privilegios, es decir, cambiar a un grupo dedicado y luego cambiar a un usuario dedicado.
  4. Ejecutar (como en execve en C o exec en shell) la secuencia de comandos de Python.

Un paso de seguridad adicional útil sería restringir el acceso a la red mediante el script dedicado. Por ejemplo, es posible que desee evitar que escuche en otros puertos o que abra conexiones salientes al teléfono de su casa. Por supuesto, cuánto puede limitarlo y aún así dejar que haga su trabajo depende de lo que se supone que debe hacer. Linux puede restringir el acceso a la red por ID de usuario con iptables -m owner ( ejemplo ).

Linux ofrece mecanismos de seguridad adicionales (espacios de nombres, SELinux, AppArmor, etc.), y la ejecución en una máquina virtual agregaría otra capa de seguridad, pero es probable que no estén disponibles en un sistema integrado con pocos recursos, como un enrutador pequeño.

Para mayor seguridad, puedes ejecutar un Python en caja de arena - pero no parece haber una caja de arena Python en funcionamiento en este momento.

    
respondido por el Gilles 04.01.2015 - 00:45
fuente

Lea otras preguntas en las etiquetas