← Voltar ao blog

Recuperar ficheiros eliminados do NTFS usando o MFT

· 8 min de leitura

Recuperar ficheiros eliminados em NTFS resume-se a dois relógios e uma regra curta. Os relógios: quanto tempo até o slot do registo MFT ser reutilizado, e quanto tempo até os clusters de dados serem sobrescritos. A regra: não escreva no volume enquanto qualquer um dos relógios lhe for útil.

Este é o fluxo de recuperação que efectivamente corro quando alguém me entrega um volume NTFS e diz "eles apagaram X, dá para o trazer de volta?". Puxa da mesma caixa de ferramentas quer X seja um único ficheiro, uma árvore de directórios, ou o conteúdo de um directório tocado pelo SDelete.

Porque eliminar não apaga

Quando o Windows elimina um ficheiro de um volume NTFS:

  1. A flag IN_USE (bit 0 nas flags do cabeçalho do registo no offset 0x16) é limpa.
  2. Os clusters que continham os dados são marcados livres em $Bitmap.
  3. A entrada $INDEX_ROOT do directório-pai é removida.

O que não acontece: nada sobrescreve o registo ou os clusters. Ficam marcados como disponíveis para a próxima alocação. Até que outra coisa os reclame, o ficheiro é recuperável. Veja o que sobrevive a uma eliminação para o detalhe campo a campo.

O relógio de recuperação do slot do MFT e o relógio de recuperação dos clusters de dados são independentes. Pode ter um registo que foi reutilizado (o slot é agora um ficheiro diferente) mas cujos clusters de dados ainda contêm os bytes antigos. Pode ter um registo eliminado intacto cujos clusters foram alocados a um novo ficheiro. As duas situações requerem estratégias de recuperação diferentes.

Passo 1: pare de escrever no volume

Cada escrita que faça no volume arrisca reutilizar o slot ou os clusters de dados de um registo eliminado. Se o ficheiro importa:

  • Pare a aplicação que lhe tocou. Se era uma base de dados, pare o motor. Se era um documento, feche o editor.
  • Se o ficheiro vivia no disco do sistema e o sistema ainda está a correr, o próprio SO está constantemente a escrever (paging, prefetch, registo, logs de eventos). Desligue ou arranque de um suporte externo. Um sistema vivo perde espaço recuperável a cada segundo.
  • Para um disco externo, desmonte imediatamente. No Windows, eject; no Linux, umount.

Este é o passo que as pessoas saltam quando pensam que a recuperação vai ser "fácil". Metade dos casos de recuperação falhada que vi falharam neste passo.

Passo 2: faça imagem do disco

Trabalhe numa cópia, nunca no original. As opções standard:

  • FTK Imager: gratuito, gráfico, produz imagens .dd ou .E01. Faz hash à origem durante a leitura.
  • dd em Linux: dd if=/dev/sdX of=disk.img bs=4M conv=noerror,sync status=progress. Rápido em discos saudáveis.
  • ddrescue: mais lento, mas tolera erros de leitura em discos a falhar. A escolha certa quando o disco é o problema (cliques, leituras lentas, avisos SMART).

Faça hash à imagem (SHA-256) imediatamente após a aquisição. Todos os passos seguintes trabalham contra a imagem, nunca contra o original.

Passo 3: escolha a abordagem de recuperação certa

A abordagem depende do que ainda está intacto.

Replay do MFT quando o registo do ficheiro eliminado ainda está na tabela. Analise o $MFT com uma ferramenta que liste registos eliminados. O nome do ficheiro, carimbos temporais, directório-pai, e (para ficheiros pequenos) os dados são recuperáveis a partir do registo. Para ficheiros não residentes, a runlist ainda aponta para os clusters originais; se esses clusters ainda não foram sobrescritos, o icat ou equivalente extrai os dados.

  • O MFTECmd lista registos eliminados e marca dados residentes.
  • O parser de browser filtra para entradas eliminadas com um clique e mostra dados residentes inline.
  • O fls -d -m do Sleuth Kit lista entradas eliminadas; o icat -r recupera os dados quando possível.

Ferramentas de recuperação cientes do sistema de ficheiros quando quer um restauro selectivo guiado por GUI a partir de um volume ou imagem:

  • R-Studio: comercial, a escolha do analista para NTFS. Lida com danos complexos, recupera de volumes formatados, percebe EFS e BitLocker (com chave).
  • TestDisk + PhotoRec: gratuitos, maduros, bons para danos de partição. O PhotoRec é carving por assinatura em vez de ciente do sistema de ficheiros, portanto perde nomes de ficheiro.
  • Recuva: gama de consumidor. Bom para recuperações de um único ficheiro num único disco em volumes simples. Não é o que eu usaria para uma investigação.

Carving por assinatura quando o MFT desapareceu ou o registo foi reutilizado. O scalpel, foremost e o PhotoRec varrem a imagem bruta por assinaturas de ficheiro conhecidas (JPEG FF D8 FF, PNG 89 50 4E 47, ZIP 50 4B 03 04, PDF 25 50 44 46) e reagrupam o que encontram. Os ficheiros recolhidos por carving perdem nomes e carimbos temporais; isso vivia no MFT. Os bytes em si voltam, módulo fragmentação.

Para ficheiros fragmentados, o carving por assinatura sofre. Os carvers concatenam clusters consecutivos que parecem certos, mas se o ficheiro estava espalhado pelo disco não os conseguem reagrupar. O replay do MFT ciente do NTFS lida correctamente com fragmentação porque a runlist descreve explicitamente cada fragmento.

Passo 4: quando a recuperação por MFT é o único caminho

Os ficheiros pequenos (sob ~700 bytes de $DATA) vivem inteiramente dentro do registo MFT. Mesmo que o $Bitmap tenha sido sobrescrito dezenas de vezes, os bytes residentes continuam dentro do registo até o slot ser reutilizado. Veja resident data.

Para um pequeno ficheiro de texto, uma pequena configuração JSON, um script PowerShell, um export de registo, um pequeno certificado, ou um ficheiro .lnk, o parser de browser é muitas vezes o caminho mais rápido: largue o $MFT extraído, filtre para entradas eliminadas, procure registos com $DATA residente, e copie os bytes de volta. Isto funciona quando mais nada funciona, porque os dados nunca saíram do MFT em primeiro lugar.

O que é genuinamente irrecuperável

Clusters sobrescritos. Os HDDs e SSDs modernos não oferecem caminho realista para recuperar dados que foram escritos por cima uma vez. A recuperação fantasiosa de "magnetização residual" da literatura forense antiga não se aplica a discos fabricados nesta década. A densidade é alta demais, o posicionamento das cabeças preciso demais.

Blocos SSD recuperados por TRIM. Quando o controlador SSD faz TRIM a um bloco, a flash subjacente é zerada durante a recolha de lixo. Os dados desaparecem rapidamente. A janela entre a eliminação e a conclusão do TRIM no Windows moderno é de segundos no máximo.

Volumes encriptados sem a chave. Volumes NTFS encriptados com BitLocker, VeraCrypt ou LUKS são irrecuperáveis sem a chave. O texto claro nunca tocou o disco em primeiro lugar.

Ficheiros limpos por um wiper competente. O sdelete -p 3 -z -s -q C:\target\* sobrescreve os clusters do ficheiro três vezes, zera espaço livre, e recursa. A recuperação é impossível para os clusters de dados; o registo MFT pode ainda guardar metadados e dados residentes, mas o conteúdo substancial do ficheiro foi-se.

Dados residentes: o caso em que a física está do seu lado

O caso dos dados residentes continua a surpreender analistas júnior. Ficheiros abaixo do limiar ficam inline no registo MFT. O registo persiste até o slot ser reutilizado. A área de dados é irrelevante; se o $Bitmap tiver sido sobrescrito mil vezes, os bytes residentes continuam lá.

Uma vez recuperei um ficheiro .config de 400 bytes de um disco que tinha sido usado mais duas semanas após a eliminação e tinha sido maioritariamente sobrescrito. O slot do MFT acima do registo 230.000 não tinha sido reutilizado. O ficheiro completo estava ali, residente, no registo. Cinco minutos de trabalho.

É por isto que tento sempre recuperação por MFT primeiro para ficheiros pequenos antes de tocar na área de dados.

Perguntas frequentes

Quanto tempo ficam os ficheiros eliminados recuperáveis em NTFS?

Até que o slot do MFT seja reutilizado e os clusters de dados sejam sobrescritos. Num sistema ocupado, são horas. Num sistema ocioso, podem ser meses. Não há cronómetro fixo; é guiado pela pressão de alocação do volume.

Esvaziar a Reciclagem dificulta a recuperação?

Não. A reciclagem é um directório oculto ($Recycle.Bin) em cada volume. Esvaziar elimina os ficheiros no sentido NTFS normal; aplicam-se as mesmas técnicas de recuperação. Antes de esvaziar, o ficheiro continua a ser um ficheiro NTFS normal sob \$Recycle.Bin\<SID>\ com um nome $R<ID>; o irmão $I<ID> regista o caminho original.

Posso recuperar ficheiros eliminados com del /F ou Shift+Delete?

Sim. Estes saltam a reciclagem mas eliminam da mesma forma (IN_USE limpo, clusters libertados). O registo MFT continua lá até ser reutilizado.

Posso recuperar ficheiros de um disco NTFS formatado?

A formatação rápida apenas reescreve o boot sector e um $MFT novo. A maior parte dos clusters de dados antigos continua intacta e muitos dos registos MFT anteriores (o NTFS reutiliza o mesmo offset inicial) são recuperáveis via carving por assinatura para cabeçalhos FILE em todo o volume bruto. A formatação completa zera o volume; esses dados foram-se.

E um ficheiro que foi renomeado antes de ser eliminado?

O registo MFT depois da eliminação mostra o nome final (o pós-rename). O USN journal preserva o par RENAME_OLD_NAME / RENAME_NEW_NAME, por isso pode recuperar o nome original a partir de lá.

Leituras adicionais

  • Brian Carrier, File System Forensic Analysis. Capítulos sobre semântica de eliminação e recuperação em NTFS.
  • Documentação do fls -d e do icat -r do Sleuth Kit. Fluxo canónico de linha de comandos para enumeração de ficheiros eliminados e recuperação de dados.
  • Documentação do PhotoRec. A referência para carving por assinatura quando o MFT já não é a ferramenta certa.

Recursos externos