2010-10-04 15 views
9

Estoy intentando ejecutar un programa compilado a partir del código C de una fuente desconocida. Quiero asegurarme de que el programa no dañe mi sistema de todos modos. Como por ejemplo, el programa podría tener algo así como system("rm -rf /") en la fuente, que no es detectable, a menos que el código se examine a fondo.¿Cuál es la forma más segura de ejecutar un ejecutable en Linux?

pensé en las 2 formas siguientes

  1. Ejecutar dentro de una máquina virtual como VMware
  2. Construir un exe de Windows en Linux y ejecutar en el vino

Ambos no son soluciones muy elegantes y No puedo automatizarlos. y también, en el caso de 1, puede dañar la máquina virtual.

Cualquier ayuda sería apreciada.

Quiero ejecutar el programa en lo que podemos llamar una "caja de arena".

+1

He pensado en chroot, pero no detiene forkbombs y otros problemas de llamada del sistema. Gracias – arbithero

+0

Preguntas más frecuentes sobre procesos de aislamiento/encarcelamiento en Linux o Unix: * http://unix.stackexchange.com/q/6433/4319 * http://stackoverflow.com/q/4410447/94687 * http : //stackoverflow.com/q/4249063/94687 * http://stackoverflow.com/q/1019707/94687 –

+1

wine no tiene ningún valor en contener el ejecutable. Ejecuta un vino ejecutable como root y puedes limpiar tu sistema. – sehe

Respuesta

4

Geordi usa una combinación de chroot e interceptación de syscalls para compilar y luego el código de zona de pruebas arbitrario.

+1

La fuente de Geordi tiene muchas ideas que puedo usar. ¡Gracias! – arbithero

1

Cree un usuario que tenga acceso de escritura solo a directorios no críticos. Ejecute el programa como ese usuario. Si también está interesado en la privacidad, considere también restringir sus derechos de lectura.

1

La página de la wikipedia para chroot puede ser un buen comienzo. Describe chroot y también proporciona enlaces a algunas alternativas más exhaustivas.

2

Usted puede usar algo como schroot y chroot el programa, pero cualquier cosa de suficiente maldad será eliminada de eso.

Probablemente la mejor opción sea una máquina virtual (vmware o virtualbox) y tome una instantánea antes de compilar y ejecutar el programa. De esa forma puedes retroceder si algo sale mal.

+0

De hecho, solo debes volver a tirarlo después de las pruebas, ya que es posible que no hayas notado lo que estuvo terriblemente mal. – caf

+0

@caf Es cierto, si no es de confianza, no es de confianza. No ensucie ni deshaga de todos modos. – Dave

+0

Las máquinas virtuales tampoco son exactamente un entorno seguro, si el programa que se está ejecutando sabe que está en una. – Jonathan

6

Consulte seccomp. Fue diseñado para este caso de uso.

+0

¡Esto es realmente muy bueno si funciona! Trataré de implementar esto e informar aquí si funciona. Gracias @florin! – arbithero

0

Ejecútelo en una computadora no conectada a la red que volverá a crear la imagen una vez que haya terminado. No hay una forma segura de ejecutarlo en una máquina y continuar confiando en esa máquina después.

+0

O, al menos, una computadora que no está en una red local. – Jonathan

4

Escribí un overview of sandboxing methods on Linux (archived) aquí. Lo mejor es que uses contenedores Linux (lxc) o selinux, en mi opinión. Podría usar una solución de virtualización y automatizarla, pero es mucho más esfuerzo.

lxc aislará sus procesos, sistema de archivos y red, y puede establecer límites de recursos en el contenedor. Todavía hay riesgos de un ataque de kernel, pero están muy reducidos.

0

Además de otras respuestas, usar strace o ltrace puede ayudarlo a comprender qué está haciendo el programa.

Cuestiones relacionadas