~# ./disaster-forensics_p1.py
💾 Recuperando discos defeituosos com o Ubuntu. (Parte 01)
Quem nunca passou pela seguinte situação;
O computador liga, o HD começa fazer "tec tec tec", aquele frio, de agulha do disco batendo, mas ainda sim, o firmware inicializa reconhecendo o disco e o Windows inicializa, lento e congelando, e a seguinte pergunta ecoando pela cabeça: "E agora? Como fica aquela foto da famÃlia que tirei" ou "Preciso recuperar meu trabalho de TCC que passei meses trabalhando", mas um simples CTRL +C / CTRL + V, ou tentar abrir o navegador para subir em alguma nuvem, pode ser o tempo desperdiçado para perder todos os dados contidos ali.
Alias, abordei o HDD, porém, pode até acontecer com unidades sólidas como SSDs, o HDD foi apenas para criar uma dimensão ao contexto.
Uma situação real que aconteceu comigo, trabalhava em uma empresa, como terceirizado, atendÃamos alguns hotéis, lembro até hoje de está trabalhando e a Gerente Geral desse hotel me ligando desesperada:
"Francisco, nosso servidor foi atacado, tudo que tÃnhamos foi criptografado, estão nós cobrando R$ 5000 em bitcoins, e não sei se pago o hacker, não sei se ligo para polÃcia e faço um B.O, estou desesperada!"
O pior dessa história? O único HD de backup (um HD externo USB 3.0 da Toshiba) estava com falhas. O backup do Windows não montava, o Windows exibia o aviso em um balão que o disco necessitava ser substituÃdo, partição NTFS? Corrompida. Tentar acessar os arquivos? ImpossÃvel.
Eu fiz poucos atendimentos a esse hotel, mas peguei uma amizade enorme com todos, desde a Gerente Geral, como à s meninas que atendiam clientes falando em inglês no telefone, ficava impressionado de como conversavam bem, eu tenho uma dificuldade enorme com a pronunciação em inglês, e elas estavam conversando ali, como se fosse uma conversa de bar como qualquer outra, como era gostoso chegar, escutar o som daquelas doces vozes chamando meu nome, e vindo me dar um abraço quente, e me pedindo algo "Poderia resolver o Global Inn para mim? Não funciona, e sei que só você consegue resolver, ligamos na empresa e exigimos você aqui.", trazendo alguns salgadinhos e mimos, e sinceramente? Ficaria feliz apenas com aquele toque doce que somente elas tinham, aquela energia, aquela paz de espÃrito.
Nesse momento, tinha a situação: A empresa no qual trabalhava no momento, jogou a toalha para o alto: "Não tem jeito, infelizmente, perdeu tudo e irá ter que começar do zero", tÃnhamos um servidor criptografado e um HD externo defeituoso, no qual não era possÃvel montar a imagem do Windows Backup.
(Ahh, maldito Petya! Lembro de ver aquele crânio em vermelho e me perguntar: Esse vÃrus substituiu a MBR do disco?
Para quem viveu na época dos anos 90/2000, alguns computadores antigos, permitiam acesso direto a firmware, onde alguns vÃrus aproveitavam essa brecha para regravar a BIOS com vários zeros e "matavam" o computador, sendo necessário regravar a BIOS para voltar a vida, era um atestado de horror, inclusive algumas firmwares tinham por padrão um recurso chamado de "Anti-vÃrus" para evitar a sobrescrita da MBR, não era um antivÃrus de fato, mas sim, apenas um bloqueio de escrita e evitar algumas ameaças "formatar" a firmware.
A ironia disso tudo, que o Petya "usou" a falha de regravar a MBR para criptografar o computador inteiro, sem a necessidade de estar utilizando o Windows em si, porém se o computador, estivesse funcionando em EFI/GPT, o Petya não tinha efeito (Ao menos, nas suas versões iniciais) exibindo a mensagem:
A disk check is being performed on one of your disks.
This contains errors.
This might take several hours to complete. It is strongly recommended to let it complete.
WARNING: DO NOT TURN OFF YOUR PC! IF YOU ABORT THIS PROCESS, YOU COULD DESTROY ALL OF YOUR DATA! PLEASE ENSURE THAT YOUR POWER CABLE IS PLUGGED IN!
Repairing file system on C:
Sabendo que, até o momento, não havia chave ou ferramenta para descriptografar o Petya, o ideal era fazer uma imagem do disco, e tentar recuperar com ferramentas de recuperação de dados, certo? É talvez... Até lembramos que o Petya, em algumas variantes, além de criptografar o disco, ele substitui blocos para tornar a recuperação difÃcil ou até mesmo impossÃvel. Era um tiro no escuro, 10% para acertos e 90% para perdemos nosso tempo tentando recuperar bancos de dados MySQL, diversas informações confidenciais de clientes como RGs, fotos do cartão de crédito... Na época, ainda não tÃnhamos a LGPD :P.
A segunda solução: Temos um disco externo, que não monta, mostra como disco a ser formatado, mas ao conectar o Windows reconhece que tem algo ali, há uma esperança. Por que não partir para o ponto que há mais chances? Aquele disco externo, batendo agulha, mas que mesmo sofrendo, parecia funcionar por "alguns instantes".
Não tive dúvidas, peguei um CD do Linux Ubuntu e iniciei em Live-CD. Estava de frente ao computador, pensando: O que estou fazendo?
Não tive dúvidas, precisava recuperar. Usar o GParted para isso? Não parecia uma boa ideia. O disco estava literalmente morto, mas ainda reconhecia, cada segundo que demorasse com ele conectado, era um risco para perder os dados de forma permanente, ou gastar muito dinheiro com empresas especializadas em recuperação.
Tive uma ideia! o comando "dd", por que não? Basta eu criar uma imagem, "do que dá para recuperar" e utilizar o mesmo para tentar reconstruir o NTFS e ter acesso aos dados.
O maior problema do "dd" naquele momento, que poderia ter muitos setores defeituosos, e ele simplesmente "pularia" esses setores, causando uma corrupção de dados, onde talvez, não iria valer a pena arriscar essa tentativa e matar o HD "de vez", saquei meu celular e fui pesquisar...
... E encontrei o ddrescue!
O "ddrescue" é diferente do "dd" comum. Enquanto o "dd" simplesmente irá realizar uma cópia, pulando os erros, o "ddrescue" irá realizar cópia bit a bit (ou como conhecemos, uma cópia Forense).
1 - Preparando o terreno:
Antes de começar, minhas mãos tremiam, estamos falando de anos de uma empresa nas minhas mãos, uma decisão errada pode acabar com tudo, um comando errado poderia ser o fim.
Conectei o computador na internet, abri o terminal;
ubuntu@live-cd:~$Dei o seguinte comando, decidido que não iria voltar atrás, que é minha tacada final;
ubuntu@live-cd:~$ sudo su
root@live-cd:/home/ubuntu# apt install gddrescue
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
gddrescue
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 118 kB of archives.
After this operation, 410 kB of additional disk space will be used.Lembrando que há uma diferença para distribuições que utilizam DEB e RPM;
Para distribuições como Debian, Ubuntu, Mint... O comando será:
apt install gddrescuePara distribuições como Fedora, OpenSUSE, RedHat...
dnf install ddrescue2 - Operação "Recuperação de desastre"
Precisamos identificar qual o alvo, para isso, utilizei o comando "lsblk -p"
root@live-cd:/home/ubuntu# lsblk -p
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
/dev/sda 8:0 0 46.6G 0 disk
├─/dev/sda1 8:1 0 46.5G 0 part /
├─/dev/sda14 8:14 0 4M 0 part
└─/dev/sda15 8:15 0 106M 0 part /boot/efi
/dev/sdb 8:16 0 931.5G 0 disk
/dev/sdc 8:32 0 1.8T 0 disk
└─/dev/sdc1 8:33 0 1.8T 0 part /media/backupNosso HD foi reconhecido ! 🥳
Mas ainda temos outro problema, tentar montar o disco defeituoso dentro do Linux, pode ser um tiro no escuro, visto está com a tabela NTFS corrompido e está batendo a agulha.
Nosso outro disco, de backup, também foi reconhecido e montado. O tempo está a nosso favor nesse momento!
Nosso disco defeituoso está é: /dev/sdb
Nosso disco de backup é: /dev/sdc1, montado em /media/backup.
3 - Criando uma cópia forense;
Agora, com nome de montagem dos discos, precisamos utilizar o "ddrescue" para realizar seu trabalho e criar uma imagem completa do disco;
root@live-cd:/home/ubuntu# ddrescue -f -n /dev/sdb /media/backup/imagem_hotel.img /media/backup/mapa_resgate.logO que essa linha de comando faz?
ddrescue: É o motor da operação.
-f (Force): Essencial quando estamos escrevendo para um arquivo de imagem ou um disco rÃgido. Ele autoriza o ddrescue a sobrescrever dados no destino, garantindo que o processo comece sem interrupções.
-n (No-scrape): Ele ordena ao ddrescue: "Se encontrar um setor que ofereça resistência, pule-o imediatamente". O objetivo é salvar 90% do disco de forma rápida e fria, deixando o estresse mecânico dos setores ruins para uma segunda etapa.
/dev/sdb: O dispositivo fÃsico "paciente". Note que apontamos para o disco inteiro (sdb) e não apenas uma partição, para garantir que tragamos a MBR/GPT e também a tabela de alocação.
.../imagem_hotel.img: É o arquivo "contêiner". Tudo o que o ddrescue ler do HD doente será empilhado bit a bit dentro deste arquivo no seu HD saudável de 2TB.
.../mapa_resgate.log: Este arquivo de texto minúsculo armazena o status de cada setor (salvo, não tentado ou ruim). Sem ele, se o computador travar, você teria que começar o resgate do zero, perdendo tempo precioso de vida do HD.
GNU ddrescue 1.23
Press Ctrl-C to interrupt
ipos: 250342 MB, non-trimmed: 0 B, current rate: 85400 kB/s
opos: 250342 MB, non-scraped: 0 B, average rate: 72100 kB/s
non-tried: 681158 MB, bad-sector: 0 B, error rate: 0 B/s
rescued: 250342 MB, bad-areas: 0, run time: 57m 12s
pct rescued: 26.87%, read errors: 0, remaining time: 2h 35m
time since last successful read: 0s
Copying non-tried blocks... Pass 1 (forward)
Finalmente chegamos no fim da primeira etapa. Se você seguiu os passos até aqui, o "ddrescue" terminou o seu primeiro passo e você já tem a maior parte dos dados salvos no seu arquivo .img.
Mas ainda não acabou, nesse momento, ainda temos setores defeituosos para copiar, realizamos uma cópia de segurança do que estava "funcional", o que geralmente já garante 90% dos dados Ãntegros.
Na próxima etapa;
- Como forçar o "ddrescue" ler aqueles setores defeituosos, que ele pulou no processo de scraping de forma proposital;
- Como montar o disco no ambiente do Ubuntu, como se fosse um disco real;
- Reparo de partição: O uso do TestDisk para reconstruir a tabela NTFS caso seja necessário.
📡Radiohead - Paranoid Android
O que é isso? (Eu posso ser paranoico, mas não sou um androide)