iOS Podstawowe operacje testowe

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podsumowanie identyfikacji i dostępu do urządzeń iOS

Identyfikacja UDID urządzenia iOS

Do jednoznacznej identyfikacji urządzenia iOS używa się 40-cyfrowego ciągu znanego jako UDID. W macOS Catalina lub nowszym można go znaleźć w Finder app, ponieważ iTunes nie jest już dostępny. Po podłączeniu urządzenia przez USB i wybraniu go w Finder app, UDID urządzenia jest widoczne wraz z innymi informacjami po kliknięciu szczegółów pod jego nazwą.

W wersjach macOS wcześniejszych niż Catalina, iTunes ułatwia znalezienie UDID. Szczegółowe instrukcje można znaleźć tutaj.

Narzędzia w wierszu poleceń oferują alternatywne metody pobierania UDID:

  • Użycie narzędzia I/O Registry Explorer ioreg:
$ ioreg -p IOUSB -l | grep "USB Serial"
  • Używanie ideviceinstaller na macOS (i Linux):
$ brew install ideviceinstaller
$ idevice_id -l
  • Użycie system_profiler:
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Użycie instruments do wylistowania urządzeń:
$ instruments -s devices

Dostęp do powłoki urządzenia

SSH access jest możliwy po zainstalowaniu OpenSSH package po jailbreaku, umożliwiając połączenia przez ssh root@<device_ip_address>. Ważne jest, aby zmienić domyślne hasła (alpine) dla użytkowników root i mobile, aby zabezpieczyć urządzenie.

SSH over USB staje się konieczne przy braku Wi‑Fi, używając iproxy do mapowania portów urządzenia dla połączeń SSH. Ta konfiguracja umożliwia SSH przez USB, uruchamiając:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

Aplikacje shell na urządzeniu, takie jak NewTerm 2, ułatwiają bezpośrednią interakcję z urządzeniem, szczególnie przydatną przy rozwiązywaniu problemów. Reverse SSH shells można również ustanowić, aby uzyskać zdalny dostęp z komputera hosta.

Resetowanie zapomnianych haseł

Aby zresetować zapomniane hasło do wartości domyślnej (alpine), należy edytować plik /private/etc/master.passwd. Polega to na zastąpieniu istniejącego hasha hashem dla alpine obok wpisów użytkowników root i mobile.

Techniki transferu danych

Przenoszenie plików danych aplikacji

Archiwizacja i pobieranie przez SSH i SCP: Łatwo jest spakować katalog Data aplikacji przy użyciu tar, a następnie przesłać go za pomocą scp. Poniższe polecenie archiwizuje katalog Data do pliku .tgz, który następnie jest pobierany z urządzenia:

tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

Graficzne narzędzia interfejsu użytkownika

Korzystanie z iFunbox i iExplorer: Te narzędzia GUI są przydatne do zarządzania plikami na urządzeniach iOS. Jednak począwszy od iOS 8.4 Apple ograniczył dostęp tych narzędzi do application sandbox, chyba że urządzenie jest jailbroken.

Korzystanie z Objection do zarządzania plikami

Interaktywny shell z Objection: Uruchomienie objection daje dostęp do katalogu Bundle aplikacji. Stąd możesz przejść do katalogu Documents aplikacji i zarządzać plikami, w tym pobierać je i przesyłać na i z urządzenia iOS.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

Pozyskiwanie i wyodrębnianie aplikacji

Pobieranie pliku IPA

Link dystrybucji Over-The-Air (OTA): Aplikacje dystrybuowane do testów przez OTA można pobrać za pomocą narzędzia ITMS services asset downloader, które instalowane jest przez npm i służy do zapisania pliku IPA lokalnie.

npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

Pozyskiwanie binarki aplikacji

  1. From an IPA: Rozpakuj IPA, aby uzyskać dostęp do zdeszyfrowanej binarki aplikacji.
  2. From a Jailbroken Device: Zainstaluj aplikację i wyodrębnij z pamięci zdeszyfrowaną binarkę.

Proces deszyfrowania

Manual Decryption Overview: Binarki aplikacji iOS są szyfrowane przez Apple przy użyciu FairPlay. Aby przeprowadzić analizę wsteczną, trzeba zrzucić (dump) z pamięci zdeszyfrowaną binarkę. Proces deszyfrowania obejmuje sprawdzenie flagi PIE, dostosowanie flag pamięci, zidentyfikowanie zaszyfrowanej sekcji, a następnie zrzucenie i zastąpienie tej sekcji jej zdeszyfrowaną wersją.

Checking and Modifying PIE Flag:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

Identyfikacja zaszyfrowanej sekcji i zrzut pamięci:

Określ adresy początkowy i końcowy zaszyfrowanej sekcji za pomocą otool i zrzutuj pamięć z jailbroken device przy użyciu gdb.

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

Nadpisywanie zaszyfrowanej sekcji:

Zastąp zaszyfrowaną sekcję w oryginalnym pliku binarnym aplikacji zdezaszyfrowanym zrzutem.

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

Finalizacja odszyfrowania: Zmodyfikuj metadane binarki, aby wskazywały brak szyfrowania, używając narzędzi takich jak MachOView, ustawiając cryptid na 0.

Odszyfrowywanie (automatycznie)

frida-ios-dump

Narzędzie frida-ios-dump służy do automatycznego odszyfrowywania i wyodrębniania aplikacji z urządzeń iOS. Najpierw trzeba skonfigurować dump.py, aby połączyć się z urządzeniem iOS — można to zrobić przez localhost na porcie 2222 za pomocą iproxy lub bezpośrednio przez adres IP i port urządzenia.

Zainstalowane na urządzeniu aplikacje można wyświetlić poleceniem:

$ python dump.py -l

Aby wykonać dump konkretnej aplikacji, takiej jak Telegram, użyj następującego polecenia:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

To polecenie inicjuje dump aplikacji, powodując utworzenie pliku Telegram.ipa w bieżącym katalogu. Ten proces jest odpowiedni dla jailbroken devices, ponieważ unsigned lub fake-signed apps można ponownie zainstalować przy użyciu narzędzi takich jak ios-deploy.

frida-ipa-extract

Ekstraktor IPA oparty na Frida dla jailbroken devices; używa USB Frida sessions oraz opcjonalnego SSH/SFTP do szybszych pobrań.

  • Wymagania: Python 3.9+, frida, paramiko, jailbroken device z frida-server (OpenSSH w trybie SSH).
  • Konfiguracja:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  • Użycie:
python extract.py -U -f com.example.app -o MyApp.ipa
python extract.py -U -f com.example.app -o MyApp.ipa --sandbox --no-resume
python extract.py -H 192.168.100.32 -P 2222 -u root -p password -f com.example.app
  • Flagi: -f <bundle> uruchamia/dołącza (lub --pid dla PID); -o ustawia nazwę wyjścia. -U używa USB; -H/-P/-u/-p otwiera tunel SSH do frida-server 27042 i pobiera przez SFTP (można łączyć z -U). --sandbox zrzuca sandbox; --no-resume utrzymuje aplikację w stanie zawieszenia, aby uniknąć crashów i ponownych prób realizowanych przez proces systemowy, jeśli sesja zostanie przerwana.
  • Rozwiązywanie problemów: Frida attach timed out → użyj -f lub --no-resume; script has been destroyed--no-resume lub transfer przez SSH; No running apps found → uruchom lub spawn aplikację.

flexdecrypt

Narzędzie flexdecrypt, wraz ze swoim wrapperem flexdump, umożliwia wyodrębnianie plików IPA z zainstalowanych aplikacji. Polecenia instalacyjne dla flexdecrypt na urządzeniu obejmują pobranie i zainstalowanie pakietu .deb. flexdump może być użyty do listowania i zrzucania aplikacji, jak pokazano w poleceniach poniżej:

apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbak, kolejne narzędzie oparte na Frida, wymaga jailbroken device do odszyfrowania aplikacji:

bagbak --raw Chrome

r2flutch

r2flutch, wykorzystujący zarówno radare jak i frida, służy do odszyfrowywania i dumpowania aplikacji. Więcej informacji znajduje się na jego GitHub page.

Instalacja aplikacji

Sideloading odnosi się do instalowania aplikacji poza oficjalnym App Store. Proces ten jest obsługiwany przez installd daemon i wymaga, aby aplikacje były podpisane certyfikatem wydanym przez Apple. Urządzenia Jailbroken mogą to obejść za pomocą AppSync, umożliwiając instalację fake-signed IPA packages.

Sideloading Tools

  • Cydia Impactor: Narzędzie do podpisywania i instalowania plików IPA na iOS oraz APK na Android. Poradniki i rozwiązywanie problemów dostępne są na yalujailbreak.net.

  • libimobiledevice: Biblioteka dla Linux i macOS do komunikacji z urządzeniami iOS. Zawiera polecenia instalacyjne oraz przykłady użycia ideviceinstaller do instalacji aplikacji przez USB.

  • ipainstaller: Narzędzie wiersza poleceń umożliwiające bezpośrednią instalację aplikacji na urządzeniach iOS.

  • ios-deploy: Dla użytkowników macOS, ios-deploy instaluje aplikacje iOS z poziomu linii poleceń. Proces obejmuje rozpakowanie IPA oraz użycie flagi -m do bezpośredniego uruchomienia aplikacji.

  • Xcode: Użyj Xcode, aby zainstalować aplikacje, przechodząc do Window/Devices and Simulators i dodając aplikację do Installed Apps.

Allow Application Installation on Non-iPad Devices

Aby zainstalować aplikacje przeznaczone dla iPada na iPhone lub iPod touch, wartość UIDeviceFamily w pliku Info.plist musi zostać zmieniona na 1. Ta modyfikacja jednak wymaga ponownego podpisania pliku IPA z powodu mechanizmów walidacji podpisu.

Uwaga: Metoda ta może nie zadziałać, jeśli aplikacja wymaga funkcji dostępnych tylko w nowszych modelach iPad podczas instalacji na starszym iPhone lub iPod touch.

Referencje

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks