Sistemas de arquivos · Aula 7 de 8
APFS: contêineres, volumes, snapshots e criptografia
12 min de leitura
O Apple File System (APFS) é o sistema de arquivos de todos os Macs, iPhones e iPads atuais. Sua organização difere da do NTFS e do ext4: uma partição contém um contêiner, e o contêiner contém vários volumes que compartilham seu espaço livre. Esta aula explica as estruturas em disco que você encontrará em uma imagem de disco, por que as evidências do usuário ficam em um volume específico, como snapshots e checkpoints podem preservar estados anteriores, como o APFS armazena registros de data e hora e por que a criptografia determina se uma imagem de Mac pode sequer ser lida.
Da partição ao contêiner
O APFS substituiu o HFS+ como sistema de arquivos padrão no iOS 10.3 e no macOS 10.13 High Sierra (ambos de 2017). O disco de um Mac é particionado com GPT (Aula 1.1). A partição APFS tem o GUID de tipo de partição GPT 7C3457EF-0000-11AA-AA11-00306543ECAC, e cada uma dessas partições contém exatamente um contêiner APFS. Um disco típico de Mac Intel tem um MBR protetor no LBA 0, o cabeçalho GPT no LBA 1, uma pequena Partição de Sistema EFI e, em seguida, o contêiner APFS. Macs com Apple silicon acrescentam pequenos contêineres APFS para suporte à inicialização e à recuperação; os dados do usuário ficam no contêiner principal.
O contêiner é dividido em blocos, normalmente de 4.096 bytes. Todo objeto APFS começa com um cabeçalho de 32 bytes (uma soma de verificação Fletcher-64, um ID de objeto, um ID de transação, um tipo e um subtipo), de modo que os campos do próprio objeto começam no offset 32. O superbloco do contêiner (nx_superblock_t) fica no bloco 0 do contêiner e contém a assinatura NXSB no offset 32, seguida pelo tamanho do bloco e pela contagem de blocos.
Exemplo resolvido: localização do superbloco do contêiner
O mmls informa uma partição APFS que começa no setor 409.640 de um disco com setores de 512 bytes.
- Offset em bytes do contêiner: 409.640 × 512 = 209.735.680.
- Offset da assinatura
NXSB: 209.735.680 + 32 = 209.735.712.
Nesse offset, você deve ler os bytes 4E 58 53 42 ("NXSB"). Verifique primeiro o tamanho do setor: muitos SSDs internos da Apple usam setores lógicos de 4.096 bytes, e multiplicar por 512 nesse caso produz o offset errado.
Copy-on-write, checkpoints e o mapa de objetos
O APFS usa copy-on-write: ele nunca sobrescreve metadados ativos no local. Uma alteração é gravada em novos blocos, e o sistema de arquivos então confirma um novo checkpoint, um retrato consistente de seus metadados identificado por um ID de transação (XID) que aumenta a cada confirmação. Os descritores de checkpoint e as cópias de superblocos são mantidos em um anel de blocos chamado área de descritores de checkpoint. Durante a montagem, o APFS procura o superbloco válido com o maior XID. Não há garantia de que a cópia no bloco 0 seja a mais recente.
Para um perito, isso importa de duas maneiras. Primeiro, checkpoints mais antigos que ainda estão no anel podem descrever um estado anterior dos metadados, incluindo entradas de diretório de arquivos que foram excluídos ou renomeados desde então. Segundo, os blocos liberados pelo copy-on-write não são apagados; eles se tornam espaço livre e mantêm seu conteúdo até serem reutilizados. A Aula 1.8 aborda como as ferramentas de recuperação exploram isso.
A maioria dos objetos de metadados é virtual: eles são referenciados por um ID de objeto, não por um endereço de bloco. O mapa de objetos (omap) é uma árvore B que traduz um ID de objeto mais um XID em um número de bloco físico. O contêiner tem seu próprio mapa de objetos, e cada volume tem outro. Como as entradas são indexadas pelo XID, um mapa de objetos mais antigo ainda pode apontar para uma versão anterior do mesmo objeto.
Volumes e o grupo de volumes do macOS
Um contêiner pode conter muitos volumes (o formato permite até 100). Cada volume tem seu próprio superbloco (apfs_superblock_t, assinatura APSB no offset 32), sua própria árvore do sistema de arquivos e seu próprio estado de criptografia, mas nenhum tem tamanho fixo: todos os volumes alocam blocos do espaço livre compartilhado do contêiner. Por padrão, portanto, todos os volumes informam o mesmo espaço livre.
Desde o macOS 10.15 Catalina, o disco de inicialização é dividido em volumes com funções distintas; os volumes System e Data formam juntos um grupo de volumes:
| Volume (função) | Nome padrão | Conteúdo | Valor como evidência |
|---|---|---|---|
| System | Macintosh HD | Sistema operacional, somente leitura | Baixo: idêntico em todos os Macs com a mesma compilação |
| Data | Macintosh HD - Data | Diretórios pessoais dos usuários, aplicativos instalados por eles, logs, bancos de dados | Alto: quase todas as evidências do usuário |
| Preboot | Preboot | Arquivos de inicialização, dados de desbloqueio do FileVault | Limitado |
| Recovery | Recovery | recoveryOS | Limitado |
| VM | VM | Arquivos de swap, imagem de hibernação | Possíveis fragmentos de memória |
Desde o macOS 11 Big Sur, o volume System é um Volume de Sistema Assinado (SSV). Cada arquivo é coberto por uma árvore de hashes SHA-256, e o Mac inicializa a partir de um snapshot selado desse volume (chamado com.apple.os.update- seguido de um hash), em vez do volume ativo. Qualquer modificação rompe o selo. A conclusão prática: no Catalina e nas versões posteriores, os arquivos, as configurações, os logs e os bancos de dados de aplicativos do usuário ficam no volume Data.
Firmlinks
O usuário vê uma única árvore do sistema de arquivos, não dois volumes. O volume Data é montado em /System/Volumes/Data, e os firmlinks, links bidirecionais definidos pelo sistema (listados em /usr/share/firmlinks), fazem diretórios como /Users, /Applications e /private (e, portanto, /private/var) aparecerem em seus locais habituais. Quando você analisa diretamente o volume Data de uma imagem, o diretório pessoal de um usuário fica em /Users/<name> em relação à raiz desse volume. Um sistema em execução mostra os mesmos arquivos tanto em /Users/<name> quanto em /System/Volumes/Data/Users/<name>. Registre qual forma sua ferramenta exibiu e informe o caminho solicitado pela tarefa.
Snapshots
Um snapshot APFS é uma visão somente leitura de um volume em um determinado momento. Criar um custa quase nada, porque o snapshot apenas impede que os blocos existentes naquele momento sejam liberados. Alterações posteriores são gravadas em novos blocos por meio de copy-on-write. Dois tipos são importantes no trabalho pericial:
- Snapshots locais do Time Machine do volume Data, chamados
com.apple.TimeMachine.mais uma data e hora (por exemplo,com.apple.TimeMachine.2024-03-05-101512.localem versões recentes do macOS). O macOS os cria quando o Time Machine está ativado, geralmente a cada hora, mantém esses snapshots por um curto período (cerca de 24 horas) e os remove antes quando o espaço fica escasso. - Snapshots de atualização do sistema do volume System, criados quando o macOS instala atualizações, incluindo o snapshot selado a partir do qual o Mac inicializa.
Um snapshot pode conter uma versão anterior de um banco de dados, um documento que o usuário excluiu posteriormente ou um log que passou por rotação desde então. Em um Mac em execução, tmutil listlocalsnapshots / ou diskutil apfs listSnapshots <volume> lista esses snapshots. Em uma imagem, uma ferramenta compatível com APFS pode montar ou analisar um snapshot pelo nome. Não extraia um horário UTC do nome do snapshot: o registro de metadados do snapshot contém seu horário de criação como um registro de data e hora APFS, e esse é o valor a ser informado. Sempre indique de qual snapshot um artefato veio: um valor lido de um snapshot descreve o volume no momento do snapshot, não no momento da apreensão.
Registros de data e hora e metadados de arquivos
O APFS armazena registros de data e hora como inteiros de 64 bits sem sinal que contam nanossegundos desde 1970-01-01 00:00:00 UTC, em little-endian no disco. Cada registro de inode tem quatro:
| Campo | Significado |
|---|---|
create_time | Horário de criação (nascimento) |
mod_time | Última modificação do conteúdo do arquivo |
change_time | Última alteração nos metadados do inode (permissões, proprietário, renomeação) |
access_time | Último acesso; não é atualizado a cada leitura, portanto, trate-o com cautela |
O APFS também mantém uma data de adição na entrada de diretório, que o Finder exibe como "Data de Adição" e que registra quando um item chegou à sua pasta atual. Outros formatos de data e hora da Apple têm características diferentes e não devem ser confundidos com os registros de data e hora APFS:
| Formato | Época de referência | Unidade | Local típico |
|---|---|---|---|
| APFS | 1970-01-01 UTC | nanossegundos, 64 bits | Metadados do sistema de arquivos |
| HFS+ | 1904-01-01 | segundos, 32 bits sem sinal | Volumes de Macs antigos, algumas imagens de disco |
| Mac Absolute Time ("Cocoa") | 2001-01-01 UTC | segundos, frequentemente um valor de ponto flutuante | Muitos plists e bancos de dados SQLite (Módulo 6) |
Exemplo resolvido: decodificação de um registro de data e hora APFS
Os oito bytes de um campo create_time são 15 CD 85 3D FE 9C 97 17.
- Inverta os bytes little-endian:
0x17979CFE3D85CD15= 1.700.000.000.123.456.789 ns. - Divida por 1.000.000.000: 1.700.000.000 s mais 0,123456789 s.
- 1.700.000.000 segundos Unix = 2023-11-14T22:13:20.123456789Z.
O mesmo instante em Mac Absolute Time é 1.700.000.000 − 978.307.200 = 721.692.800 (978.307.200 é o número de segundos de 1970 a 2001). No formato HFS+, seria 1.700.000.000 + 2.082.844.800 = 3.782.844.800. A ordem de grandeza de um número (cerca de 10^18, 10^9 ou 10^8 aqui) revela rapidamente sua época de referência e sua unidade. Quando uma tarefa pedir precisão de segundos, trunque os nanossegundos em vez de arredondá-los.
Clones
No APFS, cp -c e a opção Duplicar do Finder criam um clone: um novo arquivo com seu próprio inode e seus próprios registros de data e hora, cujos extents apontam para os mesmos blocos físicos do original. Somente os blocos modificados posteriormente são gravados separadamente. Disso decorrem duas consequências. Hashes idênticos de dois arquivos não significam que os dados existam duas vezes no disco. Excluir o original não libera seus blocos enquanto um clone ainda fizer referência a eles. Não deduza uma operação de cópia apenas com base nos registros de data e hora: um clone recebe seu próprio horário de criação, embora nenhum dado tenha sido copiado.
Criptografia
O APFS criptografa no nível do volume ou por arquivo. Um volume pode não estar criptografado, estar criptografado com uma única chave para todo o volume ou estar criptografado com várias chaves, em que cada arquivo tem sua própria chave protegida por uma chave de classe. A criptografia por arquivo com múltiplas chaves é o modelo do iOS. Em um Mac, o FileVault protege a chave do volume Data com a senha de login do usuário e uma chave de recuperação.
O hardware determina o valor de uma imagem:
- Macs Intel sem um chip T2: sem o FileVault, o volume Data não é criptografado. Com o FileVault, ele é criptografado por software, e uma imagem completa pode ser descriptografada offline com uma senha de usuário ou a chave de recuperação.
- Macs com o chip Apple T2 ou Apple silicon: o armazenamento interno é sempre criptografado por um mecanismo AES de hardware com chaves vinculadas ao Secure Enclave do chip, mesmo quando o FileVault está desativado. O FileVault acrescenta a exigência de que as credenciais do usuário desbloqueiem a chave.
Em Macs com T2 e Apple silicon, uma imagem obtida por chip-off ou uma imagem física bruta adquirida sem as chaves ou sem um sistema desbloqueado não fornece dados legíveis. Portanto, a aquisição depende do hardware original: geralmente o sistema em execução e desbloqueado (uma coleta lógica ou de triagem), mais, quando o FileVault está ativado, a senha do usuário ou a chave de recuperação do FileVault para desbloqueá-lo. O Módulo 7 aborda volumes criptografados em profundidade.
Ferramentas e o contexto do exame
Exemplos de ferramentas gratuitas: apfs-fuse monta imagens APFS no Linux, em modo somente leitura, com uma opção para selecionar um volume e suporte a senha em volumes criptografados. The Sleuth Kit oferece suporte ao APFS: pstat descreve o contêiner (o "pool") e lista seus volumes com os números de bloco de seus superblocos APSB, e fsstat, fls e icat aceitam -P apfs junto com -B <block> para selecionar um volume. mac_apt analisa artefatos do macOS a partir de imagens ou de pastas coletadas. Suítes comerciais oferecem análise semelhante. Seja qual for a ferramenta, verifique qual volume e snapshot ela leu.
O exame CFX é de múltipla escolha, portanto, as questões sobre APFS avaliam os conceitos e cálculos desta aula, e não a análise prática de uma imagem de Mac. O conhecimento sobre contêineres explica de onde vêm os arquivos do macOS; a decodificação de registros de data e hora e o relato preciso de caminhos se aplicam a todas as plataformas.
Foco no exame: Espere questões sobre a hierarquia do APFS (partição, contêiner, volume, snapshot), as assinaturasNXSBeAPSBe qual volume contém os dados do usuário no Catalina e nas versões posteriores. Esteja preparado para converter um valor APFS de 64 bits em nanossegundos para ISO 8601 UTC e para distingui-lo de valores HFS+ e Mac Absolute Time. Saiba por que uma imagem bruta de um Mac com T2 ou Apple silicon é ilegível sem o hardware original e seu Secure Enclave.
Pontos principais
- Um contêiner APFS por partição GPT (tipo
7C3457EF-0000-11AA-AA11-00306543ECAC); o superbloco do contêiner tem a assinaturaNXSB, e cada superbloco de volume,APSB, ambos no offset 32. - Copy-on-write, checkpoints e o mapa de objetos indexado por XID permitem que estados anteriores dos metadados sobrevivam até que os blocos sejam reutilizados.
- Desde o Catalina, o volume System somente leitura e o volume Data formam um grupo de volumes; desde o Big Sur, o sistema inicializa a partir de um snapshot selado. As evidências do usuário ficam no volume Data, integrado à árvore visível por firmlinks.
- Snapshots locais do Time Machine (
com.apple.TimeMachine.*) e snapshots de atualização do sistema preservam estados anteriores dos volumes. Sempre registre de qual snapshot um artefato veio. - Os registros de data e hora APFS são nanossegundos de 64 bits desde 1970-01-01 UTC. O HFS+ usa segundos desde 1904, e o Mac Absolute Time usa segundos desde 2001-01-01.
- Macs com T2 e Apple silicon criptografam o armazenamento interno por hardware, portanto, a aquisição precisa do hardware original, geralmente do sistema em execução e desbloqueado, mais as credenciais do usuário ou a chave de recuperação quando o FileVault está ativado.