Introduzione

Durante l'analisi di un dispositivo di prova con un popolare strumento di mobile forensic, mi sono imbattuto in qualcosa di intrigante: una nota Apple bloccata che appariva solo come "nascosta". Lo strumento mostrava il riepilogo della nota (etichettato come "Lance"), ma il contenuto effettivo era assente. Non c'era alcun indizio su cosa si celasse sotto il lucchetto e mi sono posto una domanda scottante: potevo scoprire il segreto al suo interno? Avevo bisogno di un flusso di lavoro che mi aiutasse a decifrare le note di Apple su iOS 16.

Il dispositivo era in funzione iOS 16.7.10e dopo aver scavato nel database NoteStore.sqlite, mi sono reso conto che tutti gli indizi di crittografia erano lì, in attesa di essere decodificati. Con l'aiuto di strumenti open-source, sono riuscito a recuperare la password e a decifrare il contenuto della nota.            

Questo post vi guida attraverso il flusso di lavoro forense completo su come decriptare le note di Apple su iOS 16:

  • 🔓 Hashcat per il cracking delle password
  • 🗄️ Browser DB per SQLite per esplorare ed estrarre i parametri di crittografia
  • 🐍 Script Python per la derivazione della chiave e l'unwrapping della chiave AES
  • 🔍 CyberChef per decifrare, decomprimere e analizzare il payload finale del protobuf

⚠️ Nota importante: Questo flusso di lavoro si applica specificamente alle note Apple bloccate su iOS 16.x. A partire da iOS 17, Apple ha modificato le modalità di archiviazione delle note crittografate e iOS 18 apporta ulteriori modifiche.

Scopriamo il messaggio nascosto all'interno di quell'Apple Note bloccato.

Scavare nel file NoteStore.sqlite

A questo punto, sapevo che il contenuto della nota crittografata era memorizzato in NoteStore.sqlite, in particolare nella tabella ZICNOTEDATA. Apple spesso gzips i dati del protobuf della nota, ma nel caso di note bloccate, l'intero BLOB è prima crittografato-Ciò significa che un tentativo di decompressione diretta non produrrà un testo leggibile. È necessario il file chiave di decrittazione giusta prima che possa avvenire qualsiasi tipo di decompressione o analisi del protobuf.
Decriptare Apple Notes iOS 16 utilizzando SQLite DB Browser
BLOB criptato nel campo ZDATA per la nota bloccata (DB Browser per SQLite)

Nell'immagine è possibile vedere i valori esadecimali grezzi di ZDATA. Questi dati sono effettivamente criptati da Crittografia AEScon metadati critici, come i sali e il conteggio delle iterazioni, salvati in altre parti del database. Da un esaminatore forense Se si riconosce che la nota è completamente crittografata, è necessario scavare più a fondo nella tabella ZICCLOUDSYNCINGOBJECT per trovare i parametri necessari a crepa il codice di accesso e sblocco la nota 🔓.

Perché le note Apple bloccate sono crittografate su iOS 16?

Apple Notes protegge gli appunti bloccati utilizzando una combinazione di PBKDF2 (derivazione della chiave) e AES (crittografia). Quando viene attivata una password su una nota, Apple memorizza i metadati crittografici chiave nel database, come ad esempio:

  • ZCRYPTOITERATIONCOUNT
  • ZCRYPTOSALT
  • ZCRYPTOWRAPPEDKEY

Questi valori garantiscono che solo chi possiede il codice di accesso corretto possa decifrare il contenuto della nota.

Approccio forense

Da un punto di vista forense, i passi da compiere sono in genere i seguenti:

  1. Identificare le voci delle note bloccate in ZICNOTEDATA e ZICCLOUDSYNCINGOBJECT.
  2. Estratto i dettagli crittografici, come il conteggio delle iterazioni, il sale e la chiave impacchettata.
  3. Crepa la password dell'utente con Hashcat (o un altro strumento di recupero password come John the Ripper o Passware).
  4. Derivare le chiavi finali in Python o CyberChef e decifrare il BLOB della nota.
  5. Decomprimere i dati protobuf sbloccati (con CyberChef o Python) per rivelare il testo in chiaro finale.

Cracking della password dell'Apple Note bloccato con Hashcat

Il mio obiettivo era simulare uno scenario forense realistico: avevo un Apple Note bloccato e dovevo recuperare il suo codice di accesso per decifrare il contenuto. È qui che Hashcat entra in gioco. Sfruttando la modalità hash di Apple Secure Notes (ID 16200), Hashcat tenta sistematicamente di trovare le password finché non trova quella corretta.

Estrazione delle colonne richieste

Ho iniziato aprendo NoteStore.sqlite in DB Browser e ho individuato le righe con ZISPASSWORDPROTECTED = 1 nella tabella ZICCLOUDSYNCINGOBJECT. Ho quindi interrogato le seguenti colonne:

  • Z_PK - l'identificativo univoco della nota.
  • ZCRYPTOSALT - il valore del sale per PBKDF2.
  • ZCRYPTOWRAPPEDKEY - la chiave impacchettata che verrà in seguito tolta.
Query SQLite per i parametri richiesti per Hashcat

Il file di input Hashcat è stato generato da un piccolo script Python note_a_hashcat.pyche formatta questi valori in una singola riga che Hashcat può analizzare, compreso il conteggio delle iterazioni (da ZCRYPTOITERATIONCOUNT).

notes_to_hashcat.py raccoglie i parametri necessari per decifrare la password di Apple Note bloccata su iOS 16
Output da notes_to_hashcat.py

Eseguire Hashcat per decifrare la password di Apple Note bloccata

Con il mio file di input Hashcat pronto e un dizionario a portata di mano, ho eseguito il seguente comando:

hashcat -m 16200 -a 0
Qui:
  • -m 16200 specifica la modalità Apple Secure Notes.
  • -a 0 imposta Hashcat in modalità di attacco diretto (a dizionario).
  • Il dizionario può essere qualcosa come rockyou.txt o un elenco personalizzato derivato dagli artefatti del dispositivo.
Utilizzo di Hashcat per decifrare le passwor bloccate di Apple Notes.
Hashcat che rivela la password craccata: royalewithcheese

Hashcat ha identificato con successo la password corretta: royalwithcheese. In un'indagine reale, il dizionario potrebbe essere molto più ampio, ma questo risultato ha confermato che Hashcat è in grado di gestire il lavoro pesante.

Derivare la chiave di cifratura (KEK) per decifrare Apple Notes

Con la password in mano, il passo successivo è stato quello di ricavare la password Chiave di cifratura (KEK)che viene usata per avvolgere la chiave AES finale che cripta il contenuto della nota. Per ricavare la KEK, ho bisogno dei seguenti valori dalla tabella ZICCLOUDSYNCINGOBJECT:

  • Passphrase (la password craccata)
  • Conteggio delle iterazioni (ZCRYPTOITERATIONCOUNT)
  • Il sale (ZCRYPTOSALT)

Ad esempio, utilizzando DB Browser, ho effettuato una query:

SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
Interrogazione di NoteStore.sqlite per il conteggio del sale e dell'iterazione necessari per acquisire il KEK necessario per decifrare le note Apple bloccate.
Conteggio iterazioni: 20000 | Salt: d1afa96252a15d8d58827bcb21940de1

Poi ho aperto CyberChef, il mio strumento preferito 🛠️ e ho trascinato l'operazione "Derive PBKDF2 key". Impostando la funzione di hashing a SHA-256 e inserendo la password, il sale e il conteggio delle iterazioni, CyberChef ha prodotto il file KEK a 16 byte:

CyberChef ha utilizzato per derivare KEK dai parametri PBKDF2 per la decodifica di Apple Note.
KEK: a1dac1516302e1d3d73ad4fd4b6f8fef

Per automatizzare questo processo, ho creato uno script Python chiamato get_key.pyche accetta come argomenti il percorso del database, la nota PK e la password. L'esecuzione restituisce il KEK in esadecimale.

python get_kek.py NoteStore.sqlite

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

Svelare la chiave AES per decifrare le note Apple bloccate su iOS 16

Il passo successivo è stato quello di scartare la chiave utilizzata per crittografare il contenuto della nota. La chiave impacchettata è memorizzata nella colonna ZCRYPTOWRAPPEDKEY di ZICCLOUDSYNCINGOBJECT. Ad esempio, ho interrogato::

SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;
Query SQLite per la chiave unwrapped.key necessaria per decriptare le note appe su iOS16
Chiave avvolgente: 78c2b79c3e357117c95feb882009e14be9e5f88598ea6db0

Opzioni di disimballaggio

Opzione 1: sbloccare la chiave AES per decifrare le note Apple bloccate su iOS 16 con CyberChef

Ho disattivato tutte le operazioni precedenti, ho cercato "AES Key Unwrap" e l'ho trascinato nella finestra della ricetta. Incollando la KEK e la chiave avvolta, CyberChef ha prodotto la chiave AES non avvolta.

CyberChef usato per ricavare KEK e scartare la chiave AES per la decrittazione di Apple Notes su iOS 16
Chiave non incartata: 4b1f0c718aa05a0d097d7bf4865c89d1

Opzione 2: automatizzare l'apertura della chiave AES con unwrap.py

Ho anche sviluppato uno script Python chiamato unwrap.py che prende come argomenti il percorso del database e la KEK (in formato esadecimale). Eseguendo questo script, la chiave viene decompressa e stampata in formato esadecimale. Nel mio caso, la chiave non confezionata era:

python unwrap.py NoteStore.sqlite
Lo script Python unwrap.py mostra la chiave AES decriptata per Apple Notes bloccato
Chiave non incartata: 4b1f0c718aa05a0d097d7bf4865c89d1

Questa è la chiave AES finale che verrà utilizzata per decifrare il contenuto della nota Apple bloccata.

Decriptare i BLOB di Apple Notes usando AES-GCM su iOS 16

Ora che avevo la chiave non incartata, era il momento di decriptare il BLOB di Apple Notes memorizzato nella cartella ZICNOTEDATA tabella. Apple utilizza AES in modalità GCM per proteggere il contenuto delle note chiuse, il che significa che ho bisogno di quattro componenti essenziali per procedere:

  • 🔑 Chiave AES non confezionata

  • 🔁 Vettore di inizializzazione (IV) da ZCRYPTOINITIALIZATIONVECTOR

  • 🏷 Etichetta di autenticazione GCM da ZCRYPTOTAG

  • 💾 BLOB crittografato da ZDATA

📤 Estrazione del tag IV e GCM da NoteStore.sqlite

Per individuare il IV e Etichetta GCM, ho aperto il ZICNOTEDATA in DB Browser per SQLite. Questi campi sono memorizzati come valori binari e possono essere trovati nella tabella ZICNOTEDATA o OGGETTO ZICCLOUDSYNCING tabelle. Entrambe memorizzano i dati con gli stessi nomi di colonna.

  • IV: 5c0c0bde9b6801747ddad1115a422d05

  • Etichetta GCM: b9087ba19e3c7deff2cb4b9b51e6aafa

Lo stesso BLOB crittografato era visibile anche nel file ZDATA colonna. Ho copiato tutti e tre i valori in formato esadecimale, preparandomi per la fase finale di decodifica.

Il vettore di inizializzazione: 5c0c0bde9b6801747ddad1115a422d05
DB Browser che mostra il Tag GCM utilizzato per la decodifica AES-GCM
Tag GCM: b9087ba19e3c7deff2cb4b9b51e6aafa
Browser DB con dati BLOB di Apple Note crittografati evidenziati
Il BLOB crittografato

🧪 Decrittazione della nota con CyberChef

Con tutto in mano, mi sono rivolto a CyberChef. Con questo strumento è stato facile combinare tutti i parametri e rivelare il contenuto originale. Ecco cosa ho fatto:

  1. Ho aggiunto il "Decriptare AES" operazione.

  2. Ho incollato il chiave AES non confezionata nel campo Chiave.

  3. Ho impostato il modalità a GCM.

  4. Ho inserito il IV e GCM Tag nei rispettivi campi.

  5. Infine, ho copiato il file BLOB criptato nella finestra di immissione.

Una volta che ho colpito CuocereCyberChef ha decifrato il BLOB e ha rivelato un file compresso, esattamente come mi aspettavo. Ciò significa che il livello di crittografia era stato completamente rimosso e che potevo passare alla decompressione dei dati.
Ricetta CyberChef che decifra i BLOB di Apple Notes utilizzando la modalità AES-GCM
File GZIP decifrato

Decomposizione e analisi della nota finale (Protobuf decifrato da Apple Notes)

Dopo aver decifrato il BLOB criptato con AES, ho salvato l'output in un file chiamato decrypted_blob.bin e l'ho aperto in HxD. La firma del file 0x1F8B08 ha confermato che si trattava di un file compresso in GZIP: Apple lo usa per comprimere i dati protobuf.

Per estrarre il testo in chiaro, ho riaperto CyberChef e ho aggiunto il file Gunzip al flusso di lavoro. Immediatamente, nell'output hanno cominciato a comparire stringhe familiari.

CyberChef mostra i dati protobuf di Apple Notes decompressi dopo l'estrazione GZIP
Protobuf decompressi in CyberChef

Una volta decompresso, ho applicato Decodifica Protobuf in CyberChef. Il risultato è stato una vista strutturata simile a JSON, con chiavi e valori che rappresentano il contenuto dell'Apple Note bloccato.

Vista CyberChef della struttura protobuf di Apple Notes decodificata con un formato simile a JSON
Protbuf decodificato in CyberChef

Per facilitare la lettura, ho utilizzato anche uno script Python che sfrutta il metodo backboxprotobuf per analizzare il file protobuf e stampare l'output in un formato pulito e leggibile.

prompt dei comandi che mostra il contenuto di Apple Note analizzato con lo script Python backboxprotobuf
Risultati ben formattati e stampati sullo schermo

Questo corrisponde a ciò che l'utente ha digitato nel suo Apple Note bloccato. Si è passati da una voce nascosta e protetta da password al messaggio reale in chiaro, una scoperta preziosa in qualsiasi caso forense.

Screenshot con UFADE del contenuto dell'Apple Note bloccato

🔚 Conclusione

Congratulazioni 🎉 - avete appena completato un flusso di lavoro forense completo per decriptare le note Apple bloccate su iOS 16. Si sono estratti i parametri di crittografia dal database SQLite, si è decriptata la password con Hashcat, ha derivato e decompresso la chiave AES usando Pitonee infine ha decifrato e analizzato il protobuf con CyberChef. Ogni passo vi ha portato più vicino a svelare il contenuto nascosto della nota.

Questa dimostrazione pratica dimostra quanto sia potente strumenti open-source può essere nella digital forensics. Aiutano gli investigatori a scoprire Apple Notes crittografate che gli strumenti commerciali potrebbero ignorare, soprattutto sui dispositivi con sistema operativo iOS 16 o precedente.

🕵️ Bonus: Il suggerimento della password

Ecco un tocco in più: ho trovato una suggerimento per la password nel OGGETTO ZICCLOUDSYNCING tavolo:

Un quarto di dollaro

Poiché il dispositivo apparteneva a un certo "Vincent", non è stato difficile indovinare la password: reale con formaggio - un cenno a Pulp Fiction. In casi reali, suggerimenti di password come questo possono accelerare il flusso di lavoro se combinati con un processo di cracking strategico.

📱 Ancora una cosa... su iOS 17 e iOS 18

Questa guida si applica in modo specifico a come decriptare Note di Apple su iOS 16 e precedenti. A partire da iOS 17Apple ha introdotto modifiche significative al processo di crittografia di Notes. Potreste riscontrare campi di derivazione della chiave mancanti, strutture crittografiche diverse o note che non vengono più decifrate con gli stessi metodi.

Se state cercando di capire come decriptare le note di Apple su iOS 17 o iOS 18Mi piacerebbe collaborare. Condividete le vostre scoperte: analizziamo insieme la nuova crittografia.

Grazie per aver letto! Avete domande o approfondimenti? Scrivetele nei commenti qui sotto o contattateci direttamente. Continuiamo a spingere i confini della scoperta forense. 🔍