Descriptografar notas da Apple bloqueadas no iOS 16.x: Um fluxo de trabalho forense completo (SQLite, CyberChef, Python) com Hashcat

Introdução

Ao analisar um dispositivo de teste com uma popular ferramenta forense móvel comercial, deparei-me com algo intrigante - um Apple Note bloqueado que aparecia apenas como "oculto". A ferramenta mostrava o resumo da nota (com a etiqueta "Lance"), mas o conteúdo real estava em falta. Não havia qualquer pista sobre o que estava por detrás do cadeado, o que me deixou com uma pergunta ardente: poderia eu descobrir o segredo que estava lá dentro? Precisava de um fluxo de trabalho que me ajudasse a desencriptar as Apple Notes no iOS 16.

O dispositivo estava a funcionar iOS 16.7.10e depois de investigar a base de dados NoteStore.sqlite, apercebi-me de que todas as pistas de encriptação estavam ali mesmo, à espera de serem descodificadas. Com a ajuda de ferramentas de código aberto, comecei a recuperar a palavra-passe e a desencriptar o conteúdo da nota.            

Esta publicação apresenta-lhe as fluxo de trabalho forense completo sobre como descriptografar o Apple Notes no iOS 16:

  • 🔓 Hashcat para decifrar palavras-passe
  • 🗄️ Navegador DB para SQLite para explorar e extrair parâmetros de encriptação
  • 🐍 Scripts Python para a derivação de chaves e o desdobramento de chaves AES
  • 🔍 CyberChef para desencriptar, descomprimir e analisar a carga útil final do protobuf

⚠️ Nota importante: Este fluxo de trabalho aplica-se especificamente ao Apple Notes bloqueado em iOS 16.x. A partir do iOS 17, a Apple alterou a forma como as notas encriptadas são armazenadas - e o iOS 18 traz ainda mais alterações.

Vamos mergulhar e revelar a mensagem oculta no interior do Apple Note bloqueado.

Investigando o NoteStore.sqlite

Nesta altura, eu sabia que o conteúdo da nota encriptada estava armazenado em NoteStore.sqlite, especificamente na tabela ZICNOTEDATA. A Apple costuma gzips os dados do protobuf da nota, mas no caso de notas bloqueadas, todo esse BLOB é primeiro encriptado-o que significa que uma tentativa de descompressão direta não produzirá texto legível. Precisará do chave de desencriptação correta antes que qualquer tipo de descompactação ou análise de protobuf possa acontecer.
Descriptografar o Apple Notes iOS 16 usando o SQLite DB Browser
BLOB encriptado no campo ZDATA para a nota bloqueada (DB Browser para SQLite)

Na captura de ecrã, pode ver os valores hexadecimais brutos para ZDATA. Estes dados são efetivamente codificados por Encriptação AES, com metadados críticos - como sais e contagens de iteração - guardados noutras partes da base de dados. A partir de um examinador forense Reconhecer que a nota está totalmente encriptada é a sua deixa para se aprofundar na tabela ZICCLOUDSYNCINGOBJECT para os parâmetros necessários para fenda o código de acesso e desbloquear a nota 🔓.

Porque é que as Apple Notes bloqueadas estão encriptadas no iOS 16?

O Apple Notes protege as notas bloqueadas utilizando uma combinação de PBKDF2 (derivação de chaves) e AES (encriptação). Quando uma palavra-passe é activada numa nota, a Apple armazena metadados criptográficos importantes na base de dados - tais como:

  • ZCRYPTOITERATIONCOUNT
  • ZCRYPTOSALT
  • ZCRYPTOWRAPPEDKEY

Estes valores garantem que apenas alguém com a palavra-passe correta pode desencriptar o conteúdo da nota.

Abordagem forense

De um ponto de vista forense, os passos normalmente incluem:

  1. Identificar as entradas de notas bloqueadas relevantes em ZICNOTEDATA e ZICCLOUDSYNCINGOBJECT.
  2. Extrato os pormenores criptográficos - como a contagem de iterações, o sal e a chave de proteção.
  3. Crack a palavra-passe do utilizador com Hashcat (ou outra ferramenta de recuperação de palavras-passe como o John the Ripper ou o Passware).
  4. Derivar as chaves finais em Python ou CyberChef e decifrar o BLOB da nota.
  5. Descomprimir os dados desbloqueados do protobuf (com CyberChef ou Python) para revelar o texto simples final.

Decifrar a palavra-passe de um Apple Note bloqueado com o Hashcat

O meu objetivo era simular um cenário forense realista: tinha um Apple Note bloqueado e precisava de recuperar a sua palavra-passe para desencriptar o conteúdo. Foi aí que Hashcat entra em ação. Tirando partido do seu modo de hash Apple Secure Notes (ID 16200), o Hashcat tentou sistematicamente as senhas até encontrar a correta.

Extração das colunas necessárias

Comecei por abrir NoteStore.sqlite no DB Browser e selecionando linhas com ZISPASSWORDPROTECTED = 1 na tabela ZICCLOUDSYNCINGOBJECT. Em seguida, consultei as seguintes colunas:

  • Z_PK - o identificador único da nota.
  • ZCRYPTOSALT - o valor do sal para PBKDF2.
  • ZCRYPTOWRAPPEDKEY - a chave envolvida que será posteriormente desembrulhada.
Consulta SQLite para os parâmetros necessários para o Hashcat

O ficheiro de entrada Hashcat foi gerado por um pequeno script Python notas_para_hashcat.pyque formatou estes valores numa única linha que o Hashcat podia analisar, incluindo a contagem de iterações (de ZCRYPTOITERATIONCOUNT).

notes_to_hashcat.py reúne os parâmetros necessários para quebrar a senha do Locked Apple Note no iOS 16
Saída de notes_to_hashcat.py

Executar o Hashcat para desencriptar a palavra-passe bloqueada do Apple Note

Com o meu ficheiro de entrada Hashcat pronto e um dicionário à mão, executei o seguinte comando:

hashcat -m 16200 -a 0
Aqui:
  • -m 16200 especifica o modo Apple Secure Notes.
  • -a 0 coloca o Hashcat no modo de ataque Direto (dicionário).
  • O dicionário pode ser algo como rockyou.txt ou uma lista personalizada derivada de artefactos do dispositivo.
Utilizar o Hashcat para desencriptar a palavra-passe bloqueada do Apple Notes
Hashcat revelando a palavra-passe decifrada: royalewithcheese

O Hashcat identificou com sucesso a senha correta: royalewithcheese. Numa investigação real, o seu dicionário pode ser muito maior, mas este resultado confirmou que o Hashcat podia fazer o trabalho pesado.

Derivar a chave de encriptação de chaves (KEK) para desencriptar Apple Notes

Com a palavra-passe na mão, o passo seguinte foi derivar a Chave de encriptação de chaves (KEK)que é utilizada para envolver a chave AES final que encripta o conteúdo da nota. Para derivar a KEK, precisei dos seguintes valores da tabela ZICCLOUDSYNCINGOBJECT:

  • Palavra-passe (a palavra-passe decifrada)
  • Contagem de iterações (ZCRYPTOITERATIONCOUNT)
  • Sal (ZCRYPTOSALT)

Por exemplo, utilizando o DB Browser, fiz uma consulta:

SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
Consultar NoteStore.sqlite para obter a contagem de sal e iteração necessária para adquirir a KEK necessária para desencriptar Apple Notes bloqueadas
Contagem de iterações: 20000 | Sal: d1afa96252a15d8d58827bcb21940de1

Em seguida, abri o CyberChef - uma das minhas ferramentas favoritas 🛠️ - e arrastei a operação "Derive PBKDF2 key". Definindo a função de hashing para SHA-256 e introduzindo a palavra-passe, o sal e a contagem de iterações, o CyberChef produziu o KEK de 16 bytes:

CyberChef utilizado para derivar KEK dos parâmetros PBKDF2 para a desencriptação do Apple Note.
KEK: a1dac1516302e1d3d73ad4fd4b6f8fef

Para automatizar este processo, criei um script Python chamado get_key.pyque aceita o caminho da base de dados, a nota PK e a palavra-passe como argumentos. A sua execução devolve o KEK em hexadecimal.

python get_kek.py NoteStore.sqlite

Resultado:
Nota PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef

Desvendando a chave AES para descriptografar notas da Apple bloqueadas no iOS 16

O passo seguinte foi desembrulhar a chave utilizada para encriptar o conteúdo da nota. A chave envolvida é armazenada na coluna ZCRYPTOWRAPPEDKEY do ZICCLOUDSYNCINGOBJECT. Por exemplo, eu consultei::

SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;
Consulta SQLite para o ficheiro unwrapped.key necessário para desencriptar as notas de appe no iOS16
Chave embrulhada: 78c2b79c3e357117c95feb882009e14be9e5f88598ea6db0

Opções de desembrulhar

Opção 1: Desembrulhar a chave AES para descriptografar notas da Apple bloqueadas no iOS 16 com CyberChef

Desactivei todas as operações anteriores, procurei por "AES Key Unwrap" e arrastei-a para a janela da receita. Ao colar a KEK e a chave encapsulada, o CyberChef produziu a chave AES desencapsulada.

CyberChef utilizado para derivar a KEK e desdobrar a chave AES para a desencriptação do Apple Notes no iOS 16
Chave desempacotada: 4b1f0c718aa05a0d097d7bf4865c89d1

Opção 2: Automatizando a quebra de chaves AES com unwrap.py

Também desenvolvi um script Python chamado unwrap.py que recebe o caminho da base de dados e a KEK (em hexadecimal) como argumentos. Executando este script, a chave foi desembrulhada e impressa em formato hexadecimal. No meu caso, a chave desdobrada era:

python unwrap.py NoteStore.sqlite
O script Python unwrap.py mostra a chave AES desencriptada para Apple Notes bloqueadas
Chave desempacotada: 4b1f0c718aa05a0d097d7bf4865c89d1

Esta é a chave AES final que será utilizada para desencriptar o conteúdo da nota Apple bloqueada.

Descriptografar BLOBs do Apple Notes usando AES-GCM no iOS 16

Agora que eu tinha a chave desempacotada, era hora de descriptografar o BLOB do Apple Notes armazenado no ZICNOTEDATA tabela. A Apple utiliza AES em modo GCM para proteger o conteúdo das notas bloqueadas, o que significa que precisava de quatro componentes essenciais para prosseguir:

  • 🔑 Chave AES não encapsulada

  • 🔁 Vetor de inicialização (IV) de ZCRYPTOINITIALIZATIONVECTOR

  • 🏷 Etiqueta de autenticação GCM de ZCRYPTOTAG

  • 💾 BLOB encriptado de ZDATA

📤 Extrair a etiqueta IV e GCM de NoteStore.sqlite

Para localizar o IV e Etiqueta GCMabri o ZICNOTEDATA no DB Browser para SQLite. Estes campos são armazenados como valores binários e podem ser encontrados em ZICNOTEDATA ou ZICCLOUDSYNCINGOBJECT tabelas. Ambas armazenam os dados com os mesmos nomes de colunas.

  • IV: 5c0c0bde9b6801747ddad1115a422d05

  • Etiqueta GCM: b9087ba19e3c7deff2cb4b9b51e6aafa

O próprio BLOB encriptado também era visível no ZDATA coluna. Copiei os três valores em formato hexadecimal, preparando-me para o passo final da desencriptação.

O vetor de inicialização: 5c0c0bde9b6801747ddad1115a422d05
Navegador DB mostrando a etiqueta GCM utilizada para a desencriptação AES-GCM
A etiqueta GCM: b9087ba19e3c7deff2cb4b9b51e6aafa
Navegador DB com dados BLOB encriptados do Apple Note realçados
O BLOB encriptado

🧪 Desencriptar a nota com o CyberChef

Com tudo na mão, virei-me para CyberChef. Esta ferramenta permitiu combinar facilmente todos os parâmetros e revelar o conteúdo original. Eis o que fiz:

  1. Acrescentei o "Descriptografia AES" operação.

  2. Colei o chave AES não encapsulada no campo Chave.

  3. Eu coloquei o modo para GCM.

  4. Inseri o IV e GCM Tag nos seus respectivos domínios.

  5. Por fim, copiei o ficheiro BLOB encriptado na janela de entrada.

Uma vez que acertei CozerO CyberChef desencriptou o BLOB e revelou um ficheiro comprimido - exatamente o que eu esperava. Isto significava que a camada de encriptação tinha sido totalmente removida e eu podia passar à descompressão dos dados.
Receita do CyberChef para desencriptar o BLOB do Apple Notes utilizando o modo AES-GCM
Ficheiro GZIP desencriptado

Descompactando e analisando a nota final (Protobuf descriptografado do Apple Notes)

Depois de desencriptar o BLOB encriptado com AES, guardei o resultado num ficheiro com o nome descodificado_blob.bin e abriu-o em HxD. A assinatura do ficheiro 0x1F8B08 confirmou que era um ficheiro comprimido GZIP - a Apple utiliza-o para comprimir dados protobuf.

Para extrair o texto simples, voltei a abrir o CyberChef e adicionei o ficheiro Gunzip para o fluxo de trabalho. Imediatamente, começaram a aparecer cadeias de caracteres familiares no resultado.

O CyberChef mostra os dados protobuf descomprimidos do Apple Notes após a extração GZIP
Protobuf descomprimido no CyberChef

Depois de descomprimido, apliquei o Descodificação Protobuf no CyberChef. O resultado foi uma vista estruturada semelhante a JSON, com chaves e valores que representam o conteúdo da Apple Note bloqueada.

Vista CyberChef da estrutura descodificada do protobuf do Apple Notes com formato semelhante a JSON
Protbuf descodificado no CyberChef

Para facilitar a leitura, também usei um script Python que aproveitou o backboxprotobuf para analisar o arquivo protobuf e imprimir a saída em um formato limpo e legível por humanos.

Linha de comandos que mostra o conteúdo analisado da Apple Note utilizando o script Python backboxprotobuf
Resultados bem formatados impressos no ecrã

Isto corresponde ao que o utilizador escreveu no seu Apple Note bloqueado. Passou de uma entrada oculta e protegida por palavra-passe para a mensagem real em texto simples - um achado inestimável em qualquer caso forense.

Captura de ecrã utilizando o UFADE do conteúdo bloqueado do Apple Note

🔚 Conclusão

Parabéns 🎉 - acabou de concluir um fluxo de trabalho forense completo para desencriptar Apple Notes bloqueadas no iOS 16. Extraiu parâmetros de encriptação da base de dados SQLite, decifrou a palavra-passe com Hashcat, derivou e desembrulhou a chave AES utilizando Pythone, finalmente, desencriptou e analisou o protobuf com CyberChef. Cada passo aproximava-o mais da exposição do conteúdo oculto da nota.

Este passo-a-passo prático prova o quão poderoso é o ferramentas de código aberto pode ser na investigação forense digital. Ajudam os investigadores a descobrir Apple Notes encriptadas que as ferramentas comerciais podem não detetar - especialmente em dispositivos com iOS 16 ou anterior.

🕵️ Bónus: A dica da palavra-passe

Aqui está um toque extra - encontrei um dica de palavra-passe no ZICCLOUDSYNCINGOBJECT mesa:

Um quarto de libra

Uma vez que o dispositivo pertencia a alguém chamado "Vincent", não foi difícil adivinhar a palavra-passe: royalewithcheese - um aceno para Pulp Fiction. Em casos reais, sugestões de palavras-passe como esta podem acelerar o fluxo de trabalho quando combinadas com um processo de cracking estratégico.

📱 Mais uma coisa... Sobre o iOS 17 e o iOS 18

Este guia aplica-se especificamente à forma de desencriptar Notas da Apple no iOS 16 e anteriores. Começando com iOS 17Em setembro de 2007, a Apple introduziu alterações significativas no processo de encriptação do Notes. Poderá encontrar campos de derivação de chave em falta, estruturas criptográficas diferentes ou notas que já não são desencriptadas utilizando os mesmos métodos.

Se está a explorar a forma de desencriptar Apple Notes no iOS 17 ou iOS 18Adoraria colaborar. Partilhe as suas descobertas - vamos analisar juntos a nova encriptação.

Obrigado pela leitura! Tem perguntas ou ideias? Deixe-as nos comentários abaixo ou contacte-nos diretamente. Vamos continuar a alargar os limites da descoberta forense. 🔍

Facebook
Twitter
Correio eletrónico
Imprimir

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *