2010-04-01 9 views
7

En el sitio Ideone un usuario carga el código para que se ejecute en un servidor remoto. Esto es similar a las funciones de un juez en línea.¿Cómo proteger a un juez en línea contra códigos maliciosos?

El problema es que los usuarios pueden cargar código que intente 'piratear' el sistema. Entiendo que en C y C++ es fácil desactivar un cierto conjunto de llamadas al sistema (parchear algunos .dll), pero no estoy tan seguro de otros lenguajes.

¿Cómo protegerías tu sistema si admitieras lenguajes de nivel superior (Erlang, Haskell) en el juez en línea?

+0

Es posible que desee para buscar el proyecto "safeexec" en github – daveagp

Respuesta

2

Ejecutar en un sandbox como usuario no privilegiado. Eso no es absolutamente infalible, pero hace que la barra para hacer daño duradero o compromiso serio sea muy alta. Tampoco depende de posibles opciones o modificaciones al tiempo de ejecución del idioma en cuestión. Si está tratando con un lenguaje completamente compilado (es decir, sin intérprete de tiempo de ejecución), puede hacer esto también.

Por ejemplo, tome Erlang. Configure un chroot jail que contenga solo lo que necesita para ejecutar Erlang. Agregue una cuenta de usuario y un directorio particular sin privilegios. Ingrese el código que se ejecutará, verifique todos los permisos de archivos/directorios, cambie al UID no privilegiado y ejecute el código.

Puede encontrar instrucciones más detalladas sobre la instalación de cárceles en el artículo de Wikipedia mencionado anteriormente. Los procedimientos y requisitos son ligeramente diferentes para diferentes sistemas operativos.

Cuestiones relacionadas