mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
119 lines
8.3 KiB
Markdown
119 lines
8.3 KiB
Markdown
# iOS Pentesting senza Jailbreak
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## 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](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) 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](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 `Impostazioni` → `Privacy 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](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) 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:
|
||
|
||
| Strumento | Requisiti | Punti di forza | Limitazioni |
|
||
|-----------|-----------|----------------|-------------|
|
||
| **AltStore 2 / SideStore** | Compagno macOS/Windows/Linux che ri-firma l'IPA ogni 7 giorni con un profilo dev gratuito | Ricarica automatica via Wi-Fi, funziona fino a iOS 17 | Necessita di un computer sulla stessa rete, limite di 3 app imposto da Apple |
|
||
| **TrollStore 1/2** | Dispositivo su iOS 14 – 15.4.1 vulnerabile al bug CoreTrust | Firma *permanente* (nessun limite di 7 giorni); nessun computer richiesto una volta installato | Non 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](https://mobsf.github.io/Mobile-Security-Framework-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
|
||
|
||
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||
- Documentazione per sviluppatori Apple – Abilitare la modalità sviluppatore su un dispositivo: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
|
||
- Mobile Security Framework (MobSF): <https://mobsf.github.io/Mobile-Security-Framework-MobSF/>
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|