Como posso excluir com segurança o conteúdo de um pen drive para que os dados não possam ser recuperados.

32

Gostaria de saber como excluir uma unidade flash USB pelo terminal, se possível, para que os dados não possam ser recuperados.

do utilizador
fonte
31
Uma unidade flash? Quebre a coisa, retire todas as fichas da placa de circuito verde e amasse-as em pedacinhos pequenos e brilhantes e depois compre outra. Destruição física é realmente a única maneira de ter certeza, porque todo o nivelamento de desgaste e outras coisas. No futuro, use a criptografia de disco completo e perca as chaves | senha quando não desejar mais.
Blacklight Shining
1
@BlacklightShining - essa é a única resposta real. muitas varas baratas também são recicladas.
precisa saber é o seguinte
1
@BlacklightShining Transformar em plasma também funciona bem.
PyRulez 01/01
3
Se for importante para você que os dados sejam irrecuperáveis, a única solução "segura" é a destruição física. Se é suficiente apenas ser difícil de recuperar, realmente não há necessidade de mais do que formatar / substituir.
Sobrique
Queime-o em fogo de carvão, garantindo que todas as peças atinjam um calor vermelho.
Ben

Respostas:

47

TL / DR: certifique-se de obter o nome correto do dispositivo, verifique se ele não está montado e faça quantas substituições aleatórias puder. Você pode segui-lo com um comando apagar projetado para hardware flash, se você estiver em uma distribuição recente o suficiente. Nessas verificações, sempre use a unidade (como / dev / sd h ) e não o nome da partição (que seria / dev / sd h1 )

# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#

Em teoria, substituir com zero por ddestá bem. No entanto, devido à forma como as internas de uma unidade flash são construídas, se você usar uma única passagem de substituição, pode haver várias camadas de dados ocultas atrás dos blocos reais que ainda estão armazenando as informações restantes.

Normalmente, uma parte do armazenamento flash está com defeito e é marcada durante a fabricação. Também existem outros bits que podem dar errado (tornando-se imutáveis, instáveis ​​ou impossíveis de limpar), essas partes devem ser marcadas com defeito também durante a vida útil. Esta informação é armazenada em um espaço reservado, nos mesmos chips que seus dados. Esse é um dos vários motivos pelos quais um pen drive de 4 GB não mostra capacidade de 2 ^ 32 bytes.

O armazenamento flash também é organizado internamente em blocos maiores, às vezes muito maiores que os sistemas de arquivos que trabalham na unidade. Um tamanho típico de bloco de sistema de arquivos é 4KB, e os segmentos de flash que podem ser apagados de uma só vez podem variar de 64 KB a até vários megabytes. Esses blocos grandes só podem ser apagados por inteiro, o que redefine todo o bloco para um estado conhecido (todos os 1s ou todos os 0s). Posteriormente, uma gravação de dados pode alterar qualquer um dos bits (altere os 1s padrão em 0s, quando necessário, ou altere os 0s padrão em 1s), mas apenas uma vez . Para alterar qualquer um dos bits de volta ao padrão, todo o segmento precisa ser apagado novamente!

Portanto, quando você deseja alterar um bloco de 4KB (o sistema de arquivos é solicitado a alterar um único caractere no meio de um arquivo), o controlador flash precisa ler e armazenar em buffer todos os 64 KB dos dados antigos, apagar tudo e escreva de volta o novo conteúdo. Isso seria muito lento, apagar segmentos é a operação mais lenta. Além disso, um segmento pode ser apagado apenas por um tempo limitado (dezenas de milhares é típico); portanto, se você fizer muitas alterações em um único arquivo, isso poderá deteriorar rapidamente a unidade.

Mas não é assim que é feito. Os controladores de flash inteligentes simplesmente escrevem os novos dados de 4KB em outro local e fazem uma anotação para redirecionar as leituras para esses 4KB de dados no meio do bloco antigo. Eles precisam de mais espaço, que não conseguimos ver para armazenar essas informações sobre redirecionamentos. Eles também tentam garantir que percorrem todos os segmentos acessíveis para armazenar dados, isso é chamado de nivelamento de desgaste .

Isso significa que dados tipicamente antigos ainda estão na unidade em algum lugar! Se você acabou de limpar todos os blocos acessíveis, todos os blocos ocultos ainda mantêm uma versão bastante recente dos dados. Se isso é acessível a um invasor do qual você deseja proteger seus dados, é uma questão diferente.

Se você tiver uma distribuição recente o suficiente e a unidade USB estiver programada para revelar que é uma unidade flash, blkdiscardpoderá usar a TRIMoperação subjacente , que é o apagamento do segmento que falamos acima. Ele também possui um sinalizador adicional para garantir que mesmo os dados ocultos invisíveis sejam totalmente apagados pelo hardware:

# blkdiscard -s /dev/myusbdevice

-s, --secure Realiza um descarte seguro. Um descarte seguro é o mesmo que um descarte regular, exceto que todas as cópias dos blocos descartados que possivelmente foram criados pela coleta de lixo também devem ser apagadas. Isso requer suporte do dispositivo.

Não vai necessariamente funcionar, como demonstrei acima. Se você obtiver Operation not supported, seu kernel, seus utilitários ou o chip do gateway USB (que permite que o controlador flash pareça uma unidade via USB) não oferece suporte à passagem de TRIMcomando. (O controlador do flash ainda deve poder apagar segmentos por conta própria). Se for suportado pelo fornecedor da sua unidade, esta é a maneira mais segura.

Outra maneira menos segura de garantir que menos dados antigos permaneçam em algum lugar é substituí-los várias vezes, com valores aleatórios, se possível.

Por que aleatória, você pergunta? Imagine se a unidade USB fosse muito inteligente e detectasse que você queria limpar um setor, e apenas fizesse uma alteração em um bitmap de que esse setor agora está livre e precisará ser limpo mais tarde. Como isso significa que ele pode acelerar a gravação de zeros, cria um pendrive que parece mais eficiente, certo? Se sua unidade está fazendo isso, é difícil dizer.

No extremo, a unidade pode se lembrar do quanto você limpou desde o início, e tudo o que precisa armazenar são cerca de 4 bytes de informações para fazer isso, e não apaga nada dos dados que você deseja desaparecer. Tudo para que parecesse muito rápido.

Se você estiver substituindo os dados por valores aleatórios e imprevisíveis, essas otimizações serão impossíveis. Portanto, a unidade precisa garantir que os dados sejam armazenados dentro dos chips flash. Mas você ainda não poderá descartar que alguns dos setores usados ​​anteriormente ainda estão lá com alguns dados antigos, mas a unidade não considerou importante apagá-la ainda, pois não está acessível normalmente. Somente o TRIMcomando real pode garantir isso.

Para automatizar a substituição com valores aleatórios, convém usar shred, como:

# shred -vzn88 /dev/myusbdrive

As opções utilizadas:

  • -v por mostrar o progresso
  • -z para zerá-lo como uma fase final
  • -n8 é fazer 8 passagens aleatórias de substituições

Se possível, use ambos blkdiscarde shred, se blkdiscard -sfor suportado por sua unidade, é a solução ideal, mas não é demais fazer isso de shredantemão para descartar erros de firmware.

Ah, e sempre verifique duas vezes o dispositivo que você está tentando limpar! O dmesg pode ajudar a ver qual foi o dispositivo inserido mais recentemente e também vale a pena verificar o nome do dispositivo com o qual você deseja limpar ls -al, mesmo para os números dos nós dos dispositivos, e a blkidsaída para ver quais partições podem estar disponíveis que você NÃO quer limpar.

Nunca use esses comandos em uma unidade interna que você deseja continuar usando - blkdiscardfuncionará apenas em unidades de estado sólido, mas não vale a pena tentar perder dados!

Pode haver outras maneiras de limpar dados com segurança à medida que a tecnologia avança.

Uma outra maneira mencionada é o SECURITY ERASEcomando ATA que pode ser emitido através de hdparmcomandos. Na minha experiência, ele realmente não é suportado em unidades flash. Ele foi projetado para discos rígidos corporativos, e o recurso nem sempre é implementado em dispositivos de armazenamento de baixo custo.

A operação TRIM/ DISCARDé muito mais recente que o SECURITY ERASEcomando e foi criada em resposta aos recursos do flash, por isso tem uma chance muito maior de ser implementada, mesmo em drives USB baratos, mas ainda não é onipresente. Se você deseja apagar um cartão SD / micro SD em um dongle USB e blkdiscardrelatar que ele não é suportado, tente um dongle / leitor de cartão diferente e / ou faça isso em uma máquina com slot SD / MMC direto .

chexum
fonte
Obrigado pelas informações de ponta. blkdiscardestá no Debian Jessie e apenas nos dois lançamentos mais recentes do Ubuntu, mas não no Ubuntu LTS 14.04. blkdiscardfoi adicionado à util-linuxversão 2.23 do pacote .
precisa saber é o seguinte
Você sabe como se blkdiscardcompara à hdparmsolução em outro comentário do @zhenech (especificamente o link: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ).
precisa saber é o seguinte
Não tenho certeza se este é também o caso com flash drives, mas isso pode ser vale a pena ler howtogeek.com/234683/...
hhaslam11
1
@RobertL Equal, de uma maneira ruim. A maioria das unidades flash baratas não implementa nem o ATA Secure Erase nem o TRIM; portanto, ambos os métodos provavelmente falharão.
duskwuff
27

Sei que isso não é realmente uma resposta para sua pergunta, mas a maneira mais simples é destruir fisicamente a unidade (esmagá-la repetidamente com uma marreta geralmente faz o truque, mas a fragmentação ou incineração industrial também são opções). Se você estiver preocupado o suficiente com a segurança para garantir que os dados sejam irrecuperáveis, o valor desses dados provavelmente será muitas vezes maior que o custo da própria unidade, e o método físico será barato e confiável.

MPLewis
fonte
5
Se for uma unidade flash substituível e barata, definitivamente vá com a destruição física. Se você usar um martelo, obtenha o chip de armazenamento real. Abri uma antiga unidade flash por diversão há algumas semanas e a maior parte do seu volume físico era na verdade caixa e ar.
Blacklight Shining
1
Além da minha resposta, eu concordo completamente - é difícil quebrá-las em pedaços via acesso ssh :) Dado o quão pouco confiáveis ​​esses dongles são para armazenamento de dados, é surpreendentemente difícil fazê-los se livrar dos mesmos dados.
chexum
Concordado - se é importante para você que os dados sejam irrecuperáveis, a destruição física é a única opção. Vamos enfrentá-lo, em comparação com o valor comercial dos dados, mesmo os discos mais caros provavelmente não são tão significativos. Se não for tão importante, quase qualquer limpeza / substituição é 'boa o suficiente'.
Sobrique
1
Este método não é apenas o mais eficaz, é também o mais divertido. Nunca perca a oportunidade de usar uma marreta e ser pago por isso.
Zetetic
2

Quase todas as funções de exclusão segura foram projetadas para girar mídia magnética, onde o computador geralmente pode determinar a localização física [1] dos blocos usados ​​para o arquivo e escrever sobre esses mesmos blocos. Os chips de controlador de armazenamento de estado sólido abstraem a localização física dos dados do sistema e gostam de movê-los.

Sua pergunta realmente depende de quem está buscando seus dados. Se você está preocupado com perda aleatória ou roubo casual, um formato regular será adequado. Se você estiver preocupado em ser alvo de um usuário altamente motivado e tecnicamente competente, com recursos substanciais à sua disposição [2], basta incinerar a unidade e gastar US $ 10 em uma nova.

  1. sim, há mapeamento de bloco lógico. Mas o bloco lógico A sempre será mapeado para o bloco físico B.

  2. essa pessoa abriria a unidade, puxaria o chip de memória do cartão e leria a memória flash diretamente, ignorando o controlador

user149598
fonte
1

A maneira mais simples e rápida que conheço é escrever zeros (0) em toda a unidade:

dd if=/dev/zero of=/dev/sdX

onde /dev/sdXestá o nó do dispositivo do seu pendrive.

Alguns sugerem um processo mais completo com mais iterações e outros padrões. Utilitários específicos estão disponíveis para fazer isso. O pacote GNU coreutils contém o shredcomando especificamente para esse fim. Muitas pessoas também usam badblocks -w, que faz parte do pacote e2fsprogs. No FreeBSD, o shredutilitário é chamado gshrede deve estar disponível nas portas /usr/ports/sysutils/coreutilsou /usr/ports/sysutils/fileutils.

RobertL
fonte
Isso não é realmente suficiente para fazer uma limpeza segura. Eu faria pelo menos 20 séries de gravações de coisas aleatórias. O melhor de tudo é que eu usaria uma ferramenta para limpeza segura, por exemplo, fragmento. Mesmo que algumas pessoas digam que não faz sentido e que zerar seja suficiente - eu não confiaria nisso.
monsune
4
@monsune Isso é apenas uma lenda urbana. Embora alguns padrões exijam isso , não parece haver nenhum ataque prático.
Gilles 'SO- stop be evil' em
As unidades flash usam nivelamento de desgaste para não destruir as células flash muito rapidamente. Imagine o seguinte: a unidade possui 1200 células, mas apenas informa que possui 1000 e o controlador seleciona em qual célula ele realmente grava. Então, após um dd, você apagou 1000 células, mas não as 200 na reserva, e essas podem ser lidas anexando o flash real a um controlador sem reserva. Eu sugiro fazer uma exclusão segura após o dd, mas nem todas as mídias flash suportam isso.
Zhenech #
@ zhenech, o que é "apagamento seguro"?
precisa saber é o seguinte