Estou tentando sandbox todos os meus aplicativos por padrão usando firejail. O Firejail não oferece suporte a aplicativos de snap.
Parece que, por padrão, se solicitado por um snap, o snapd concederá ao snap acesso de leitura/gravação ao diretório inicial do usuário. Isso significa que, por padrão, se houver uma vulnerabilidade explorada em um aplicativo snap "sandboxed" com acesso à rede, seria trivial para um invasor pegar todos os arquivos em $HOME, incluindo chaves GPG, chaves SSH e, é claro, os arquivos do usuário. documentos e outros arquivos.
Fazer algumas pesquisas on-line me levou a ser capaz de fazer um snap disconnect <snap>:<plug interface> <snap>:<slot interface>
que, em teoria, bloquearia o acesso ao diretório inicial. Infelizmente, esta é uma abordagem 'tudo ou nada' (sem capacidade de definir quais pastas em home permitir/negar) e deve ser aplicada a cada snap individualmente após a instalação.
Existe uma maneira de aplicar uma política "sem acesso $ HOME" por padrão a todos os snaps? Em caso afirmativo, existe uma maneira de permitir o acesso a alguns diretórios em $HOME enquanto nega o acesso a outros? Meu entendimento é que o apparmor não pode ser usado para isso devido à maneira como os contêineres de encaixe são projetados.
Plano alternativo: Existe algum truque através do qual eu poderia remontar uma parte da página inicial (digamos /home/folderforsnaps) e enganar os snaps para pensar que é o diretório inicial?
[I] seria trivial para um invasor pegar todos os arquivos em $HOME
Sim, e isso é verdade para todos os aplicativos não-Snap envenenados já escritos também. Sinta-se à vontade para ajudar a testar Snaps em busca de atividades nefastas (afinal, é uma comunidade) e denunciar quaisquer Snaps envenenados que você descobrir.
Um ótimo lugar para discutir a segurança do Snap são os fóruns https://snapcraft.io . Soltar de.
O snapd/AppArmor realmente tem proteção parcial para este ataque em particular: A interface inicial torna o conteúdo de todos os arquivos ocultos (como
~/.ssh
ou~/.thunderbird
) ilegíveis.Existe uma maneira de aplicar uma política "sem acesso $ HOME" por padrão a todos os snaps?
Não. O arquivo YAML de cada Snap define a política de acesso que o Snap precisa para funcionar. Uma política global quebraria Snaps que precisam de acesso a $HOME, exatamente o que os desenvolvedores não pretendiam.
Existe algum truque através do qual eu poderia remontar uma parte da página inicial (digamos /home/folderforsnaps) e enganar os snaps a pensar que é o diretório inicial?
Claro: você pode criar um contêiner LXD, ligar a parte de /home e instalar o Snap no contêiner.
Ou você pode simplesmente executar o Snap como um usuário diferente com um conjunto limitado de dados em /home.
Você pode usar o seguinte para ver quais pacotes de snap usam a
home
interface.Em seguida, você pode escrever um script para
disconnect
cada pacote snap dessa interface. DefinaSNAPLIST
para a saída que você obteve de cima.