iOS Pentesting without Jailbreak

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Glavna ideja

Applications signed with the entitlement get_task_allow allow third party applications to run a function called task_for_pid() with the process ID of the initial application as argument in order to get the task port over it (be able to control it and access it’s memory).

Međutim, nije dovoljno samo preuzeti IPA, ponovo ga potpisati sa tim entitlement-om i vratiti na uređaj. To je zbog FairPlay zaštite. Kada se potpis aplikacije promeni, DRM (Digital Rights Management) ključ se poništava i aplikacija neće raditi.

Na starom jailbroken uređaju moguće je instalirati IPA, decrypt it using your favourite tool (such as Iridium or frida-ios-dump), i potom ga skinuti sa uređaja. Ipak, ako je moguće, preporučuje se koristiti klijenta za dekriptovani IPA.

Obtain decrypted IPA

Get it from Apple

  1. Instalirajte aplikaciju koju pentestirate na iPhone
  2. Install and launch Apple Configurator inside your macos
  3. Open Terminal on your Mac, and cd to /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. The IPA will appear in this folder later.
  4. Trebalo bi da vidite svoj iOS uređaj. Double-click on it, and then click Add + → Apps from the top menu bar.
  5. After clicking Add, Configurator will download the IPA from Apple, and attempt to push it to your device. If you followed my recommendation earlier and installed the IPA already, a prompt asking you to reinstall the app will appear.
  6. The IPA should be downloaded inside /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileAppsfrom where you can grab it

Check https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed for more detailed information about this process.

Dekriptovanje aplikacije

Da bismo dekriptovali IPA, instaliraćemo ga. Međutim, ako imate stari jailbroken iPhone, potencijalno njegova verzija možda neće biti podržana od strane aplikacije, jer aplikacije obično podržavaju samo najnovije verzije.

Dakle, da biste ga instalirali, jednostavno raspakujte IPA:

unzip redacted.ipa -d unzipped

Proverite Info.plist za minimalnu podržanu verziju; ako je vaš uređaj stariji, promenite vrednost da bi bio podržan.

Zip back the IPA:

cd unzipped
zip -r ../no-min-version.ipa *

Zatim instalirajte IPA, na primer koristeći:

ideviceinstaller -i no-min-version.ipa -w

Note da vam može biti potreban AppSync Unified tweak iz Cydia kako biste sprečili bilo kakve greške invalid signature.

Kada je instaliran, možete koristiti Iridium tweak iz Cydia da biste dobili dekriptovani IPA.

Ispravljanje entitlements i ponovno potpisivanje

Da biste ponovo potpisali aplikaciju sa get-task-allow entitlement-om, dostupno je nekoliko alata kao što su app-signer, codesign i iResign. app-signer ima vrlo korisnički prijateljski interfejs koji omogućava vrlo lako re-signovanje IPA fajla — označiti IPA koju želite ponovo potpisati, postaviti joj get-taks-allow i izabrati sertifikat i provisioning profile koji će se koristiti.

Što se tiče sertifikata i profila za potpisivanje, Apple nudi besplatne developerske profile za potpisivanje za sve naloge preko Xcode-a. Jednostavno kreirajte aplikaciju i konfigurišite jedan. Zatim podesite iPhone da veruje developerskim aplikacijama tako što ćete otići u SettingsPrivacy & Security i kliknuti na Developer Mode.

Sa ponovo potpisanim IPA, vreme je da ga instalirate na uređaj kako biste ga pentestovali:

ideviceinstaller -i resigned.ipa -w

IPA patching + DYLIB injection + free Apple ID re-sign (CLI)

Ako već imate decrypted IPA, možete ga patch-ovati da učita custom DYLIB, dodati entitlements (npr. network) i re-sign-ovati ga bez Xcode koristeći besplatan Apple ID. Ovo je korisno za in-app instrumentation na non-jailbroken uređajima.

Tipičan tok:

# Build the implant (macOS for build step)
make

# Patch the IPA to inject the DYLIB
python3 tools/patcher.py patch --ipa MyApp.ipa --dylib libShell.dylib
# -> MyApp_patched.ipa

# Patch + sign + install in one step (free Apple ID)
python3 tools/patcher.py full \
--ipa MyApp.ipa \
--dylib libShell.dylib \
--apple-id user@example.com \
--install \
--udid <device-udid>

Napomene:

  • Besplatno potpisivanje Apple ID-jem obično ističe za 7 dana i ograničeno je na 3 App IDs/week i 10 sideloaded apps.
  • Alat može ponovo da potpiše cross-platform autentifikujući se kod Apple-a preko SRP i generišući besplatan dev certificate + provisioning profile. Apple-ovi anisette headers se obrađuju po platformi (macOS via AOSKit.framework, Linux via Anisette.py, Windows via an external anisette server).
  • Ovo ne zaobilazi sandbox. Injected code se izvršava unutar procesa aplikacije i može pristupiti samo sandbox-u aplikacije i keychain access groups.

Pristup injektovanom implantatu samo preko USB-a

Ako injektovani DYLIB izlaže lokalni TCP control channel, možete držati saobraćaj off Wi-Fi/cellular i proslediti ga preko USB-a:

# Forward device-local TCP port to host
iproxy 8080 8080

# Example client commands (host side)
python3 client.py "ls"
python3 client.py "pwd"
python3 client.py "scp -r Documents host:./downloads"

Ako implant uključuje keychain helpers, možete dump items dostupne toj aplikaciji:

python3 client.py "keychain dump"
python3 client.py "keychain dump --filter self"
python3 client.py "keychain dump --class generic"

Omogućavanje Developer Mode (iOS 16+)

Od kada je u iOS 16 Apple uveo Developer Mode: svaki binarni fajl koji sadrži get_task_allow ili je potpisan razvojnim sertifikatom neće se pokrenuti dok Developer Mode nije omogućen na uređaju. Takođe nećete moći da prikačite Frida/LLDB osim ako ova zastavica nije uključena.

  1. Instalirajte ili pošaljite bilo koji developer-potpisani IPA na telefon.
  2. Idite u Settings → Privacy & Security → Developer Mode i uključite ga.
  3. Uređaj će se restartovati; nakon unosa lozinke biće vam zatraženo da Turn On Developer Mode.

Developer Mode ostaje aktivan dok ga ne onemogućite ili obrišete telefon, tako da ovu radnju treba izvršiti samo jednom po uređaju. Apple documentation objašnjava bezbednosne implikacije.

Moderne opcije sideloadinga

Sada postoji nekoliko zrelih načina da se sideloaduju i održavaju re-signovane IPA-ove ažurnim bez jailbreak-a:

ToolRequirementsStrengthsLimitations
AltStore 2 / SideStoremacOS/Windows/Linux companion that re-signs the IPA every 7 days with a free dev profileAutomatic reload over Wi-Fi, works up to iOS 17Needs computer on the same network, 3-app limit imposed by Apple
TrollStore 1/2Device on iOS 14 – 15.4.1 vulnerable to the CoreTrust bugPermanent signing (no 7-day limit); no computer required once installedNot supported on iOS 15.5+ (bug patched)

Za rutinske pentests na aktuelnim iOS verzijama Alt/Side-Store obično predstavljaju najpraktičniji izbor.

Hooking / dynamic instrumentation

Možete hook-ovati svoju aplikaciju tačno kao na jailbroken uređaju kada je potpisana sa get_task_allow i Developer Mode uključen:

# 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

Nedavna Frida izdanja (>=16) automatski rešavaju pointer authentication i druge iOS 17 mitigacije, tako da većina postojećih skripti radi bez dodatnih izmena.

Frida Gadget injection u non-jailbroken IPAs (listen mode)

Ako možete modify and re-sign an IPA, možete embed Frida Gadget i patch the Mach-O da učita preko @rpath pri pokretanju. Ovo omogućava Frida/Objection bez jailbreak-a (uređaj mora prihvatiti re-signed IPA).

Praktičan workflow je da koristite GadgetInjector (Python alat) da inject-ujete FridaGadget.dylib i generišete listen-mode konfiguraciju:

python3 gadget_injector.py MyApp.ipa
# Output: MyApp-frida-listen.ipa

Ograničenja ponovnog potpisivanja (važno za non-jailbroken installs):

  • Potpišite all embedded dylibs sa istim Team ID.
  • Ne dodavati dodatna entitlements u FridaGadget.dylib.

Nakon ponovnog potpisivanja i instalacije IPA fajla, attach in listen mode:

# (Optional) start the app paused
xcrun devicectl device process launch \
--device <UDID> \
--start-stopped <bundle-id>

# Forward Frida listen port over USB (default 27042)
pymobiledevice3 usbmux forward 27042 27042

# Objection
objection -g <bundle-id> explore

# Or Frida CLI
frida -H 127.0.0.1:27042 -n MyApp

Automatizovana dinamička analiza sa MobSF (no jailbreak)

MobSF može instrumentisati dev-signed IPA na stvarnom uređaju koristeći istu tehniku (get_task_allow) i pruža web UI sa filesystem browser, traffic capture i Frida console【】. Najbrži način je da pokrenete MobSF u Docker i zatim priključite iPhone putem USB-a:

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 će automatski postaviti binarni fajl, omogućiti Frida server unutar sandbox-a aplikacije i generisati interaktivni izveštaj.

iOS 17 & Lockdown Mode napomene

  • Lockdown Mode (Settings → Privacy & Security) blokira dinamički linker da učitava nepotpisane ili spolja potpisane dinamičke biblioteke. Kada testirate uređaje koji mogu imati ovaj režim uključen, uverite se da je onemogućen ili će vaše Frida/objection sesije biti odmah prekinute.
  • Pointer Authentication (PAC) se sprovodi na nivou sistema na uređajima A12+. Frida ≥16 transparentno rešava PAC stripping — samo držite i frida-server i Python/CLI toolchain ažurnim kada izađe nova glavna verzija iOS-a.

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks