Sistemas de archivos · Lección 7 de 8
APFS: contenedores, volúmenes, instantáneas y cifrado
13 min de lectura
Apple File System (APFS) es el sistema de archivos de todos los Mac, iPhone y iPad actuales. Su estructura difiere de la de NTFS y ext4: una partición contiene un contenedor, y el contenedor alberga varios volúmenes que comparten su espacio libre. Esta lección explica las estructuras en disco que encontrará en una imagen de disco, por qué la evidencia del usuario reside en un volumen concreto, cómo las instantáneas y los puntos de control pueden conservar estados anteriores, cómo almacena APFS las marcas de tiempo y por qué el cifrado determina si una imagen de un Mac se puede leer siquiera.
De la partición al contenedor
APFS sustituyó a HFS+ como sistema de archivos predeterminado en iOS 10.3 y en macOS 10.13 High Sierra (ambos de 2017). Un disco de Mac se particiona con GPT (lección 1.1). La partición APFS tiene el GUID de tipo de partición GPT 7C3457EF-0000-11AA-AA11-00306543ECAC, y cada partición de este tipo contiene exactamente un contenedor APFS. Un disco típico de un Mac con Intel tiene un MBR protector en LBA 0, la cabecera GPT en LBA 1, una pequeña partición del sistema EFI y, después, el contenedor APFS. Los Mac con Apple silicon añaden pequeños contenedores APFS para el arranque y la recuperación; los datos del usuario se encuentran en el contenedor principal.
El contenedor se divide en bloques, normalmente de 4.096 bytes. Cada objeto APFS comienza con una cabecera de 32 bytes (una suma de comprobación Fletcher-64, un ID de objeto, un ID de transacción, un tipo y un subtipo), por lo que los campos propios del objeto comienzan en el desplazamiento 32. El superbloque del contenedor (nx_superblock_t) se encuentra en el bloque 0 del contenedor y contiene la firma NXSB en el desplazamiento 32, seguida del tamaño de bloque y del número de bloques.
Ejemplo resuelto: localizar el superbloque del contenedor
mmls indica una partición APFS que comienza en el sector 409.640 de un disco con sectores de 512 bytes.
- Desplazamiento en bytes del contenedor: 409.640 × 512 = 209.735.680.
- Desplazamiento de la firma
NXSB: 209.735.680 + 32 = 209.735.712.
En ese desplazamiento debería leer los bytes 4E 58 53 42 ("NXSB"). Compruebe primero el tamaño de sector: muchos SSD internos de Apple utilizan sectores lógicos de 4.096 bytes, y multiplicar por 512 en ese caso da un desplazamiento incorrecto.
Copia en escritura, puntos de control y mapa de objetos
APFS utiliza copia en escritura: nunca sobrescribe los metadatos activos en su ubicación original. Un cambio se escribe en bloques nuevos y, después, el sistema de archivos confirma un nuevo punto de control, una instantánea coherente de sus metadatos identificada por un ID de transacción (XID) que aumenta con cada confirmación. Los descriptores de puntos de control y las copias del superbloque se guardan en un anillo de bloques denominado área de descriptores de puntos de control. Durante el montaje, APFS busca el superbloque válido con el XID más alto. No se garantiza que la copia del bloque 0 sea la más reciente.
Para un examinador, esto importa por dos motivos. En primer lugar, los puntos de control antiguos que aún están en el anillo pueden describir un estado anterior de los metadatos, incluidas las entradas de directorio de archivos que desde entonces se han eliminado o renombrado. En segundo lugar, los bloques liberados por la copia en escritura no se borran; pasan a ser espacio libre y conservan su contenido hasta que se reutilizan. La lección 1.8 explica cómo aprovechan esto las herramientas de recuperación.
La mayoría de los objetos de metadatos son virtuales: se hace referencia a ellos mediante un ID de objeto, no mediante una dirección de bloque. El mapa de objetos (omap) es un árbol B que traduce un ID de objeto junto con un XID a un número de bloque físico. El contenedor tiene su propio mapa de objetos, y cada volumen tiene otro. Como las entradas utilizan el XID como clave, un mapa de objetos anterior puede seguir apuntando a una versión anterior del mismo objeto.
Volúmenes y el grupo de volúmenes de macOS
Un contenedor puede albergar muchos volúmenes (el formato permite hasta 100). Cada volumen tiene su propio superbloque (apfs_superblock_t, con la firma APSB en el desplazamiento 32), su propio árbol del sistema de archivos y su propio estado de cifrado, pero ninguno tiene un tamaño fijo: todos los volúmenes asignan bloques del espacio libre compartido del contenedor. Por tanto, de forma predeterminada, todos los volúmenes indican el mismo espacio libre.
Desde macOS 10.15 Catalina, el disco de arranque se divide en volúmenes con funciones diferentes; los volúmenes System y Data forman juntos un grupo de volúmenes:
| Volumen (función) | Nombre predeterminado | Contenido | Valor probatorio |
|---|---|---|---|
| Sistema | Macintosh HD | Sistema operativo, de solo lectura | Bajo: idéntico en todos los Mac con la misma compilación |
| Datos | Macintosh HD - Data | Directorios personales de los usuarios, aplicaciones que instalaron, registros, bases de datos | Alto: casi toda la evidencia del usuario |
| Prearranque | Preboot | Archivos de arranque, datos de desbloqueo de FileVault | Limitado |
| Recuperación | Recovery | recoveryOS | Limitado |
| VM | VM | Archivos de intercambio, imagen de suspensión | Posibles fragmentos de memoria |
Desde macOS 11 Big Sur, el volumen System es un volumen del sistema firmado (SSV). Cada archivo está cubierto por un árbol de hashes SHA-256, y el Mac arranca desde una instantánea sellada de ese volumen (denominada com.apple.os.update- seguida de un hash), en lugar de hacerlo desde el volumen activo. Cualquier modificación rompe el sello. La conclusión práctica: en Catalina y versiones posteriores, los archivos, la configuración, los registros y las bases de datos de aplicaciones del usuario se encuentran en el volumen Data.
Firmlinks
El usuario ve un único árbol del sistema de archivos, no dos volúmenes. El volumen Data se monta en /System/Volumes/Data, y los firmlinks, enlaces bidireccionales definidos por el sistema (enumerados en /usr/share/firmlinks), hacen que directorios como /Users, /Applications y /private (y, por tanto, /private/var) aparezcan en sus ubicaciones habituales. Al analizar directamente el volumen Data de una imagen, el directorio personal de un usuario se encuentra en /Users/<name> con respecto a la raíz de ese volumen. Un sistema en ejecución muestra los mismos archivos tanto en /Users/<name> como en /System/Volumes/Data/Users/<name>. Registre qué forma mostró su herramienta e indique la ruta que solicite la tarea.
Instantáneas
Una instantánea APFS es una vista de solo lectura de un volumen en un momento determinado. Crear una tiene un coste casi nulo, porque la instantánea solo impide que se liberen los bloques que existían en ese momento. Los cambios posteriores se escriben en bloques nuevos mediante copia en escritura. Hay dos tipos relevantes para el trabajo con casos:
- Instantáneas locales de Time Machine del volumen Data, denominadas
com.apple.TimeMachine.más una fecha y una hora (por ejemplo,com.apple.TimeMachine.2024-03-05-101512.localen versiones recientes de macOS). macOS las crea cuando Time Machine está habilitado, normalmente cada hora aproximadamente, las conserva durante un periodo breve (unas 24 horas) y las elimina antes cuando queda poco espacio. - Instantáneas de actualización del sistema del volumen System, creadas cuando macOS instala actualizaciones, incluida la instantánea sellada desde la que arranca el Mac.
Una instantánea puede contener una versión anterior de una base de datos, un documento que el usuario eliminó después o un registro que se ha rotado desde entonces. En un Mac en ejecución, tmutil listlocalsnapshots / o diskutil apfs listSnapshots <volume> las enumera. En una imagen, una herramienta compatible con APFS puede montar o analizar una instantánea por su nombre. No obtenga una hora UTC a partir del nombre de la instantánea: su registro de metadatos contiene la hora de creación como una marca de tiempo APFS, y ese es el valor que debe indicar. Especifique siempre de qué instantánea procede un artefacto: un valor leído de una instantánea describe el volumen en el momento de la instantánea, no en el de la incautación.
Marcas de tiempo y metadatos de archivos
APFS almacena las marcas de tiempo como enteros sin signo de 64 bits que cuentan nanosegundos desde 1970-01-01 00:00:00 UTC, en orden little-endian en el disco. Cada registro de inodo tiene cuatro:
| Campo | Significado |
|---|---|
create_time | Hora de creación (nacimiento) |
mod_time | Última modificación del contenido del archivo |
change_time | Último cambio en los metadatos del inodo (permisos, propietario, cambio de nombre) |
access_time | Último acceso; no se actualiza con cada lectura, por lo que debe tratarse con cautela |
APFS también conserva una fecha de adición en la entrada de directorio, que Finder muestra como "Fecha de adición" y que registra cuándo llegó un elemento a su carpeta actual. Otros formatos de tiempo de Apple tienen un aspecto diferente y no deben confundirse con las marcas de tiempo APFS:
| Formato | Época | Unidad | Ubicación habitual |
|---|---|---|---|
| APFS | 1970-01-01 UTC | nanosegundos, 64 bits | Metadatos del sistema de archivos |
| HFS+ | 1904-01-01 | segundos, 32 bits sin signo | Volúmenes de Mac antiguos, algunas imágenes de disco |
| Mac Absolute Time ("Cocoa") | 2001-01-01 UTC | segundos, a menudo un valor de coma flotante | Muchos archivos plist y bases de datos SQLite (módulo 6) |
Ejemplo resuelto: decodificar una marca de tiempo APFS
Los ocho bytes de un campo create_time son 15 CD 85 3D FE 9C 97 17.
- Invierta los bytes en orden little-endian:
0x17979CFE3D85CD15= 1.700.000.000.123.456.789 ns. - Divida entre 1.000.000.000: 1.700.000.000 s más 0,123456789 s.
- 1.700.000.000 segundos Unix = 2023-11-14T22:13:20.123456789Z.
El mismo instante en Mac Absolute Time es 1.700.000.000 − 978.307.200 = 721.692.800 (978.307.200 es el número de segundos entre 1970 y 2001). En formato HFS+ sería 1.700.000.000 + 2.082.844.800 = 3.782.844.800. La magnitud de un número (aquí, aproximadamente 10^18, 10^9 o 10^8) revela rápidamente su época y su unidad. Cuando una tarea solicite precisión de segundos, trunque los nanosegundos en lugar de redondearlos.
Clones
En APFS, cp -c y la opción Duplicar de Finder crean un clon: un archivo nuevo con su propio inodo y sus propias marcas de tiempo, cuyas extensiones apuntan a los mismos bloques físicos que el original. Solo los bloques modificados posteriormente se escriben por separado. De ello se derivan dos consecuencias. Que dos archivos tengan hashes idénticos no significa que los datos existan dos veces en el disco. Eliminar el original no libera sus bloques mientras un clon siga haciendo referencia a ellos. No infiera una operación de copia únicamente a partir de las marcas de tiempo: un clon recibe su propia hora de creación aunque no se haya copiado ningún dato.
Cifrado
APFS cifra a nivel de volumen o por archivo. Un volumen puede estar sin cifrar, cifrado con una única clave para todo el volumen o cifrado con varias claves, de modo que cada archivo tiene su propia clave protegida mediante una clave de clase. El cifrado por archivo con varias claves es el modelo de iOS. En un Mac, FileVault protege la clave del volumen Data con la contraseña de inicio de sesión del usuario y una clave de recuperación.
El hardware determina el valor de una imagen:
- Mac con Intel sin chip T2: sin FileVault, el volumen Data no está cifrado. Con FileVault, se cifra mediante software, y una imagen completa se puede descifrar sin conexión con una contraseña de usuario o la clave de recuperación.
- Mac con el chip Apple T2 o con Apple silicon: el almacenamiento interno siempre está cifrado mediante un motor AES de hardware con claves vinculadas al Secure Enclave del chip, incluso cuando FileVault está desactivado. FileVault añade el requisito de que las credenciales del usuario desbloqueen la clave.
En los Mac con T2 y Apple silicon, una imagen obtenida mediante extracción de chips o una imagen física en bruto adquirida sin las claves ni un sistema desbloqueado no proporciona datos legibles. Por tanto, la adquisición depende del hardware original: normalmente, el sistema en ejecución y desbloqueado (una recopilación lógica o de triaje) y, cuando FileVault está activado, la contraseña del usuario o la clave de recuperación de FileVault para desbloquearlo. El módulo 7 aborda en profundidad los volúmenes cifrados.
Herramientas y contexto del examen
Ejemplos de herramientas gratuitas: apfs-fuse monta imágenes APFS en Linux, en modo de solo lectura, con una opción para seleccionar un volumen y compatibilidad con el uso de contraseña en volúmenes cifrados. The Sleuth Kit es compatible con APFS: pstat describe el contenedor (el "pool") y enumera sus volúmenes con los números de bloque de sus superbloques APSB, y fsstat, fls e icat aceptan -P apfs junto con -B <block> para seleccionar un volumen. mac_apt analiza artefactos de macOS a partir de imágenes o de carpetas recopiladas. Las suites comerciales ofrecen un análisis similar. Sea cual sea la herramienta, compruebe qué volumen e instantánea ha leído.
El examen CFX es de opción múltiple, por lo que las preguntas sobre APFS evalúan los conceptos y los cálculos de esta lección, en lugar del análisis práctico de una imagen de Mac. Conocer los contenedores explica de dónde proceden los archivos de macOS; la decodificación de marcas de tiempo y la indicación precisa de rutas son aplicables a todas las plataformas.
Enfoque del examen: Espere preguntas sobre la jerarquía de APFS (partición, contenedor, volumen, instantánea), las firmasNXSByAPSB, y qué volumen contiene los datos del usuario en Catalina y versiones posteriores. Prepárese para convertir un valor APFS de 64 bits en nanosegundos a ISO 8601 UTC y para distinguirlo de los valores HFS+ y Mac Absolute Time. Sepa por qué una imagen en bruto de un Mac con T2 o Apple silicon es ilegible sin el hardware original y su Secure Enclave.
Puntos clave
- Un contenedor APFS por partición GPT (tipo
7C3457EF-0000-11AA-AA11-00306543ECAC); el superbloque del contenedor tiene la firmaNXSB, y el de cada volumen,APSB, ambas en el desplazamiento 32. - La copia en escritura, los puntos de control y el mapa de objetos con claves basadas en XID permiten que los estados anteriores de los metadatos sobrevivan hasta que se reutilicen los bloques.
- Desde Catalina, el volumen System de solo lectura y el volumen Data forman un grupo de volúmenes; desde Big Sur, el sistema arranca desde una instantánea sellada. La evidencia del usuario se encuentra en el volumen Data, unido al árbol visible mediante firmlinks.
- Las instantáneas locales de Time Machine (
com.apple.TimeMachine.*) y las instantáneas de actualización del sistema conservan estados anteriores del volumen. Registre siempre de qué instantánea procede un artefacto. - Las marcas de tiempo APFS son valores de 64 bits en nanosegundos desde 1970-01-01 UTC. HFS+ utiliza segundos desde 1904, y Mac Absolute Time utiliza segundos desde 2001-01-01.
- Los Mac con T2 y Apple silicon cifran el almacenamiento interno mediante hardware, por lo que la adquisición requiere el hardware original, normalmente el sistema en ejecución y desbloqueado, además de las credenciales del usuario o la clave de recuperación cuando FileVault está activado.