Apagando arquivos, partições e discos com segurança no Linux
6 de dezembro de 2008 | Autor:
antonini
Eu sempre levo comigo um pequeno cartão comprovando minha inscrição
na UISP (União Internacional dos Super Paranóicos, divisão de lata).
Cuidado nunca é demais. Afinal, vivemos em um mundo perigoso e os
computadores são uma extensão disso. Depois de instalar o sistema
operacional certo — o GNU/Linux, é claro — navegadores seguros,
antivírus e verificadores de rootkits, você pode começar a sentir
orgulho da sua segurança. Não faça isso. Até que você entenda e
domine alguns destes utilitários do GNU para apagar, picotar e
aniquilar arquivos, diretórios, partições e HDs com segurança, você
não estará a salvo. E por que não?
No ano passado, a imprensa britânica falou várias vezes sobre
departamentos governamentais e funcionários que perderam laptops e
pendrives. Eles eram perdidos nos correios, esquecidos nos trens e
onde mais você imaginar. Não estavam protegidos por senhas nem
criptografados. Nenhuma proteção, e pode apostar que todos os
notebooks rodavam Windows. Um verdadeiro banquete para ladrões de
identidade e chantagistas. Essa abordagem indiferente quanto à
segurança do computador não é de causar espanto. A maioria das
pessoas só quer ligar o computador e sair usando. A segurança fica
para depois — quando fica.
“Eu uso GNU/Linux, meu chapa, tô seguro”, você diz, cheio de
pretensão. Bom, é certo que você está melhor do que um usuário não
profissional de Windows, mas não se dê por satisfeito. Nós todos
sabemos como apagar arquivos e diretórios, ou como arrastá-los para
a lixeira. Sumiram? Pense duas vezes. Isso é só o começo. Se você
soubesse o que acontece nesse momento seu sono não seria tão
tranqüilo. Vou dar uma olhada no que acontece e em como destruir
para valer quaisquer dados sensíveis, indo de um simples arquivo a
um disco inteiro. Você pode querer apagar o disco inteiro antes de
uma reinstalação, ou antes de dar o HD para um conhecido ou de
doá-lo para alguma instituição de caridade. Nesses casos, é bom ter
certeza de que não sobraram dados importantes no disco. A imprensa
britânica já publicou várias histórias sobre discos doados que foram
verificados, revelando loucuras impublicáveis. As doações
corporativas são especialmente vulneráveis. Não acredita? Em 2003,
dois alunos do MIT compraram 158 HDs no eBay e conseguiram descobrir
números de 5.000 cartões de crédito, informações médicas pessoais,
registros de transações financeiras, emails e, como não poderia
deixar de ser, pornografia, só para citar alguns dos achados. E olha
que muitos desses discos foram “apagados”. Por isso, vamos dar uma
olhada nas ferramentas do GNU que podem ser usadas para que ninguém
chore sobre o leite derramado.
Shred
O Shred (“picotar”, em inglês) faz parte dos utilitários básicos do
GNU, e já deve estar instalado na sua distro. Ao escrever meu
artigo sobre o Krusader, percebi que o menu de
contexto dele oferece a opção de picotar arquivos/diretórios, mas
obviamente esse recurso é uma ferramenta de linha de comando, como
um simples man shred na linha de comando pode demostrar. O shred
pode ser incluído no
service menu do KDE e o Wipe pode entrar em um
script do Nautilus. A implementação do PGP
(Pretty Good Privacy) no GNU/Linux, o KGpg, abre um assistente de
configuração na primeira utilização, que oferece a opção de instalar
um ícone do picotador no desktop. É só arrastar arquivos até o ícone
para removê-los com segurança. Funciona na minha versão, a 1.2.2,
mas pode ser que as versões posteriores não tenham mais esse
recurso. Se você estiver usando uma versão mais recente e ela não
oferecer esse recurso, experimente um service menu do KDE chamado
Qwipe.
Mas qual é o problema de simplesmente excluir um arquivo ou
diretório? Nenhum, a não ser pelo fato de que o arquivo não é
realmente excluído do HD. A única coisa que é removida é o ponteiro
para o arquivo. O arquivo original ainda está lá, esperando por
alguém que possua a habilidade de localizá-lo. Usar o comando rm
também não ajuda, pois só o que ele faz é marcar o bloco de dados do
arquivo como livre. A remoção do arquivo dessa forma equivale a
remover o cartão de identificação de um livro da biblioteca. O livro
continua na estante.
O Shred e os sistemas de arquivo com journaling: um aviso
Um dos pontos atraentes do GNU/Linux, dentre muitos outros, é que
você não será afrontado pela necessidade de rodar um programa de
desfragmentação ocasionada pela progressiva desorganização na
seqüência de blocos dos arquivos ou por um travamento do sistema. Os
sistemas de arquivos ext3 do GNU/Linux contêm journaling. Resumindo,
para evitar desfragmentações entediantes em sistemas de arquivos
como ext3, ReiserFS, XFS, JFS e ext4, as alterações são registradas
em um diário (o journal), para que em caso de travamento seja mais
difícil o corrompimento dos dados e para que os dados possam ser
restaurados a um estado consistente. Obviamente esse recurso
repercute no desempenho, já que os dados são escritos duas vezes. Há
três tipos de sistemas de journaling: journal, ordered e writeback.
O uso do Shred com um sistema de arquivos ext3 deixa o usuário com o
problema da remoção segura, porque ele só pode ser utilizado de
maneira efetiva com os tipos ordered e writeback de journaling.
A solução para o ext3 é convertê-lo em um sistema sem journaling
como o ext2, rodar o shred e convertê-lo para ext3 de novo. Isso
pode ser feito de maneira dinâmica. Se não tiver certeza de qual
sistema de arquivos está usando, digite /etc/fstab na barra de
localização do Konqueror para descobrir. Se for ext3, você pode
convertê-lo para ext2 com o procedimento a seguir.
Abra um terminal como root e converta o ext3 para ext2:
# tune2fs -O ^has_journal
/dev/hda1
e depois:
# e2fsck /dev/hda1
Também é preciso editar o /etc/fstab (como root) em seu editor de
textos preferido, alterando a entrada para ext2. Depois de usar o
comando shred será preciso converter o arquivo de volta para ext3:
# tune2fs -j /dev/hda1
Parece meio complicado fazer tudo isso para excluir arquivos com
segurança, mas pelo menos você vai ter certeza de que nada escapou.
Existe outro método. Edite as opções de montagem em /etc/fstab (como
root), alterando o tipo do journal para um dos outros dois
mencionados acima, use o Shred e volte para o tipo de journal
anterior usando o mesmo procedimento.
Saiba que dispositivos com RAID e sistemas de arquivos compactados
oferecem problemas potenciais semelhantes. Por fim, se houver
arquivos com nomes estranhos, incluindo caracteres especiais ou de
controle, pode ser necessários
exclui-los de maneira segura identificando seu
número de inode. Se quiser uma alternativa rápida ao Shred,
considere o chattr, usado para alterar os atributos de arquivos e
diretórios. Use a opção -s para excluir com segurança o bloco
ocupado por eles com uma série de zeros, mas isso é bem básico. O
uso da opção +i protege um arquivo contra a exclusão marcando-o como
“imutável”, caso você saia usando o Shred loucamente. Se isso não
funcionar, tente o
Libtrash.
As opções do Shred
E como se usa esse comando? A primeira coisa a se fazer, como de
costume, é executar um man shred e um shred –help. O Shred pode
sobrescrever os arquivos várias vezes. A quantidade de vezes é
especificada pela linha de comando: -n 5, por exemplo, fará o
programa sobrescrever um arquivo cinco vezes (o padrão é 25). Você
picotou o arquivo, mas agora você quer exclui-lo e ocultar o fato de
que fez isso. Como ocorre em muitos comandos do GNU/Linux, é
possível combinar tudo. Para picotar, sobrescrever e excluir um
arquivo chamado coisas_secretas.txt é só digitar shred -u -z
coisas_secretas.txt. Se você tiver que se certificar de que o
arquivo foi picotado e excluído, acompanhe o andamento do processo
adicionando -v: o comando shred exibirá “0” ou algum outro número
(como o Kpackage faz) para indicar o sucesso ou o fracasso da
operação, respectivamente.
Comando básico:
shred -n x* -u <arquivo><ou
partição /dev/sdx>
* número de vezes que o arquivo ou
partição deverá ser sobrescrito.
Só mais uma coisa: você pode
acrescentar -f. Isso permite usar o shred em arquivos nos quais você
não tem permissão. Se você também quiser ver como o Shred realmente
funciona, chame-o sem nenhum parâmetro, e será possível exibir o
lixo de um arquivo picotado. Digite shred coisas_secretas.txt e
depois dê um cat coisas_secretas.txt, e o terminal vai mostrar o que
o Shred fez com o arquivo. Depois é só usar opções como -u -v para
concluir o serviço.
Caso não acredite nas afirmações dos desenvolvedores do Shred, é
possível pô-las à prova com o debugfs (que é parte dos utilitários
do e2fsprogs). Como sempre, dê um man debugfs antes de experimentar
o programa. Vamos supor, por exemplo, que você tenha excluído
arquivos sem usar o Shred em uma determinada partição. O debugfs
pode ser usado para listar esses arquivos: entre com debugfs
/dev/hda2 (obviamente substituindo a parte final do comando pela
partição desejada) para abrir um prompt. Digite lsdel e o debugfs
irá listá-los com seus números de inode e datas de exclusão, dados
que podem ser usados em uma tentativa de recuperação pelo comando
dump.
É importante destacar que esse comando funciona melhor com partições
do que com arquivos individuais, já que alguns sistemas de arquivos
fazem backups. Pode parecer que reinstalar sua distro ou reformatar
o disco seja seguro, mas ferramentas competentes podem farejar as
informações, então é bom saber o que o shred pode fazer pelas
partições — com uma condição. Não é possível picotar a partição a
partir da qual o comando é executado. Você vai precisar de um live
CD para uma limpeza completa, e como vamos excluir uma partição
inteira ou um HD inteiro, faz sentido limitar o número de vezes que
os arquivos serão sobrescritos; caso contrário, pode cair bem dar
uma relida em Guerra e Paz para passar o tempo.
Sobrescrever quantas vezes?
Você pode ficar com o padrão ou definir o número por conta própria.
Por padrão, o governo norte-americano sobrescreve os arquivos várias
vezes, mas há registros apócrifos de arquivos que foram recuperados
depois de serem sobrescritos quatorze vezes. O padrão do Shred é 25,
mas no secure-delete, logo abaixo, é 38.
O Shred com esteróides
O Shred certamente é um comando poderoso, mas não cobre todas as
possibilidades. Para isso você vai precisar de algo ainda mais
poderoso; os usuários do Ubuntu estão com sorte, porque têm ao seu
dispor uma ferramenta que pode lidar com dados na RAM, no espaço
livre e no swap. Outras distros podem
baixar o arquivo tar compactado. Basta um
apt-get install secure-delete no console (como root — su) e um
destes comandos:
- srm secreto.txt — exclui
arquivos e diretórios com segurança.
- smem — elimina os dados
da memória para acabar com possíveis dados residuais.
- sfill mountpoint/ —
limpa o espaço livre do disco. Deve ser usado com um live CD,
possivelmente como root.
- sswap — limpa as
partições de swap usadas quando a RAM está cheia. Use junto com
o smem.
Para o último comando é preciso desativar o swap primeiro. É só
abrir o /etc/fstab ou digitar cat /proc/swaps para descobrir onde o
swap está montado e desativá-lo com um sudo swapoff/dev/hda2 (insira
os detalhes da sua partição swap). O swap já pode ser limpo com um
sudo sswap /dev/hda2 e reativado com um sudo swapon/dev/hda2.
Uma das maiores vantagens do Secure-delete sobre o Shred é que ele
não usa apenas dados aleatórios e zeros, mas também aplica técnicas
de criptografia desenvolvidas por Peter Gutmann (que se descreve
como um “paranóico profissional”). O
método Gutmann é um algoritmo para a exclusão
segura de arquivos e HDs baseado em seu
paper sobre a exclusão segura de arquivos em
memórias magnéticas e em estado sólido. Se preferir, você pode
baixar e queimar um CD com o
DBAN, que inclui o método de Gutmann e o
Mersenne twister. Essa é a ferramenta para a exclusão de dados com
segurança. Se ela é boa o suficiente para agências governamentais,
incluindo a Real Polícia Montada do Canadá, é boa o suficiente para
mim. Se não houver um binário para sua distro, sempre há um
pacote tar compactado do SRM (secure delete) no
Sourceforge.
É claro que você pode optar pelo tradicional comando dd, mais
associado a
backups da MBR e à criação de imagens de
discos inteiros. É bem simples: dd if=/dev/zero of=/dev/hda para
sobrescrever um HD com uma série de zeros ou dd if=/dev/urandom
of=/dev/hda que sobrescreve o HD com dados aleatórios (embora alguns
afirmem que ele usa uma pseudo-aleatoriedade). Mas se você acha que
o dd é muito básico e não pode competir com a relativa granularidade
do Shred ou do Secure-delete, há quem discorde. A equipe da 16
Systems lançou o “
Grande
Desafio do Zero”, que desafia empresas profissionais de
recuperação de dados a recuperarem um arquivo e uma pasta de um HD
que tenha sido limpo pelo comando dd. Até agora, ninguém reclamou o
prêmio.
Se nada der certo
Independente dos métodos e motivos que o levem a limpar um HD ou
excluir partições, diretórios e arquivos, vale a pena usar os
poderosos comandos que fazem parte de praticamente todas as distros
GNU/Linux. Esses comandos podem tirar você de enrascadas mais rápido
do que você entrou nelas.
Se nenhuma dessas alternativas lhe agradarem, ou se você for um
paranóico incurável, acho que só uma breve incursão ao galpão nos
fundos do quintal vai dar conta. Separe um espaço para uma
destruição da pesada (é, arranje outro lugar para aquelas “revistas
raras” que você guarda por lá), saque de uma bela britadeira e
prepare um tanque de ácido sulfúrico para pulverizar o HD. Mas mesmo
assim…
Créditos a Gary Richmond –
freesoftwaremagazine.com
Tradução por Roberto Bechtlufft <roberto at
bechtranslations.com>