hacktricks/mobile-pentesting/ios-pentesting/ios-testing-environment.md

11 KiB

iOS Testing Environment

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %} {% endhint %}

Apple Developer Program

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

Simulator

{% hint style="info" %} 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. {% endhint %}

Simulator

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 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:

Applicazioni nel Simulatore

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 veloce per trovare il corretto UID è eseguire l'app nel simulatore ed eseguire:

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

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.

Emulator

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

Jailbeaking

Apple richiede rigorosamente che il codice in esecuzione sull'iPhone sia firmato da un certificato rilasciato 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 della verifica delle app installate è patchato, quindi è bypassato.

{% hint style="info" %} A differenza di Android, non puoi passare a "Modalità Sviluppatore" in iOS per eseguire codice non firmato/non attendibile sul dispositivo. {% endhint %}

Android Rooting vs. iOS Jailbreaking

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.

Jailbreaking Challenges

Il jailbreaking di iOS è sempre più difficile poiché Apple patcha rapidamente le vulnerabilità. Il downgrade di iOS è possibile solo per un periodo 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 Varieties

  • 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.

Jailbreaking Tools and Resources

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.

Jailbreaking Benefits and Risks

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.

After Jailbreaking

{% content-ref url="basic-ios-testing-operations.md" %} basic-ios-testing-operations.md {% endcontent-ref %}

Jailbreak Detection

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

  • Dopo il jailbreaking di un 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

Jailbreak Detection Bypass

  • 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'

References

Support HackTricks
{% endhint %} {% endhint %}