Ir al contenido

Acceso a archivosAntiforense

Marcas de tiempo de ext4, crtime y archivos borrados

Marcas de tiempo de los inodos ext4 (atime, mtime, ctime, crtime, dtime) con nanosegundos, relatime, el journal jbd2 y qué se puede recuperar de lo borrado.

Ubicación
/dev/<ext4-partition>
Distribuciones
Prueba
Cuándo se creó, modificó, cambió y posiblemente se leyó o borró un archivo, y a veces qué contenía
Marcas de tiempo
Segundos de época Unix UTC más nanosegundos en los campos *_extra (inodos de 256 bytes); i_dtime en segundos
Acceso
Cualquier usuario para stat sobre archivos accesibles; root o acceso al dispositivo en bruto para debugfs y los inodos borrados
Retención
Marcas de tiempo hasta que se sobrescriben; inodos y bloques borrados hasta que se reutilizan; el journal es un pequeño log circular
Adquisición
dd, ewfacquire, UAC, Velociraptor

Qué es

ext4 es el sistema de archivos por defecto de Debian y Ubuntu y una elección habitual en otras distribuciones. Cada archivo y directorio es un inodo que contiene sus metadatos, incluidas hasta cinco marcas de tiempo. Estas marcas de tiempo son la columna vertebral de cualquier cronología del sistema de archivos en Linux, y la forma en que ext4 gestiona los borrados determina qué se puede recuperar todavía después de que un atacante haga limpieza.

Dónde se encuentra

EstructuraUbicaciónNotas
InodosTablas de inodos de cada grupo de bloquesTamaño de inodo por defecto de 256 bytes, que da cabida a los campos de marca de tiempo adicionales
Entradas de directorioBloques de datos de los directorios (htree con hash para directorios grandes)Correspondencia entre nombre e inodo; los nombres borrados pueden persistir
Journal (jbd2)Normalmente el inodo 8, internoPor defecto data=ordered: se registran en el journal los bloques de metadatos, no los datos de los archivos
SuperbloqueDesplazamiento 1024 del volumenHoras de montaje, última escritura, último fsck, UUID, características

En sistemas en vivo, compruebe las opciones con findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS y las características con dumpe2fs -h /dev/<dev> (solo lectura).

Qué prueba

  • crtime (nacimiento): cuándo se creó el inodo en este sistema de archivos. Las copias y extracciones reciben un crtime nuevo; touch no puede cambiarlo.
  • mtime: último cambio del contenido del archivo. Se puede fijar desde el espacio de usuario (touch -d), así que se puede falsificar.
  • ctime: último cambio del inodo (contenido, permisos, propietario, renombrado, número de enlaces). No se puede fijar directamente; pasa a "ahora" cada vez que un atacante ejecuta touch, lo que pone en evidencia el timestomping.
  • atime: última lectura, sujeta a las reglas de relatime descritas más abajo.
  • dtime: se fija cuando se borra el inodo (también se usa para la gestión de huérfanos).
  • Lo que no prueba: quién realizó la acción (combínelo con auditd, el historial de la shell o los logs).

Campos clave

Campo del inodoSignificado
i_atime, i_mtime, i_ctimeSegundos desde la época Unix
i_crtimeHora de nacimiento, guardada en la zona extendida del inodo
i_atime_extra, i_mtime_extra, i_ctime_extra, i_crtime_extraNanosegundos más dos bits de época que amplían el rango más allá de 2038
i_dtimeHora de borrado en segundos
i_links_count0 en los inodos borrados
i_mode, i_uid, i_gid, i_sizeTipo, permisos, propietario, tamaño

Marcas de tiempo

Todos los valores están en UTC. stat muestra la hora de nacimiento cuando coreutils, glibc y el kernel admiten statx (coreutils 8.31 o posterior con kernel 4.11 o posterior); debugfs la muestra siempre.

stat --format='%n birth=%w modify=%y change=%z access=%x' /etc/passwd
debugfs -R 'stat /etc/passwd' /dev/sda1        # crtime, dtime and nanoseconds, read-only

relatime es el comportamiento de montaje por defecto desde Linux 2.6.30: el atime solo se actualiza cuando es anterior al mtime o al ctime, o tiene más de 24 horas. noatime desactiva por completo la actualización del atime. Interprete el atime como "leído al menos una vez desde aproximadamente ese momento", no como un registro de accesos preciso. Unos campos de nanosegundos que terminan todos en ceros, en un archivo cuyos vecinos tienen precisión completa, son un indicio clásico de marcas de tiempo fijadas con una herramienta.

Retención

  • Las marcas de tiempo cambian con la actividad normal; una imagen tomada con rapidez las preserva.
  • Al borrar, ext4 fija i_dtime, pone a cero el número de enlaces y borra la correspondencia de bloques o extents del inodo, así que el inodo por sí solo normalmente ya no apunta a los datos. Las entradas de directorio pueden conservar el nombre durante un tiempo.
  • Copias más antiguas del inodo pueden sobrevivir en el journal hasta que este da la vuelta, que es en lo que se basa la recuperación a partir del journal.
  • Los bloques de datos permanecen en el espacio no asignado hasta que se reutilizan; fstrim o discard en SSD pueden borrarlos rápidamente.

Adquisición

Haga una imagen del dispositivo en solo lectura (dd, dc3dd o ewfacquire tras un bloqueador de escritura, o una instantánea de nube/VM) y trabaje sobre la copia. Para el triaje en vivo, la salida bodyfile de UAC registra rutas, tamaños y marcas de tiempo (la hora de nacimiento solo cuando su método de recogida puede leerla), y Velociraptor ofrece lo mismo con sus artefactos de cronología. Monte las imágenes con -o ro,noload para que no se reproduzca el journal.

Análisis

fls -r -m / -o <offset> image.raw > body.txt      # The Sleuth Kit, includes deleted names
mactime -b body.txt -d -z UTC > timeline.csv
istat -o <offset> image.raw <inode>               # full inode, times, dtime
icat -o <offset> image.raw <inode> > recovered    # content if blocks are still mapped
debugfs -c -R 'ls -d /tmp' image.raw              # deleted entries shown in <angle brackets>
ext4magic image.raw -a <epoch> -f /home/user -r -d /cases/out   # journal-based recovery

Plaso (log2timeline.py) analiza las marcas de tiempo del sistema de archivos junto con los logs en una super timeline. ext4magic (última versión en 2014) y extundelete (última versión en 2013) no tienen mantenimiento; los resultados varían con las características modernas de ext4, así que valide los archivos recuperados.

Consejos para la investigación

  • Compare el crtime con el mtime: un archivo "modificado" años antes de nacer en este disco se copió, se extrajo de un archivo comprimido o sufrió timestomping.
  • Un ctime posterior a todas las demás horas junto con un mtime redondo es la huella típica de touch -d o touch -r.
  • Los archivos instalados por paquetes reciben el mtime del paquete, no la hora de instalación; para la hora de instalación, use el crtime y los logs del gestor de paquetes.
  • Los nombres borrados en /tmp y /var/tmp son objetivos prioritarios: fls -d enumera solo las entradas borradas.
  • Un gran número de inodos que comparten un mismo dtime indica un borrado masivo mediante script; cuádrelo con el historial de la shell y auditd.
  • Anote las suposiciones de zona horaria de la imagen: ext4 está en UTC, pero los logs que lo rodean pueden estar en hora local.

Ver también