2010-12-11 19 views
6

Estaba revisando codepad.org y un rato (1) fork dio el siguiente resultado.¿Cómo se pueden deshabilitar las llamadas al sistema mientras se ejecuta un programa en un entorno de recinto de seguridad?

No permitido llamada al sistema: SYS_fork

Comprobar este enlace para mayor información. http://codepad.org/rNR9mMVv

Haciendo búsquedas en Google, me di cuenta de que también desactivan la llamada al sistema utilizando sockets.

llamada al sistema no permitidos: SYS_socketcall

Puede alguien decirme cómo se puede desactivar ciertas llamadas al sistema antes de ejecutar el programa en un entorno de espacio aislado?

+0

Creo que esto sería un problema de nivel kernel en lugar de específico para C++ o cualquier otro binario nativo. A menos que haya un intérprete de C++ en alguna parte que pueda ejecutar el código en un entorno no nativo. – JOTN

Respuesta

1

¿Reemplazando las bibliotecas de tiempo de ejecución con simulaciones que tienen talones vacíos o lanzamientos de excepciones en lugar de funciones reales?

+0

Pero eso no deshabilitará la funcionalidad real de estas funciones. Por ejemplo, si reemplazo las bibliotecas de tiempo de ejecución de fork() y si quiero bifurcar en mi código, pero deshabilito fork en el código enviado por otros, ¿funcionará este método? Si es así, por favor, hágamelo saber ... Gracias. – sp2hari

+0

Solo estoy postulando, supongo que para la implementación correcta, tendrás que crear algún tipo de ambiente de sandbox, por lo que tendrás tus tiempos de ejecución duplicados, uno real y otro como una sombra. –

+2

No funciona. Alguien que entra puede usar el ensamblaje en línea para acceder directamente a la puerta de enlace syscall. – Joshua

1

Si está dispuesto a pagar la penalización de rendimiento, ptrace() se puede usar para esto. Hay otra forma en que parece que no puedo encontrarlo ahora.

0

Las llamadas al sistema funcionan al inyectar la función en el proceso mediante el sistema operativo. Sin embargo, si escribiste un cargador personalizado para tu formato ejecutable favorito, tendrías el poder de vincularlo con el tuyo. También puede modificar binariamente el ejecutable, si el formato lo permite, para extraer esas funciones de una biblioteca dinámica separada, provista por usted.

0

Sé que esta es una vieja pregunta, pero estaba investigando lo mismo, así que aquí está mi sugerencia: use SELinux. El proyecto Gentoo tiene algunos nice stuff sobre SELinux. Eche un vistazo a la política de SELinux Policy Types (4.b) y en particular, a la política. No estoy seguro acerca de codepad.org, pero el ideone.com similar usa Gentoo, por lo que quizás SELinux sea la forma más fácil de hacerlo.

Cuestiones relacionadas