iOS Pentesting without Jailbreak

Reading time: 7 minutes

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

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 z Apple

  1. Zainstaluj aplikację do testowania na iPhonie.
  2. Zainstaluj i uruchom Apple Configurator 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 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 UstawieniaPrywatność 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 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 wyjaśnia implikacje bezpieczeństwa.

Nowoczesne opcje sideloadingu

Obecnie istnieje kilka dojrzałych sposobów na sideloading i utrzymywanie podpisanych IPA na bieżąco bez jailbreaka:

NarzędzieWymaganiaMocne stronyOgraniczenia
AltStore 2 / SideStoremacOS/Windows/Linux jako towarzysz, który podpisuje IPA co 7 dni za pomocą darmowego profilu deweloperaAutomatyczne przeładowanie przez Wi-Fi, działa do iOS 17Wymaga komputera w tej samej sieci, limit 3 aplikacji narzucony przez Apple
TrollStore 1/2Urządzenie na iOS 14 – 15.4.1 podatne na błąd CoreTrustPermanentne podpisywanie (brak limitu 7 dni); nie wymaga komputera po zainstalowaniuNieobsługiwane na iOS 15.5+ (błąd naprawiony)

Dla rutynowych pentestów 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 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【】. 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+. Frida ≥16 transparentnie obsługuje usuwanie PAC — wystarczy, że będziesz na bieżąco aktualizować zarówno frida-server, jak i narzędzia Python/CLI, gdy pojawi się nowa główna wersja iOS.

Odniesienia

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