Usando binfmt-misc em conjunto com xattrs

4

Atualmente, uso um software de sandbox na minha máquina 14.04 que isola os binários do Linux uns dos outros (usando um tipo especial de isolamento de namespace diferente do AppArmor)

Atualmente, a maneira de invocar o sandbox é assim:

/usr/local/bin/sandbox /path/to/binary --optional-arguments

Meu problema é, eu quero invocar certos binários arbitrários e executá-los no sandbox sem ter que prefixar a porção /usr/local/bin/sandbox em meu comando shell. Ou seja:

/usr/local/bin/sandbox /path/to/binary --optional-arguments --> *new process*

Torna-se:

/path/to/binary --optional-arguments --> *binfmt-misc* --> *new process*

Eu percebi que eu poderia facilmente fazer isso graças ao binfmt-misc, entretanto, depois de ler a documentação, parece apenas suportar a solicitação de um interpretador através de bits mágicos no próprio arquivo ou através de sua extensão de arquivo. Como não é caro fazer qualquer uma dessas coisas neste caso específico, eu procurei uma opção no binfmt-misc que me permitisse especificar atributos estendidos em determinados binários que eu queria que fossem lançados na sandbox que o binfmt-misc poderia ler e use para determinar que esses binários devem ser executados pelo interpretador /usr/local/bin/sandbox "." No entanto, ainda não encontrei uma característica que me permita fazê-lo.

Existe alguma maneira de eu conseguir lançar binários ELF arbitrários sem extensão compilada para a mesma arquitetura que meu computador usando a sandbox automaticamente?

    
por joshumax 05.05.2016 / 05:00

1 resposta

2

Eu não sei como fazer isso através do binfmt-misc e xattrs, mas vou propor uma abordagem diferente. Eu não tentei, mas não vejo por que isso não funcionaria.

A ideia é usar um conjunto de união para ocultar os binários reais por meio de um script de invólucro que chama o sandbox. Precisamos de uma montagem de união onde o diretório superior é principalmente lido e gravado em um arquivo não-sombreado, vá para o diretório inferior, que não é suportado por todos os sistemas de montagem de união. Em particular, isso exclui o OverlayFS, que agora está embutido no kernel Linux.

Escreva um script de wrapper genérico:

#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"

Crie um diretório /sandbox e crie uma montagem de união que sombreie o sistema de arquivos raiz. Vou usar aufs (Ubuntu: aufs-tools ), que infelizmente foi abandonado recentemente; pode haver uma escolha melhor.

mount -t aufs -o br:/,br:/sandbox aufs-sandbox /

Para cada executável que você deseja proteger, vincule /sandbox/path/to/foo ao script de wrapper (depois de criar os diretórios necessários /path/to under /sandbox ).

    
por Gilles 10.05.2016 / 01:44