iOS Basic Testing Operations

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Sommario dell’identificazione e dell’accesso ai dispositivi iOS

Identificare l’UDID di un dispositivo iOS

Per identificare in modo univoco un dispositivo iOS si usa 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 collegato via USB e selezionato in Finder, rivela il suo UDID tra le altre informazioni facendo clic sui dettagli sotto il suo nome.

Per le versioni di macOS precedenti a Catalina, iTunes facilita la scoperta dell’UDID. Istruzioni dettagliate si trovano qui.

Gli strumenti da riga di comando offrono metodi alternativi per recuperare l’UDID:

  • Usando lo strumento I/O Registry Explorer ioreg:
$ ioreg -p IOUSB -l | grep "USB Serial"
  • Usando ideviceinstaller per macOS (e Linux):
$ brew install ideviceinstaller
$ idevice_id -l
  • Utilizzo di system_profiler:
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Utilizzo di instruments per elencare i dispositivi:
$ instruments -s devices

Accesso alla shell del dispositivo

SSH access è abilitato installando il OpenSSH package dopo il jailbreak, permettendo connessioni tramite ssh root@<device_ip_address>. È fondamentale cambiare le password di default (alpine) per gli utenti root e mobile per mettere in sicurezza il dispositivo.

SSH over USB diventa necessario in assenza di Wi‑Fi, usando iproxy per mappare le porte del dispositivo per le connessioni SSH. Questa configurazione abilita l’accesso SSH tramite USB eseguendo:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

Applicazioni shell on-device, like NewTerm 2, facilitano l’interazione diretta con il dispositivo, particolarmente utile per la risoluzione dei problemi. Reverse SSH shells possono anche essere stabilite per l’accesso remoto dal computer host.

Reimpostare 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 degli utenti root e mobile.

Tecniche di trasferimento dei dati

Trasferimento dei file di dati delle app

Archiviazione e recupero via SSH e SCP: È semplice archiviare la Data directory dell’applicazione usando tar e poi trasferirla con scp. Il comando qui sotto archivia la Data directory in un file .tgz, che viene poi prelevato dal dispositivo:

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 GUI

Uso di iFunbox e iExplorer: Questi strumenti GUI sono utili per gestire file su 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.

Uso di 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 Documents dell’app e gestire i file, inclusi scaricare e caricare file da e verso il dispositivo iOS.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

Ottenimento e estrazione delle app

Acquisizione del file IPA

Link di distribuzione Over-The-Air (OTA): Le app distribuite per il testing via OTA possono essere scaricate utilizzando lo strumento ITMS services asset downloader, che si installa tramite npm e serve per salvare il file IPA localmente.

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: Decomprimere l’IPA per accedere al decrypted app binary.
  2. Da un Jailbroken Device: Installa l’app e estrai il decrypted binary dalla memoria.

Decryption Process

Manual Decryption Overview: I binari delle app iOS sono encrypted da Apple usando FairPlay. Per reverse-engineer, è necessario dumpare il decrypted binary dalla memoria. Il processo di decryption comporta il controllo del PIE flag, la modifica dei memory flags, l’identificazione della encrypted section e poi il dump e la sostituzione di questa sezione con la sua forma decrypted.

Checking and Modifying PIE Flag:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

Identificazione della sezione crittografata e dump della memoria:

Determina gli indirizzi di inizio e fine della sezione crittografata usando otool ed effettua il dump della memoria dal dispositivo jailbroken usando gdb.

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

Sovrascrivere la sezione crittografata:

Sostituisci la sezione crittografata nel binary originale dell’app con il dump decrittografato.

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

Finalizzazione della decrittazione: Modificare i metadata del binario per indicare l’assenza di crittografia usando strumenti come MachOView, impostando il cryptid a 0.

Decrittazione (Automaticamente)

frida-ios-dump

Lo strumento frida-ios-dump viene utilizzato per decrittare automaticamente ed estrarre le app dai dispositivi iOS. Inizialmente, bisogna configurare dump.py per connettersi al dispositivo iOS, cosa che può essere fatta tramite localhost sulla porta 2222 usando iproxy o direttamente tramite l’indirizzo IP e la porta del dispositivo.

Le applicazioni installate sul dispositivo possono essere elencate con il comando:

$ python dump.py -l

Per effettuare il dump di un’app specifica, come Telegram, viene usato il seguente comando:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

Questo comando avvia il dump dell’app, creando un file Telegram.ipa nella directory corrente. Questo processo è adatto a dispositivi jailbroken, poiché le app non firmate o firmate falsamente possono essere reinstallate usando strumenti come ios-deploy.

frida-ipa-extract

Estrattore di IPA basato su Frida per dispositivi jailbroken; utilizza sessioni USB Frida e SSH/SFTP opzionale per trasferimenti più veloci.

  • Requisiti: Python 3.9+, frida, paramiko, dispositivo jailbroken con frida-server (OpenSSH per la modalità SSH).
  • Configurazione:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  • Uso:
python extract.py -U -f com.example.app -o MyApp.ipa
python extract.py -U -f com.example.app -o MyApp.ipa --sandbox --no-resume
python extract.py -H 192.168.100.32 -P 2222 -u root -p password -f com.example.app
  • Opzioni: -f <bundle> avvia/si aggancia (o --pid per PID); -o imposta il nome di output. -U usa USB; -H/-P/-u/-p apre un tunnel SSH verso frida-server 27042 e preleva via SFTP (può essere combinato con -U). --sandbox esegue il dump della sandbox; --no-resume mantiene l’app sospesa per evitare crash e tentativi di riavvio da parte di processi di sistema se la sessione cade.
  • Risoluzione dei problemi: Frida attach timed out → usa -f o --no-resume; script has been destroyed--no-resume o trasferimento SSH; No running apps found → avvia o spawna l’app.

flexdecrypt

Lo strumento flexdecrypt, insieme al suo wrapper flexdump, permette 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 ed estrarre le app, come mostrato nei comandi sotto:

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, un altro Frida-based tool, richiede un dispositivo jailbroken per la decryption dell’app:

bagbak --raw Chrome

r2flutch

r2flutch, utilizzando sia radare che frida, è usato per l’app decryption e il dumping. Maggiori informazioni sono disponibili sulla sua GitHub page.

Installing Apps

Sideloading si riferisce all’installazione di applicazioni al di fuori dell’App Store ufficiale. Questo processo è gestito dal installd daemon e richiede che le app siano firmate con un certificato rilasciato da Apple. I dispositivi jailbroken possono bypassare questo tramite AppSync, permettendo l’installazione di pacchetti IPA con firma falsa.

Sideloading Tools

  • Cydia Impactor: Uno strumento per firmare e installare file IPA su iOS e APK su Android. Guide e risoluzione problemi si trovano su yalujailbreak.net.

  • libimobiledevice: una libreria per Linux e macOS per comunicare con dispositivi iOS. Vengono forniti comandi di installazione ed esempi d’uso per ideviceinstaller per installare app via USB.

  • ipainstaller: Questo strumento da linea di comando permette l’installazione diretta di app su dispositivi iOS.

  • ios-deploy: Per utenti macOS, ios-deploy installa app iOS dalla riga di comando. Parte del processo include l’unzip dell’IPA e l’uso del flag -m per l’avvio diretto dell’app.

  • Xcode: Usa Xcode per installare app navigando in Window/Devices and Simulators e aggiungendo l’app in Installed Apps.

Allow Application Installation on Non-iPad Devices

Per installare applicazioni specifiche per iPad su iPhone o iPod touch, il valore UIDeviceFamily nel file Info.plist deve essere cambiato in 1. Questa modifica, tuttavia, richiede la re-firma dell’IPA a causa dei controlli di validazione della firma.

Nota: Questo metodo potrebbe fallire se l’applicazione richiede funzionalità esclusive di modelli iPad più recenti mentre si usa un iPhone o iPod touch più vecchio.

References

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks