O que você está procurando é uma ferramenta que mostre como um programa interage com o sistema (mais especificamente, com o kernel). Os programas interagem com o sistema usando syscalls. Exemplos de syscalls são:
open
- usado para abrir um arquivo;
read
e write
- usado para ler / gravar de / para um descritor de arquivo;
connect
- usado para conectar um soquete a um par;
- muitos, muitos outros (veja
man syscalls
).
O ponto é: syscalls podem ser rastreados usando ptrace(2)
. Então, basicamente, você está procurando ferramentas construídas ptrace
. Uma dessas ferramentas é strace(1)
, que é um aplicativo de terminal que assume um comando como argumento e gera:
- o sistema chama o programa está chamando;
- os argumentos usados para fazer os syscalls;
- o resultado dos syscalls.
A saída é do tipo C. Aqui está um exemplo:
$ 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
/* ... */
Lá você vê que cat test
está abrindo um arquivo chamado test
, lendo seu conteúdo ( hello
) e colocando-o na saída padrão.
strace
pode produzir muita saída, portanto, leia sua página de manual ( man strace
), especialmente a documentação da -e
saída que permitirá ver apenas os syscalls nos quais você está interessado.
Infelizmente, não conheço alternativas gráficas ou fáceis de usar. Se você deseja procurá-los, ptrace
deve ser uma das suas palavras-chave de pesquisa.
Sobre o isolamento, existem muitas tecnologias por aí. Chroots, contêineres Linux (atualmente em desenvolvimento e incompletos), virtualização de software e paravirtualização são os mais utilizados. No entanto, este é um tópico muito grande para discutir. Sugiro que você abra uma nova pergunta se desejar obter mais detalhes.
sandbox somebinary
e osandbox
programa imaginário registraria todos os arquivossomebinary
lidos ou gravados, todos IPs / portas conectados, dados transferidos etc. Isso seria útil, também gostaria de saber se existe algo assim (e, na verdade, sem essa ferramenta, observar um programa em execução em uma VM não faria sentido. não posso dizer o que faz lá de qualquer maneira). Boa pergunta.