Me gustaría ejecutar binarios arbitrarios (potencialmente peligrosos) en mi servidor. Por lo tanto, he usado objcopy
para cambiar el nombre del símbolo "principal" a "other_main" para poder enlazar en mi propia función principal pequeña que establece un valor apropiado para RLIMIT_CPU
y alterna el indicador SECCOMP
antes de llamar a other_main. Estoy muy contento con esta solución hasta ahora.SECCOMP: ¿Cómo emular malloc, realloc y gratis?
El problema ahora es que el código del programa de terceros podría contener algunas llamadas a malloc que podrían matar el programa al instante (sbrk no está permitido). Por lo tanto, me gustaría asignar previamente una matriz de tamaño razonable (por ejemplo, 20 MB) antes de configurar SECCOMP
que debería ser utilizada por malloc/realloc/calloc/free. Lamentablemente, no sé cómo archivar el último paso. ¿Tengo que implementar todas esas 4 funciones por mi cuenta? ¿Cómo puedo inyectar mis propias funciones a stdlib (por ejemplo, qué ocurre cuando printf llama internamente a malloc?).
¿Realmente funciona el cambio de nombre de símbolos? Realmente me pregunto qué hará OS con unos binarios despojados. –
Cambiar el nombre de símbolos funciona bien aquí. objcopy parece ser realmente poderoso. Aparentemente no se te permite quitar los binarios, pero eso no es un problema para mí, porque compilo los binarios por mi cuenta. Es solo el código C que no es confiable. – tux21b
¿Puede proporcionar a sus usuarios una biblioteca C diferente (por ejemplo, Newlib) que la biblioteca de su sistema operativo? Si es así, sería muy fácil escribir su propio 'sbrk' (que no puede salir de su caja de arena) y luego malloc/realloc/calloc/free y todos los amigos trabajarán. –