Einführung

Bei der Analyse eines Testgeräts mit einem beliebten kommerziellen forensischen Tool für Mobilgeräte stieß ich auf etwas Faszinierendes - eine gesperrte Apple-Notiz, die nur als "versteckt" angezeigt wurde. Das Tool zeigte die Zusammenfassung der Notiz an (mit der Bezeichnung "Lance"), aber der eigentliche Inhalt fehlte. Es gab keinen Hinweis darauf, was sich hinter dem Schloss verbarg, und so stellte sich mir eine brennende Frage: Könnte ich das Geheimnis im Inneren lüften? Ich brauchte einen Arbeitsablauf, mit dem ich Apple Notizen unter iOS 16 entschlüsseln konnte.

Das Gerät lief iOS 16.7.10und nachdem ich die Datenbank NoteStore.sqlite durchforstet hatte, stellte ich fest, dass alle Hinweise auf die Verschlüsselung genau dort lagen und darauf warteten, entschlüsselt zu werden. Mit Hilfe von Open-Source-Tools machte ich mich daran, das Passwort wiederherzustellen und den Inhalt der Notiz zu entschlüsseln.            

Dieser Beitrag führt Sie durch die vollständiger forensischer Arbeitsablauf wie man Apple Notes unter iOS 16 entschlüsseln:

  • 🔓 Hashcat zum Knacken von Passwörtern
  • 🗄️ DB Browser für SQLite um Verschlüsselungsparameter zu untersuchen und zu extrahieren
  • 🐍 Python-Skripte für die Schlüsselableitung und das Entschlüsseln von AES-Schlüsseln
  • 🔍 CyberChef zum Entschlüsseln, Dekomprimieren und Parsen der endgültigen protobuf-Nutzdaten

⚠️ Wichtiger Hinweis: Dieser Arbeitsablauf gilt speziell für Apple Notes, die auf iOS 16.x. Mit iOS 17 änderte Apple die Art und Weise, wie verschlüsselte Notizen gespeichert werden, und iOS 18 bringt sogar noch weitere Änderungen.

Lassen Sie uns eintauchen und die versteckte Botschaft in der verschlossenen Apple Note enthüllen.

Einsicht in die NoteStore.sqlite

Zu diesem Zeitpunkt wusste ich, dass der Inhalt der verschlüsselten Notiz in NoteStore.sqlite gespeichert war, und zwar in der Tabelle ZICNOTEDATA. Apfel oft gzips die Protokolldaten der Notiz, aber im Fall von gesperrten Notizen wird zuerst das gesamte BLOB verschlüsselt-was bedeutet, dass ein direkter Dekomprimierungsversuch keinen lesbaren Text ergeben wird. Sie benötigen die richtiger Entschlüsselungsschlüssel bevor irgendeine Art von Entpacken oder Protobuf-Parsing stattfinden kann.
Apple Notes iOS 16 mit SQLite DB Browser entschlüsseln
Verschlüsseltes BLOB im ZDATA-Feld für die gesperrte Notiz (DB Browser für SQLite)

Auf dem Screenshot sehen Sie die rohen Hexadezimalwerte für ZDATA. Diese Daten werden effektiv verschlüsselt durch AES-VerschlüsselungDie kritischen Metadaten - wie Salze und Iterationszahlen - werden in anderen Teilen der Datenbank gespeichert. Von einer kriminaltechnische Untersuchung Wenn Sie erkennen, dass die Notiz vollständig verschlüsselt ist, sollten Sie die Tabelle ZICCLOUDSYNCINGOBJECT nach den Parametern durchsuchen, die für die Riss den Passcode und freischalten die Note 🔓.

Warum sind gesperrte Apple-Notizen in iOS 16 verschlüsselt?

Apple Notes sichert gesperrte Notizen durch eine Kombination aus PBKDF2 (Schlüsselableitung) und AES (Verschlüsselung). Wenn ein Kennwort für eine Notiz aktiviert ist, speichert Apple wichtige kryptografische Metadaten in der Datenbank, wie z. B.:

  • ZCRYPTOITERATIONCOUNT
  • ZCRYPTOSALT
  • ZCRYPTOWRAPPEDKEY

Diese Werte stellen sicher, dass nur jemand mit dem richtigen Passcode den Inhalt der Notiz entschlüsseln kann.

Forensischer Ansatz

Aus forensischer Sicht umfassen Ihre Schritte in der Regel Folgendes:

  1. Identifizieren Sie die entsprechenden gesperrten Notizeinträge in ZICNOTEDATA und ZICCLOUDSYNCINGOBJECT.
  2. Auszug die kryptografischen Details, wie Iterationszahl, Salz und den verschlüsselten Schlüssel.
  3. Crack das Passwort des Benutzers mit Hashcat (oder ein anderes Passwort-Wiederherstellungsprogramm wie John the Ripper oder Passware).
  4. Ableiten die letzten Schlüssel in Python oder CyberChef und entschlüsseln das BLOB der Notiz.
  5. Dekomprimieren die entsperrten Protobuf-Daten (mit CyberChef oder Python), um den endgültigen Klartext zu enthüllen.

Das Passwort des gesperrten Apple Note mit Hashcat knacken

Mein Ziel war es, ein realistisches forensisches Szenario zu simulieren: Ich hatte ein gesperrtes Apple Note und musste den Passcode wiederherstellen, um den Inhalt zu entschlüsseln. Das ist der Punkt Hashcat ins Spiel kommt. Durch die Nutzung des Apple Secure Notes Hash-Modus (ID 16200), hat Hashcat systematisch Passwörter ausprobiert, bis es das richtige gefunden hat.

Extrahieren der erforderlichen Spalten

Ich begann mit dem Öffnen NoteStore.sqlite in DB Browser und zielen auf Zeilen mit ZISPASSWORDPROTECTED = 1 in der Tabelle ZICCLOUDSYNCINGOBJECT. Ich habe dann die folgenden Spalten abgefragt:

  • Z_PK - der eindeutige Bezeichner der Notiz.
  • ZCRYPTOSALT - der Salzwert für PBKDF2.
  • ZCRYPTOWRAPPEDKEY - der verpackte Schlüssel, der später wieder entpackt wird.
SQLite-Abfrage der erforderlichen Parameter für Hashcat

Die Hashcat-Eingabedatei wurde durch ein kleines Python-Skript erzeugt notes_to_hashcat.pydie diese Werte in eine einzige Zeile formatiert, die Hashcat analysieren kann, einschließlich der Iterationszahl (von ZCRYPTOITERATIONCOUNT).

notes_to_hashcat.py sammelt die erforderlichen Parameter, um das gesperrte Apple-Note-Passwort unter iOS 16 zu knacken
Ausgabe von notes_to_hashcat.py

Hashcat ausführen, um das gesperrte Apple Note Passwort zu entschlüsseln

Nachdem ich meine Hashcat-Eingabedatei und ein Wörterbuch zur Hand hatte, führte ich den folgenden Befehl aus:

hashcat -m 16200 -a 0
Hier:
  • -m 16200 legt den Apple Secure Notes-Modus fest.
  • -a 0 schaltet Hashcat in den direkten (Wörterbuch-)Angriffsmodus.
  • Das Wörterbuch kann wie folgt aussehen rockyou.txt oder eine benutzerdefinierte Liste, die von Geräteartefakten abgeleitet ist.
Hashcat zum Entschlüsseln von gesperrten Apple Notes Passwörtern
Hashcat verrät das geknackte Passwort: royalewithcheese

Hashcat hat erfolgreich das richtige Passwort ermittelt: royalewithcheese. Bei einer tatsächlichen Untersuchung könnte Ihr Wörterbuch viel umfangreicher sein, aber dieses Ergebnis bestätigt, dass Hashcat die schwere Arbeit bewältigen kann.

Ableitung des Key Encryption Key (KEK) zur Entschlüsselung von Apple Notes

Mit dem Passwort in der Hand war der nächste Schritt die Ableitung der Key Encryption Key (KEK)der verwendet wird, um den endgültigen AES-Schlüssel zu verpacken, der den Inhalt der Notiz verschlüsselt. Um den KEK abzuleiten, benötigte ich die folgenden Werte aus der Tabelle ZICCLOUDSYNCINGOBJECT:

  • Passphrase (das geknackte Passwort)
  • Anzahl der Iterationen (ZCRYPTOITERATIONCOUNT)
  • Salz (ZCRYPTOSALT)

Zum Beispiel habe ich mit DB Browser eine Abfrage gemacht:

SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
Abfrage von NoteStore.sqlite nach dem Salt und der Iterationszahl, die benötigt werden, um den für die Entschlüsselung gesperrter Apple Notes erforderlichen KEK zu erhalten
Iterationszahl: 20000 | Salz: d1afa96252a15d8d58827bcb21940de1

Als Nächstes öffnete ich CyberChef - ein Lieblingstool von mir 🛠️ - und zog die Operation "PBKDF2-Schlüssel ableiten" hinein. Ich setzte die Hashing-Funktion auf SHA-256 und die Eingabe des Passworts, des Salzes und der Anzahl der Iterationen produzierte CyberChef die 16-Byte-KEK:

CyberChef verwendet, um KEK aus PBKDF2-Parametern für die Entschlüsselung von Apple Note abzuleiten.
KEK: a1dac1516302e1d3d73ad4fd4b6f8fef

Um diesen Prozess zu automatisieren, habe ich ein Python-Skript namens get_key.pydie den Datenbankpfad, die Notiz PK und das Passwort als Argumente akzeptiert. Die Ausführung gibt den KEK in Hex zurück.

python get_kek.py NoteStore.sqlite

Ergebnis:
Anmerkung PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef

Entschlüsseln des AES-Schlüssels zur Entschlüsselung gesperrter Apple-Notizen unter iOS 16

Der nächste Schritt war den Schlüssel auspacken verwendet, um den Inhalt der Notiz zu verschlüsseln. Der verschlüsselte Schlüssel wird in der Spalte ZCRYPTOWRAPPEDKEY von ZICCLOUDSYNCINGOBJECT gespeichert. Ich habe zum Beispiel abgefragt::

SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;
SQLite-Abfrage nach dem unwrapped.key, der für die Entschlüsselung von App-Notizen unter iOS16 benötigt wird
Wrapped Key: 78c2b79c3e357117c95feb882009e14be9e5f88598ea6db0

Optionen zum Auspacken

Option 1: Entschlüsseln des AES-Schlüssels zum Entschlüsseln gesperrter Apple-Notizen unter iOS 16 mit CyberChef

Ich deaktivierte alle vorherigen Vorgänge, suchte nach "AES Key Unwrap" und zog es in das Rezeptfenster. Durch Einfügen des KEK und des verpackten Schlüssels gab CyberChef den unverpackten AES-Schlüssel aus.

CyberChef verwendet, um den KEK abzuleiten und den AES-Schlüssel für die Entschlüsselung von Apple Notes unter iOS 16 zu entschlüsseln
Unverschlüsselter Schlüssel: 4b1f0c718aa05a0d097d7bf4865c89d1

Option 2: Automatisches Entschlüsseln des AES-Schlüssels mit unwrap.py

Außerdem habe ich ein Python-Skript namens auspacken.py das den Datenbankpfad und den KEK (in Hex) als Argumente benötigt. Wenn Sie dieses Skript ausführen, wird der Schlüssel entschlüsselt und im Hex-Format ausgegeben. In meinem Fall war der entschlüsselte Schlüssel:

python unwrap.py NoteStore.sqlite
Python-Skript unwrap.py zeigt entschlüsselten AES-Schlüssel für gesperrte Apple Notes
Unverschlüsselter Schlüssel: 4b1f0c718aa05a0d097d7bf4865c89d1

Dies ist der endgültige AES-Schlüssel, der zur Entschlüsselung des Inhalts der gesperrten Apple-Notiz verwendet wird.

Entschlüsseln von Apple Notes BLOBs mit AES-GCM unter iOS 16

Nachdem ich nun den entschlüsselten Schlüssel hatte, war es an der Zeit, das Apple Notes BLOB zu entschlüsseln, das in der Datei ZICNOTEDATA Tisch. Apple verwendet AES im GCM-Modus um den Inhalt von gesperrten Notizen zu schützen, was bedeutet, dass ich vier wesentliche Komponenten benötigte, um fortzufahren:

  • 🔑 Unverschlüsselter AES-Schlüssel

  • 🔁 Initialisierungsvektor (IV) von ZCRYPTOINITIALIZATIONVECTOR

  • 🏷 GCM-Authentifizierungs-Tag von ZCRYPTOTAG

  • 💾 Verschlüsseltes BLOB von ZDATA

📤 Extrahieren des IV- und GCM-Tags aus NoteStore.sqlite

Zum Auffinden der IV und GCM-Tagöffnete ich die ZICNOTEDATA Tabelle im DB Browser für SQLite. Diese Felder werden als binäre Werte gespeichert und können entweder in der ZICNOTEDATA oder ZICCLOUDSYNCINGOBJECT Tabellen. Beide speichern die Daten unter denselben Spaltennamen.

  • IV: 5c0c0bde9b6801747ddad1115a422d05

  • GCM-Tag: b9087ba19e3c7deff2cb4b9b51e6aafa

Das verschlüsselte BLOB selbst war auch in der ZDATA Spalte. Ich habe alle drei Werte im Hexadezimalformat kopiert, um mich auf den letzten Entschlüsselungsschritt vorzubereiten.

Der Initialisierungsvektor: 5c0c0bde9b6801747ddad1115a422d05
DB Browser zeigt den für die AES-GCM-Entschlüsselung verwendeten GCM-Tag
Der GCM-Tag: b9087ba19e3c7deff2cb4b9b51e6aafa
DB Browser mit verschlüsselten Apple Note BLOB Daten hervorgehoben
Das verschlüsselte BLOB

🧪 Entschlüsselung der Notiz mit CyberChef

Als ich alles in der Hand hatte, wandte ich mich an CyberChef. Mit diesem Tool war es ein Leichtes, alle Parameter zu kombinieren und den ursprünglichen Inhalt zu enthüllen. So habe ich es gemacht:

  1. Ich habe die "AES-Entschlüsselung" Betrieb.

  2. Ich fügte die unverschlüsselter AES-Schlüssel in das Feld Schlüssel ein.

  3. Ich habe die Modus zu GCM.

  4. Ich habe die IV und GCM Tag in ihren jeweiligen Bereichen.

  5. Schließlich habe ich die verschlüsseltes BLOB in das Eingabefenster ein.

Sobald ich die BackenCyberChef entschlüsselte das BLOB und zeigte eine komprimierte Datei - genau das, was ich erwartet hatte. Dies bedeutete, dass die Verschlüsselungsschicht nun vollständig entfernt war und ich mit der Dekomprimierung der Daten fortfahren konnte.
CyberChef-Rezept zur Entschlüsselung von Apple Notes BLOB im AES-GCM-Modus
Entschlüsselte GZIP-Datei

Entpacken und Parsen der endgültigen Notiz (entschlüsseltes Protobuf aus Apple Notes)

Nach dem Entschlüsseln des AES-verschlüsselten BLOBs habe ich die Ausgabe in einer Datei mit dem Namen entschlüsselt_blob.bin und öffnete sie in HxD. Die Signatur der Datei 0x1F8B08 bestätigt, dass es sich um eine GZIP-komprimierte Datei handelt - Apple verwendet dies zur Komprimierung von Protobuf-Daten.

Um den Klartext zu extrahieren, öffnete ich CyberChef erneut und fügte die Gunzip Operation in den Arbeitsablauf integriert. Sofort tauchten in der Ausgabe vertraute Zeichenfolgen auf.

CyberChef zeigt dekomprimierte Apple Notes protobuf Daten nach GZIP Extraktion
Dekomprimierter Protobuf in CyberChef

Nach der Dekomprimierung habe ich Protobuf Dekodieren in CyberChef. Das Ergebnis war eine strukturierte Ansicht, die JSON ähnelt, mit Schlüsseln und Werten, die den Inhalt des gesperrten Apple Note darstellen.

CyberChef-Ansicht von Apple Notes protobuf dekodierte Struktur mit JSON-ähnlichem Format
Entschlüsselter Protbuf in CyberChef

Um das Lesen zu erleichtern, habe ich auch ein Python-Skript verwendet, das die backboxprotobuf Modul, um die protobuf-Datei zu analysieren und die Ausgabe in einem sauberen, menschenlesbaren Format auszugeben.

Eingabeaufforderung, die den mit dem Python-Skript backboxprotobuf geparsten Apple-Note-Inhalt anzeigt
Schön formatierte Ergebnisse auf dem Bildschirm

Dies stimmt mit dem überein, was der Benutzer auf seinem gesperrten Apple Note eingegeben hat. Sie sind von einem versteckten, passwortgeschützten Eintrag zur tatsächlichen Klartextnachricht gelangt - ein unschätzbarer Fund in jedem forensischen Fall.

Screenshot des gesperrten Apple-Note-Inhalts mit UFADE

🔚 Schlusswort

Herzlichen Glückwunsch 🎉 - Sie haben gerade einen vollständigen forensischen Arbeitsablauf abgeschlossen, um Gesperrte Apple-Notizen unter iOS 16 entschlüsseln. Sie haben die Verschlüsselungsparameter aus der SQLite-Datenbank extrahiert, das Passwort geknackt mit Hashcatabgeleitet und den AES-Schlüssel entschlüsselt. Pythonund schließlich entschlüsselt und analysiert die protobuf mit CyberChef. Mit jedem Schritt kamen Sie dem verborgenen Inhalt des Zettels näher.

Dieses praktische Beispiel zeigt, wie leistungsfähig Open-Source-Werkzeuge in der digitalen Forensik sein kann. Sie helfen Ermittlern, verschlüsselte Apple-Notizen aufzuspüren, die kommerziellen Tools möglicherweise entgehen - insbesondere auf Geräten mit iOS 16 oder früher.

🕵️ Bonus: Der Passwort-Hinweis

Hier ist eine zusätzliche Wendung - ich habe eine Passwort-Hinweis im ZICCLOUDSYNCINGOBJECT Tisch:

Viertelpfünder

Da das Gerät jemandem namens "Vincent" gehörte, war es nicht schwer, das Passwort zu erraten: royalewithcheese - eine Anspielung auf Pulp Fiction. In realen Fällen können Passwort-Hinweise wie dieser den Arbeitsablauf beschleunigen, wenn sie mit einem strategischen Knackprozess kombiniert werden.

📱 Noch eine Sache... Über iOS 17 und iOS 18

Diese Anleitung bezieht sich speziell auf die Entschlüsselung Apple Notes unter iOS 16 und früher. Beginnend mit iOS 17hat Apple erhebliche Änderungen am Notes-Verschlüsselungsprozess vorgenommen. Möglicherweise fehlen Felder für die Schlüsselableitung, andere kryptografische Strukturen oder Notizen, die nicht mehr mit denselben Methoden entschlüsselt werden können.

Wenn Sie herausfinden wollen, wie Sie Apple Notes unter iOS 17 oder iOS 18 entschlüsselnIch würde gerne mit Ihnen zusammenarbeiten. Teilen Sie Ihre Erkenntnisse mit - lassen Sie uns gemeinsam die neue Verschlüsselung aufschlüsseln.

Danke fürs Lesen! Haben Sie Fragen oder Anregungen? Schreiben Sie sie unten in die Kommentare oder wenden Sie sich direkt an uns. Lassen Sie uns die Grenzen der forensischen Entdeckung weiter verschieben. 🔍