iOS Basic Testing Operations

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Sommario dell'identificazione e accesso del dispositivo iOS

Identificazione dell'UDID di un dispositivo iOS

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.

Per le versioni di macOS precedenti a Catalina, iTunes facilita la scoperta dell'UDID. Le istruzioni dettagliate possono essere trovate qui.

Gli strumenti a riga di comando offrono metodi alternativi per recuperare l'UDID:

  • Utilizzando lo strumento I/O Registry Explorer ioreg:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • Utilizzo di 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

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.

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:

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

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.

Reimpostazione delle password dimenticate

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.

Tecniche di trasferimento dati

Trasferimento dei file di dati dell'app

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:

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 dell'Interfaccia Utente Grafica

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.

Utilizzo di Objection per la Gestione dei File

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.

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

Ottenere ed Estrarre le App

Acquisizione del 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 di servizi ITMS, che viene installato tramite npm e utilizzato per salvare il file IPA in locale.

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 file binario dell'app

  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.

Processo di decriptazione

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.

Controllo e modifica del flag PIE:

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

Identificazione della sezione crittografata e dumping della memoria:

Determina gli indirizzi di inizio e fine della sezione crittografata utilizzando otool e esegui il dumping della memoria dal dispositivo jailbroken utilizzando 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 binario originale dell'app con il dump decrittato.

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 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.

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

$ python dump.py -l

Per eseguire il dump di un'app specifica, come Telegram, viene utilizzato il seguente comando:

$ 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.

flexdecrypt

Lo strumento flexdecrypt, insieme al suo wrapper flexdump, 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:

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 strumento basato su Frida, richiede un dispositivo jailbroken per la decrittazione dell'app:

bagbak --raw Chrome

r2flutch

r2flutch, utilizzando sia radare che frida, serve per la decrittazione e il dumping delle app. Ulteriori informazioni possono essere trovate sulla sua pagina GitHub.

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 aggirare questo processo tramite AppSync, consentendo l'installazione di pacchetti IPA falsamente firmati.

Strumenti per il 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.

  • 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.

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

  • 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.

  • Xcode: Utilizzare Xcode per installare app navigando su Window/Devices and Simulators e aggiungendo l'app a Installed Apps.

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.

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.

Riferimenti

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated