He estado pensando en un escenario donde uno permite a los usuarios (puede ser cualquiera, posiblemente con malas intenciones) enviar código que se ejecuta en una PC Linux (llamémoslo nodo de referencia). El objetivo es crear un tipo de entorno de evaluación automática para rutinas de subproceso único. Digamos que un sitio web publica algún código en un proxy. Este proxy transfiere este código al nodo de referencia, y el nodo de referencia solo tiene una conexión de Ethernet con el proxy, no con Internet.¿Qué daño puede causar un programa C/asm a Linux cuando lo ejecuta un usuario sin privilegios?
Si se permite que cualquier usuario publique código C/asm para ejecutarse en el nodo de referencia, ¿qué desafíos de seguridad enfrentará? Las siguientes suposiciones se hacen:
- El programa se ejecuta como un usuario sin privilegios
- El proxy tendrá la oportunidad de matar el proceso en el nodo de referencia (tomar el escenario de un bucle infinito por ejemplo)
- el proxy es capaz de reiniciar el nodo de referencia (si responde ...)
por lo tanto, es en la práctica es posible que este programa de espacio de usuario puede hacer que el desplome del sistema operativo, o hacer que la máquina no esté disponible para el proxy ? Con el ensamblaje, el programador puede hacer básicamente lo que quiera (por ejemplo, manipular el puntero de la pila), y me pregunto qué tan restrictivo/robusto es el Linux a este respecto. También sé sobre la posibilidad de que los procesos soliciten regiones de memoria compartida con otros procesos (shm), que también podrían desempeñar un papel aquí.
Cualquier literatura o artículos sobre este tema son bienvenidos.
Las soluciones de Sandbox también pueden ser interesantes, pero es importante que la CPU debe realizar el 100% de lo que es capaz durante el benchmark (al menos en el núcleo se ejecuta el benchmark).
relacionado: http://stackoverflow.com/questions/792764/secure-way-to-run-other-people-code-sandbox-on-my-server –