Gostaria de saber como excluir uma unidade flash USB pelo terminal, se possível, para que os dados não possam ser recuperados.
Gostaria de saber como excluir uma unidade flash USB pelo terminal, se possível, para que os dados não possam ser recuperados.
Respostas:
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 dd
está 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, blkdiscard
poderá usar a TRIM
operaçã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 TRIM
comando. (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 TRIM
comando 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:
Se possível, use ambos blkdiscard
e shred
, se blkdiscard -s
for suportado por sua unidade, é a solução ideal, mas não é demais fazer isso de shred
antemã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 blkid
saí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 - blkdiscard
funcionará 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 ERASE
comando ATA que pode ser emitido através de hdparm
comandos. 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 ERASE
comando 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 blkdiscard
relatar 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 .
blkdiscard
está no Debian Jessie e apenas nos dois lançamentos mais recentes do Ubuntu, mas não no Ubuntu LTS 14.04. blkdiscard
foi adicionado à util-linux
versão 2.23 do pacote .
blkdiscard
compara à hdparm
solução em outro comentário do @zhenech (especificamente o link: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ).
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.
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.
sim, há mapeamento de bloco lógico. Mas o bloco lógico A sempre será mapeado para o bloco físico B.
essa pessoa abriria a unidade, puxaria o chip de memória do cartão e leria a memória flash diretamente, ignorando o controlador
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/sdX
está 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 shred
comando especificamente para esse fim. Muitas pessoas também usam badblocks -w
, que faz parte do pacote e2fsprogs. No FreeBSD, o shred
utilitário é chamado gshred
e deve estar disponível nas portas /usr/ports/sysutils/coreutils
ou /usr/ports/sysutils/fileutils
.
Isso deve ser capaz de limpar com segurança sua unidade flash se você planeja reutilizá-la: http://linux.die.net/man/1/scrub Caso contrário, derreta-a ...