Ambiente de Execução Protegida

1

Estou investigando recentemente a melhor maneira de implementar um Ambiente de Execução Protegido / Seguro que me permita "carregar" algum código nesse ambiente e bloquear qualquer tipo de saída (da execução do código) em direção ao Sistema Operacional. - Dessa forma, se o código tiver bugs que possam comprometer o sistema, nada será "danificado". Até agora, descobri que as soluções mais comuns são:

  • Sandbox
  • Máquinas virtuais
  • Sistemas de controle de versão de arquivos (por exemplo, particionamento)

No entanto, todos os itens acima apresentam as seguintes desvantagens, respectivamente:

    A funcionalidade
  • é limitada
  • não há suporte para reprodução ou confirmação
  • não há mecanismos para verificar as alterações feitas por diferentes processos

Então, eu descobri, lendo alguns artigos, que a melhor maneira de conseguir isso seria usar um Virtual File System (VFS) e o FUSE. Estou correto ou existem soluções melhores?

Sobre o VFS e o FUSE: Qual é a melhor implementação (suportada) do Python para isso? fusepy?

    
por bulkmoustache 21.11.2013 / 19:31

1 resposta

3

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.

    
por 21.11.2013 / 20:28