Apague arquivos definitivamente com o shred
Tutoriais

Shred: apague arquivos de forma definitiva no Linux

Ao apagar um arquivo na verdade apagamos apenas o endereço para encontrá-lo, os dados do arquivo permanecem gravados nos clusters do sistema de arquivos e podem ser facilmente reconstruídos por ferramentas de recuperação. Mas se você usar o shred, pode tornar impossível ou pelo menos extremamente difícil tal recuperação.

Apesar de ser muito usado para encobrir rastros em atividades maliciosas, não leve o shred a mal! Assim como qualquer outra ferramenta de segurança, pode ser usada para fins legítimos! Por exemplo, quando você vende um computador para outra pessoa, precisa deixar o computador numa assistência técnica e quer se proteger de bisbilhoteiros, ou, quando quiser garantir que fotos e vídeos pessoais não possam ser recuperados diante de um furto. Enfim, se sua unidade de armazenamento cair nas mãos de uma terceira pessoa, o shred é a garantia para que sua privacidade seja preservada.

Para empresas o shred pode ser muito útil também! É comum fazer a troca de computadores do parque ou se desfazer de discos usados em storages ou fitas de backup, empresas que têm uma boa equipe de segurança cibernética geralmente incluem em suas Políticas de Segurança da Informação obrigações de destruição de dados.

O que realmente acontece ao apagar um arquivo?

Primeiro vamos aos conceitos básicos: arquivos são conjuntos de dados e esses dados são distribuídos em áreas do sistema de arquivos chamadas clusters. O nome de um arquivo para o sistema de arquivos é a representação de quais clusters cada pedaço do arquivo está armazenado. Quando você apaga um arquivo, a única coisa apagada é o nome e endereço dos clusters no sistema de arquivos. 

Os dados em si continuam todos lá, distribuídos nos clusters, apesar do sistema operacional enxergar tais áreas como livres.

Desta forma, ferramentas de recuperação de arquivos justamente vasculham as áreas marcadas como livres, lendo toda a unidade de armazenamento bit a bit, interpretando metadados para reconstruir arquivos. Mesmo que você não tenha apagado arquivos por engano e precise recuperar, vale dar uma checada em suas unidades com a ferramenta R-Linux, certamente ficará impressionado com quanta coisa antiga que foi “apagada” ainda está por lá!

Outro conceito importante para preservar sua privacidade é a correlação de dados. Tenha em mente que tudo deixa rastros e não basta apagar certo arquivo que é muito sensível para você, mas deixar os rastros de como ele foi produzido ou como foi manipulado no sistema.

Por exemplo, digamos que você tenha uma coleção de fotos muito sensíveis e que baixou de algum repositório online. O shred destruirá tais fotos em seu dispositivo, mas se você não cuidar do histórico de navegação e dos thumbnails produzidos pelos gerenciadores de arquivos, um software de investigação forense como o Autopsy poderá correlacionar tudo isso e revelar todo o conteúdo.

O que o shred não garante apagar

O funcionamento do shred é baseado na condição de que o sistema de arquivos utilizado vai sobrescrever os dados originais. No entanto, vários sistemas de arquivos modernos fazem journaling, rastreando as alterações feitas e assim não atendem tal condição. Desta forma, sistemas de arquivos como Btrfs, ext3/ext4, NTFS, ReiserFS, XFS e ZFS, se estiverem montados no modo journaling, ainda poderão conter traços ou até o arquivo inteiro.

Em sistemas assim, você pode aumentar a quantidade de passes para aumentar a eficácia da destruição, quanto mais vezes passar, maior a probabilidade do sistema de arquivos reiniciar o ciclo de journaling do arquivo de modo que ele realmente deixe de existir.

Mas você pode ainda usar o shred para destruir o sistema de arquivos em si, lembrando que neste caso qualquer outro arquivo na mesma unidade será destruído junto. Em suma, se o que você precisa destruir é muito sensível, o shred funcionará de modo confiável sobre o dispositivo, ao invés de sobre os arquivos.

🚨 CUIDADO AO USAR O SHRED! USE POR SUA CONTA E RISCO, POIS NÃO HÁ RETORNO 🚨

Outras condições em que o shred pode não garantir destruição sobre arquivos são:

  • Sistemas de discos em RAID (clonagem de discos);
  • Sistemas de arquivos que fazem snapshots (pontos de recuperação);
  • Sistemas de arquivos que fazem cache;
  • Sistemas de arquivos com compressão.

Como destruir arquivos

A sintaxe do comando é a seguinte:

shred [opções]… arquivo[…]

e as principais opções são:

-n número

Define a quantidade de vezes para sobrescrever, sendo que o padrão é 3 vezes. Após 25 passes, o shred começa a repetir padrões de dados na escrita, reduzindo a entropia da ação.

--random-source=arquivo

Em compensação ao limite de 25 passes da opção anterior, você pode usar um arquivo com fonte aleatória de dados ou ainda usar o dispositivo /dev/random.

-u

Depois de destruir, remove o arquivo.

-x

Por padrão, o shred utiliza o tamanho do arquivo em si para a operação. Se o arquivo for menor que o tamanho do cluster, o chamado slack space (espaço vazio do cluster) não será mexido. Ao usar -x será utilizado o tamanho do cluster do sistema de arquivos, gravando sobre todo o slack space.

-v

Ativa o modo de saída completa na tela, informando todos os detalhes e erros do processo.

Para destruir o arquivo video_sensivel.mp4 com apenas 3 passes e remover do sistema de arquivos:

$> shred -v -u video_sensivel.mp4
shred: video_sensivel.mp4: removing
shred: video_sensivel.mp4: renamed to 000000000000000000
shred: 000000000000000000: renamed to 00000000000000000
shred: 00000000000000000: renamed to 0000000000000000
shred: 0000000000000000: renamed to 000000000000000
shred: 000000000000000: renamed to 00000000000000
shred: 00000000000000: renamed to 0000000000000
shred: 0000000000000: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000
shred: 000000000: renamed to 00000000
shred: 00000000: renamed to 0000000
shred: 0000000: renamed to 000000
shred: 000000: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: video_sensivel.mp4: removed

Para destruir de forma mais radical, incluindo a preocupação quanto aos sistemas de arquivo que fazem journaling, podemos fazer 40 passes, usando dados hiper aleatórios do /dev/randon, removendo os links do arquivo, preenchendo todo o slack space e vendo todos os detalhes na tela:

$> shred -n 40 -u -v –random-source=/dev/random video_sensivel.mp4

Se você tiver muitos arquivos, espalhados em subdiretórios, poderá fazer um filtro com o comando find e redirecionar para o shred da seguinte forma:

  1. Entre no diretório principal dos arquivos que deseja apagar:
$> cd meu_diretorio
  1.  🚨 Muita atenção aqui! Se você não estiver no diretório correto ou existir nele outros arquivos que não deseja destruir, não tem recuperação! E não diga que não avisei! 😅
    Depois filtre com o “-type f” do find somente os arquivos, pois o shred dá erro ao receber diretórios como parâmetro. Redirecione com o xargs, que entrega arquivo por arquivo para o shred:
$> find ./ -type f | xargs -e shred -n 5 -u -v
...
shred: ./subdir3/IMG_4720_1.JPG: removed
shred: ./subdir3/IMG_4727_1.JPG: pass 1/5 (random)...
shred: ./subdir3/IMG_4727_1.JPG: pass 2/5 (000000)...
shred: ./subdir3/IMG_4727_1.JPG: pass 3/5 (random)...
shred: ./subdir3/IMG_4727_1.JPG: pass 4/5 (ffffff)...
shred: ./subdir3/IMG_4727_1.JPG: pass 5/5 (random)...
shred: ./subdir3/IMG_4727_1.JPG: removing
shred: ./subdir3/IMG_4727_1.JPG: renamed to ./subdir3/00000000000000
shred: ./subdir3/00000000000000: renamed to ./subdir3/0000000000000
shred: ./subdir3/0000000000000: renamed to ./subdir3/000000000000
shred: ./subdir3/000000000000: renamed to ./subdir3/00000000000
shred: ./subdir3/00000000000: renamed to ./subdir3/0000000000
shred: ./subdir3/0000000000: renamed to ./subdir3/000000000
shred: ./subdir3/000000000: renamed to ./subdir3/00000000
shred: ./subdir3/00000000: renamed to ./subdir3/0000000
shred: ./subdir3/0000000: renamed to ./subdir3/000000
shred: ./subdir3/000000: renamed to ./subdir3/00000
shred: ./subdir3/00000: renamed to ./subdir3/0000
shred: ./subdir3/0000: renamed to ./subdir3/000
shred: ./subdir3/000: renamed to ./subdir3/00
shred: ./subdir3/00: renamed to ./subdir3/0
shred: ./subdir3/IMG_4727_1.JPG: removed
shred: ./subdir3/IMG_4737_1.JPG: pass 1/5 (random)...
shred: ./subdir3/IMG_4737_1.JPG: pass 2/5 (ffffff)...
shred: ./subdir3/IMG_4737_1.JPG: pass 3/5 (random)...
shred: ./subdir3/IMG_4737_1.JPG: pass 4/5 (000000)...
shred: ./subdir3/IMG_4737_1.JPG: pass 5/5 (random)...
shred: ./subdir3/IMG_4737_1.JPG: removing
...

Como destruir thumbnails

Thumbnails são o principal rastro de imagens e vídeos, elas são pequenas imagens geradas por gerenciadores de arquivos como Dolphin e Nautilus para ajudar o usuário a localizar as coisas. Essa seção é uma dica extra para você saber onde elas ficam, caso seu interesse seja a privacidade para imagens e vídeos. Você pode apagar os thumbnails com segurança porque eles serão gerados novamente à medida que você vai abrindo as pastas que contêm imagens e vídeos.

Se você usa o Dolphin ou Nautilus:

$> find ~/.cache/thumbnails/ -type f | xargs -e shred -u -v

Como destruir dispositivos e pendrive

Destruir uma unidade inteira pode levar bastante tempo, dependendo da velocidade do barramento e do tamanho da unidade. Mas como neste caso o journaling do sistema de arquivos não terá nenhum efeito, você pode reduzir o número de passes com tranquilidade. Limpar um pendrive de 4 GB dando apenas um passe levou cerca de 10 minutos no meu teste.

  1. Descubra qual a unidade do sistema de arquivos deseja destruir. Se for um pendrive, primeiro execute o lsblk antes de conectá-lo e anote os dispositivos existentes, para evitar erros. Não se garanta pulando este passo, uma letra errada e não terá volta!
$> lsblk
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 238.5G  0 disk
├─sda1
│      8:1    0   498M  0 part /boot/efi
├─sda2
│      8:2    0   128M  0 part
├─sda3
│      8:3    0 137.8G  0 part
├─sda4
│      8:4    0   2.4G  0 part
├─sda5
│      8:5    0    16G  0 part [SWAP]
└─sda6
       8:6    0  81.7G  0 part /
sdb    8:16   0 931.5G  0 disk
└─sdb1
       8:17   0 931.5G  0 part /home
sdc    8:32   1   3.7G  0 disk
├─sdc1
│      8:33   1   3.4M  0 part
└─sdc2
       8:34   1 208.4M  0 part /run/media/neo/openSUSE-Tumbleweed-NET-x86_6432
zram0
     252:0    0     8G  0 disk [SWAP]
  1. Conecte o pendrive, não monte, execute novamente o lsblk -fs e identifique a nova letra dada ao novo dispositivo.
  2. Em nosso exemplo, o pendrive está em sdd tem duas partições e vamos destruir a “2” em /dev/sdd2
#> shred -v /dev/sdc2
  1. Se o nível de segurança que você precisa não for tão alto e precisa de mais velocidade, poderá fazer uma sobrescrita simples dando apenas um passe:
#> shred -v -n 1 /dev/sdc2
  1. Depois eu apaguei o pendrive inteiro:
#> shred -v -n 1 /dev/sdc
  1. E criei duas novas partições, uma chamada “Dados1” e outra chamada “Sensiveis”. Se suas partições possuírem rótulo, use o -f para ver com mais certeza qual é qual:
$> lsblk -f /dev/sdc
NAME FSTYPE FSVER LABEL UUID         FSAVAIL FSUSE% MOUNTPOINTS
sdc                                                                         
├─sdc1
│    ext4   1.0   Dados1
│                       df9515a1-a7a0-4ba3-b009-db69e648629b                
└─sdc2
     btrfs        Sensiveis
                        ed052f53-02c8-47e6-8dfb-b2f56e8e6162  
  1. Agora vou apagar somente a “Sensiveis”, que está associada a unidade sdc2, passando 4 vezes e usando o random como fonte da entropia:
#> shred -n 4 -v --random-source=/dev/random /dev/sdc2
shred: /dev/sdc2: pass 1/4 (random)...
shred: /dev/sdc2: pass 1/4 (random)...24MiB/1.8GiB 1%
shred: /dev/sdc2: pass 1/4 (random)...51MiB/1.8GiB 2%
shred: /dev/sdc2: pass 1/4 (random)...77MiB/1.8GiB 4%
shred: /dev/sdc2: pass 1/4 (random)...104MiB/1.8GiB 5%
shred: /dev/sdc2: pass 1/4 (random)...130MiB/1.8GiB 7%
shred: /dev/sdc2: pass 1/4 (random)...157MiB/1.8GiB 8%
shred: /dev/sdc2: pass 1/4 (random)...183MiB/1.8GiB 10%
...
shred: /dev/sdc2: pass 4/4 (random)...1.6GiB/1.8GiB 92%
shred: /dev/sdc2: pass 4/4 (random)...1.7GiB/1.8GiB 98%
shred: /dev/sdc2: pass 4/4 (random)...1.8GiB/1.8GiB 100%
  1. E quando consultar não terá mais nada na sdc:
$> lsblk -f /dev/sdc
NAME FSTYPE FSVER LABEL UUID          FSAVAIL FSUSE% MOUNTPOINTS
sdc                                                                         
├─sdc1
│    ext4   1.0   Dados1
│                       df9515a1-a7a0-4ba3-b009-db69e648629b                
└─sdc2

Conclusão

O shred é uma ferramenta simples, mas muito poderosa. Com ela você poderá garantir que um arquivo apagado jamais seja recuperado ou que HDs e pendrives passados para outras pessoas não serão bisbilhotados.

Gostou do que aprendeu? Compartilhe sua experiência e testes nos comentários. E se tiver alguma dúvida, teremos prazer em responder também.

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!