Marcas de tiempo APFS y snapshots locales en macOS
Marcas de tiempo APFS en nanosegundos, Date Added de directorio y snapshots locales de Time Machine: la base de las líneas de tiempo y la recuperación en macOS.
- Ubicación
- /System/Volumes/Data
- Prueba
- Cuándo se crearon, modificaron y añadieron archivos a una carpeta, y cómo era el volumen unas horas antes
- Marcas de tiempo
- Nanosegundos desde 1970-01-01 UTC (época Unix)
- Acceso
- Cualquier usuario para stat sobre sus propios archivos; root más Full Disk Access para montar snapshots
- Retención
- Marcas de tiempo hasta que se sobrescriben; snapshots locales horarios conservados unas 24 horas
- Adquisición
- UAC, Aftermath, tmutil, Disk image
Herramientas
Comparar todas las herramientas- Disk Image ParserNavegador
- libfsapfsBiblioteca · código abierto
- statCLI · incluido en macOS
- mac_aptCLI · código abierto
Qué es
APFS es el sistema de archivos por defecto de macOS desde 10.13 High Sierra para volúmenes de arranque en SSD. Cada inodo almacena cuatro marcas de tiempo con resolución de nanosegundos, y cada entrada de directorio guarda un valor Date Added independiente. APFS usa copia en escritura, por lo que también puede mantener snapshots de solo lectura de un volumen con muy poco coste. Time Machine los usa como "snapshots locales", y macOS crea uno antes de instalar actualizaciones.
En conjunto proporcionan la primera capa de cualquier línea de tiempo de un Mac, una forma de comprobar si las marcas de tiempo se han manipulado y, a veces, una copia de un archivo que después se modificó o se borró. La guía de snapshots y marcas de tiempo APFS explica en profundidad la organización de los volúmenes y el comportamiento de las copias; esta página es la referencia rápida.
Dónde se encuentra
| macOS | Qué examinar | Notas |
|---|---|---|
| 10.15 Catalina y posteriores | Volumen Data, montado en /System/Volumes/Data | Archivos de usuario; enlazados mediante firmlinks en /Users, /Applications, /Library, /private |
| 11 Big Sur y posteriores | El volumen del sistema es un volumen de sistema sellado | Contenido distribuido por Apple, rara vez es evidencia del caso |
| 10.13 y posteriores | Snapshots locales en cada volumen APFS del que Time Machine hace copia | Nombres com.apple.TimeMachine.YYYY-MM-DD-HHMMSS.local |
| macOS reciente | Snapshots de actualización | Se crean antes de instalar actualizaciones de macOS |
| Cualquiera | /usr/share/firmlinks en el volumen del sistema | Asocia rutas raíz con rutas del volumen Data |
Protección: stat funciona con todo lo que el usuario puede ver. Listar y montar snapshots requiere root, y leer rutas protegidas por TCC dentro de un snapshot montado sigue requiriendo Full Disk Access. Sin conexión, hay que desbloquear primero un volumen Data con FileVault o de Apple silicon.
Qué prueba
- Cuándo se creó el inodo de un archivo (creación), cuándo cambió su contenido por última vez (mtime) y cuándo cambiaron sus metadatos por última vez (ctime).
- Cuándo se colocó un elemento en su carpeta actual (Date Added), con independencia de las marcas de tiempo del propio archivo.
- Que un archivo existía, con un contenido concreto, en el momento de un snapshot.
- Una probable manipulación de marcas de tiempo (timestomping), cuando ctime, los nanosegundos o Date Added contradicen mtime y la hora de creación.
No prueba:
- Que un archivo se leyera. La hora de acceso se actualiza de forma diferida por defecto (ver abajo).
- Quién hizo un cambio. Las marcas de tiempo no llevan asociado ningún usuario ni proceso.
Campos clave
| Campo APFS | stat / POSIX | Significado |
|---|---|---|
create_time | st_birthtime (%SB) | Creación del inodo |
mod_time | st_mtime (%Sm) | Última modificación del contenido |
change_time | st_ctime (%Sc) | Último cambio de atributos del inodo (permisos, propietario, xattrs, marcas de tiempo, nombre) |
access_time | st_atime (%Sa) | Último acceso, sujeto a la política de atime |
date_added (registro de directorio j_drec_val_t) | Spotlight kMDItemDateAdded, "Fecha de agregación" en Finder | Cuándo se añadió la entrada a su directorio actual |
| Nombre y XID del snapshot | diskutil apfs listSnapshots | Nombre e ID de transacción; los XID ordenan los snapshots |
Política de hora de acceso: salvo que el volumen tenga el flag APFS_FEATURE_STRICTATIME, APFS solo actualiza access_time en una lectura cuando el valor almacenado es anterior a mod_time. El volumen Data se monta normalmente sin atime estricto, así que atime es una prueba débil de lectura.
Marcas de tiempo
Todas las marcas de tiempo APFS, incluida date_added, son contadores de 64 bits de nanosegundos desde 1970-01-01 00:00:00 UTC. Finder solo muestra segundos enteros; stat puede mostrar más.
# Readable birth, modify, change, access
stat -f "B:%SB M:%Sm C:%Sc A:%Sa" -t "%Y-%m-%d %H:%M:%S %z" report.pdf
# Raw nanosecond value to a date (divide by 1e9)
date -u -r $(( 1759133456123456789 / 1000000000 ))
Los nombres de los snapshots locales incluyen una fecha y hora: trátala como la hora aproximada de creación y confirma la zona horaria del sistema examinado antes de apoyarte en ella.
Retención
- Las marcas de tiempo de archivo persisten hasta el siguiente cambio de ese tipo; ctime cambia con casi cualquier edición de metadatos.
- Snapshots locales de Time Machine: Apple documenta un snapshot del disco de arranque aproximadamente cada hora, cada uno conservado 24 horas, más uno de la última copia de seguridad correcta, que se conserva hasta que se necesita espacio. Poco espacio libre puede purgarlos antes.
- Los snapshots solo existen cuando Time Machine (u otro software que use snapshots) está activo, así que muchos Mac no tienen ninguno.
Adquisición
Registra primero el estado de los snapshots, ya que cambia por sí solo:
tmutil listlocalsnapshots /
tmutil listlocalsnapshotdates /
diskutil apfs listSnapshots /System/Volumes/Data
Monta un snapshot en solo lectura y copia lo que necesites (root, Full Disk Access):
sudo mkdir /tmp/snap
sudo mount_apfs -o rdonly -s com.apple.TimeMachine.2026-09-28-101500.local /System/Volumes/Data /tmp/snap
sudo ditto /tmp/snap/Users/alice/Downloads /Volumes/CASE/MBP01/snap_Downloads
sudo umount /tmp/snap
- UAC
ir_triageejecutatmutil listlocalsnapshotsytmutil listlocalsnapshotdatesy genera un bodyfile con las marcas de tiempo de los archivos. - Aftermath con
--deeprecorre el sistema de archivos para obtener las horas de creación, modificación y acceso; su ejecución por defecto cubre los directorios habituales. tmutil localsnapshotcrea un snapshot nuevo para congelar el volumen antes de una adquisición lógica larga. Modifica el sistema, así que documéntalo.- Análisis en frío: haz una imagen del contenedor completo; las herramientas que entienden los grupos de volúmenes APFS exponen entonces ambos volúmenes y los snapshots.
Análisis
- libfsapfs:
fsapfsinfoinspecciona un contenedor y puede escribir un bodyfile con todas las entradas de archivo;fsapfsmountmonta un volumen desde una imagen. Los volúmenes cifrados aceptan una opción de contraseña o de clave de recuperación.
# -o takes the byte offset of the APFS container inside the image
fsapfsinfo -o <container_offset_bytes> -B /cases/MBP01/apfs.body /cases/MBP01.raw
- The Sleuth Kit incluye soporte de APFS (capa de pool) para listados a nivel de imagen.
- mac_apt abre imágenes APFS (incluidos volúmenes System y Data montados por separado) y, con una contraseña o clave de recuperación, también las cifradas; sus plugins informan después de las marcas de tiempo de cada artefacto.
- Convierte los bodyfiles en una línea de tiempo con tus herramientas habituales (por ejemplo,
mactimede The Sleuth Kit).
Consejos para la investigación
- Una hora de creación anterior a Date Added es normal en descargas y copias: el archivo ya existía en otro lugar.
touchy herramientas similares no pueden fijar ctime. Un mtime antiguo con un ctime reciente necesita una explicación.- Las marcas de tiempo fijadas a partir de un valor tecleado suelen tener la parte de nanosegundos a cero. Un grupo de valores
.000000000entre vecinos normales es un indicio sólido de timestomping. - Contrasta con FSEvents (
InodeMetaMod), el Date Added de Spotlight y los eventos de cuarentena;touchno reescribe ninguno de ellos. - Elimina los duplicados causados por firmlinks (
/Users/...frente a/System/Volumes/Data/Users/...) por inodo, no por ruta. - La copia en vivo lee los archivos y puede modificar atime. Es preferible hacer una imagen o adquirir desde un snapshot montado.
- Para un historial más largo que el de los snapshots locales, examina las copias de Time Machine en destinos externos o de red.
Ver también
Artefactos relacionados
Guías detalladas
Glosario
- APFS (Apple File System)Inglés
- APFS SnapshotInglés
- Sealed System Volume (SSV)Inglés