Parámetros del compilador para aislar un programa C ++

0

¿Hay algún conjunto de parámetros del compilador que se pueda usar para evitar que un programa C ++ tenga acceso a la mayoría de las funciones del sistema, dejándolo con acceso de lectura / escritura a stdin / stdout, pero por lo demás no puede dañar el sistema?

Esto me parece útil para sistemas como el servidor de envío de tareas o el servidor "tryit" en línea.

    
pregunta Stack Tracer 30.04.2018 - 01:18
fuente

1 respuesta

1

Proporcionar tales restricciones generalmente no se considera la tarea de un compilador y sería muy difícil hacerlo de todos modos. Incluso si solo un conjunto restringido de bibliotecas estuviera disponible para vincularlo, todavía es posible llamar directamente a syscalls, es decir, no se necesita una biblioteca.

Para el caso de uso que imagina (envío de tareas), en lugar de eso, debe ejecutar el programa generado en un entorno restringido, es decir, en un recinto de arena dentro de una máquina virtual, contenedores o similar. En el caso más simple, puede ejecutar el código como un usuario diferente y restringido, pero entonces debe estar realmente seguro de que su sistema no puede ser explotado por un usuario con privilegios bajos.

Pero hay otro caso de uso interesante en el que el desarrollador desea restringir las habilidades del programa para reducir el impacto de posibles errores en el programa. Aquí tecnologías como prenda , seccomp o similar permiten al programa renunciar explícitamente a la capacidad de hacer llamadas específicas al sistema (que nunca se pueden volver a obtener), por lo que no se puede usar un error en el programa para causar mucho daño.

El uso de la última idea donde el programa se restringe a sí mismo también podría usarse en su caso de uso para habilitar tales restricciones antes de que se llame a main . Uno podría hacer esto para tener un tiempo de ejecución del compilador diferente o tener otras formas de ejecutar código antes de main . Personalmente, confiaría mucho menos en una solución de este tipo, ya que muchas más pueden salir mal en comparación con la ejecución dentro de una caja de arena real.

Vea también estas preguntas en Unix & Linux donde el OP intenta resolver un problema similar y donde se describe en detalle una solución que usa seccomp.

    
respondido por el Steffen Ullrich 30.04.2018 - 06:08
fuente

Lea otras preguntas en las etiquetas