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;
read
y 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 test
está abriendo un archivo llamado test
, leyendo su contenido ( hello
) y colocándolo en la salida estándar.
strace
puede producir mucha salida, así que asegúrese de leer su página de manual ( man strace
), especialmente la documentación de la -e
salida 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, ptrace
debe 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 somebinary
y elsandbox
programa imaginario registraría todos los archivossomebinary
leí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.