Odszyfrowanie zablokowanych notatek Apple na iOS 16.x: Kompletny Forensic Workflow (SQLite, CyberChef, Python) z wykorzystaniem Hashcat

Wprowadzenie

Podczas analizy urządzenia testowego za pomocą popularnego komercyjnego mobilnego narzędzia kryminalistycznego natknąłem się na coś intrygującego - zablokowaną notatkę Apple Note, która wyglądała tylko jako "ukryta". Narzędzie pokazało podsumowanie notatki (oznaczone jako "Lance"), ale brakowało faktycznej treści. Nie było pojęcia, co kryje się pod blokadą, pozostawiając mnie z palącym pytaniem: czy mogę odkryć sekret w środku? Potrzebowałem przepływu pracy, który pomógłby mi odszyfrować Apple Notes na iOS 16.

Urządzenie było uruchomione iOS 16.7.10Po zagłębieniu się w bazę danych NoteStore.sqlite zdałem sobie sprawę, że wszystkie wskazówki dotyczące szyfrowania znajdują się właśnie tam - czekając na odszyfrowanie. Z pomocą narzędzi open-source postanowiłem odzyskać hasło i odszyfrować zawartość notatki.            

Ten post przeprowadzi Cię przez Kompletny przepływ pracy kryminalistycznej w jaki sposób odszyfrować Apple Notes na iOS 16:

  • 🔓 Hashcat do łamania haseł
  • 🗄️ Przeglądarka DB dla SQLite aby zbadać i wyodrębnić parametry szyfrowania
  • 🐍 Skrypty Python do wyprowadzania kluczy i rozpakowywania kluczy AES
  • 🔍 CyberChef aby odszyfrować, zdekompresować i przeanalizować końcowy ładunek protobuf

⚠️ Ważna uwaga: Ten przepływ pracy dotyczy w szczególności Apple Notes zablokowanych na iOS 16.x. Począwszy od iOS 17, Apple zmieniło sposób przechowywania zaszyfrowanych notatek, a iOS 18 wprowadza jeszcze więcej zmian.

Zanurzmy się i ujawnijmy ukrytą wiadomość wewnątrz zablokowanego Apple Note.

Zagłębianie się w NoteStore.sqlite

W tym momencie wiedziałem, że zawartość zaszyfrowanej notatki była przechowywana w NoteStore.sqlite, a konkretnie w tabeli ZICNOTEDATA. Apple często gzips dane protobuf notatki, ale w przypadku zablokowanych notatek, cały ten BLOB jest najpierw szyfrowany-Oznacza to, że bezpośrednia próba dekompresji nie przyniesie czytelnego tekstu. Będziesz potrzebował właściwy klucz deszyfrujący przed jakimkolwiek rozpakowaniem lub przeanalizowaniem protobuf.
Deszyfrowanie Apple Notes iOS 16 przy użyciu SQLite DB Browser
Zaszyfrowany BLOB w polu ZDATA dla zablokowanej notatki (DB Browser dla SQLite)

Na zrzucie ekranu widać surowe wartości szesnastkowe dla ZDATA. Dane te są skutecznie szyfrowane przez Szyfrowanie AESz krytycznymi metadanymi, takimi jak sole i liczba iteracji, zapisanymi w innych częściach bazy danych. Od egzaminator kryminalistyczny Z perspektywy, rozpoznanie, że notatka jest w pełni zaszyfrowana, jest sygnałem do zagłębienia się w tabelę ZICCLOUDSYNCINGOBJECT w celu uzyskania parametrów potrzebnych do pęknięcie kod dostępu i odblokowanie nota 🔓.

Dlaczego zablokowane notatki Apple są szyfrowane w systemie iOS 16?

Apple Notes zabezpiecza zablokowane notatki za pomocą kombinacji PBKDF2 (wyprowadzanie klucza) i AES (szyfrowanie). Gdy hasło jest włączone w notatce, Apple przechowuje kluczowe metadane kryptograficzne w bazie danych - takie jak:

  • ZCRYPTOITERATIONCOUNT
  • ZCRYPTOSALT
  • ZCRYPTOWRAPPEDKEY

Wartości te zapewniają, że tylko osoba z prawidłowym kodem dostępu może odszyfrować zawartość notatki.

Podejście kryminalistyczne

Z kryminalistycznego punktu widzenia, podejmowane kroki zazwyczaj obejmują:

  1. Identyfikacja odpowiednie wpisy zablokowanych notatek w ZICNOTEDATA i ZICCLOUDSYNCINGOBJECT.
  2. Wyciąg szczegóły kryptograficzne, takie jak liczba iteracji, sól i zawinięty klucz.
  3. Pęknięcie hasło użytkownika za pomocą Hashcat (lub inne narzędzie do odzyskiwania haseł, takie jak John the Ripper lub Passware).
  4. Pochodna końcowe klucze w Python lub CyberChef oraz odszyfrowywanie BLOB notatki.
  5. Dekompresja odblokowane dane protobuf (z CyberChef lub Python), aby ujawnić ostateczny tekst jawny.

Złamanie hasła zablokowanego Apple Note za pomocą Hashcat

Moim celem była symulacja realistycznego scenariusza kryminalistycznego: miałem zablokowany Apple Note i musiałem odzyskać jego kod dostępu, aby odszyfrować zawartość. W tym miejscu Hashcat wchodzi do gry. Wykorzystując tryb skrótu Apple Secure Notes (ID 16200), Hashcat systematycznie próbował haseł, aż znalazł prawidłowe.

Wyodrębnianie wymaganych kolumn

Zacząłem od otwarcia NoteStore.sqlite w DB Browser i kierowanie na wiersze z ZISPASSWORDPROTECTED = 1 w tabeli ZICCLOUDSYNCINGOBJECT. Następnie zapytałem o następujące kolumny:

  • Z_PK - unikalny identyfikator noty.
  • ZCRYPTOSALT - wartość soli dla PBKDF2.
  • ZCRYPTOWRAPPEDKEY - zawinięty klucz, który zostanie później rozpakowany.
Zapytanie SQLite o wymagane parametry dla Hashcat

Plik wejściowy Hashcat został wygenerowany przez mały skrypt Pythona notes_to_hashcat.py, który sformatował te wartości w pojedynczy wiersz, który Hashcat mógł przeanalizować, w tym liczbę iteracji (z ZCRYPTOITERATIONCOUNT).

notes_to_hashcat.py gromadzi wymagane parametry do złamania zablokowanego hasła Apple Note na iOS 16
Dane wyjściowe z notes_to_hashcat.py

Uruchamianie Hashcat w celu odszyfrowania zablokowanego hasła Apple Note

Mając gotowy plik wejściowy Hashcat i słownik pod ręką, uruchomiłem następujące polecenie:

hashcat -m 16200 -a 0
Tutaj:
  • -m 16200 określa tryb Apple Secure Notes.
  • -a 0 ustawia Hashcat na tryb ataku prostego (słownikowego).
  • Słownik może wyglądać następująco rockyou.txt lub niestandardową listę pochodzącą z artefaktów urządzenia.
Używanie Hashcat do odszyfrowania zablokowanego hasła Apple Notes
Hashcat ujawniający złamane hasło: royalewithcheese

Hashcat pomyślnie zidentyfikował prawidłowe hasło: royalewithcheese. W rzeczywistym dochodzeniu słownik może być znacznie większy, ale ten wynik potwierdził, że Hashcat poradzi sobie z ciężkim zadaniem.

Uzyskanie klucza szyfrowania (KEK) do odszyfrowania Apple Notes

Mając hasło w ręku, następnym krokiem było uzyskanie Klucz szyfrowania klucza (KEK)który jest używany do zawijania ostatecznego klucza AES, który szyfruje zawartość notatki. Aby uzyskać KEK, potrzebowałem następujących wartości z tabeli ZICCLOUDSYNCINGOBJECT:

  • Hasło (złamane hasło)
  • Liczba iteracji (ZCRYPTOITERATIONCOUNT)
  • Sól (ZCRYPTOSALT)

Na przykład, używając DB Browser, zapytałem:

SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
Zapytanie NoteStore.sqlite o liczbę soli i iteracji potrzebnych do uzyskania KEK potrzebnego do odszyfrowania zablokowanych Apple Notes
Liczba iteracji: 20000 | Salt: d1afa96252a15d8d58827bcb21940de1

Następnie otworzyłem CyberChef - moje ulubione narzędzie 🛠️ - i przeciągnąłem operację "Derive PBKDF2 key". Ustawiłem funkcję haszującą na SHA-256 i wprowadzając hasło, sól i liczbę iteracji, CyberChef wygenerował następujące dane 16-bajtowy KEK:

CyberChef używany do wyprowadzania KEK z parametrów PBKDF2 do deszyfrowania Apple Note.
KEK: a1dac1516302e1d3d73ad4fd4b6f8fef

Aby zautomatyzować ten proces, stworzyłem skrypt Pythona o nazwie get_key.pyktóra jako argumenty przyjmuje ścieżkę do bazy danych, notę PK i hasło. Uruchomienie zwraca KEK w hex.

python get_kek.py NoteStore.sqlite

Wynik:
Uwaga PK=16: KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef

Rozpakowywanie klucza AES w celu odszyfrowania zablokowanych notatek Apple na iOS 16

Następnym krokiem było rozpakuj klucz używany do szyfrowania zawartości notatki. Zawinięty klucz jest przechowywany w kolumnie ZCRYPTOWRAPPEDKEY obiektu ZICCLOUDSYNCINGOBJECT. Na przykład, zapytałem::

SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;
Zapytanie SQLite o unwrapped.key wymagane do odszyfrowania notatek w systemie iOS16
Wrapped Key: 78c2b79c3e357117c95feb882009e14be9e5f88598ea6db0

Opcje rozpakowywania

Opcja 1: Rozpakowanie klucza AES w celu odszyfrowania zablokowanych notatek Apple Notes na iOS 16 za pomocą CyberChef

Wyłączyłem wszystkie poprzednie operacje, wyszukałem "AES Key Unwrap" i przeciągnąłem go do okna receptury. Wklejając KEK i zawinięty klucz, CyberChef wyświetlił rozpakowany klucz AES.

CyberChef użyty do wyprowadzenia KEK i rozpakowania klucza AES do odszyfrowania Apple Notes na iOS 16
Unwrapped Key: 4b1f0c718aa05a0d097d7bf4865c89d1

Opcja 2: Automatyzacja rozpakowywania klucza AES za pomocą unwrap.py

Opracowałem również skrypt Pythona o nazwie unwrap.py który jako argumenty przyjmuje ścieżkę do bazy danych i KEK (w formacie hex). Uruchomienie tego skryptu powoduje rozpakowanie klucza i wydrukowanie go w formacie hex. W moim przypadku rozpakowany klucz to:

python unwrap.py NoteStore.sqlite
Skrypt Python unwrap.py pokazujący odszyfrowany klucz AES dla zablokowanych Apple Notes
Unwrapped Key: 4b1f0c718aa05a0d097d7bf4865c89d1

Jest to ostateczny klucz AES, który zostanie użyty do odszyfrowania zablokowanej zawartości notatki Apple.

Odszyfrowywanie notatek Apple Notes BLOB przy użyciu AES-GCM w systemie iOS 16

Teraz, gdy miałem już rozpakowany klucz, nadszedł czas, aby odszyfrować plik Apple Notes BLOB przechowywany w folderze ZICNOTEDATA tabela. Apple używa AES w trybie GCM aby chronić zawartość zablokowanych notatek, co oznacza, że potrzebowałem czterech podstawowych komponentów, aby kontynuować:

  • 🔑 Rozpakowany klucz AES

  • 🔁 Wektor inicjalizacji (IV) z ZCRYPTOINITIALIZATIONVECTOR

  • 🏷 Znacznik uwierzytelniania GCM z ZCRYPTOTAG

  • 💾 Zaszyfrowany BLOB z ZDATA

📤 Wyodrębnianie znacznika IV i GCM z pliku NoteStore.sqlite

Aby zlokalizować IV oraz Znacznik GCMotworzyłem ZICNOTEDATA w tabeli DB Browser dla SQLite. Pola te są przechowywane jako wartości binarne i można je znaleźć w sekcji ZICNOTEDATA lub ZICCLOUDSYNCINGOBJECT tabele. Obie przechowują dane pod tymi samymi nazwami kolumn.

  • IV: 5c0c0bde9b6801747ddad1115a422d05

  • Znacznik GCM: b9087ba19e3c7deff2cb4b9b51e6aafa

Sam zaszyfrowany BLOB był również widoczny w pliku ZDATA kolumna. Skopiowałem wszystkie trzy wartości w formacie szesnastkowym, przygotowując się do ostatniego etapu deszyfrowania.

Wektor inicjalizacji: 5c0c0bde9b6801747ddad1115a422d05
Przeglądarka DB pokazująca znacznik GCM używany do deszyfrowania AES-GCM
Tag GCM: b9087ba19e3c7deff2cb4b9b51e6aafa
Przeglądarka DB z podświetlonymi zaszyfrowanymi danymi Apple Note BLOB
Zaszyfrowany BLOB

Odszyfrowywanie notatki za pomocą CyberChef

Mając wszystko pod ręką, zwróciłem się do CyberChef. Narzędzie to ułatwiło połączenie wszystkich parametrów i ujawnienie oryginalnej zawartości. Oto co zrobiłem:

  1. Dodałem "AES Decrypt" działanie.

  2. Wkleiłem rozpakowany klucz AES w polu Klucz.

  3. Ustawiłem tryb do GCM.

  4. Włożyłem Znacznik IV i GCM w swoich dziedzinach.

  5. Na koniec skopiowałem zaszyfrowany BLOB w oknie wprowadzania.

Raz uderzyłem PiecCyberChef odszyfrował BLOB i ujawnił skompresowany plik - dokładnie to, czego oczekiwałem. Oznaczało to, że warstwa szyfrowania została całkowicie usunięta i mogłem przejść do dekompresji danych.
Przepis CyberChefa odszyfrowujący Apple Notes BLOB przy użyciu trybu AES-GCM
Odszyfrowany plik GZIP

Rozpakowywanie i analizowanie końcowej notatki (odszyfrowany protobuf z Apple Notes)

Po odszyfrowaniu zaszyfrowanego AES BLOB, zapisałem dane wyjściowe do pliku o nazwie decrypted_blob.bin i otworzył go w HxD. Sygnatura pliku 0x1F8B08 potwierdził, że był to plik skompresowany GZIP - Apple używa go do kompresji danych protobuf.

Aby wyodrębnić zwykły tekst, ponownie otworzyłem CyberChef i dodałem plik Gunzip do przepływu pracy. Natychmiast na wyjściu zaczęły pojawiać się znajome ciągi znaków.

CyberChef pokazujący zdekompresowane dane Apple Notes protobuf po ekstrakcji GZIP
Zdekompresowany protobuf w CyberChef

Po rozpakowaniu zastosowałem Dekodowanie Protobuf w CyberChef. Rezultatem był ustrukturyzowany widok przypominający JSON, z kluczami i wartościami reprezentującymi zawartość zablokowanego Apple Note.

Widok CyberChef zdekodowanej struktury Apple Notes protobuf w formacie podobnym do JSON
Zdekodowany Protbuf w CyberChefie

Aby ułatwić czytanie, użyłem również skryptu Pythona, który wykorzystuje funkcję backboxprotobuf aby przeanalizować plik protobuf i wydrukować dane wyjściowe w czystym, czytelnym dla człowieka formacie.

Wiersz poleceń wyświetlający przeanalizowaną zawartość Apple Note przy użyciu skryptu backboxprotobuf Python
Ładnie sformatowane wyniki drukowane na ekranie

Odpowiada to temu, co użytkownik wpisał w zablokowanym Apple Note. Przeszedłeś od ukrytego, chronionego hasłem wpisu do rzeczywistej, zwykłej wiadomości - bezcenne znalezisko w każdej sprawie kryminalistycznej.

Zrzut ekranu przy użyciu UFADE zablokowanej zawartości Apple Note

Podsumowanie

Gratulacje 🎉 - właśnie ukończyłeś pełny kryminalistyczny workflow do odszyfrować zablokowane Apple Notes na iOS 16. Wyodrębniłeś parametry szyfrowania z bazy danych SQLite, złamałeś hasło za pomocą Hashcatwyprowadził i rozpakował klucz AES przy użyciu Pythoni ostatecznie odszyfrował i przeanalizował protobuf za pomocą CyberChef. Każdy krok przybliżał cię do ujawnienia ukrytej zawartości notatki.

Ten praktyczny przewodnik udowadnia, jak potężny narzędzia open source może być w kryminalistyce cyfrowej. Pomagają śledczym odkryć zaszyfrowane notatki Apple Notes, które komercyjne narzędzia mogą przeoczyć - zwłaszcza na urządzeniach z systemem operacyjnym. iOS 16 lub wcześniejszy.

🕵️ Bonus: Podpowiedź do hasła

Oto dodatkowy zwrot akcji - znalazłem podpowiedź do hasła w ZICCLOUDSYNCINGOBJECT tabela:

Quarter Pounder

Ponieważ urządzenie należało do kogoś o imieniu "Vincent", odgadnięcie hasła nie było trudne: royalewithcheese - ukłon w stronę Pulp Fiction. W rzeczywistych przypadkach takie podpowiedzi haseł mogą przyspieszyć przepływ pracy w połączeniu ze strategicznym procesem łamania.

Jeszcze jedna rzecz... o iOS 17 i iOS 18

Ten przewodnik dotyczy w szczególności sposobu odszyfrowywania Notatki Apple na iOS 16 i wcześniejszych. Począwszy od iOS 17Apple wprowadziło znaczące zmiany w procesie szyfrowania aplikacji Notes. Można napotkać brakujące pola wyprowadzania klucza, różne struktury kryptograficzne lub notatki, które nie są już odszyfrowywane przy użyciu tych samych metod.

Jeśli zastanawiasz się, jak odszyfrować Apple Notes na iOS 17 lub iOS 18, chciałbym współpracować. Podziel się swoimi odkryciami - wspólnie przeanalizujmy nowe szyfrowanie.

Dzięki za przeczytanie! Masz pytania lub spostrzeżenia? Zostaw je w komentarzach poniżej lub skontaktuj się z nami bezpośrednio. Przesuwajmy granice odkryć kryminalistycznych. 🔍

Facebook
Twitter
E-mail
Drukuj

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Subskrybuj, aby być na bieżąco!

Nie przegap żadnego postu - otrzymuj powiadomienia za każdym razem, gdy opublikujemy nowy artykuł na blogu, przewodnik kryminalistyczny lub udostępnimy ważne aktualizacje.

Najnowszy post