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
Herramientas
Comparar todas las herramientas- Disk Image ParserNavegador
- debugfsCLI · incluido en Linux
- The Sleuth KitCLI · código abierto
- PlasoCLI · código abierto
- ext4magicCLI · código abierto
- statCLI · incluido en Linux
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
| Estructura | Ubicación | Notas |
|---|---|---|
| Inodos | Tablas de inodos de cada grupo de bloques | Tamaño de inodo por defecto de 256 bytes, que da cabida a los campos de marca de tiempo adicionales |
| Entradas de directorio | Bloques 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, interno | Por defecto data=ordered: se registran en el journal los bloques de metadatos, no los datos de los archivos |
| Superbloque | Desplazamiento 1024 del volumen | Horas 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;
touchno 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
relatimedescritas 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 inodo | Significado |
|---|---|
i_atime, i_mtime, i_ctime | Segundos desde la época Unix |
i_crtime | Hora de nacimiento, guardada en la zona extendida del inodo |
i_atime_extra, i_mtime_extra, i_ctime_extra, i_crtime_extra | Nanosegundos más dos bits de época que amplían el rango más allá de 2038 |
i_dtime | Hora de borrado en segundos |
i_links_count | 0 en los inodos borrados |
i_mode, i_uid, i_gid, i_size | Tipo, 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;
fstrimodiscarden 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
ctimeposterior a todas las demás horas junto con un mtime redondo es la huella típica detouch -dotouch -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 -denumera 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
Artefactos relacionados
Guías detalladas
Glosario
- ext4 crtime (Birth Time)Inglés
- InodeInglés
- Super TimelineInglés