← Torna al blog

Volume Shadow Copy e $MFT: versioni precedenti

· 4 min di lettura

Risposta breve: ogni snapshot Volume Shadow Copy contiene una copia congelata di $MFT al momento in cui lo snapshot è stato preso. Montare uno snapshot vecchio ed esportarne $MFT permette di confrontare il file system di oggi con quello di una settimana fa, recuperare file eliminati tra gli snapshot e osservare i metadati evolvere nel tempo.

Cosa cattura VSS

Il servizio Volume Shadow Copy (VSS) prende snapshot puntuali di un volume NTFS. Ogni snapshot è un delta copy-on-write: quando un blocco sta per essere modificato, l'originale viene prima preservato nella shadow copy. Lo snapshot riflette quindi il volume esattamente com'era nell'istante della creazione, inclusa la Master File Table.

Su un tipico endpoint Windows gli snapshot vengono presi automaticamente — di solito prima di un Windows Update, talvolta da Ripristino configurazione di sistema, spesso da software di backup di terze parti. Una workstation può facilmente avere una mezza dozzina di snapshot che risalgono indietro di settimane.

Perché è importante in forensica

La $MFT attiva è un'osservazione. Un volume con cinque snapshot vi dà sei osservazioni: oggi più cinque storiche. Ogni $MFT storica registra lo stato del volume in quel momento, incluso:

  • File che esistevano allora e sono stati nel frattempo eliminati — recuperabili per intero.
  • File che esistono ora ma erano assenti allora — dimostrando quando sono stati introdotti.
  • Record i cui timestamp differiscono da oggi, esponendo rinominazioni, spostamenti e timestomping avvenuti tra gli snapshot.

Gli snapshot sono particolarmente utili nei casi di ransomware: se VSS non è stato eliminato (alcuni ransomware ci provano — vedi pattern ransomware nella MFT), uno degli snapshot più vecchi conterrà la $MFT pre-cifratura e, spesso, i dati originali dei file.

Elencare gli snapshot

Da una PowerShell con privilegi elevati:

vssadmin list shadows

Ogni voce mostra un percorso Shadow Copy Volume che assomiglia a \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7. Quel percorso è montabile.

Da un'immagine forense, usate libvshadow. Lo strumento vshadowinfo enumera gli snapshot dentro un'immagine .dd o .E01; vshadowmount li espone come volumi virtuali separati.

vshadowinfo disk.dd
vshadowmount disk.dd /mnt/shadows

Dopo il montaggio ottenete vss1, vss2, ... come file separati, ognuno analizzabile come un volume NTFS.

Estrarre $MFT da uno snapshot

Una volta montato uno snapshot (sistema attivo o tramite vshadowmount), $MFT si trova allo stesso offset del volume genitore — la radice dello snapshot. Recuperatela con gli stessi strumenti usati per quella attiva:

  • fsutil (sistema attivo): fsutil file queryextents \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7\$Mft
  • FTK Imager: aggiungete il dispositivo shadow copy come prova, navigate fino a $MFT, esportate.
  • icat da The Sleuth Kit (immagine): icat -o <offset> vss1 0 > mft_vss1.bin (inode 0 è sempre $MFT).
  • KAPE con il target MFT eseguito su ogni snapshot montato.

Vedi estrarre $MFT per la meccanica su sistema attivo.

Confrontare due MFT

L'analisi più utile a basso costo è un diff. Analizzate entrambi i file $MFT in CSV (una riga per record), ordinate per numero di record e diffate:

mft_dump -o csv mft_today.bin   > today.csv
mft_dump -o csv mft_vss3.bin    > vss3.csv
diff <(sort today.csv) <(sort vss3.csv) > changes.diff

Cosa cercare:

  • Record presenti in vss3 ma assenti o marcati eliminati in today — file eliminati nell'intervallo.
  • Record presenti in today ma assenti in vss3 — file introdotti nell'intervallo.
  • Record i cui timestamp $STANDARD_INFORMATION sono andati indietro — possibile timestomping (lo snapshot è la verità di campo).
  • Record la cui reference parent in $FILE_NAME è cambiata — file spostato in un'altra cartella.

Lo stesso diff a livello di $UsnJrnl è ancora più ricco; abbinatelo al diff MFT per una visione completa.

Limiti

  • Gli snapshot possono essere eliminati. vssadmin delete shadows /all è una cancellazione in una riga ed è in ogni playbook di ransomware. Gli snapshot già sfrattati sono spariti — VSS conserva un massimo fisso (64 per impostazione predefinita).
  • Gli snapshot non sono istanti arbitrari nel tempo. Ottenete ciò che è stato pianificato o ciò che un installer ha innescato. Raramente c'è uno snapshot esattamente al momento di un incidente.
  • I dati resident in una $MFT più vecchia non sono preservati oltre lo snapshot. Se il file esisteva in uno snapshot ed era piccolo, quello snapshot ha i byte resident. Non aspettatevi di recuperare i dati da uno snapshot successivo all'eliminazione.

Domande frequenti

Posso leggere uno snapshot VSS da Linux?

Sì — libvshadow è multipiattaforma. Montate l'immagine con vshadowmount, poi qualsiasi strumento compatibile NTFS legge i volumi snapshot come file normali.

Gli snapshot includono i file di sistema come $MFT?

Sì. Uno snapshot VSS cattura ogni blocco del volume al momento dello snapshot, inclusi i file di metadati all'inizio di $MFT.

Quanti snapshot conserva Windows?

Fino a 64 per volume per impostazione predefinita. Il parametro è MaxShadowCopies nel registro e raramente viene personalizzato. Sui server con software di backup, il limite effettivo è di solito quello che il software di backup conserva.

I dati di shadow copy resistono alla cancellazione?

Resistono all'eliminazione di singoli file sul volume attivo — è lo scopo. Non resistono a vssadmin delete shadows, a una cancellazione disco completa o a un danno fisico al supporto.

Risorse esterne