Lo que está buscando es una herramienta que muestre cómo un programa interactúa con el sistema (más específicamente, con el núcleo). Los programas interactúan con el sistema usando syscalls. Ejemplos de syscalls son:
open - Se utiliza para abrir un archivo;
ready write- se usa para leer / escribir desde / a un descriptor de archivo;
connect - Se utiliza para conectar un zócalo a un par;
- muchos, muchos otros (ver
man syscalls).
El punto es: las llamadas al sistema se pueden rastrear usando ptrace(2). Entonces, básicamente, estás buscando herramientas construidas alrededor ptrace. Una de esas herramientas es strace(1), que es una aplicación de terminal que toma un comando como argumento y genera:
- el sistema llama al programa está llamando;
- los argumentos utilizados para hacer las llamadas al sistema;
- El resultado de las llamadas al sistema.
La salida está en forma de C. Aquí hay un ejemplo:
$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY) = 3
/* ... */
read(3, "hello\n", 32768) = 6
write(1, "hello\n", 6) = 6
read(3, "", 32768) = 0
/* ... */
Allí verá que cat testestá abriendo un archivo llamado test, leyendo su contenido ( hello) y colocándolo en la salida estándar.
stracepuede producir mucha salida, así que asegúrese de leer su página de manual ( man strace), especialmente la documentación de la -esalida que le permitirá ver solo las llamadas al sistema que le interesan.
Desafortunadamente, no conozco alternativas gráficas o fáciles de usar. Si desea buscarlos, ptracedebe ser una de sus palabras clave de búsqueda.
Sobre el aislamiento, hay muchas tecnologías por ahí. Chroots, contenedores de Linux (que están actualmente en desarrollo e incompletos), la virtualización de software y la paravirtualización son los más utilizados. Sin embargo, este es un tema demasiado grande para discutirlo. Sugeriría abrir una nueva pregunta si desea obtener más detalles.
sandbox somebinaryy elsandboxprograma imaginario registraría todos los archivossomebinaryleídos o escritos, todo IP / puertos conectados, datos transferidos, etc. Sería algo útil, también me gustaría saber si existe algo como esto (y, en realidad, sin esa herramienta, observar un programa que se ejecuta en una VM no tendría sentido No puedo decir lo que hace allí de todos modos). Buena pregunta.