← Torna al blog

Recuperare file eliminati da NTFS usando la MFT

· 8 min di lettura

Recuperare i file eliminati su NTFS si riduce a due orologi e una breve regola. Gli orologi: quanto manca al riuso dello slot del record MFT, e quanto manca alla sovrascrittura dei cluster di dati. La regola: non scrivere sul volume finché uno qualunque dei due orologi ti è ancora utile.

Questo è il workflow di recupero che eseguo davvero quando qualcuno mi consegna un volume NTFS e dice "hanno eliminato X, possiamo riaverlo?". Attinge alla stessa cassetta degli attrezzi indipendentemente dal fatto che X sia un singolo file, un albero di directory o il contenuto di una directory toccata da SDelete.

Perché l'eliminazione non è cancellazione

Quando Windows elimina un file da un volume NTFS:

  1. Il flag IN_USE (bit 0 dei flag dell'header del record all'offset 0x16) viene azzerato.
  2. I cluster che contenevano i dati sono marcati liberi in $Bitmap.
  3. La voce nel $INDEX_ROOT della directory padre viene rimossa.

Cosa non accade: nulla sovrascrive il record o i cluster. Sono marcati disponibili per la prossima allocazione. Finché qualcos'altro non li rivendica, il file è recuperabile. Vedi cosa sopravvive a una cancellazione per il dettaglio campo per campo.

L'orologio di recupero dello slot MFT e l'orologio di recupero dei cluster di dati sono indipendenti. Puoi avere un record che è stato riusato (lo slot è ora un altro file) ma i cui cluster di dati contengono ancora i vecchi byte. Puoi avere un record eliminato intatto i cui cluster sono stati allocati a un nuovo file. Le due situazioni richiedono strategie di recupero diverse.

Passo 1: smetti di scrivere sul volume

Ogni scrittura che fai sul volume rischia di riusare lo slot o i cluster di un record eliminato. Se il file conta:

  • Ferma l'applicazione che lo stava toccando. Se era un database, ferma il motore. Se era un documento, chiudi l'editor.
  • Se il file viveva sul drive di sistema e il sistema sta ancora girando, l'OS stesso sta scrivendo di continuo (paging, prefetch, registro, log eventi). Spegnilo o avvia da supporti esterni. Un sistema vivo perde spazio recuperabile al secondo.
  • Per un drive esterno, smonta subito. Su Windows, espelli; su Linux, umount.

Questo è il passo che la gente salta quando pensa che il recupero sarà "facile". Metà dei casi di recupero falliti che ho visto sono falliti a questo passo.

Passo 2: crea l'immagine del disco

Lavora su una copia, mai sull'originale. Le opzioni standard:

  • FTK Imager: gratuito, GUI, produce immagini .dd o .E01. Fa l'hash della sorgente durante la lettura.
  • dd su Linux: dd if=/dev/sdX of=disk.img bs=4M conv=noerror,sync status=progress. Veloce su dischi sani.
  • ddrescue: più lento, ma tollera errori di lettura su dischi in avaria. La scelta giusta quando il disco è il problema (clicking, letture lente, avvisi SMART).

Fai l'hash dell'immagine (SHA-256) subito dopo l'acquisizione. Ogni passo successivo lavora contro l'immagine, mai contro l'originale.

Passo 3: scegli l'approccio di recupero giusto

L'approccio dipende da cosa è ancora intatto.

Replay della MFT quando il record del file eliminato è ancora nella tabella. Parsa $MFT con uno strumento che elenchi i record eliminati. Nome, timestamp, directory padre e (per file piccoli) dati del file sono recuperabili dal record. Per i file non residenti, la runlist punta ancora ai cluster originali; se quei cluster non sono ancora stati sovrascritti, icat o equivalente estrae i dati.

  • MFTECmd elenca i record eliminati e contrassegna i dati residenti.
  • Il parser nel browser filtra alle voci eliminate con un clic e mostra i dati residenti inline.
  • fls -d -m del Sleuth Kit elenca le voci eliminate; icat -r recupera i loro dati quando possibile.

Strumenti di recupero consapevoli del filesystem quando vuoi un ripristino selettivo guidato da GUI da un volume o un'immagine:

  • R-Studio: commerciale, la scelta dell'analista per NTFS. Gestisce danni complessi, recupera da volumi formattati, capisce EFS e BitLocker (con chiave).
  • TestDisk + PhotoRec: gratuito, maturo, buono per danni alla partizione. PhotoRec fa carving per firma piuttosto che essere consapevole del filesystem, quindi perde i nomi dei file.
  • Recuva: livello consumer. Va bene per recuperi singolo file su singolo drive su volumi non complicati. Non quello che userei per un'indagine.

Carving per firma quando la MFT non c'è più o il record è stato riusato. scalpel, foremost e PhotoRec scansionano l'immagine grezza cercando firme di file note (JPEG FF D8 FF, PNG 89 50 4E 47, ZIP 50 4B 03 04, PDF 25 50 44 46) e riassemblano ciò che trovano. I file ricavati perdono nomi e timestamp; quelli vivevano nella MFT. I byte stessi tornano, modulo frammentazione.

Per i file frammentati, il carving per firma fatica. I carver concatenano cluster consecutivi che sembrano giusti, ma se il file era sparso sul disco non possono riassemblarlo. Il replay MFT consapevole di NTFS gestisce correttamente la frammentazione perché la runlist descrive esplicitamente ogni frammento.

Passo 4: quando il recupero MFT è l'unica strada

I file piccoli (sotto i ~700 byte di $DATA) vivono interamente dentro il record MFT. Anche se $Bitmap è stato sovrascritto decine di volte, i byte residenti sono ancora nel record finché lo slot non viene riusato. Vedi dati residenti.

Per un piccolo file di testo, una piccola config JSON, uno script PowerShell, un'esportazione del registro, un piccolo certificato o un file .lnk, il parser nel browser è spesso la via più veloce: trascina la $MFT estratta, filtra alle voci eliminate, cerca record con $DATA residente e copia i byte fuori. Funziona quando nient'altro funziona perché i dati non sono mai usciti dalla MFT in primo luogo.

Cosa è davvero irrecuperabile

Cluster sovrascritti. HDD e SSD moderni non offrono alcun percorso realistico per recuperare dati che sono stati scritti sopra una volta. Il recupero da "magnetizzazione residua" fantasioso della vecchia letteratura forense non si applica ai dischi prodotti in questo decennio. La densità è troppo alta, il posizionamento della testina troppo preciso.

Blocchi SSD recuperati da TRIM. Una volta che il controller SSD ha fatto TRIM su un blocco, il flash sottostante viene azzerato durante la garbage collection. I dati se ne vanno, in fretta. La finestra tra l'eliminazione e il completamento del TRIM su Windows moderno è di pochi secondi al massimo.

Volumi cifrati senza la chiave. I volumi NTFS cifrati con BitLocker, VeraCrypt o LUKS sono irrecuperabili senza la chiave. Il testo in chiaro non ha mai toccato il disco.

File ripuliti da un wiper competente. sdelete -p 3 -z -s -q C:\target\* sovrascrive i cluster del file tre volte, azzera lo spazio libero e ricorre. Il recupero è impossibile per i cluster di dati; il record MFT può ancora contenere metadati e dati residenti, ma il contenuto sostanziale del file è andato.

Dati residenti: il caso in cui la fisica è dalla tua parte

Il caso dei dati residenti continua a sorprendere gli analisti junior. I file sotto la soglia stanno inline nel record MFT. Il record persiste finché lo slot non viene riusato. L'area dati è irrilevante; se $Bitmap è stato sovrascritto mille volte, i byte residenti sono ancora lì.

Una volta ho recuperato un file .config da 400 byte da un disco rigido che era stato usato per altre due settimane dopo l'eliminazione ed era stato in gran parte sovrascritto. Lo slot MFT sopra il record 230.000 non era stato riusato. L'intero file era lì, residente, nel record. Cinque minuti di lavoro.

Per questo provo sempre il recupero MFT-first per i file piccoli prima di toccare l'area dati.

Domande frequenti

Per quanto tempo i file eliminati restano recuperabili su NTFS?

Finché lo slot MFT non viene riusato e i cluster di dati sovrascritti. Su un sistema affollato sono ore. Su un sistema inattivo possono essere mesi. Non c'è un timer fisso; è guidato dalla pressione di allocazione del volume.

Svuotare il cestino rende il recupero più difficile?

No. Il cestino è una directory nascosta ($Recycle.Bin) su ogni volume. Svuotarlo elimina i file nel senso NTFS normale; si applicano le stesse tecniche di recupero. Prima dello svuotamento, il file è un normale file NTFS sotto \$Recycle.Bin\<SID>\ con un nome $R<ID>; il compagno $I<ID> registra il percorso originale.

Posso recuperare file eliminati con del /F o Shift+Delete?

Sì. Questi saltano il cestino ma eliminano allo stesso modo (IN_USE azzerato, cluster liberati). Il record MFT è ancora lì finché non viene riusato.

Posso recuperare file da un disco NTFS formattato?

Una formattazione veloce riscrive solo il settore di boot e una $MFT fresca. La maggior parte dei vecchi cluster di dati è intatta e molti dei precedenti record MFT (NTFS riusa lo stesso offset iniziale) sono recuperabili tramite carving per firma di header FILE sul volume grezzo. Una formattazione completa azzera il volume; quei dati sono andati.

E un file che è stato rinominato prima dell'eliminazione?

Il record MFT dopo l'eliminazione mostra il nome finale (quello post-rinomino). Il journal USN conserva la coppia RENAME_OLD_NAME / RENAME_NEW_NAME, così puoi recuperare il nome originale da lì.

Letture aggiuntive

  • Brian Carrier, File System Forensic Analysis. Capitoli sulla semantica di eliminazione e sul recupero su NTFS.
  • Documentazione di fls -d e icat -r del Sleuth Kit. Workflow canonico da riga di comando per l'enumerazione di file eliminati e il recupero dati.
  • Documentazione di PhotoRec. Il riferimento per il carving per firma quando la MFT non è più lo strumento giusto.

Risorse esterne