iOS Testing Environment

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Apple Developer Program

Una provisioning identity è una collezione di chiavi pubbliche e private associate a un account Apple developer. Per poter firmare le app è necessario pagare 99$/year per registrarsi nell’Apple Developer Program e ottenere la provisioning identity. Senza questo non potrai eseguire applicazioni dal codice sorgente su un dispositivo fisico. Un’altra opzione per farlo è usare un jailbroken device.

A partire da Xcode 7.2 Apple ha fornito un’opzione per creare un free iOS development provisioning profile che permette di scrivere e testare la tua applicazione su un iPhone reale. Vai su Xcode –> Preferences –> Accounts –> + (Aggiungi un nuovo Apple ID con le tue credenziali) –> Click on the Apple ID created –> Manage Certificates –> + (Apple Development) –> Done
__Quindi, per eseguire la tua applicazione sul tuo iPhone devi prima indicare all’iPhone di fidarsi del computer. Poi puoi provare a eseguire l’applicazione sul dispositivo da Xcode, ma comparirà un errore. Quindi vai su Settings –> General –> Profiles and Device Management –> Seleziona il profilo non attendibile e clicca “Trust”.

Su iOS 16+, Developer Mode deve essere abilitato sul dispositivo prima che le applicazioni installate localmente con firma di sviluppo (o app rifirmate con get-task-allow) possano essere eseguite. Questa opzione appare solo dopo aver associato il dispositivo con Xcode o dopo aver installato una volta un’app firmata per sviluppo. Il flusso è: associa il dispositivo, avvia un’installazione da Xcode, poi abilita Settings –> Privacy & Security –> Developer Mode, riavvia e conferma il prompt dopo lo sblocco.

Nota che le applicazioni firmate con lo stesso certificato di firma possono condividere risorse in modo sicuro, come gli elementi del keychain.

I provisioning profiles sono memorizzati all’interno del telefono in /Library/MobileDevice/ProvisioningProfiles

Strumenti moderni lato host per dispositivi

Per il testing iOS attuale, il tooling lato host è sempre più diviso in:

  • xcrun simctl per la gestione dei simulatori
  • xcrun xctrace list devices per enumerare simulatori e dispositivi fisici
  • xcrun devicectl (Xcode 15+) per interagire con dispositivi fisici associati dalla riga di comando

Esempi utili:

# 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 è particolarmente utile nelle pipeline di automazione quando è necessario installare o avviare una build di test senza aprire Xcode:

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

Mantieni Xcode aggiornato quando testi dispositivi iOS 17+. Apple ha spostato i servizi per sviluppatori nello stack CoreDevice e ha anche cambiato il modo in cui vengono gestiti i Developer Disk Images, quindi strumenti host obsoleti spesso falliscono con errori di pairing, image-mounting, o app-launch.

Simulatore

Tip

Nota che un simulatore non è la stessa cosa di un emulatore. Il simulatore semplicemente simula il comportamento del dispositivo e le sue funzioni ma non le utilizza realmente.

Simulatore

La prima cosa da sapere è che eseguire un pentest all’interno di un simulatore sarà molto più limitato rispetto a farlo su un dispositivo jailbroken.

Tutti gli strumenti necessari per costruire e supportare un’app iOS sono ufficialmente supportati solo su Mac OS.
Lo strumento de facto di Apple per creare/debug/strumentare applicazioni iOS è Xcode. Può essere usato per scaricare altri componenti come simulators e diverse SDK versions richieste per build e test della tua app.
È altamente raccomandato download Xcode dal official app store. Altre versioni potrebbero contenere malware.

I file del simulatore si trovano in /Users/<username>/Library/Developer/CoreSimulator/Devices

Il simulatore è comunque molto utile per testare rapidamente filesystem artifacts, NSUserDefaults, plist parsing, custom URL schemes, e basic runtime instrumentation. Tuttavia, tieni presente che non emula diverse proprietà di sicurezza del dispositivo fisico che sono spesso rilevanti durante un pentest, come la Secure Enclave, il baseband, certi keychain access-control behaviours, flussi biometrici realistici e condizioni di esecuzione specifiche per il jailbreak.

Per aprire il simulatore, avvia Xcode, poi premi nella scheda Xcode –> Open Developer tools –> Simulator
__Nell’immagine seguente cliccando in “iPod touch […]” puoi selezionare un altro dispositivo su cui testare:

Applicazioni nel simulatore

All’interno di /Users/<username>/Library/Developer/CoreSimulator/Devices puoi trovare tutti i installed simulators. Se vuoi accedere ai file di un’applicazione creata all’interno di uno degli emulatori potrebbe essere difficile sapere in which one the app is installed. Un modo rapido per find the correct UID è eseguire l’app nel simulatore ed eseguire:

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

Una volta che conosci l’UID, le app installate al suo interno si possono trovare in /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application

Tuttavia, sorprendentemente non troverai l’applicazione qui. Devi accedere a /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/

E in questa cartella puoi trovare il pacchetto dell’applicazione.

Emulatore

Corellium è l’unico emulatore iOS disponibile pubblicamente. È una soluzione enterprise SaaS con un modello di licenza per utente e non offre alcuna licenza di prova.

Nessun Jailbreak necessario

Leggi questo post del blog su come eseguire un pentest di un’app iOS su un dispositivo non jailbroken:

iOS Pentesting withuot Jailbreak

Jailbreaking

Apple richiede rigorosamente che il codice in esecuzione sull’iPhone sia firmato da un certificato rilasciato da Apple. Il Jailbreaking è il processo di attiva circumvenzione di tali restrizioni e di altri controlli di sicurezza imposti dal sistema operativo. Pertanto, una volta che il dispositivo è jailbroken, il controllo di integrità responsabile della verifica delle app installate viene patchato in modo che venga aggirato.

Tip

A differenza di Android, non puoi attivare la “Developer Mode” in iOS per eseguire codice unsigned/untrusted sul dispositivo.

Android Rooting vs. iOS Jailbreaking

Sebbene spesso vengano paragonati, il rooting su Android e il jailbreaking su iOS sono processi fondamentalmente diversi. Il rooting di dispositivi Android può comportare l’installazione del binario su o la sostituzione del sistema con una custom ROM rooted, cosa che non richiede necessariamente exploit se il bootloader è sbloccato. Il flashing di custom ROM sostituisce il sistema operativo del dispositivo dopo lo sblocco del bootloader, talvolta richiedendo un exploit.

Al contrario, i dispositivi iOS non possono flashare custom ROM a causa della restrizione del bootloader che permette di avviare solo immagini firmate da Apple. Il jailbreaking iOS mira a bypassare le protezioni di code signing di Apple per eseguire codice unsigned, un processo complicato dai continui miglioramenti della sicurezza di Apple.

Jailbreaking Challenges

Il jailbreaking di iOS è sempre più difficile poiché Apple corregge le vulnerabilità rapidamente. Il downgrading di iOS è possibile solo per un periodo limitato dopo una release, rendendo il jailbreaking una questione sensibile al tempo. I dispositivi usati per i test di sicurezza non dovrebbero essere aggiornati a meno che non sia garantita la possibilità di re-jailbreak.

Gli aggiornamenti iOS sono controllati da un meccanismo challenge-response (SHSH blobs), che consente l’installazione solo per risposte firmate da Apple. Questo meccanismo, noto come “signing window”, limita la possibilità di conservare e poi riutilizzare pacchetti firmware OTA. Il sito IPSW Downloads è una risorsa per verificare le signing window correnti.

Jailbreak Varieties

  • Tethered jailbreaks richiedono una connessione al computer per ogni riavvio.
  • Semi-tethered jailbreaks consentono l’avvio in modalità non jailbroken senza un computer.
  • Semi-untethered jailbreaks richiedono un re-jailbreak manuale senza bisogno di un computer.
  • Untethered jailbreaks offrono una soluzione permanente senza la necessità di riapplicazione.

Jailbreaking Tools and Resources

Gli strumenti per il jailbreaking variano in base alla versione di iOS e al dispositivo. Risorse come Can I Jailbreak?, The iPhone Wiki e Reddit Jailbreak forniscono informazioni aggiornate. Esempi includono:

  • Checkra1n per dispositivi di ricerca più vecchi A7-A11/iOS 12-14.
  • Palera1n per dispositivi compatibili con checkm8 (A8-A11) su iOS/iPadOS 15+.
  • Dopamine per molti dispositivi arm64/arm64e su iOS 15/16 usando un moderno rootless jailbreak.
  • Unc0ver rimane rilevante principalmente per versioni iOS più vecchie fino alla 14.8.

Modificare il dispositivo comporta rischi, e il jailbreaking dovrebbe essere affrontato con cautela.

Rootless jailbreaks

Le moderne jailbreak per iOS 15+ sono comunemente rootless invece che rootful. Dal punto di vista del tester, questo è importante perché molte guide più vecchie presumono ancora che i file del jailbreak risiedano direttamente sotto / o /Library/..., cosa che non è più vera in molte configurazioni attuali.

  • I rootless jailbreaks evitano di modificare direttamente il sealed system volume.
  • Su palera1n, i file del jailbreak sono tipicamente memorizzati sotto un percorso randomizzato in /private/preboot/... ed esposti tramite lo symlink stabile /var/jb.
  • Tweaks, launch daemons e binary helper potrebbero quindi esistere sotto /var/jb invece che nelle posizioni legacy rootful.

Questo ha un impatto diretto su environment validation, Frida setup, e jailbreak detection bypass:

  • Quando verifichi che i tuoi tool siano stati installati correttamente, ispeziona sia i percorsi legacy che /var/jb.
  • Quando rivedi la logica di jailbreak detection in un’app, ricorda che i controlli moderni spesso cercano artefatti rootless e symlink oltre ai classici indicatori come Cydia.app.
  • Se uno script o tweak di terze parti presume una disposizione del filesystem rootful, potrebbe fallire silenziosamente su un dispositivo rootless.

Jailbreaking Benefits and Risks

Il jailbreaking rimuove il sandboxing imposto dal sistema operativo, consentendo alle app di accedere all’intero filesystem. Questa libertà permette l’installazione di app non approvate e l’accesso a più API. Tuttavia, per gli utenti normali, il jailbreaking non è raccomandato a causa dei potenziali rischi per la sicurezza e dell’instabilità del dispositivo.

Dopo il Jailbreaking

iOS Basic Testing Operations

Rilevamento del Jailbreak

Diverse applicazioni cercheranno di rilevare se il dispositivo è jailbroken e in tal caso l’applicazione non verrà eseguita

  • Dopo il jailbreaking su iOS vengono solitamente installati file e cartelle; questi possono essere cercati per determinare se il dispositivo è jailbroken.
  • Nei moderni jailbreak rootless, quei file possono apparire sotto /var/jb o risolversi tramite symlink in /private/preboot/... invece che solo nelle classiche posizioni rootful.
  • Su un dispositivo jailbroken le applicazioni ottengono accesso in lettura/scrittura a nuovi file al di fuori della sandbox
  • Alcune API e relative chiamate si comporteranno diversamente
  • La presenza del servizio OpenSSH
  • Eseguire /bin/sh restituirà 1 invece di 0

Maggiori informazioni su come rilevare il jailbreaking qui.

Puoi provare a evitare queste rilevazioni usando objection’s ios jailbreak disable

Bypass del Rilevamento del Jailbreak

  • Puoi provare a evitare queste rilevazioni usando objection’s ios jailbreak disable
  • Puoi anche installare lo strumento Liberty Lite (https://ryleyangus.com/repo/). Una volta aggiunto il repo, l’app dovrebbe apparire nella scheda ‘Search’

Riferimenti

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks