mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-pentesting-without
This commit is contained in:
parent
daad8491b6
commit
62401640a4
@ -4,36 +4,36 @@
|
||||
|
||||
## 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 su di essa (essere in grado di controllarla e accedere alla sua memoria).
|
||||
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 controllarla 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 rimuoverlo dal dispositivo. Anche se, se possibile, è consigliato chiedere semplicemente al cliente per l'IPA decrittato.
|
||||
Con un vecchio dispositivo jailbroken, è possibile installare l'IPA, **decrittografarlo utilizzando il tuo strumento preferito** (come Iridium o frida-ios-dump) e estrarlo di nuovo dal dispositivo. Anche se, se possibile, è consigliato chiedere semplicemente al cliente per l'IPA decrittografato.
|
||||
|
||||
## Ottenere l'IPA decrittato
|
||||
## Ottenere l'IPA decrittografato
|
||||
|
||||
### Ottienilo da Apple
|
||||
|
||||
1. Installa l'app da pentest sull'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.
|
||||
4. Dovresti vedere il tuo dispositivo iOS. Fai doppio clic su di esso e poi 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 chiederà 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 informazioni più dettagliate su questo processo.
|
||||
|
||||
### Decrittare l'app
|
||||
### Decrittografare l'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.
|
||||
Per decrittografare 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.
|
||||
Controlla il `Info.plist` per la versione minima supportata e se il tuo dispositivo è più vecchio di quella, modifica il valore in modo che sia supportato.
|
||||
|
||||
Comprimi di nuovo l'IPA:
|
||||
Zip indietro l'IPA:
|
||||
```bash
|
||||
cd unzipped
|
||||
zip -r ../no-min-version.ipa *
|
||||
@ -42,32 +42,77 @@ Quindi, installa l'IPA ad esempio con:
|
||||
```bash
|
||||
ideviceinstaller -i no-min-version.ipa -w
|
||||
```
|
||||
Nota che potresti aver bisogno di **AppSync Unified tweak** da Cydia per prevenire eventuali errori di `invalid signature`.
|
||||
Nota che potresti aver bisogno del **tweak AppSync Unified** da Cydia per prevenire eventuali errori di `invalid signature`.
|
||||
|
||||
Una volta installato, puoi utilizzare **Iridium tweak** da Cydia per ottenere l'IPA decrittografato.
|
||||
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 l'entitlement `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 molto 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 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 molto facilmente un file IPA indicando l'IPA da ri-firmare, per **metterlo `get-task-allow`** e il certificato e il profilo di provisioning da utilizzare.
|
||||
|
||||
Per quanto riguarda il certificato e i profili di firma, Apple offre **free developer signing profiles** per tutti gli account tramite Xcode. Basta creare un'app e configurarne una. Poi, configura l'**iPhone per fidarsi delle app degli sviluppatori** navigando su `Impostazioni` → `Privacy e Sicurezza`, e clicca su `Modalità Sviluppatore`.
|
||||
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:
|
||||
Con l'IPA ri-firmato, è tempo di installarlo nel dispositivo per effettuare il pentesting:
|
||||
```bash
|
||||
ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
### Hook
|
||||
---
|
||||
|
||||
Puoi facilmente collegare la tua app utilizzando strumenti comuni come frida e objection:
|
||||
### 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. [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 aggiornate le IPA ri-firmate 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 di sviluppo 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
|
||||
objection -g [your app bundle ID] explore
|
||||
# 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【turn6view0†L2-L3】. 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 e 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user