iOS Pentesting senza Jailbreak

Reading time: 7 minutes

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

Idea principale

Le applicazioni firmate con l'entitlement get_task_allow consentono alle applicazioni di terze parti di eseguire una funzione chiamata task_for_pid() con l'ID del processo dell'applicazione iniziale come argomento per ottenere la porta del task (essere in grado di controllarlo e accedere alla sua memoria).

Tuttavia, non è così semplice come estrarre l'IPA, firmarlo nuovamente con l'entitlement e ricaricarlo sul tuo dispositivo. Questo a causa della protezione FairPlay. Quando la firma dell'app cambia, la chiave DRM (Digital Rights Management) è annullata e l'app non funzionerà.

Con un vecchio dispositivo jailbroken, è possibile installare l'IPA, decrittarlo utilizzando il tuo strumento preferito (come Iridium o frida-ios-dump) e estrarlo di nuovo dal dispositivo. Anche se, se possibile, è consigliato chiedere al cliente l'IPA decrittato.

Ottenere l'IPA decrittato

Ottienilo da Apple

  1. Installa l'app da pentest nell'iPhone
  2. Installa e avvia Apple Configurator sul tuo macos
  3. Apri Terminal sul tuo Mac e cd a /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. L'IPA apparirà in questa cartella più tardi.
  4. Dovresti vedere il tuo dispositivo iOS. Fai doppio clic su di esso, quindi clicca su Aggiungi + → App dalla barra dei menu in alto.
  5. Dopo aver cliccato su Aggiungi, Configurator scaricherà l'IPA da Apple e tenterà di inviarlo al tuo dispositivo. Se hai seguito la mia raccomandazione precedente e hai già installato l'IPA, apparirà un messaggio che ti chiede di reinstallare l'app.
  6. L'IPA dovrebbe essere scaricato all'interno di /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps da dove puoi prenderlo.

Controlla https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed per ulteriori informazioni dettagliate su questo processo.

Decrittazione dell'app

Per decrittare l'IPA, lo installeremo. Tuttavia, se hai un vecchio iPhone jailbroken, potenzialmente la sua versione non sarà supportata dall'applicazione poiché di solito le app supportano solo le ultime versioni.

Quindi, per installarlo, basta estrarre l'IPA:

bash
unzip redacted.ipa -d unzipped

Controlla il Info.plist per la versione minima supportata e se il tuo dispositivo è più vecchio di quella, modifica il valore affinché sia supportato.

Comprimi di nuovo l'IPA:

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

Quindi, installa l'IPA ad esempio con:

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

Nota che potresti aver bisogno del tweak AppSync Unified da Cydia per prevenire eventuali errori di invalid signature.

Una volta installato, puoi utilizzare il tweak Iridium da Cydia per ottenere l'IPA decrittografato.

Patch entitlements & re-sign

Per ri-firmare l'applicazione con il diritto get-task-allow, ci sono diversi strumenti disponibili come app-signer, codesign e iResign. app-signer ha un'interfaccia molto user-friendly che consente di ri-firmare facilmente un file IPA indicando l'IPA da ri-firmare, per mettere get-task-allow e il certificato e il profilo di provisioning da utilizzare.

Per quanto riguarda i certificati e i profili di firma, Apple offre profili di firma per sviluppatori gratuiti per tutti gli account tramite Xcode. Basta creare un'app e configurarne uno. Poi, configura l'iPhone per fidarsi delle app degli sviluppatori navigando su ImpostazioniPrivacy e Sicurezza, e clicca su Modalità Sviluppatore.

Con l'IPA ri-firmata, è tempo di installarla nel dispositivo per effettuare il pentesting:

bash
ideviceinstaller -i resigned.ipa -w

Abilitare la Modalità Sviluppatore (iOS 16+)

Dall'iOS 16 Apple ha introdotto la Modalità Sviluppatore: qualsiasi binario che porta get_task_allow o è firmato con un certificato di sviluppo rifiuterà di avviarsi fino a quando la Modalità Sviluppatore non è abilitata sul dispositivo. Non sarà inoltre possibile allegare Frida/LLDB a meno che questo flag non sia attivo.

  1. Installa o invia qualsiasi IPA firmata da uno sviluppatore al telefono.
  2. Naviga su Impostazioni → Privacy e Sicurezza → Modalità Sviluppatore e attivala.
  3. Il dispositivo si riavvierà; dopo aver inserito il codice di accesso ti verrà chiesto di Attivare la Modalità Sviluppatore.

La Modalità Sviluppatore rimane attiva fino a quando non la disabiliti o non ripristini il telefono, quindi questo passaggio deve essere eseguito solo una volta per dispositivo. La documentazione Apple spiega le implicazioni di sicurezza.

Opzioni moderne di sideloading

Ora ci sono diversi modi maturi per sideloadare e mantenere le IPA ri-firmate aggiornate senza un jailbreak:

StrumentoRequisitiPunti di forzaLimitazioni
AltStore 2 / SideStoreCompagno macOS/Windows/Linux che ri-firma l'IPA ogni 7 giorni con un profilo dev gratuitoRicarica automatica via Wi-Fi, funziona fino a iOS 17Necessita di un computer sulla stessa rete, limite di 3 app imposto da Apple
TrollStore 1/2Dispositivo su iOS 14 – 15.4.1 vulnerabile al bug CoreTrustFirma permanente (nessun limite di 7 giorni); nessun computer richiesto una volta installatoNon supportato su iOS 15.5+ (bug corretto)

Per i pentest di routine sulle versioni attuali di iOS, Alt/Side-Store sono solitamente la scelta più pratica.

Hooking / strumentazione dinamica

Puoi hookare la tua app esattamente come su un dispositivo jailbroken una volta che è firmata con get_task_allow e la Modalità Sviluppatore è attiva:

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

Recenti versioni di Frida (>=16) gestiscono automaticamente l'autenticazione dei puntatori e altre mitigazioni di iOS 17, quindi la maggior parte degli script esistenti funziona immediatamente.

Analisi dinamica automatizzata con MobSF (senza jailbreak)

MobSF può strumentare un IPA firmato da sviluppatore su un dispositivo reale utilizzando la stessa tecnica (get_task_allow) e fornisce un'interfaccia web con browser di filesystem, cattura del traffico e console Frida【】. Il modo più veloce è eseguire MobSF in Docker e poi collegare il tuo iPhone tramite 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 distribuirà automaticamente il binario, abiliterà un server Frida all'interno della sandbox dell'app e genererà un rapporto interattivo.

iOS 17 & avvertenze sulla modalità Lockdown

  • Modalità Lockdown (Impostazioni → Privacy e Sicurezza) blocca il linker dinamico dal caricare librerie dinamiche non firmate o firmate esternamente. Quando si testano dispositivi che potrebbero avere questa modalità abilitata, assicurati che sia disabilitata o le tue sessioni Frida/objection termineranno immediatamente.
  • L'Autenticazione dei Puntatori (PAC) è applicata a livello di sistema sui dispositivi A12+. Frida ≥16 gestisce in modo trasparente la rimozione del PAC: basta mantenere aggiornati sia frida-server che la toolchain Python/CLI quando viene rilasciata una nuova versione principale di iOS.

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