iOS Toetsomgewing

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Apple Developer Program

A provisioning identity is ’n versameling publieke en private sleutels wat gekoppel is aan ’n Apple developer account. Om sign apps te kan doen, moet jy 99$/year betaal om by die Apple Developer Program te registreer en jou provisioning identity te kry. Sonder dit sal jy nie in staat wees om toepassings vanaf die source code op ’n fisiese toestel te laat loop nie. ’n Ander opsie is om ’n jailbroken device te gebruik.

Vanaf Xcode 7.2 het Apple ’n opsie verskaf om ’n free iOS development provisioning profile te skep wat toelaat dat jy jou toepassing op ’n regte iPhone kan skryf en toets. Gaan na Xcode –> Preferences –> Accounts –> + (Add new Appli ID you your credentials) –> Click on the Apple ID created –> Manage Certificates –> + (Apple Development) –> Done
__Then, in order to run your application in your iPhone you need first to indicate the iPhone to trust the computer. Then, you can try to run the application in the mobile from Xcode, but and error will appear. So go to Settings –> General –> Profiles and Device Management –> Select the untrusted profile and click “Trust”.

On iOS 16+, Developer Mode must also be enabled on the device before locally installed development-signed applications (or apps re-signed with get-task-allow) will run. This option only appears after pairing the device with Xcode or after installing a development-signed app once. The flow is: pair the device, trigger an install from Xcode, then enable Settings –> Privacy & Security –> Developer Mode, reboot, and confirm the prompt after unlock.

Let wel dat toepassings wat deur dieselfde signing certificate onderteken is, hulpbronne op ’n veilige wyse kan deel, soos keychain-items.

Die provisioning profiles word op die telefoon gestoor in /Library/MobileDevice/ProvisioningProfiles

Modern host-side device tooling

Vir huidige iOS-toetsing is die host tooling toenemend opgesplit tussen:

  • xcrun simctl vir simulator management
  • xcrun xctrace list devices om simulators en fisiese toestelle te enumereer
  • xcrun devicectl (Xcode 15+) om met gepaarde fisiese toestelle vanaf die command line te interakteer

Useful examples:

# List booted simulators
xcrun simctl list | grep Booted

# List all visible devices/simulators
xcrun xctrace list devices

# List paired physical devices (Xcode 15+)
xcrun devicectl list devices

devicectl is veral nuttig in automation pipelines waar jy ’n toetsbou moet installeer of lanseer sonder om Xcode oop te maak:

xcrun devicectl device install app --device <udid> <path_to_app_or_ipa>
xcrun devicectl device launch app --terminate-existing --device <udid> <bundle_id>

Keep Xcode updated when testing iOS 17+ devices. Apple moved developer services to the CoreDevice stack and also changed how Developer Disk Images are handled, so outdated host tooling frequently fails with pairing, image-mounting, or app-launch errors.

Simulator

Tip

Let wel dat ’n simulator nie dieselfde is as ’n emulator nie. Die simulator simuleer net die gedrag van die toestel en funksies, maar gebruik dit nie regtig nie.

Simulator

Die eerste ding wat jy moet weet is dat om ’n pentest binne ’n simulator uit te voer baie meer beperk sal wees as om dit op ’n jailbroken device te doen.

All the tools required to build and support an iOS app are only officially supported on Mac OS.
Apple’s de facto tool for creating/debugging/instrumenting iOS applications is Xcode. It can be used to download other components such as simulators and different SDK versions required to build and test your app.
It’s highly recommended to download Xcode from the official app store. Other versions may be carrying malware.

The simulator files can be found in /Users/<username>/Library/Developer/CoreSimulator/Devices

Die simulator is steeds baie nuttig om vinnig te toets vir filesystem artifacts, NSUserDefaults, plist parsing, custom URL schemes, en basic runtime instrumentation. Hou egter in gedagte dat dit nie verskeie fisiese-toestel-sekuriteitseienskappe emuleer wat dikwels relevant is tydens ’n pentest nie, soos die Secure Enclave, baseband, sekere keychain access-control behaviours, realistiese biometric flows, en jailbreak-spesifieke uitvoeringsomstandighede.

To open the simulator, run Xcode, then press in the Xcode tab –> Open Developer tools –> Simulator
__In die volgende beeld, deur op “iPod touch […]” te klik kan jy ’n ander device kies om in te toets:

Toepassings in die Simulator

Inside /Users/<username>/Library/Developer/CoreSimulator/Devices you may find all the installed simulators. If you want to access the files of an application created inside one of the emulators it might be difficult to know in which one the app is installed. A quick way to find the correct UID is to execute the app in the simulator and execute:

xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)

Sodra jy die UID ken, kan die apps wat daarin geïnstalleer is gevind word in /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application

Egter, verrassend genoeg sal jy die toepassing nie hier vind nie. Jy moet toegang kry tot /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/

En in hierdie vouer kan jy die pakket van die toepassing vind.

Emulator

Corellium is die enigste publiek beskikbare iOS emulator. Dit is ’n enterprise SaaS-oplossing met ’n per-gebruiker lisensiemodel en bied geen proeflisensie nie.

Geen Jailbreak nodig

Kyk na hierdie bloginskrywing oor hoe om ’n iOS-toepassing te pentest in ’n non jailbroken device:

iOS Pentesting withuot Jailbreak

Jailbreaking

Apple vereis streng dat die kode wat op die iPhone loop gespesifiseer moet wees deur ’n sertifikaat uitgereik deur Apple. Jailbreaking is die proses om aktief sulke beperkings en ander sekuriteitskontroles wat deur die OS geplaas is, te omseil. Daarom, sodra die toestel gejailbreak is, word die integriteitskontrole wat verantwoordelik is vir die nagaan van geïnstalleerde apps gepatch sodat dit omseil word.

Tip

Anders as Android, you cannot switch to “Developer Mode” in iOS om unsigned/untrusted code op die toestel te laat loop.

Android Rooting vs. iOS Jailbreaking

Alhoewel dit dikwels vergelyk word, is rooting op Android en jailbreaking op iOS fundamenteel verskillende prosesse. Rooting van Android-toestelle kan insluit die installering van die su binary of die vervanging van die stelsel met ’n rooted custom ROM, wat nie noodwendig eksploite vereis nie as die bootloader ontsluit is. Flashing custom ROMs vervang die toestel se OS nadat die bootloader ontsluit is, wat soms ’n eksploit vereis.

In teenstelling daarmee kan iOS-toestelle nie custom ROMs flash nie weens die bootloader se beperking om slegs Apple-gesigneerde images te boot. Jailbreaking iOS poog om Apple se code signing-beskerming te omseil sodat unsigned code uitgevoer kan word, ’n proses wat bemoeilik word deur Apple se konstante sekuriteitsverbeterings.

Jailbreaking-uitdagings

Jailbreaking van iOS is al hoe moeiliker aangesien Apple kwesbaarhede vinnig oppas. Downgrading iOS is slegs moontlik vir ’n beperkte tyd na ’n vrystelling, wat jailbreaking tydgevoelig maak. Toestelle wat vir sekuriteitstoetse gebruik word, moet nie opgedateer word nie tensy her-jailbreaking gewaarborg kan word.

iOS-opdaterings word beheer deur ’n challenge-response-meganisme (SHSH blobs), wat installasie slegs toelaat vir Apple-gesigneerde response. Hierdie meganisme, bekend as ’n “signing window”, beperk die vermoë om OTA firmware-pakkette op te slaan en later te gebruik. Die IPSW Downloads website is ’n hulpbron om die huidige signing windows na te gaan.

Jailbreak-variante

  • Tethered jailbreaks vereis ’n rekenaarverbinding vir elke herbegin.
  • Semi-tethered jailbreaks laat toe om te boos in ’n nie-jailbroken toestand sonder ’n rekenaar.
  • Semi-untethered jailbreaks vereis handmatige her-jailbreaking sonder ’n rekenaar.
  • Untethered jailbreaks bied ’n permanente jailbreak-oplossing sonder die behoefte aan her-aansoek.

Jailbreaking-instrumente en hulpbronne

Jailbreaking-instrumente verskil volgens iOS-weergawe en toestel. Hulpbronne soos Can I Jailbreak?, The iPhone Wiki en Reddit Jailbreak verskaf opgedateerde inligting. Voorbeelde sluit in:

  • Checkra1n vir ouer A7-A11/iOS 12-14 era navorsingstoestelle.
  • Palera1n vir checkm8-geskikte toestelle (A8-A11) op iOS/iPadOS 15+.
  • Dopamine vir baie arm64/arm64e-toestelle op iOS 15/16 met ’n moderne rootless jailbreak.
  • Unc0ver bly relevant hoofsaaklik vir ouer iOS-weergawes tot 14.8.

Die modifisering van jou toestel dra risiko’s, en jailbreaking moet met omsigtigheid benader word.

Rootless jailbreaks

Moderne iOS 15+ jailbreaks is algemeen rootless eerder as rootful. Vanuit ’n toetsersperspektief is dit belangrik omdat baie ouer gidse steeds aanvaar dat jailbreak-lêers direk onder / of /Library/... woon, wat op baie huidige opstellings nie meer waar is nie.

  • Rootless jailbreaks vermy die direkte wysiging van die sealed system volume.
  • Op palera1n word jailbreak-lêers gewoonlik gestoor onder ’n gerandomiseerde pad in /private/preboot/... en blootgestel via die stabiele symlink /var/jb.
  • Tweaks, launch daemons, en helper binaries kan dus onder /var/jb bestaan in plaas van die klassieke rootful liggings.

Dit het ’n direkte impak op environment validation, Frida setup, en jailbreak detection bypass:

  • Wanneer jy nagaan of jou tooling behoorlik geïnstalleer is, inspekteer beide die klassieke paaie en /var/jb.
  • Wanneer jy die jailbreak-detekseringslogika in ’n app ondersoek, onthou dat moderne kontroles dikwels soek na rootless artefakte en symlinks benewens klassiese aanduiders soos Cydia.app.
  • As ’n derdeparty-skrywe of tweak ’n rootful filesystem-layout veronderstel, kan dit stilweg op ’n rootless toestel misluk.

Jailbreaking-voordele en -risiko’s

Jailbreaking verwyder OS-opgelegde sandboxing, wat apps toelaat om toegang tot die hele filesystem te kry. Hierdie vryheid stel die installering van ongekeurde apps en toegang tot meer APIs in staat. Vir gewone gebruikers word jailbreaking egter nie aanbeveel nie weens moontlike sekuriteitsrisiko’s en toestelinstabiliteit.

After Jailbreaking

iOS Basic Testing Operations

Jailbreak Detection

Verskeie toepassings sal probeer om te bepaal of die mobiele toestel gejailbreak is en in daardie geval sal die toepassing nie loop nie

  • Na jailbreaking word gewoonlik sekere files en folders geïnstalleer, hierdie kan gesoek word om te bepaal of die toestel gejailbreak is.
  • In moderne rootless jailbreaks mag daardie lêers onder /var/jb verskyn of deur symlinks na /private/preboot/... oplos in plaas van slegs in klassieke rootful liggings.
  • Op ’n gejailbreakte toestel kry toepassings lees/skryf toegang tot nuwe lêers buite die sandbox.
  • Sommige API calls sal anders optree.
  • Die teenwoordigheid van die OpenSSH diens.
  • Die oproep na /bin/sh sal 1 teruggee in plaas van 0.

More information about how to detect jailbreaking here.

Jy kan probeer om hierdie deteksies te vermy deur objection’s ios jailbreak disable te gebruik

Jailbreak Detection Bypass

  • Jy kan probeer om hierdie deteksies te vermy deur objection’s ios jailbreak disable te gebruik
  • Jy kan ook die instrument Liberty Lite (https://ryleyangus.com/repo/ ) installeer. Sodra die repo bygevoeg is, behoort die app in die ‘Search’ oortjie te verskyn

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks