Excluir arquivos com segurança no sistema de arquivos btrfs

22

Às vezes, há a necessidade de excluir um arquivo em um sistema de arquivos e garantir que o arquivo realmente se foi. Um arquivo que contém senhas confidenciais, por exemplo, deve ser completamente apagado do disco.

A emissão de um simples rmem um sistema de arquivos típico exclui o inode ("ponteiro") para o arquivo, mas não exclui o conteúdo do arquivo no disco físico - eles são deixados lá até serem substituídos quando o sistema de arquivos precisar de espaço livre.

Em muitos sistemas de arquivos, o programa shred permite essa exclusão segura. No entanto, em um sistema de arquivos CoW como o btrfs, essa abordagem é inútil . O problema é exacerbado pelo fato de o arquivo estar presente nas capturas instantâneas de volume.

Existe uma maneira de excluir com segurança um arquivo em um sistema de arquivos btrfs? É suficiente excluir todos os ponteiros (em todos os volumes) e preencher o espaço livre com zeros ?

goncalopp
fonte
2
Boa pergunta, eu nunca pensei nessa questão antes. Uma maneira de contornar esse problema seria criptografar esses arquivos. Você também pode criptografar o disco inteiro, mas se um invasor obtiver acesso root ao sistema em execução, isso não o ajudará ...
mreithub
@mreithub De fato, criptografar esses arquivos é sempre uma boa idéia, em primeiro lugar, assim como o FDE. Porém, ele não pode contemplar todos os casos de uso (um sistema incorporado, por exemplo - embora seja discutível se esse sistema estaria executando o btrfs de qualquer maneira ...). Na verdade, estou perguntando isso porque eu esqueci de criptografia de configuração antes de copiar arquivos sensíveis, mas eu gostaria de evitar limpando toda a partição
goncalopp

Respostas:

9

Exclusão segura é uma proposta difícil em qualquer sistema de arquivos. A menos que o sistema de arquivos seja muito peculiar e garanta que não haja outras cópias do arquivo, você precisará limpar todo o espaço livre no dispositivo. Embora seja mais provável que você encontre muitos bits do arquivo em sistemas de arquivos copiar na gravação, ainda mais sistemas de arquivos "estáticos" não têm essa garantia na prática, porque muitos arquivos são editados, portanto, há pouco nas versões anteriores do arquivo deitado por aí.

Observe que apagar com zeros é tão bom quanto apagar com bytes aleatórios e você não precisa de várias passagens. Apagar com zeros deixou dados residuais que poderiam ser parcialmente recuperados em condições de laboratório com as tecnologias de disco rígido dos anos 80; isso não é mais aplicável hoje. Consulte Por que escrever zeros (ou dados aleatórios) em um disco rígido várias vezes melhor do que apenas fazer uma vez?

Você pode se livrar dos dados confidenciais de texto não criptografado criptografando tudo no disco. Configure um volume ecryptfs sobre esse sistema de arquivos e mova todos os seus arquivos (confidenciais) para ele. Em seguida, substitua todo o espaço não utilizado do sistema de arquivos. Você pode apagar a maior parte preenchendo o sistema de arquivos cat /dev/zero >zero. Ainda pode haver algumas informações deixadas em blocos incompletos (blocos que contêm o último pedaço de um arquivo, seguido por algum lixo - que pode ser sobra de um arquivo confidencial). Para garantir que não haja blocos incompletos, mova tudo no sistema de arquivos para ecryptfs (os arquivos do ecryptfs usam blocos inteiros, pelo menos em configurações típicas em que os blocos têm 4kB). Certifique-se de aplicar isso a todos os volumes e de apagar todos os instantâneos que contêm dados confidenciais em texto sem formatação.

Ainda pode haver algumas informações no diário. Eu não sei como esfregar isso.

No SSD, devido à realocação de blocos, pode haver dados que não podem ser lidos por meios normais de software, mas podem ser recuperados invadindo o firmware ou com acesso físico. Lá, seu único recurso é uma limpeza completa do SSD.

Gilles 'SO- parar de ser mau'
fonte
3
Os zeros têm a desvantagem de poderem ser compactados ou omitidos inteiramente (um SSD pode TRIM em vez de escrever zeros, pois os setores TRIM retornam zeros quando você os lê). Isso torna os zeros inseguros hoje em dia. O uso de dados aleatórios força o sistema de arquivos e o disco a gravar os dados como estão.
Frostschutz
@frostschutz Escrever qualquer caractere que não 0seja bom, e não sujeito a TRIMing, diria que escrever todos 1é? Ou algumas unidades usam compressão em tudo?
Xen2050 23/01
@frostschutz Se você está preenchendo um volume ecryptfs com zeros (que é o que eu pensei que a resposta está propondo aqui, porém, em uma inspeção mais aprofundada, vejo que o fraseado dele é realmente ambíguo), então você escreverá essencialmente aleatório (descompactável / dados imbatíveis) para o disco, não?
JamesTheAwesomeDude
@JamesTheAwesomeDude Não, eu estava propondo escrever os zeros na parte não criptografada, mas mencionei que isso não era suficiente em um SSD mais abaixo.
Gilles 'SO- stop be evil'
6

Hmmm, o btrfs parece derrotar todos os métodos usuais de trituração ...

  • Existe uma opção de montagem chamada, nodatacowmas que parece não afetar os arquivos já existentes.
  • Como você já possui arquivos sensíveis no seu disco, esta entrada da FAQ do btrfs também não ajudará.
  • Então tem debugfs. É apenas para sistemas de arquivos ext, mas há um patch para ele que pode funcionar. Você pode usá-lo para descobrir os endereços de bloco afetados e substituí-los diretamente em / dev / sdXY. Mas isso é muito perigoso e pode não funcionar (especialmente se houver mais instantâneos do arquivo)
  • Escreva um patch btrfs que permita modificar (ou fragmentar) instantâneos específicos ou um arquivo inteiro
  • A tentativa mais limpa (para dados realmente muito sensíveis) seria:

    • compre outro disco (a menos que você tenha espaço livre suficiente para uma cópia da partição afetada na primeira)
    • configurar criptografia de disco completo e seus sistemas de arquivos nele
    • copie tudo do disco a para b
    • inicialize no sistema be rasgue todo o disco a ...

    Essa pode não ser a abordagem mais barata, mas, considerando os baixos custos de armazenamento atuais e o problema que você teria com as outras opções, ela pode ser a mais barata (em termos de horas de trabalho).

mreithub
fonte
nodatacowdefine o status padrão do Csinalizador para arquivos recém-criados . Certamente alguém poderia apenas chattr +C ~/.browser/logins.sqlitee depois shred?
JamesTheAwesomeDude
-6

Existe shred(1)para Unix / Linux (deve estar nos pacotes da sua distribuição). Eu sou o que o FEP recomenda .

vonbrand
fonte
3
Se você verifique a pergunta, você vai ver que eu mencionei rasgar, e por isso não é suficiente para o trabalho
goncalopp
Tudo o que encontro são sugestões para usar a criptografia de arquivos confidenciais, pelo motivo que você mencionou.
vonbrand
2
"Em muitos sistemas de arquivos, o programa shred permite uma exclusão segura. No entanto, em um sistema de arquivos CoW como o btrfs, essa abordagem é inútil.". Há dois links também.
precisa saber é o seguinte