A maneira mais fácil de criar um "ambiente de execução protegido" é simplesmente executar como um usuário não privilegiado. O processo pode, então, apenas alterar as coisas que o usuário tem permissão para alterar, o que, se você criar um usuário especificamente para testes seguros, não será essencialmente nada. Adicionar e excluir usuários é um único comando.
A única razão pela qual esse método não seria viável é se o processo exigir privilégios de superusuário. Nesse caso, você deve usar algum tipo de caixa de proteção especial ou máquina virtual. "Sandboxes" em geral não significa necessariamente que privilégios de superusuário são viáveis, mas eles podem (q.v. man chroot
).
I figured out by reading some articles that the best way to achieve this would be using a Virtual File System (VFS) and FUSE.
Não sei por que você acha isso. Um sistema de arquivos virtual ainda é apenas um sistema de arquivos, por isso não oferece nenhum tipo de segurança WRT os executáveis nele. Isso é tão "seguro" quanto montar um dispositivo USB (contendo um sistema de arquivos) e depois executar um arquivo executável nele. Só porque o executável (ou, no caso do python, um script / bytecode) é armazenado em um dispositivo removível (ou um VFS) não protege você de qualquer coisa.
Da mesma forma, não vejo como "os sistemas de controle de versão de arquivos (por exemplo, particionamento)" oferecem qualquer tipo de segurança para o sistema host, pelo mesmo motivo. Esse não é o objetivo deles, BTW.
O WRT procura algo que supere as desvantagens que você lista:
-
"sem suporte para reprodução ou comprometimento" Se por "no support" você quer dizer que não é possível, é claro que é possível. Você pode usar qualquer metodologia que você usaria normalmente. Se por "no support" você quer dizer que uma VM não inclui algum tipo de software de leitura da mente, isso está correto. Leitura da mente requer hardware adicional;)
-
"nenhum mecanismo para verificar as alterações feitas por diferentes processos" Idem ao último ponto. Se você precisa observar o que um processo está fazendo, você pode fazê-lo, como normalmente faria -
strace
, criação de perfil, o que for. Pode haver caixas de proteção especializadas que fazem isso, mas acho que elas serão especializadas em linhas específicas.
Nessa frente, não sou usuário de Python, mas um rápido Google levou a SandBoxedPython . Eu não sei se alguma coisa lá inclui ferramentas para fazer rastreio para você, mas se o código que você quer testar é python, isso parece um bom ponto de partida.