Quello che stai cercando è uno strumento che mostra come un programma interagisce con il sistema (più specificamente, con il kernel). I programmi interagiscono con il sistema usando syscalls. Esempi di syscalls sono:
open
- usato per aprire un file;
read
e write
- usato per leggere / scrivere da / verso un descrittore di file;
connect
- utilizzato per collegare una presa a un peer;
- molti, molti altri (vedi
man syscalls
).
Il punto è: i syscalls possono essere tracciati usando ptrace(2)
. Quindi, in sostanza, stai cercando strumenti costruiti intorno ptrace
. Uno di questi strumenti è strace(1)
, che è un'applicazione terminale che accetta un comando come argomento e genera:
- il sistema chiama il programma sta chiamando;
- gli argomenti usati per creare i syscalls;
- il risultato dei syscalls.
L'output è in stile C. Ecco un esempio:
$ 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
/* ... */
Qui vedi che cat test
sta aprendo un file chiamato test
, leggendo il suo contenuto ( hello
) e posizionandolo sull'output standard.
strace
può produrre molto output, quindi assicurati di leggere la sua pagina man ( man strace
), in particolare la documentazione -e
dell'output che ti permetterà di vedere solo le syscalls che ti interessano.
Sfortunatamente, non sono a conoscenza di alternative grafiche o di facile utilizzo. Se vuoi cercarli, ptrace
dovrebbe essere una delle tue parole chiave di ricerca.
Per quanto riguarda l'isolamento, ci sono molte tecnologie là fuori. Chroot, container Linux (che sono attualmente in fase di sviluppo e incompleti), virtualizzazione del software e paravirtualizzazione sono i più utilizzati. Tuttavia, questo è un argomento troppo ampio per essere discusso. Suggerirei di aprire una nuova domanda se desideri avere maggiori dettagli.
sandbox somebinary
e ilsandbox
programma immaginario registra tutti i filesomebinary
letti o scritti, tutti IP / porte connesse, dati trasferiti ecc. Sarebbe una cosa utile avere, vorrei anche sapere se esiste qualcosa del genere (e, in realtà, senza tale strumento osservare un programma in esecuzione in una macchina virtuale sarebbe inutile come te non posso dire quello che fa lì). Buona domanda.