
El problema
Los atacantes borran los logs de eventos de Windows. Pero si existen Volume Shadow Copies en el disco, los logs antiguos siguen ahí — congelados en el tiempo. El reto: las herramientas existentes no permiten acceder fácilmente.
| Herramienta | Limitación |
|---|---|
| vshadowmount | Requiere FUSE, solo Linux |
| EVTXECmd –vss | Requiere API COM de VSS de Windows, solo sistemas en vivo |
| Ambas | No pueden leer de imagenes forenses E01 directamente |
¿Qué es vshadow-rs?
Una librería y herramienta CLI en Rust puro que lee el formato VSS directamente desde imágenes E01, raw/dd, de partición o volúmenes montados. Sin APIs de Windows, sin dependencias en C, funciona en Windows, Linux y macOS.
Su logo es Ferris (el cangrejo de Rust) con casco de minero — un guiño a los mineros del carbón de León, que excavaban capas de oscuridad para sacar a la superficie lo que estaba oculto.
- Repositorio: github.com/jupyterj0nes/vshadow-rs
- Crate: crates.io/crates/vshadow
- Licencia: AGPL-3.0
Características principales
| Característica | Descripción |
|---|---|
| Inspeccionar stores VSS | Listar todos los snapshots con GUIDs, fechas de creación y tamaño del delta |
| Listar ficheros | Navegar directorios NTFS dentro de cualquier store VSS o del volumen activo |
| Detección de delta | Comparar snapshots VSS contra el volumen activo — encontrar ficheros borrados y modificados |
| Timelines MACB | Generar timelines forenses del delta con precisión completa de timestamps NTFS |
| Extraer ficheros | Extraer ficheros de stores VSS a disco — recuperar logs de eventos borrados |
| Soporte E01 | Lee directamente de imagenes Expert Witness Format, sin ewfmount |
| Volúmenes montados | Lee directamente desde letras de unidad (C:), dispositivos de bloque (/dev/sda2) o puntos de montaje (/mnt/evidence) — sin necesidad de crear una imagen primero |
| Detección automática de particiones | Encuentra particiones NTFS automáticamente vía GPT y MBR |
| Multiplataforma | Windows, Linux y macOS — binario único, cero dependencias |
| Librería + CLI | Usable como crate Rust o como herramienta de línea de comandos |
Instalar
Descargar binario pre-compilado (recomendado)
No necesitas Rust. Solo descarga y ejecuta.
| Plataforma | Descarga |
|---|---|
| Windows | vshadow-rs-windows.exe |
| Linux | vshadow-rs-linux |
| macOS | vshadow-rs-macos |
Ve a Releases y descarga el binario para tu plataforma. Nada más.
Compilar desde el código fuente (alternativa)
cargo install vshadow
Uso CLI
Todos los comandos aceptan imágenes forenses (E01, dd/raw) y volúmenes montados/discos (letras de unidad en Windows, dispositivos /dev/ o puntos de montaje en Linux/macOS).
Inspeccionar: encontrar stores VSS
# Desde imagen forense
vshadow-rs info -f evidence.E01
# Desde volumen montado (Windows — requiere Administrador)
vshadow-rs info -f C:
# Desde dispositivo de bloque (Linux — requiere root)
sudo vshadow-rs info -f /dev/sda2
sudo vshadow-rs info -f /mnt/evidence

Listar: navegar ficheros en un store VSS o volumen activo
# Volumen activo
vshadow-rs list -f evidence.E01 --live -p "Windows/System32/winevt/Logs"
# Store VSS 0
vshadow-rs list -f evidence.E01 -s 0 -p "Windows/System32/winevt/Logs"
List-delta: encontrar qué cambió entre VSS y el volumen activo
Esto es lo que hace único a vshadow-rs. Compara el filesystem del snapshot contra el volumen activo y muestra solo los ficheros que fueron borrados o modificados.
# Mostrar delta de todos los stores VSS
vshadow-rs list-delta -f evidence.E01
# Enfocarse solo en los logs de eventos
vshadow-rs list-delta -f evidence.E01 -p "Windows/System32/winevt/Logs"
# Exportar delta a CSV
vshadow-rs list-delta -f evidence.E01 -o delta.csv

La salida muestra cada fichero modificado con su tamaño en el volumen activo vs. el store VSS, haciendo inmediatamente obvio cuándo los logs han sido borrados.
Extraer: recuperar ficheros de stores VSS
vshadow-rs extract -f evidence.E01 -s 0 -p "Windows/System32/winevt/Logs" -o ./recuperados/
Timeline: generar timeline MACB del delta VSS
Genera un CSV con timeline MACB (Modified, Accessed, Changed, Born) completa del delta — solo ficheros que existen en VSS pero no en el volumen activo, o que cambiaron.
# Formato expandido: 8 filas por fichero (timestamps SI + FN)
vshadow-rs timeline -f evidence.E01 -o timeline.csv
# Formato MACB: 1 fila por fichero con flags MACB
vshadow-rs timeline -f evidence.E01 --format macb -o timeline.csv
# Incluir volumen activo en la timeline
vshadow-rs timeline -f evidence.E01 --include-live -o timeline.csv
Flujo de trabajo forense típico
# 1. Comprobar si hay stores VSS
vshadow-rs info -f suspect.E01
# 2. Encontrar que cambio entre VSS y el volumen activo
vshadow-rs list-delta -f suspect.E01 -p "Windows/System32/winevt/Logs"
# 3. Extraer los logs previos al borrado desde VSS
vshadow-rs extract -f suspect.E01 -s 0 -p "Windows/System32/winevt/Logs" -o ./recuperados/
# 4. Generar timeline de ficheros borrados/modificados
vshadow-rs timeline -f suspect.E01 -o timeline.csv
# 5. Parsear los logs recuperados con masstin
masstin -a parse-windows -d ./recuperados/ -o lateral.csv
Qué hace único a vshadow-rs
-
Detección de delta (
list-delta): ninguna otra herramienta compara snapshots VSS contra el volumen activo para mostrar exactamente qué cambió. Es la forma más rápida de encontrar logs borrados, ficheros eliminados y evidencia manipulada. -
Timelines MACB desde las sombras (
timeline): genera timelines forenses del delta — solo los cambios relevantes, no el filesystem completo. -
Soporte E01 directo: lee imágenes forenses sin montar, convertir ni extraer.
-
Soporte de volúmenes montados / discos en vivo: apunta vshadow-rs a una letra de unidad (
C:,D:), un dispositivo de bloque (/dev/sda2) o un punto de montaje (/mnt/evidence) y lee el volumen raw directamente. Sin necesidad de crear una imagen primero — ideal para triage o cuando se trabaja con un bloqueador de escritura. -
Rust puro, multiplataforma: sin FUSE, sin APIs de Windows, sin bibliotecas C. Funciona en cualquier SO.
-
Librería + CLI: usa el crate
vshadowen tus propias herramientas Rust, o usa el binariovshadow-rsdesde la línea de comandos.
Comparación con herramientas existentes
| Funcionalidad | libvshadow (C) | vshadowmount | vshadowinfo | vshadow-rs |
|---|---|---|---|---|
| Lenguaje | C | C (libvshadow) | C (libvshadow) | Rust |
| Listar stores VSS | Sí | No | Sí | Sí |
| Mostrar GUIDs, fechas | Sí | No | Sí | Sí |
| Mostrar tamaño del delta | No | No | No | Sí |
| Montar como filesystem FUSE | No | Sí | No | No |
| Listar ficheros en store VSS | No | Vía mount | No | Sí |
| Extraer ficheros de VSS | No | Vía mount | No | Sí |
| Comparar VSS vs live (delta) | No | No | No | Sí |
| Timeline MACB del delta | No | No | No | Sí |
| Listar ficheros en volumen activo | No | No | No | Sí |
| Leer E01 directamente | No | No | No | Sí |
| Leer volúmenes montados / discos en vivo | No | No | No | Sí |
| Detectar particiones GPT/MBR | No | No | No | Sí |
| Sin dependencias en C | No | No | No | Sí |
| Sin FUSE | Sí | No | Sí | Sí |
| Multiplataforma | Linux/Mac | Solo Linux | Linux/Mac/Win | Win/Linux/Mac |
libvshadow es la biblioteca de referencia en C de Joachim Metz. vshadowmount y vshadowinfo son sus herramientas CLI. vshadow-rs es una implementación completamente independiente en Rust — no utiliza libvshadow.
Cómo funciona VSS
Volume Shadow Copy utiliza un mecanismo de copy-on-write a nivel de bloques (16 KiB):
- Creación de snapshot: el catálogo registra los metadatos (GUID, timestamp)
- Modificación de bloque: cuando un bloque va a ser sobreescrito, los datos antiguos se copian a un área de almacenamiento primero
- Reconstrucción: leer del store para bloques cambiados, del volumen activo para bloques sin cambios
vshadow-rs parsea las estructuras en disco: cabecera a 0x1E00, catálogo (lista enlazada de bloques de 16 KiB) y descriptores de bloques (entradas de 32 bytes mapeando offsets originales a datos almacenados).
Uso como biblioteca
use vshadow::VssVolume;
let mut reader = /* cualquier fuente Read+Seek */;
let vss = VssVolume::new(&mut reader)?;
for i in 0..vss.store_count() {
let mut store = vss.store_reader(&mut reader, i)?;
// store implementa Read + Seek — pasar al crate ntfs
}
Integración con masstin
Masstin utiliza vshadow-rs para procesar imagenes forenses con un solo comando:
masstin -a parse-image-windows -f evidence.E01 -o timeline.csv
Esto extrae EVTX tanto del volumen activo como de todos los snapshots VSS, generando una timeline unificada de movimiento lateral que incluye eventos que el atacante borró.
Trabajo futuro
- Soporte VMDK / VHD / VHDX: leer VSS desde imágenes de disco de máquinas virtuales directamente
- Delta multi-store: comparar entre múltiples snapshots VSS para construir un historial completo de cambios
- Recuperación de ficheros borrados: detectar y recuperar ficheros eliminados entre snapshots usando análisis de MFT
- Integración con Plaso/log2timeline: exportar timelines en formatos compatibles con toolchains DFIR existentes
- Soporte AFF4: leer desde imágenes forenses AFF4
$ comments