mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
174 lines
10 KiB
Markdown
174 lines
10 KiB
Markdown
# Operazioni di Test di Base su iOS
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## **Riepilogo dell'Identificazione e Accesso ai Dispositivi iOS**
|
|
|
|
### **Identificazione del UDID di un Dispositivo iOS**
|
|
|
|
Per identificare un dispositivo iOS in modo univoco, si utilizza una sequenza di 40 cifre nota come UDID. Su macOS Catalina o versioni successive, questo può essere trovato nell'app **Finder**, poiché iTunes non è più presente. Il dispositivo, una volta connesso tramite USB e selezionato in Finder, rivela il suo UDID tra le altre informazioni quando si clicca sui dettagli sotto il suo nome.
|
|
|
|
Per le versioni di macOS precedenti a Catalina, iTunes facilita la scoperta del UDID. Istruzioni dettagliate possono essere trovate [qui](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
|
|
|
|
Gli strumenti da riga di comando offrono metodi alternativi per recuperare il UDID:
|
|
|
|
- **Utilizzando lo strumento I/O Registry Explorer `ioreg`:**
|
|
```bash
|
|
$ ioreg -p IOUSB -l | grep "USB Serial"
|
|
```
|
|
- **Utilizzando `ideviceinstaller` per macOS (e Linux):**
|
|
```bash
|
|
$ brew install ideviceinstaller
|
|
$ idevice_id -l
|
|
```
|
|
- **Utilizzando `system_profiler`:**
|
|
```bash
|
|
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
|
|
```
|
|
- **Utilizzando `instruments` per elencare i dispositivi:**
|
|
```bash
|
|
$ instruments -s devices
|
|
```
|
|
### **Accesso alla Shell del Dispositivo**
|
|
|
|
L'accesso **SSH** è abilitato installando il **pacchetto OpenSSH** dopo il jailbreak, consentendo connessioni tramite `ssh root@<device_ip_address>`. È fondamentale cambiare le password predefinite (`alpine`) per gli utenti `root` e `mobile` per proteggere il dispositivo.
|
|
|
|
**SSH tramite USB** diventa necessario in assenza di Wi-Fi, utilizzando `iproxy` per mappare le porte del dispositivo per le connessioni SSH. Questa configurazione consente l'accesso SSH tramite USB eseguendo:
|
|
```bash
|
|
$ iproxy 2222 22
|
|
$ ssh -p 2222 root@localhost
|
|
```
|
|
**Applicazioni shell su dispositivo**, come NewTerm 2, facilitano l'interazione diretta con il dispositivo, particolarmente utili per la risoluzione dei problemi. **Shell SSH inverse** possono anche essere stabilite per l'accesso remoto dal computer host.
|
|
|
|
### **Reimpostazione delle Password Dimenticate**
|
|
|
|
Per reimpostare una password dimenticata al valore predefinito (`alpine`), è necessario modificare il file `/private/etc/master.passwd`. Questo comporta la sostituzione dell'hash esistente con l'hash per `alpine` accanto alle voci utente `root` e `mobile`.
|
|
|
|
## **Tecniche di Trasferimento Dati**
|
|
|
|
### **Trasferimento di File Dati dell'App**
|
|
|
|
**Archiviazione e Recupero tramite SSH e SCP:** È semplice archiviare la directory Data dell'applicazione utilizzando `tar` e poi trasferirla usando `scp`. Il comando qui sotto archivia la directory Data in un file .tgz, che viene poi estratto dal dispositivo:
|
|
```bash
|
|
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
|
|
exit
|
|
scp -P 2222 root@localhost:/tmp/data.tgz .
|
|
```
|
|
### **Strumenti per Interfaccia Grafica**
|
|
|
|
**Utilizzando iFunbox e iExplorer:** Questi strumenti GUI sono utili per gestire file sui dispositivi iOS. Tuttavia, a partire da iOS 8.4, Apple ha limitato l'accesso di questi strumenti al sandbox dell'applicazione a meno che il dispositivo non sia jailbroken.
|
|
|
|
### **Utilizzando Objection per la Gestione dei File**
|
|
|
|
**Shell Interattiva con Objection:** Lanciare objection fornisce accesso alla directory Bundle di un'app. Da qui, puoi navigare nella directory Documenti dell'app e gestire i file, inclusi il download e l'upload da e verso il dispositivo iOS.
|
|
```bash
|
|
objection --gadget com.apple.mobilesafari explorer
|
|
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
|
|
file download <filename>
|
|
```
|
|
## **Ottenere ed Estrarre App**
|
|
|
|
### **Acquisire il File IPA**
|
|
|
|
**Link di Distribuzione Over-The-Air (OTA):** Le app distribuite per il testing tramite OTA possono essere scaricate utilizzando lo strumento di download degli asset dei servizi ITMS, che è installato tramite npm e utilizzato per salvare il file IPA localmente.
|
|
```bash
|
|
npm install -g itms-services
|
|
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
|
|
```
|
|
### **Estrazione del Binario dell'App**
|
|
|
|
1. **Da un IPA:** Decomprimi l'IPA per accedere al binario dell'app decrittografato.
|
|
2. **Da un Dispositivo Jailbroken:** Installa l'app ed estrai il binario decrittografato dalla memoria.
|
|
|
|
### **Processo di Decrittografia**
|
|
|
|
**Panoramica della Decrittografia Manuale:** I binari delle app iOS sono crittografati da Apple utilizzando FairPlay. Per fare reverse-engineering, è necessario estrarre il binario decrittografato dalla memoria. Il processo di decrittografia prevede il controllo del flag PIE, la modifica dei flag di memoria, l'identificazione della sezione crittografata e poi l'estrazione e la sostituzione di questa sezione con la sua forma decrittografata.
|
|
|
|
**Controllo e Modifica del Flag PIE:**
|
|
```bash
|
|
otool -Vh Original_App
|
|
python change_macho_flags.py --no-pie Original_App
|
|
otool -Vh Hello_World
|
|
```
|
|
**Identificazione della Sezione Cifrata e Dumping della Memoria:**
|
|
|
|
Determina gli indirizzi di inizio e fine della sezione cifrata utilizzando `otool` e dumpa la memoria dal dispositivo jailbroken utilizzando gdb.
|
|
```bash
|
|
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
|
|
dump memory dump.bin 0x8000 0x10a4000
|
|
```
|
|
**Sovrascrivere la Sezione Cifrata:**
|
|
|
|
Sostituisci la sezione cifrata nel binario originale dell'app con il dump decrittografato.
|
|
```bash
|
|
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
|
|
```
|
|
**Finalizzazione della Decrittazione:** Modifica i metadati del binario per indicare l'assenza di crittografia utilizzando strumenti come **MachOView**, impostando `cryptid` a 0.
|
|
|
|
### **Decrittazione (Automatica)**
|
|
|
|
#### **frida-ios-dump**
|
|
|
|
Lo strumento [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) è impiegato per **decrittare ed estrarre automaticamente le app** dai dispositivi iOS. Inizialmente, è necessario configurare `dump.py` per connettersi al dispositivo iOS, il che può essere fatto tramite localhost sulla porta 2222 tramite **iproxy** o direttamente tramite l'indirizzo IP del dispositivo e la porta.
|
|
|
|
Le applicazioni installate sul dispositivo possono essere elencate con il comando:
|
|
```bash
|
|
$ python dump.py -l
|
|
```
|
|
Per eseguire il dump di un'app specifica, come Telegram, si utilizza il seguente comando:
|
|
```bash
|
|
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
|
|
```
|
|
Questo comando avvia il dump dell'app, risultando nella creazione di un file `Telegram.ipa` nella directory corrente. Questo processo è adatto per dispositivi jailbroken, poiché le app non firmate o falsamente firmate possono essere reinstallate utilizzando strumenti come [**ios-deploy**](https://github.com/ios-control/ios-deploy).
|
|
|
|
#### **flexdecrypt**
|
|
|
|
Lo strumento [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), insieme al suo wrapper [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), consente l'estrazione di file IPA da applicazioni installate. I comandi di installazione per **flexdecrypt** sul dispositivo includono il download e l'installazione del pacchetto `.deb`. **flexdump** può essere utilizzato per elencare e dumpare app, come mostrato nei comandi qui sotto:
|
|
```bash
|
|
apt install zip unzip
|
|
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
|
|
flexdump list
|
|
flexdump dump Twitter.app
|
|
```
|
|
#### **bagbak**
|
|
|
|
[**bagbak**](https://github.com/ChiChou/bagbak), un altro strumento basato su Frida, richiede un dispositivo jailbroken per la decrittazione delle app:
|
|
```bash
|
|
bagbak --raw Chrome
|
|
```
|
|
#### **r2flutch**
|
|
|
|
**r2flutch**, utilizzando sia radare che frida, serve per la decrittazione e il dumping delle app. Maggiori informazioni possono essere trovate sulla sua [**pagina GitHub**](https://github.com/as0ler/r2flutch).
|
|
|
|
### **Installazione delle App**
|
|
|
|
**Sideloading** si riferisce all'installazione di applicazioni al di fuori dell'App Store ufficiale. Questo processo è gestito dal **daemon installd** e richiede che le app siano firmate con un certificato rilasciato da Apple. I dispositivi jailbroken possono bypassare questo tramite **AppSync**, consentendo l'installazione di pacchetti IPA falsamente firmati.
|
|
|
|
#### **Strumenti di Sideloading**
|
|
|
|
- **Cydia Impactor**: Uno strumento per firmare e installare file IPA su iOS e file APK su Android. Guide e risoluzione dei problemi possono essere trovate su [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
|
|
|
|
- **libimobiledevice**: Una libreria per Linux e macOS per comunicare con dispositivi iOS. I comandi di installazione e gli esempi di utilizzo per ideviceinstaller sono forniti per installare app tramite USB.
|
|
|
|
- **ipainstaller**: Questo strumento da riga di comando consente l'installazione diretta delle app sui dispositivi iOS.
|
|
|
|
- **ios-deploy**: Per gli utenti macOS, ios-deploy installa app iOS dalla riga di comando. Decomprimere l'IPA e utilizzare il flag `-m` per il lancio diretto dell'app fanno parte del processo.
|
|
|
|
- **Xcode**: Utilizza Xcode per installare app navigando su **Window/Devices and Simulators** e aggiungendo l'app a **Installed Apps**.
|
|
|
|
#### **Consentire l'Installazione di Applicazioni su Dispositivi Non iPad**
|
|
|
|
Per installare applicazioni specifiche per iPad su dispositivi iPhone o iPod touch, il valore **UIDeviceFamily** nel file **Info.plist** deve essere cambiato in **1**. Questa modifica, tuttavia, richiede la ri-firma del file IPA a causa dei controlli di validazione della firma.
|
|
|
|
**Nota**: Questo metodo potrebbe fallire se l'applicazione richiede capacità esclusive per i modelli di iPad più recenti mentre si utilizza un iPhone o un iPod touch più vecchio.
|
|
|
|
## Riferimenti
|
|
|
|
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html)
|
|
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
|
|
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
|
|
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
|
|
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|