← Voltar ao blog

Volume Shadow Copy e $MFT: versões antigas

· 4 min de leitura

Resposta curta: todo snapshot Volume Shadow Copy contém uma cópia congelada de $MFT do momento em que o snapshot foi tirado. Montar um snapshot antigo e exportar sua $MFT permite comparar o sistema de arquivos de hoje com um de uma semana atrás, recuperar arquivos excluídos entre snapshots e ver os metadados evoluírem ao longo do tempo.

O que o VSS captura

O Volume Shadow Copy Service (VSS) tira snapshots pontuais de um volume NTFS. Cada snapshot é um delta copy-on-write: quando um bloco está prestes a ser modificado, o original é preservado primeiro no shadow copy. O snapshot, portanto, reflete o volume exatamente como estava no momento da criação, incluindo a Master File Table.

Em um endpoint Windows típico, snapshots são tirados automaticamente — geralmente antes de um Windows Update, às vezes pela Restauração do Sistema, frequentemente por software de backup de terceiros. Uma estação de trabalho pode facilmente ter meia dúzia de snapshots remontando a semanas.

Por que isso importa para a forense

A $MFT viva é uma observação. Um volume com cinco snapshots lhe dá seis observações: hoje mais cinco históricas. Cada $MFT histórica registra o estado do volume naquele momento, incluindo:

  • Arquivos que existiam então e desde então foram excluídos — recuperáveis por completo.
  • Arquivos que existem agora mas estavam ausentes então — provando quando foram introduzidos.
  • Registros cujos carimbos de tempo diferem dos de hoje, expondo renomeações, movimentações e timestomping ocorridos entre snapshots.

Snapshots são especialmente úteis em casos de ransomware: se o VSS não foi excluído (alguns ransomwares tentam — veja padrões de ransomware na MFT), um dos snapshots antigos vai conter a $MFT pré-criptografia e, frequentemente, os dados originais dos arquivos.

Listando snapshots

A partir de um PowerShell elevado:

vssadmin list shadows

Cada entrada mostra um caminho Shadow Copy Volume que se parece com \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7. Esse caminho é montável.

A partir de uma imagem forense, use libvshadow. A ferramenta vshadowinfo enumera snapshots dentro de uma imagem .dd ou .E01; vshadowmount os expõe como volumes virtuais individuais.

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

Após a montagem, você obtém vss1, vss2, ... como arquivos separados, cada um analisável como um volume NTFS.

Extraindo $MFT de um snapshot

Uma vez montado o snapshot (sistema vivo ou via vshadowmount), $MFT está no mesmo offset que no volume pai — a raiz do snapshot. Puxe-a com as mesmas ferramentas que puxam a viva:

  • fsutil (sistema vivo): fsutil file queryextents \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7\$Mft
  • FTK Imager: adicione o dispositivo de shadow copy como evidência, navegue até $MFT, exporte.
  • icat do The Sleuth Kit (imagem): icat -o <offset> vss1 0 > mft_vss1.bin (inode 0 é sempre $MFT).
  • KAPE com o alvo MFT rodado contra cada snapshot montado.

Veja extraindo $MFT para a mecânica em sistema vivo.

Comparando duas MFTs

A análise útil mais barata é um diff. Analise os dois arquivos $MFT para CSV (uma linha por registro), ordene por número de registro e faça diff:

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

O que você está procurando:

  • Registros presentes em vss3 mas ausentes ou marcados excluídos em today — arquivos excluídos no intervalo.
  • Registros presentes em today mas ausentes em vss3 — arquivos introduzidos no intervalo.
  • Registros cujos carimbos de tempo $STANDARD_INFORMATION recuaram — possível timestomping (o snapshot é a verdade fundamental).
  • Registros cuja referência de pai $FILE_NAME mudou — arquivo movido para outro diretório.

O mesmo diff em nível de $UsnJrnl é ainda mais rico; combine-o com o diff da MFT para um quadro completo.

Limites

  • Snapshots podem ser excluídos. vssadmin delete shadows /all é um wipe de uma linha e está em todo playbook de ransomware. Snapshots já despejados se foram — o VSS mantém um máximo fixo (64 por padrão).
  • Snapshots não são pontos arbitrários no tempo. Você recebe o que foi agendado ou o que um instalador disparou. Raramente há um snapshot exatamente no momento de um incidente.
  • Dados residentes em uma $MFT mais antiga não são preservados além do snapshot. Se o arquivo existia em um snapshot e era pequeno, esse snapshot tem os bytes residentes. Não espere recuperar os dados de qualquer snapshot tirado após a exclusão.

Perguntas frequentes

Posso ler um snapshot VSS no Linux?

Sim — libvshadow é multiplataforma. Monte a imagem com vshadowmount, depois qualquer ferramenta ciente de NTFS lê os volumes de snapshot como arquivos comuns.

Os snapshots incluem arquivos de sistema como $MFT?

Sim. Um snapshot VSS captura cada bloco do volume no momento do snapshot, incluindo os arquivos de metadados no início de $MFT.

Quantos snapshots o Windows mantém?

Até 64 por volume por padrão. A configuração é MaxShadowCopies no registro e raramente é customizada. Em servidores com software de backup, o limite efetivo geralmente é o que o software de backup mantém.

Os dados de shadow copy são resilientes a wiping?

São resilientes à exclusão de arquivos individuais no volume vivo — esse é o ponto. Não são resilientes a vssadmin delete shadows, wipe de disco inteiro ou dano físico à mídia.

Recursos externos