# iOS Pentesting without Jailbreak {{#include ../../banners/hacktricks-training.md}} ## Główna idea Aplikacje podpisane z **uprawnieniem `get_task_allow`** pozwalają aplikacjom stron trzecich uruchomić funkcję **`task_for_pid()`** z identyfikatorem procesu początkowej aplikacji jako argument, aby uzyskać port zadania nad nią (móc ją kontrolować i uzyskać dostęp do jej pamięci). Jednak nie jest to tak proste, jak po prostu pobranie IPA, ponowne podpisanie go z uprawnieniem i wgranie z powrotem na urządzenie. Dzieje się tak z powodu ochrony FairPlay. Gdy podpis aplikacji się zmienia, klucz DRM (Digital Rights Management) jest **unieważniony i aplikacja nie będzie działać**. Na starym urządzeniu z jailbreakiem możliwe jest zainstalowanie IPA, **odszyfrowanie go za pomocą ulubionego narzędzia** (takiego jak Iridium lub frida-ios-dump) i pobranie go z powrotem z urządzenia. Chociaż, jeśli to możliwe, zaleca się po prostu poprosić klienta o odszyfrowane IPA. ## Uzyskanie odszyfrowanego IPA ### Pobierz to od Apple 1. Zainstaluj aplikację do testowania na iPhonie 2. Zainstaluj i uruchom [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) na swoim macos 3. Otwórz `Terminal` na swoim Macu i przejdź do `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA pojawi się w tym folderze później. 4. Powinieneś zobaczyć swoje urządzenie iOS. Kliknij dwukrotnie na nie, a następnie kliknij Dodaj + → Aplikacje z górnego paska menu. 5. Po kliknięciu Dodaj, Configurator pobierze IPA z Apple i spróbuje wgrać go na twoje urządzenie. Jeśli wcześniej postępowałeś zgodnie z moją rekomendacją i już zainstalowałeś IPA, pojawi się komunikat z prośbą o ponowną instalację aplikacji. 6. IPA powinno być pobrane w `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`, skąd możesz je pobrać. Sprawdź [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) po więcej szczegółowych informacji na temat tego procesu. ### Odszyfrowanie aplikacji Aby odszyfrować IPA, zamierzamy je zainstalować. Jednak jeśli masz starego iPhone'a z jailbreakiem, potencjalnie jego wersja nie będzie wspierana przez aplikację, ponieważ zazwyczaj aplikacje wspierają tylko najnowsze wersje. Aby je zainstalować, po prostu rozpakuj IPA: ```bash unzip redacted.ipa -d unzipped ``` Sprawdź `Info.plist` pod kątem minimalnej obsługiwanej wersji, a jeśli twoje urządzenie jest starsze, zmień wartość, aby była obsługiwana. Spakuj ponownie IPA: ```bash cd unzipped zip -r ../no-min-version.ipa * ``` Następnie zainstaluj IPA na przykład za pomocą: ```bash ideviceinstaller -i no-min-version.ipa -w ``` Zauważ, że możesz potrzebować **AppSync Unified tweak** z Cydii, aby zapobiec błędom `invalid signature`. Po zainstalowaniu możesz użyć **Iridium tweak** z Cydii, aby uzyskać odszyfrowany plik IPA. ### Patch entitlements & re-sign Aby ponownie podpisać aplikację z uprawnieniem `get-task-allow`, dostępnych jest kilka narzędzi, takich jak `app-signer`, `codesign` i `iResign`. `app-signer` ma bardzo przyjazny interfejs, który pozwala bardzo łatwo podpisać plik IPA, wskazując plik IPA do ponownego podpisania, aby **ustawić `get-task-allow`** oraz certyfikat i profil provisioningowy do użycia. Jeśli chodzi o certyfikaty i profile podpisywania, Apple oferuje **darmowe profile podpisywania dla deweloperów** dla wszystkich kont przez Xcode. Po prostu stwórz aplikację i skonfiguruj jeden. Następnie skonfiguruj **iPhone, aby ufał aplikacjom dewelopera**, przechodząc do `Ustawienia` → `Prywatność i bezpieczeństwo`, a następnie kliknij na `Tryb dewelopera`. Z ponownie podpisanym plikiem IPA nadszedł czas, aby zainstalować go na urządzeniu, aby przeprowadzić pentesting: ```bash ideviceinstaller -i resigned.ipa -w ``` --- ### Włącz tryb dewelopera (iOS 16+) Od iOS 16 Apple wprowadziło **Tryb Dewelopera**: każdy binarny plik, który zawiera `get_task_allow` *lub* jest podpisany certyfikatem deweloperskim, odmówi uruchomienia, dopóki Tryb Dewelopera nie zostanie włączony na urządzeniu. Nie będziesz również mógł dołączyć Frida/LLDB, chyba że ten flag jest włączony. 1. Zainstaluj lub wgraj **dowolny** podpisany przez dewelopera plik IPA na telefon. 2. Przejdź do **Ustawienia → Prywatność i bezpieczeństwo → Tryb dewelopera** i włącz go. 3. Urządzenie zrestartuje się; po wprowadzeniu kodu dostępu zostaniesz poproszony o **Włączenie** Trybu Dewelopera. Tryb Dewelopera pozostaje aktywny, dopóki go nie wyłączysz lub nie wyczyścisz telefonu, więc ten krok należy wykonać tylko raz na urządzenie. [Dokumentacja Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) wyjaśnia implikacje bezpieczeństwa. ### Nowoczesne opcje sideloadingu Obecnie istnieje kilka dojrzałych sposobów na sideloading i utrzymywanie podpisanych plików IPA na bieżąco bez jailbreaka: | Narzędzie | Wymagania | Mocne strony | Ograniczenia | |-----------|-----------|--------------|--------------| | **AltStore 2 / SideStore** | macOS/Windows/Linux jako towarzysz, który podpisuje IPA co 7 dni za pomocą darmowego profilu dewelopera | Automatyczne przeładowanie przez Wi-Fi, działa do iOS 17 | Wymaga komputera w tej samej sieci, limit 3 aplikacji narzucony przez Apple | | **TrollStore 1/2** | Urządzenie na iOS 14 – 15.4.1 podatne na błąd CoreTrust | *Permanentne* podpisywanie (brak limitu 7 dni); nie wymaga komputera po zainstalowaniu | Nieobsługiwane na iOS 15.5+ (błąd naprawiony) | Dla rutynowych testów pentestingowych na aktualnych wersjach iOS Alt/Side-Store są zazwyczaj najbardziej praktycznym wyborem. ### Hooking / dynamiczna instrumentacja Możesz podłączyć swoją aplikację dokładnie tak, jak na urządzeniu z jailbreakiem, gdy jest podpisana z `get_task_allow` **i** Tryb Dewelopera jest włączony: ```bash # Spawn & attach with objection objection -g "com.example.target" explore # Or plain Frida frida -U -f com.example.target -l my_script.js --no-pause ``` Najnowsze wydania Frida (>=16) automatycznie obsługują uwierzytelnianie wskaźników i inne środki zaradcze iOS 17, więc większość istniejących skryptów działa od razu. ### Zautomatyzowana analiza dynamiczna z MobSF (bez jailbreak) [MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) może instrumentować IPA podpisane przez dewelopera na prawdziwym urządzeniu, używając tej samej techniki (`get_task_allow`) i zapewnia interfejs webowy z przeglądarką systemu plików, przechwytywaniem ruchu i konsolą Frida【†L2-L3】. Najszybszym sposobem jest uruchomienie MobSF w Dockerze, a następnie podłączenie iPhone'a przez USB: ```bash docker pull opensecurity/mobile-security-framework-mobsf:latest docker run -p 8000:8000 --privileged \ -v /var/run/usbmuxd:/var/run/usbmuxd \ opensecurity/mobile-security-framework-mobsf:latest # Browse to http://127.0.0.1:8000 and upload your resigned IPA ``` MobSF automatycznie wdroży binarny plik, włączy serwer Frida w sandboxie aplikacji i wygeneruje interaktywny raport. ### iOS 17 i uwagi dotyczące trybu blokady * **Tryb blokady** (Ustawienia → Prywatność i bezpieczeństwo) blokuje dynamiczny linker przed ładowaniem niesygnowanych lub zewnętrznie sygnowanych bibliotek dynamicznych. Podczas testowania urządzeń, które mogą mieć włączony ten tryb, upewnij się, że jest **wyłączony**, inaczej sesje Frida/objection zakończą się natychmiast. * Uwierzytelnianie wskaźników (PAC) jest egzekwowane w całym systemie na urządzeniach A12 i nowszych. Frida ≥16 transparentnie obsługuje usuwanie PAC — wystarczy, że będziesz na bieżąco aktualizować zarówno *frida-server*, jak i zestaw narzędzi Python/CLI, gdy pojawi się nowa główna wersja iOS. ## Odniesienia - [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) - Dokumentacja dewelopera Apple – Włączanie trybu dewelopera na urządzeniu: - Mobile Security Framework (MobSF): {{#include ../../banners/hacktricks-training.md}}