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:
⚠️ 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.
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 🔓.
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:
Questi valori garantiscono che solo chi possiede il codice di accesso corretto possa decifrare il contenuto della nota.
Da un punto di vista forense, i passi da compiere sono in genere i seguenti:
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.
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:
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).
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:
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.
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:
Ad esempio, utilizzando DB Browser, ho effettuato una query:
SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
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:
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
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;
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.
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
Questa è la chiave AES finale che verrà utilizzata per decifrare il contenuto della nota Apple bloccata.
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
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.
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:
Ho aggiunto il "Decriptare AES" operazione.
Ho incollato il chiave AES non confezionata nel campo Chiave.
Ho impostato il modalità a GCM.
Ho inserito il IV e GCM Tag nei rispettivi campi.
Infine, ho copiato il file BLOB criptato nella finestra di immissione.
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.
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.
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.
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.
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.
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.
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. 🔍