# 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@`. È 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 ``` ## **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= 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 "" 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}}