Como aplicar aplicativos em área restrita?

66

Quero executar pequenos programas não confiáveis, mas restringi-los de acessar arquivos fora de suas pastas, acesso à rede e tudo o mais que eles realmente não precisam. Qual é a maneira mais simples de conseguir isso?

michel
fonte
Eu nunca o usei, por isso não posso dar uma resposta completa, mas o AFAIK, AppArmor ( wiki.ubuntu.com/AppArmor ) deve ser capaz de fazer isso.
Javier Rivera
Confira o Vagrant, um invólucro para o VirtualBox. vagrantup.com e [na Wikipedia] ( en.wikipedia.org/wiki/Vagrant_(software%29) e no github
Janus Troelsen
@JavierRivera FWIW, SELinux também. No entanto, não faço ideia de como seria fácil rodar no Ubuntu.
TC1
O Apparmor já está instalado por padrão no Ubuntu, portanto deve ser mais fácil.
Javier Rivera
11
Parece que são várias possibilidades: virtualização usando algo como Virtualbox (como Vagrant), chroot, LXC, App Armour e SE Linux.
Flimm #

Respostas:

26

Se eles não forem realmente confiáveis ​​e você quiser ter certeza, configuraria uma caixa separada. Realmente, ou virtualmente.

Além disso, você não deseja que essa caixa esteja na mesma rede que suas coisas importantes, se você for paranóico o suficiente. Em todas as soluções, você configuraria um usuário separado, sem direitos, para não abrir muitas ferramentas ao possível comprometedor.

  • Portanto, a opção mais segura seria uma caixa separada removida fisicamente da sua rede.
  • Você poderia ceder um pouco adicionando-o à rede física, mas em uma sub-rede diferente: nenhuma conexão 'real' dentro
  • Uma máquina virtual seria uma opção, mas pode ter que abrir mão de algum desempenho

Se você é obrigado a executá-lo na mesma caixa, você tem, por exemplo, esta opção

  • chroot. Essa é uma opção padrão para fazer isso para muitas pessoas e, para ameaças não específicas, pode até funcionar. Mas NÃO é uma opção de segurança e pode ser facilmente quebrada. Eu sugiro usar isso como pretendido, ou seja, não por segurança.

No final, você pode precisar configurar um modelo específico de sandboxing sem a necessidade de virtualização ou caixas separadas, ou a situação ainda em risco de chroot. Duvido que tenha sido isso que você quis dizer, mas veja este link para obter informações mais detalhadas.

Nanne
fonte
Quão seguro seria prudente executar um aplicativo não confiável em uma máquina virtual? Ouvi falar de explorações teóricas que podem acessar o sistema operacional host através do hipervisor e infectá-lo.
Zuallauz
Pode ser que, embora atualmente eu não esteja ciente de ameaças reais como essa, certamente não as não direcionadas. Você deve considerar que o invasor que escreve malware em um jogo não chegaria a esse ponto. Agora, um ataque de lança contra você sozinho pode, é claro, se eles conhecerem o seu layout, mas ainda não acho que essa seja sua primeira preocupação. Se você tem certeza de que eles são mal intencionados, você deve realmente configurar uma caixa isolada de qualquer maneira, em termos de rede.
Nanne
14

Firejail é relativamente novo e em constante desenvolvimento. Fácil de usar.

Você pode simplesmente:

sudo apt-get install firejail
firejail app
penguinforsupper
fonte
Bem-vindo ao Ask Ubuntu! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Mark Kirby
12

O Docker o ajudará a configurar contêineres que você pode executar fora do seu kernel atual, mas mantenha-o afastado do resto do seu sistema. Parece bastante avançado, mas há um foco no Ubuntu uma boa documentação.

N. Thomas Kor
fonte
4
Eu acho que essa é uma boa opção para a maioria dos casos. No entanto, a parte "não confiável" da pergunta original me preocuparia um pouco. Existem hacks demonstrados disponíveis que podem permitir que um aplicativo "saia" de seu contêiner. E, considerando que os contêineres do docker são executados no acesso root, isso pode ser perigoso se o seu objetivo for colocar os aplicativos em uma caixa de areia.
precisa saber é o seguinte
O @CrisHoldorph está correto, embora o Docker esteja melhorando e até acho que hoje em dia é possível executar um docker sem privilégios (não como raiz). Isso certamente é verdade agora, pois o LXC e o LXD (às vezes chamado daemon LXC) podem simplificar bastante a criação desses contêineres. Portanto, contêineres modernos sem privilégios podem ser considerados uma melhoria em termos de segurança em relação ao chroot. Mas eles não são uma barreira impenetrável!
Huygens
O Docker não é uma ferramenta de segurança!
Federico
10

Virtualização / emulação completa (VirtualBox)

Uma solução possível é um software de virtualização como o VirtualBox, que você pode encontrar no centro de software.

  • Caixa Instalar Virtual
  • Crie uma máquina virtual com rede ativada
  • Instale o Ubuntu ou talvez um desktop mais leve, como o Lubuntu
  • Atualize completamente o sistema operacional instalado (dentro da caixa Virtual)
  • Desativar rede na máquina virtual
  • Tire uma foto instantânea

Agora você pode instalar o software em que não confia para ver o que ele faz. Ele não pode perturbar o mundo exterior ou você hospeda o SO, pois ele não tem acesso.

No entanto, isso pode prejudicar sua máquina virtual, mas, se houver, você poderá restaurar a partir do seu instantâneo.

Pode haver outros métodos para limitar o poder destrutivo de software não confiável, mas esse é o método mais robusto em que posso pensar.

Virtualização baseada em contêiner (Docker / LXC)

Outra opção pode ser o LXC, mais informações aqui

LXC é o pacote de controle do espaço do usuário para Linux Containers, um mecanismo de sistema virtual leve, às vezes descrito como "chroot on steroids".

O LXC é desenvolvido a partir do chroot para implementar sistemas virtuais completos, adicionando mecanismos de gerenciamento e isolamento de recursos à infraestrutura de gerenciamento de processos existente do Linux.

Está disponível no centro de software. Eu não tenho experiência com no entanto.

Warren Hill
fonte
11
Isso é apenas inconveniente. Crie uma máquina virtual inteira apenas para rodar jogos !!? essa não é uma solução muito boa. Você não acha que definir o GID e o UID do processo seria MUITO mais fácil do que isso?
91713 Jack Mayerz
Na verdade, acho que configurar uma caixa virtual é suficientemente fácil que eu provavelmente não me incomodaria em tirar uma foto instantânea. Se atrapalhar minha máquina virtual, eu posso descartá-la.
Emory
Downvote: Raciocínio incorreto factual, mesmo que a solução seja rígida. Os programas não precisam ter os mesmos privilégios que o usuário que os executa. Linux e Ubuntu suportam MAC desde anos. O Ubuntu usa o AppArmos para isso, e você pode conter um programa em um diretório facilmente.
Javier Rivera
@JavierRivera "facilmente" não é a palavra correta, ou um perfil do AppArmor e uma política do SELinux para Firefox seriam enviados por padrão em todas as distribuições, e esse não é o caso. O Ubuntu envia esse perfil, mas não está ativo por padrão, pois quebra alguns recursos "populares" do Firefox. Não há muitas políticas do SELinux para a maioria dos aplicativos de GUI, pois esses aplicativos exigem muitas permissões para serem chamados de área restrita. Se você não concordar, poste aqui os links para o sandbox Firefox com segurança usando o AppArmor ou o SELinux! Se você puder eu seria :-) muito feliz
Huygens
Você provavelmente deve definir "seguro" para uma resposta significativa, mas a política padrão do Firefox no Ubuntu é bastante razoável para mim. É claro que quebra coisas como não é tão fácil de usar quanto usar nada, mas ainda é muito mais fácil do que uma máquina virtual completa para mim (que também quebra os recursos populares do Firefox).
21316 Javier Rivera #:
9

mbox

O Mbox é um mecanismo leve de sandbox que qualquer usuário pode usar sem privilégios especiais em sistemas operacionais básicos.

Eu o usei para algumas coisas de maneira confiável.

0x78
fonte
4

subusuário

Você pode usar o subusuário para proteger seus aplicativos com o Docker. Isso permite que você faça coisas como aplicativos da GUI da área restrita, o que não é fácil com o Docker diretamente.

sudo apt install subuser
timthelion
fonte
1

Penso que uma solução possível é criar um usuário separado para fins de teste e limitar seus privilégios. Dessa forma, você não perderá o desempenho, o que definitivamente aconteceria na máquina virtual, mas acho que isso é menos seguro, se não configurado de maneira adequada, o que não posso aconselhar sobre como fazer.

Phlya
fonte
2
Isso não proteger o sistema de software malicioso que pode ainda ser instalado ou executado - também não é sandboxing da maneira que esta questão significa
Thomas Ward
1

DoSH - Docker SHell

No caso de você simplesmente desejar proteger a atividade dos usuários, você pode usar "DoSH"

O DoSH (que significa Docker SHell) é um desenvolvimento para criar contêineres do Docker quando os usuários efetuam login no sistema Linux e executam um shell neles, em vez de simplesmente criar o shell.

ubuser
fonte