hacktricks/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md

194 lines
13 KiB
Markdown
Raw Normal View History

2024-02-10 13:03:23 +00:00
# Operazioni di base di testing su iOS
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2024-01-03 10:43:38 +00:00
2024-02-10 13:03:23 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 13:03:23 +00:00
## **Sommario dell'identificazione e accesso del dispositivo iOS**
2024-02-10 13:03:23 +00:00
### **Identificazione dell'UDID di un dispositivo iOS**
2024-02-10 13:03:23 +00:00
Per identificare in modo univoco un dispositivo iOS, viene utilizzata una sequenza di 40 cifre nota come UDID. Su macOS Catalina o versioni successive, è possibile trovarlo nell'app **Finder**, poiché iTunes non è più presente. Il dispositivo, una volta connesso tramite USB e selezionato in Finder, rivela il suo UDID insieme ad altre informazioni quando si fa clic sui dettagli sotto il suo nome.
2024-02-10 13:03:23 +00:00
Per le versioni di macOS precedenti a Catalina, iTunes facilita la scoperta dell'UDID. Le istruzioni dettagliate possono essere trovate [qui](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
2024-02-10 13:03:23 +00:00
Gli strumenti a riga di comando offrono metodi alternativi per recuperare l'UDID:
2024-02-10 13:03:23 +00:00
* **Utilizzando lo strumento I/O Registry Explorer `ioreg`:**
```bash
2024-02-08 03:08:28 +00:00
$ ioreg -p IOUSB -l | grep "USB Serial"
```
2024-02-10 13:03:23 +00:00
* **Utilizzo di `ideviceinstaller` per macOS (e Linux):**
```bash
2024-02-08 03:08:28 +00:00
$ brew install ideviceinstaller
$ idevice_id -l
```
2024-02-10 13:03:23 +00:00
* **Utilizzo di `system_profiler`:**
```bash
2024-02-08 03:08:28 +00:00
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
```
2024-02-10 13:03:23 +00:00
* **Utilizzo di `instruments` per elencare i dispositivi:**
```bash
2024-02-08 03:08:28 +00:00
$ instruments -s devices
```
2024-02-10 13:03:23 +00:00
### **Accesso alla Shell del Dispositivo**
2024-02-10 13:03:23 +00:00
L'accesso **SSH** è abilitato installando il pacchetto **OpenSSH** dopo il jailbreak, consentendo connessioni tramite `ssh root@<indirizzo_ip_dispositivo>`. È fondamentale cambiare le password predefinite (`alpine`) per gli utenti `root` e `mobile` per proteggere il dispositivo.
2024-02-10 13:03:23 +00:00
L'accesso **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
2024-02-08 03:08:28 +00:00
$ iproxy 2222 22
$ ssh -p 2222 root@localhost
```
2024-02-10 13:03:23 +00:00
**Applicazioni shell su dispositivo**, come NewTerm 2, facilitano l'interazione diretta con il dispositivo, particolarmente utile per la risoluzione dei problemi. Le **shell SSH inverse** possono anche essere stabilite per l'accesso remoto dal computer host.
2024-02-10 13:03:23 +00:00
### **Reimpostazione delle password dimenticate**
2024-02-10 13:03:23 +00:00
Per reimpostare una password dimenticata al valore predefinito (`alpine`), è necessario modificare il file `/private/etc/master.passwd`. Ciò comporta la sostituzione dell'hash esistente con l'hash per `alpine` accanto alle voci degli utenti `root` e `mobile`.
2024-02-10 13:03:23 +00:00
## **Tecniche di trasferimento dati**
2024-02-10 13:03:23 +00:00
### **Trasferimento dei file di dati dell'app**
2024-02-10 13:03:23 +00:00
**Archiviazione e recupero tramite SSH e SCP:** È semplice archiviare la directory dei dati dell'applicazione utilizzando `tar` e quindi trasferirla utilizzando `scp`. Il comando di seguito archivia la directory dei dati in un file .tgz, che viene quindi estratto dal dispositivo:
```bash
2024-02-08 03:08:28 +00:00
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 .
```
2024-02-10 13:03:23 +00:00
### **Strumenti dell'Interfaccia Utente Grafica**
2024-02-10 13:03:23 +00:00
**Utilizzo di iFunbox e iExplorer:** Questi strumenti GUI sono utili per gestire i file sui dispositivi iOS. Tuttavia, a partire da iOS 8.4, Apple ha limitato l'accesso di questi strumenti alla sandbox dell'applicazione a meno che il dispositivo non sia jailbroken.
2024-02-10 13:03:23 +00:00
### **Utilizzo di Objection per la Gestione dei File**
2024-02-10 13:03:23 +00:00
**Shell interattiva con Objection:** Avviare Objection fornisce accesso alla directory Bundle di un'app. Da qui, è possibile navigare fino alla directory Documenti dell'app e gestire i file, inclusi il download e l'upload da e verso il dispositivo iOS.
```bash
2024-02-08 03:08:28 +00:00
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>
```
2024-02-10 13:03:23 +00:00
## **Ottenere ed Estrarre le App**
2024-02-10 13:03:23 +00:00
### **Acquisizione del file IPA**
2024-02-10 13:03:23 +00:00
**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 di servizi ITMS, che viene installato tramite npm e utilizzato per salvare il file IPA in locale.
```bash
2024-02-08 03:08:28 +00:00
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
```
2024-02-10 13:03:23 +00:00
### **Estrazione del file binario dell'app**
2024-02-10 13:03:23 +00:00
1. **Da un file IPA:** Decomprimere il file IPA per accedere al file binario dell'app decriptato.
2. **Da un dispositivo Jailbroken:** Installare l'app ed estrarre il file binario decriptato dalla memoria.
2024-02-10 13:03:23 +00:00
### **Processo di decriptazione**
2024-02-10 13:03:23 +00:00
**Panoramica della decriptazione manuale:** I file binari delle app iOS sono criptati da Apple utilizzando FairPlay. Per effettuare l'ingegneria inversa, è necessario estrarre il file binario decriptato dalla memoria. Il processo di decriptazione prevede il controllo del flag PIE, l'aggiustamento dei flag di memoria, l'identificazione della sezione criptata e quindi l'estrazione e la sostituzione di questa sezione con la sua forma decriptata.
2024-02-10 13:03:23 +00:00
**Controllo e modifica del flag PIE:**
```bash
2024-02-08 03:08:28 +00:00
otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World
```
2024-02-10 13:03:23 +00:00
**Identificazione della sezione crittografata e dumping della memoria:**
2024-02-10 13:03:23 +00:00
Determina gli indirizzi di inizio e fine della sezione crittografata utilizzando `otool` e esegui il dumping della memoria dal dispositivo jailbroken utilizzando gdb.
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000
```
2024-02-10 13:03:23 +00:00
**Sovrascrivere la sezione crittografata:**
2024-02-10 13:03:23 +00:00
Sostituisci la sezione crittografata nel binario originale dell'app con il dump decrittato.
```bash
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
```
2024-02-10 13:03:23 +00:00
**Finalizzazione della decrittazione:** Modifica i metadati del binario per indicare l'assenza di crittografia utilizzando strumenti come **MachOView**, impostando `cryptid` a 0.
2024-02-10 13:03:23 +00:00
### **Decrittazione (Automatica)**
2024-02-08 03:08:28 +00:00
#### **frida-ios-dump**
2024-02-10 13:03:23 +00:00
Lo strumento [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) viene utilizzato per **decrittare ed estrarre automaticamente le app** dai dispositivi iOS. Inizialmente, è necessario configurare `dump.py` per connettersi al dispositivo iOS, che può essere fatto tramite localhost sulla porta 2222 tramite **iproxy** o direttamente tramite l'indirizzo IP e la porta del dispositivo.
2024-02-10 13:03:23 +00:00
Le applicazioni installate sul dispositivo possono essere elencate con il comando:
```bash
$ python dump.py -l
```
2024-02-10 13:03:23 +00:00
Per eseguire il dump di un'app specifica, come Telegram, viene utilizzato il seguente comando:
```bash
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
2021-07-19 10:18:19 +00:00
```
2024-02-10 13:03:23 +00:00
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).
2021-07-19 10:18:19 +00:00
2024-02-08 03:08:28 +00:00
#### **flexdecrypt**
2024-02-10 13:03:23 +00:00
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 dalle 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 le app, come mostrato nei comandi seguenti:
2021-07-19 10:18:19 +00:00
```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
2024-02-08 03:08:28 +00:00
flexdump list
flexdump dump Twitter.app
2021-07-19 10:18:19 +00:00
```
2024-02-08 03:08:28 +00:00
#### **bagbak**
2024-02-10 13:03:23 +00:00
[**bagbak**](https://github.com/ChiChou/bagbak), un altro strumento basato su Frida, richiede un dispositivo jailbroken per la decrittazione dell'app:
```bash
bagbak --raw Chrome
```
2024-02-08 03:08:28 +00:00
#### **r2flutch**
2024-02-10 13:03:23 +00:00
**r2flutch**, utilizzando sia radare che frida, serve per la decrittazione e il dumping delle app. Ulteriori informazioni possono essere trovate sulla sua [**pagina GitHub**](https://github.com/as0ler/r2flutch).
2024-02-10 13:03:23 +00:00
### **Installazione delle App**
2024-02-10 13:03:23 +00:00
**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 aggirare questo processo tramite **AppSync**, consentendo l'installazione di pacchetti IPA falsamente firmati.
2024-02-10 13:03:23 +00:00
#### **Strumenti per il Sideloading**
2024-02-10 13:03:23 +00:00
- **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/).
2024-02-10 13:03:23 +00:00
- **libimobiledevice**: Una libreria per Linux e macOS per comunicare con i dispositivi iOS. Sono forniti comandi di installazione ed esempi di utilizzo per ideviceinstaller per l'installazione di app tramite USB.
2024-02-10 13:03:23 +00:00
- **ipainstaller**: Questo strumento da linea di comando consente l'installazione diretta di app su dispositivi iOS.
2024-02-10 13:03:23 +00:00
- **ios-deploy**: Per gli utenti macOS, ios-deploy installa app iOS dalla riga di comando. Scompattare l'IPA e utilizzare l'opzione `-m` per avviare direttamente l'app fanno parte del processo.
2024-02-10 13:03:23 +00:00
- **Xcode**: Utilizzare Xcode per installare app navigando su **Window/Devices and Simulators** e aggiungendo l'app a **Installed Apps**.
2024-02-10 13:03:23 +00:00
#### **Consentire l'Installazione dell'App 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 modificato in **1**. Questa modifica, tuttavia, richiede la firma nuovamente del file IPA a causa dei controlli di convalida della firma.
2024-02-10 13:03:23 +00:00
**Nota**: Questo metodo potrebbe non funzionare se l'app richiede funzionalità esclusive dei modelli di iPad più recenti mentre si utilizza un iPhone o iPod touch più vecchio.
2024-02-10 13:03:23 +00:00
## Riferimenti
2024-02-08 03:08:28 +00:00
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
* [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/)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2024-01-03 10:43:38 +00:00
2024-02-10 13:03:23 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>