iOS Testing Environment
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Un provisioning identity è una raccolta di chiavi pubbliche e private associate a un account sviluppatore Apple. Per firmare le app è necessario pagare 99$/anno per registrarsi nel Apple Developer Program e ottenere la propria provisioning identity. Senza questo non sarà possibile eseguire applicazioni dal codice sorgente su un dispositivo fisico. Un'altra opzione è utilizzare un dispositivo jailbroken.
A partire da Xcode 7.2, Apple ha fornito un'opzione per creare un profilo di provisioning per lo sviluppo iOS gratuito che consente di scrivere e testare la propria applicazione su un iPhone reale. Vai su Xcode --> Preferences --> Accounts --> + (Aggiungi nuovo Apple ID con le tue credenziali) --> Clicca sull'Apple ID creato --> Manage Certificates --> + (Apple Development) --> Done __Poi, 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 mobile da Xcode, ma apparirà un errore. Quindi vai su Settings --> General --> Profiles and Device Management --> Seleziona il profilo non attendibile e clicca su "Trust".
Nota che le applicazioni firmate dallo stesso certificato di firma possono condividere risorse in modo sicuro, come gli elementi del portachiavi.
I profili di provisioning sono memorizzati all'interno del telefono in /Library/MobileDevice/ProvisioningProfiles
Nota che un simulatore non è la stessa cosa di un emulatore. Il simulatore simula solo il comportamento del dispositivo e le funzioni, ma non le utilizza effettivamente.
La prima cosa che devi 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 solo ufficialmente supportati su Mac OS. Lo strumento de facto di Apple per creare/debuggare/instrumentare applicazioni iOS è Xcode. Può essere utilizzato per scaricare altri componenti come simulatori e diverse versioni di SDK necessarie per costruire e testare la tua app. È altamente consigliato scaricare Xcode dall'app store ufficiale. Altre versioni potrebbero contenere malware.
I file del simulatore possono essere trovati in /Users/<username>/Library/Developer/CoreSimulator/Devices
Per aprire il simulatore, esegui Xcode, poi premi sulla scheda Xcode --> Open Developer tools --> Simulator __Nell'immagine seguente, cliccando su "iPod touch [...]" puoi selezionare un altro dispositivo da testare:
All'interno di /Users/<username>/Library/Developer/CoreSimulator/Devices
puoi trovare tutti i simulatori installati. Se vuoi accedere ai file di un'applicazione creata all'interno di uno degli emulatori, potrebbe essere difficile sapere in quale sia installata l'app. Un modo rapido per trovare il corretto UID è eseguire l'app nel simulatore ed eseguire:
Once you know the UID the apps installed within it can be found 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.
Corellium è l'unico emulatore iOS disponibile pubblicamente. È una soluzione SaaS aziendale con un modello di licenza per utente e non offre alcuna licenza di prova.
Controlla questo post del blog su come fare pentesting a un'applicazione iOS su un dispositivo non jailbroken: https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed
Apple richiede rigorosamente che il codice in esecuzione sull'iPhone sia firmato da un certificato emesso da Apple. Jailbreaking è il processo di elusione attiva 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 del controllo delle app installate è patchato, quindi è bypassato.
A differenza di Android, non puoi passare a "Modalità Sviluppatore" in iOS per eseguire codice non firmato/non attendibile sul dispositivo.
Sebbene spesso confrontati, il rooting su Android e il jailbreaking su iOS sono processi fondamentalmente diversi. Il rooting dei dispositivi Android può comportare l'installazione del binario su
o la sostituzione del sistema con un ROM personalizzato rootato, che non richiede necessariamente exploit se il bootloader è sbloccato. Flashing di ROM personalizzate sostituisce il sistema operativo del dispositivo dopo aver sbloccato il bootloader, a volte richiedendo un exploit.
Al contrario, i dispositivi iOS non possono flashare ROM personalizzate a causa della restrizione del bootloader di avviare solo immagini firmate da Apple. Il jailbreaking di iOS mira a eludere le protezioni di firma del codice di Apple per eseguire codice non firmato, un processo complicato dai continui miglioramenti della sicurezza di Apple.
Il jailbreaking di iOS è sempre più difficile poiché Apple patcha rapidamente le vulnerabilità. Il downgrade di iOS è possibile solo per un tempo limitato dopo un rilascio, rendendo il jailbreaking una questione sensibile al tempo. I dispositivi utilizzati per i test di sicurezza non dovrebbero essere aggiornati a meno che il re-jailbreaking non sia garantito.
Gli aggiornamenti di iOS sono controllati da un meccanismo di challenge-response (SHSH blobs), che consente l'installazione solo per risposte firmate da Apple. Questo meccanismo, noto come "finestra di firma", limita la possibilità di memorizzare e utilizzare successivamente pacchetti firmware OTA. Il sito web IPSW Downloads è una risorsa per controllare le attuali finestre di firma.
Jailbreak tethered richiede una connessione al computer per ogni riavvio.
Jailbreak semi-tethered consente di avviare in modalità non jailbroken senza un computer.
Jailbreak semi-untethered richiede un re-jailbreaking manuale senza necessità di un computer.
Jailbreak untethered offre una soluzione di jailbreak permanente senza la necessità di riapplicazione.
Gli strumenti di 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 con chip A7-A11.
Palera1n per dispositivi Checkm8 (A8-A11) su iOS 15.0-16.5.
Unc0ver per versioni di iOS fino a 14.8.
Modificare il tuo dispositivo comporta dei rischi e il jailbreaking dovrebbe essere affrontato con cautela.
Il jailbreaking rimuove il sandboxing imposto dal sistema operativo, consentendo alle app di accedere all'intero filesystem. Questa libertà consente 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.
Diverse applicazioni cercheranno di rilevare se il mobile è jailbroken e in tal caso l'applicazione non verrà eseguita
Dopo il jailbreaking, su iOS file e cartelle vengono solitamente installati, questi possono essere cercati per determinare se il dispositivo è jailbroken.
In un dispositivo jailbroken le applicazioni ottengono accesso in lettura/scrittura a nuovi file al di fuori del sandbox
Alcuni API call si comportano in modo diverso
La presenza del servizio OpenSSH
Chiamare /bin/sh
restituirà 1 invece di 0
Ulteriori informazioni su come rilevare il jailbreaking qui.
Puoi provare a evitare queste rilevazioni utilizzando objection's ios jailbreak disable
Puoi provare a evitare queste rilevazioni utilizzando objection's ios jailbreak disable
Potresti anche installare lo strumento Liberty Lite (https://ryleyangus.com/repo/). Una volta aggiunto il repo, l'app dovrebbe apparire nella scheda 'Cerca'
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)