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

154 lines
11 KiB
Markdown

# iOS Testing Environment
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% 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:
![](<../../.gitbook/assets/image (270).png>)
![](<../../.gitbook/assets/image (520).png>)
### 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:
```bash
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](https://ipsw.me) è 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?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) e [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) forniscono informazioni aggiornate. Esempi includono:
* [Checkra1n](https://checkra.in/) per dispositivi con chip A7-A11.
* [Palera1n](https://palera.in/) per dispositivi Checkm8 (A8-A11) su iOS 15.0-16.5.
* [Unc0ver](https://unc0ver.dev/) 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](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**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
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
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
</details>
{% endhint %}