Dekrypter låste Apple-notater på iOS 16.x: En komplett rettsmedisinsk arbeidsflyt (SQLite, CyberChef, Python) med Hashcat

Innledning

Da jeg analyserte en testenhet med et populært kommersielt verktøy for mobil kriminalteknikk, kom jeg over noe spennende - et låst Apple-notat som bare fremsto som "skjult". Verktøyet viste sammendraget av notatet (merket "Lance"), men det faktiske innholdet manglet. Det var ingen anelse om hva som skjulte seg under låsen, og jeg satt igjen med et brennende spørsmål: Kunne jeg avdekke hemmeligheten på innsiden? Jeg trengte en arbeidsflyt som kunne hjelpe meg med å dekryptere Apple Notes på iOS 16.

Enheten kjørte iOS 16.7.10Etter å ha gravd i NoteStore.sqlite-databasen, innså jeg at alle krypteringssporene lå der - og ventet på å bli dekodet. Ved hjelp av åpen kildekode-verktøy satte jeg i gang med å gjenopprette passordet og dekryptere innholdet i notatet.            

Dette innlegget tar deg gjennom komplett rettsmedisinsk arbeidsflyt om hvordan man dekryptere Apple Notes på iOS 16:

  • 🔓 Hashcat for å knekke passord
  • 🗄️ DB-nettleser for SQLite for å utforske og hente ut krypteringsparametere
  • 🐍 Python-skript for nøkkelderivasjon og AES-nøkkelutpakking
  • 🔍 CyberChef for å dekryptere, dekomprimere og analysere den endelige protobuf-nyttelasten

⚠️ Viktig merknad: Denne arbeidsflyten gjelder spesielt for Apple Notes som er låst på iOS 16.x. Fra og med iOS 17 endret Apple hvordan krypterte notater lagres - og iOS 18 innebærer enda flere endringer.

La oss dykke inn og avsløre den skjulte meldingen i den låste Apple Note.

Grave i NoteStore.sqlite

På dette tidspunktet visste jeg at innholdet i det krypterte notatet var lagret i NoteStore.sqlite, nærmere bestemt i tabellen ZICNOTEDATA. Apple bruker ofte gzips notatets protobuf-data, men når det gjelder låste notater, blir hele BLOB-en først kryptert-vil si at et direkte dekomprimeringsforsøk ikke vil gi lesbar tekst. Du trenger riktig dekrypteringsnøkkel før noen form for utpakking eller protobuf-parsing kan skje.
Dekrypter Apple Notes iOS 16 ved hjelp av SQLite DB Browser
Kryptert BLOB i ZDATA-feltet for det låste notatet (DB Browser for SQLite)

I skjermbildet kan du se de rå heksadesimale verdiene for ZDATA. Disse dataene er effektivt kryptert av AES-krypteringmed kritiske metadata - som salter og iterasjonstall - lagret i andre deler av databasen. Fra en rettsmedisiner Når du oppdager at notatet er fullstendig kryptert, er det et tegn til å gå dypere inn i ZICCLOUDSYNCINGOBJECT-tabellen for å finne parametrene som trengs for å sprekk passordet og låse opp notatet 🔓.

Hvorfor er låste Apple-notater kryptert på iOS 16?

Apple Notes sikrer låste notater ved hjelp av en kombinasjon av PBKDF2 (nøkkelderivasjon) og AES (kryptering). Når et passord er aktivert på et notat, lagrer Apple viktige kryptografiske metadata i databasen - for eksempel:

  • ZCRYPTOITERATIONCOUNT
  • ZCRYPTOSALT
  • ZCRYPTOWRAPPEDKEY

Disse verdiene sikrer at bare en person med riktig passord kan dekryptere innholdet i notatet.

Rettsmedisinsk tilnærming

Fra et rettsmedisinsk ståsted inkluderer trinnene vanligvis

  1. Identifisere de relevante låste notatoppføringene i ZICNOTEDATA og ZICCLOUDSYNCINGOBJECT.
  2. Utdrag de kryptografiske detaljene - som antall iterasjoner, salt og den innkapslede nøkkelen.
  3. Sprekk brukerens passord med Hashcat (eller et annet passordgjenopprettingsverktøy som John the Ripper eller Passware).
  4. Utlede de siste tastene i Python eller CyberChef og dekryptere notatets BLOB.
  5. Dekomprimere de ulåste protobuf-dataene (med CyberChef eller Python) for å avsløre den endelige klarteksten.

Knekke passordet til den låste Apple Note med Hashcat

Målet mitt var å simulere et realistisk kriminalteknisk scenario: Jeg hadde en låst Apple Note og trengte å gjenopprette passordet for å dekryptere innholdet. Det er her Hashcat kommer inn i bildet. Utnytter hash-modusen i Apple Secure Notes (ID 16200), forsøkte Hashcat systematisk å finne det riktige passordet helt til den fant det.

Trekke ut de nødvendige kolonnene

Jeg begynte med å åpne NoteStore.sqlite i DB Browser og målrette rader med ZISPASSWORDPROTECTED = 1 i ZICCLOUDSYNCINGOBJECT-tabellen. Jeg spurte deretter følgende kolonner:

  • Z_PK - notatets unike identifikator.
  • ZCRYPTOSALT - saltverdien for PBKDF2.
  • ZCRYPTOWRAPPEDKEY - den innpakkede nøkkelen som senere skal pakkes ut.
SQLite-spørring etter nødvendige parametere for Hashcat

Hashcat-inndatafilen ble generert av et lite Python-skript notes_to_hashcat.pysom formaterte disse verdiene til en enkelt linje som Hashcat kunne analysere, inkludert iterasjonstallet (fra ZCRYPTOITERATIONCOUNT).

notes_to_hashcat.py samler de nødvendige parametrene for å knekke det låste Apple Note-passordet på iOS 16
Utdata fra notes_to_hashcat.py

Kjører Hashcat for å dekryptere det låste Apple Note-passordet

Med Hashcat-inndatafilen klar og en ordbok for hånden, kjørte jeg følgende kommando:

hashcat -m 16200 -a 0
Her:
  • -m 16200 angir Apple Secure Notes-modus.
  • -a 0 setter Hashcat i rett angrepsmodus (ordbok).
  • Ordboken kan være noe sånt som rockyou.txt eller en egendefinert liste utledet fra enhetsartefakter.
Bruke Hashcat til å dekryptere låste Apple Notes-passord
Hashcat avslører det knekte passordet: royalewithcheese

Hashcat identifiserte det riktige passordet: royalewithcheese. I en faktisk etterforskning kan ordboken din være langt større, men dette resultatet bekreftet at Hashcat kunne håndtere de tunge løftene.

Utlede nøkkelkrypteringsnøkkelen (KEK) for å dekryptere Apple Notes

Med passordet i hånden var neste skritt å finne ut Nøkkelkrypteringsnøkkel (KEK)som brukes til å pakke inn den endelige AES-nøkkelen som krypterer innholdet i notatet. For å utlede KEK trengte jeg følgende verdier fra ZICCLOUDSYNCINGOBJECT-tabellen:

  • Passordfrase (det knekte passordet)
  • Antall iterasjoner (ZCRYPTOITERATIONCOUNT)
  • Salt (ZCRYPTOSALT)

For eksempel, ved hjelp av DB Browser, spurte jeg:

SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
Spør NoteStore.sqlite om Salt- og iterasjonstallet som trengs for å skaffe KEK-en som trengs for å dekryptere låste Apple Notes
Antall iterasjoner: 20000 | Salt: d1afa96252a15d8d58827bcb21940de1

Deretter åpnet jeg CyberChef - et av mine favorittverktøy 🛠️ - og dro inn operasjonen "Derive PBKDF2 key". Ved å sette hashing-funksjonen til SHA-256 og skrev inn passord, salt og antall iterasjoner, produserte CyberChef 16-byte KEK:

CyberChef brukes til å utlede KEK fra PBKDF2-parametere for dekryptering av Apple Note.
KEK: a1dac1516302e1d3d73ad4fd4b6f8fef

For å automatisere denne prosessen opprettet jeg et Python-skript kalt get_key.pysom godtar databasestien, note PK og passord som argumenter. Når du kjører den, returneres KEK i hex.

python get_kek.py NoteStore.sqlite

Resultat:
Merk PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef

Pakke ut AES-nøkkelen for å dekryptere låste Apple-notater på iOS 16

Neste skritt var å pakke opp nøkkelen som brukes til å kryptere notatets innhold. Den innpakkede nøkkelen lagres i kolonnen ZCRYPTOWRAPPEDKEY i ZICCLOUDSYNCINGOBJECT. Jeg spurte for eksempel::

SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;
SQLite-spørring etter unwrapped.key som kreves for dekryptering av appe-notater på iOS16
Innpakket nøkkel: 78c2b79c3e357117c95feb882009e14be9e5f88598ea6db0

Alternativer for utpakking

Alternativ 1: Pakke ut AES-nøkkelen for dekryptering av låste Apple-notater på iOS 16 med CyberChef

Jeg deaktiverte alle tidligere operasjoner, søkte etter "AES Key Unwrap" og dro den inn i oppskriftsvinduet. Ved å lime inn KEK og den innpakkede nøkkelen, fikk CyberChef ut den utpakkede AES-nøkkelen.

CyberChef brukes til å utlede KEK og pakke opp AES-nøkkel for Apple Notes-dekryptering på iOS 16
Uinnpakket nøkkel: 4b1f0c718aa05a0d097d7bf4865c89d1

Alternativ 2: Automatisering av AES-nøkkelopprulling med unwrap.py

Jeg har også utviklet et Python-skript som heter unwrap.py som tar databasestien og KEK (i hex) som argumenter. Ved å kjøre dette skriptet ble nøkkelen pakket ut og skrevet ut i hex-format. I mitt tilfelle var den utpakkede nøkkelen

python unwrap.py NoteStore.sqlite
Python-skriptet unwrap.py viser dekryptert AES-nøkkel for låste Apple Notes
Uinnpakket nøkkel: 4b1f0c718aa05a0d097d7bf4865c89d1

Dette er den endelige AES-nøkkelen som vil bli brukt til å dekryptere innholdet i den låste Apple-notaten.

Dekryptering av Apple Notes BLOB-er ved hjelp av AES-GCM på iOS 16

Nå som jeg hadde den utpakkede nøkkelen, var det på tide å dekryptere Apple Notes BLOB-en som var lagret i ZICNOTEDATA tabell. Apple bruker AES i GCM-modus for å beskytte innholdet i låste notater, noe som betyr at jeg trengte fire viktige komponenter for å komme videre:

  • 🔑 Uinnpakket AES-nøkkel

  • 🔁 Initialiseringsvektor (IV) fra ZCRYPTOINITIALISERINGSVEKTOR

  • 🏷 GCM-autentiseringsmerke fra ZCRYPTOTAG

  • 💾 Kryptert BLOB fra ZDATA

📤 Trekke ut IV- og GCM-taggen fra NoteStore.sqlite

For å lokalisere IV og GCM-tagåpnet jeg ZICNOTEDATA tabellen i DB Browser for SQLite. Disse feltene lagres som binære verdier og kan finnes i enten ZICNOTEDATA eller ZICCLOUDSYNCINGOBJECT tabeller. Begge lagrer dataene under samme kolonnenavn.

  • IV: 5c0c0bde9b6801747ddad1115a422d05

  • GCM Tag: b9087ba19e3c7deff2cb4b9b51e6aafa

Selve den krypterte BLOB-en var også synlig i ZDATA kolonne. Jeg kopierte alle tre verdiene i heksadesimalformat, og forberedte meg på det siste dekrypteringstrinnet.

Initialiseringsvektoren: 5c0c0bde9b6801747ddad1115a422d05
DB Browser viser GCM-taggen som brukes til AES-GCM-dekryptering
GCM Tag: b9087ba19e3c7deff2cb4b9b51e6aafa
DB Browser med krypterte Apple Note BLOB-data uthevet
Den krypterte BLOB-en

🧪 Dekryptering av notatet med CyberChef

Med alt i hendene vendte jeg meg til CyberChef. Dette verktøyet gjorde det enkelt å kombinere alle parameterne og avdekke det opprinnelige innholdet. Her er hva jeg gjorde:

  1. Jeg la til "AES-dekryptering" operasjon.

  2. Jeg limte inn uinnpakket AES-nøkkel i nøkkelfeltet.

  3. Jeg satte modus til GCM.

  4. Jeg satte inn IV og GCM Tag inn i sine respektive felt.

  5. Til slutt kopierte jeg kryptert BLOB i inndatavinduet.

Når jeg traff BakeDa jeg åpnet filen, dekrypterte CyberChef BLOB-en og viste en komprimert fil - akkurat det jeg forventet. Dette betydde at krypteringslaget nå var helt fjernet, og jeg kunne gå videre til å dekomprimere dataene.
CyberChef-oppskrift dekrypterer Apple Notes BLOB ved hjelp av AES-GCM-modus
Dekryptert GZIP-fil

Pakke ut og analysere det endelige notatet (dekryptert protobuf fra Apple Notes)

Etter å ha dekryptert den AES-krypterte BLOB-en, lagret jeg utdataene i en fil med navnet dekryptert_blob.bin og åpnet den i HxD. Filsignaturen 0x1F8B08 bekreftet at det var en GZIP-komprimert fil - Apple bruker dette til å komprimere protobuf-data.

For å hente ut klarteksten åpnet jeg CyberChef på nytt og la til Gunzip operasjonen til arbeidsflyten. Umiddelbart begynte kjente strenger å dukke opp i utdataene.

CyberChef viser dekomprimerte Apple Notes protobuf-data etter GZIP-utpakking
Dekomprimert protobuf i CyberChef

Etter å ha fjernet komprimeringen, brukte jeg Protobuf-avkoding i CyberChef. Resultatet ble en strukturert visning som lignet JSON, med nøkler og verdier som representerte innholdet i den låste Apple Note.

CyberChef-visning av Apple Notes protobuf-dekodet struktur med JSON-lignende format
Dekodet Protbuf i CyberChef

For å gjøre det enklere å lese, brukte jeg også et Python-skript som utnyttet backboxprotobuf modulen til å analysere protobuf-filen og skrive ut resultatet i et rent, lesbart format.

Kommandoprompt som viser parset Apple Note-innhold ved hjelp av Python-skriptet backboxprotobuf
Pent formaterte resultater skrives ut på skjermen

Dette samsvarer med det brukeren skrev på sin låste Apple Note. Du har gått fra en skjult, passordbeskyttet oppføring til den faktiske meldingen i klartekst - et uvurderlig funn i enhver rettsmedisinsk sak.

Skjermbilde ved hjelp av UFADE av det låste Apple Note-innholdet

🔚 Wrapping Up

Gratulerer 🎉 - du har nettopp fullført en fullstendig rettsmedisinsk arbeidsflyt for å dekryptere låste Apple Notes på iOS 16. Du hentet ut krypteringsparametere fra SQLite-databasen, knekte passordet med Hashcatavledet og pakket opp AES-nøkkelen ved hjelp av Pythonog til slutt dekrypterte og analyserte protobuf-filen med CyberChef. Hvert skritt brakte deg nærmere en avsløring av lappens skjulte innhold.

Denne praktiske gjennomgangen viser hvor kraftig verktøy med åpen kildekode kan være i digital kriminalteknikk. De hjelper etterforskere med å avdekke krypterte Apple Notes som kommersielle verktøy kanskje ikke fanger opp - spesielt på enheter som kjører iOS 16 eller tidligere.

🕵️ Bonus: Passordhintet

Her er en ekstra vri - jeg fant en passordhint i ZICCLOUDSYNCINGOBJECT bord:

Quarter Pounder

Siden enheten tilhørte en person ved navn "Vincent", var det ikke vanskelig å gjette passordet: royalewithcheese - et nikk til Pulp Fiction. I virkelige tilfeller kan passordtips som dette akselerere arbeidsflyten når de kombineres med en strategisk knekkeprosess.

📱 En ting til ... om iOS 17 og iOS 18

Denne veiledningen gjelder spesielt hvordan du dekrypterer Apple Notes på iOS 16 og tidligere. Starter med iOS 17I løpet av det siste året har Apple innført betydelige endringer i Notes-krypteringsprosessen. Du kan støte på manglende nøkkelavledningsfelt, forskjellige kryptografiske strukturer eller notater som ikke lenger dekrypteres ved hjelp av de samme metodene.

Hvis du utforsker hvordan du kan dekryptere Apple Notes på iOS 17 eller iOS 18Jeg vil gjerne samarbeide. Del dine funn - la oss bryte ned den nye krypteringen sammen.

Takk for at du leser! Har du spørsmål eller innspill? Skriv dem i kommentarfeltet nedenfor, eller ta kontakt direkte. La oss fortsette å flytte grensene for rettsmedisinske funn. 🔍

Facebook
Twitter
E-post
Skriv ut

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *