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

13 KiB

iOS Basic Testing Operations

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Résumé de l'identification et de l'accès aux appareils iOS

Identification du UDID d'un appareil iOS

Pour identifier un appareil iOS de manière unique, une séquence de 40 chiffres connue sous le nom de UDID est utilisée. Sur macOS Catalina ou une version plus récente, cela peut être trouvé dans l'application Finder, car iTunes n'est plus présent. L'appareil, une fois connecté via USB et sélectionné dans Finder, révèle son UDID parmi d'autres informations lorsque les détails sous son nom sont consultés.

Pour les versions de macOS antérieures à Catalina, iTunes facilite la découverte du UDID. Des instructions détaillées peuvent être trouvées ici.

Les outils en ligne de commande offrent des méthodes alternatives pour récupérer le UDID :

  • Utilisation de l'outil I/O Registry Explorer ioreg:
$ ioreg -p IOUSB -l | grep "USB Serial"
  • Utilisation de ideviceinstaller pour macOS (et Linux) :
$ brew install ideviceinstaller
$ idevice_id -l
  • Utilisation de system_profiler :
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Utilisation de instruments pour lister les appareils :
$ instruments -s devices

Accéder au Shell de l'Appareil

L'accès SSH est activé en installant le package OpenSSH après le jailbreak, permettant des connexions via ssh root@<device_ip_address>. Il est crucial de changer les mots de passe par défaut (alpine) pour les utilisateurs root et mobile afin de sécuriser l'appareil.

SSH sur USB devient nécessaire en l'absence de Wi-Fi, en utilisant iproxy pour mapper les ports de l'appareil pour les connexions SSH. Cette configuration permet l'accès SSH via USB en exécutant :

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

Les applications de shell sur l'appareil, comme NewTerm 2, facilitent l'interaction directe avec l'appareil, particulièrement utile pour le dépannage. Des shells SSH inversés peuvent également être établis pour un accès à distance depuis l'ordinateur hôte.

Réinitialisation des mots de passe oubliés

Pour réinitialiser un mot de passe oublié à la valeur par défaut (alpine), il est nécessaire de modifier le fichier /private/etc/master.passwd. Cela implique de remplacer le hash existant par le hash pour alpine à côté des entrées des utilisateurs root et mobile.

Techniques de transfert de données

Transfert de fichiers de données d'application

Archivage et récupération via SSH et SCP : Il est simple d'archiver le répertoire Data de l'application en utilisant tar puis de le transférer en utilisant scp. La commande ci-dessous archive le répertoire Data dans un fichier .tgz, qui est ensuite récupéré depuis l'appareil :

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 .

Outils d'Interface Graphique

Utilisation d'iFunbox et d'iExplorer : Ces outils GUI sont utiles pour gérer des fichiers sur des appareils iOS. Cependant, à partir d'iOS 8.4, Apple a restreint l'accès de ces outils au sandbox de l'application à moins que l'appareil ne soit jailbreaké.

Utilisation d'Objection pour la Gestion des Fichiers

Shell Interactif avec Objection : Le lancement d'objection permet d'accéder au répertoire Bundle d'une application. De là, vous pouvez naviguer vers le répertoire Documents de l'application et gérer des fichiers, y compris les télécharger et les téléverser vers et depuis l'appareil iOS.

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

Obtention et Extraction des Applications

Acquisition du Fichier IPA

Lien de Distribution Over-The-Air (OTA) : Les applications distribuées pour les tests via OTA peuvent être téléchargées à l'aide de l'outil de téléchargement d'actifs des services ITMS, qui est installé via npm et utilisé pour enregistrer le fichier IPA localement.

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

Extraction du binaire de l'application

  1. Depuis un IPA : Décompressez l'IPA pour accéder au binaire de l'application déchiffré.
  2. Depuis un appareil jailbreaké : Installez l'application et extrayez le binaire déchiffré de la mémoire.

Processus de déchiffrement

Aperçu du déchiffrement manuel : Les binaires d'applications iOS sont chiffrés par Apple à l'aide de FairPlay. Pour effectuer une rétro-ingénierie, il faut extraire le binaire déchiffré de la mémoire. Le processus de déchiffrement implique de vérifier le drapeau PIE, d'ajuster les drapeaux de mémoire, d'identifier la section chiffrée, puis de vider et de remplacer cette section par sa forme déchiffrée.

Vérification et modification du drapeau PIE :

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

Identification de la section chiffrée et vidage de la mémoire :

Déterminez les adresses de début et de fin de la section chiffrée à l'aide de otool et vidangez la mémoire depuis le dispositif jailbreaké en utilisant gdb.

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

Surcharger la section chiffrée :

Remplacez la section chiffrée dans le binaire de l'application originale par le dump déchiffré.

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

Finaliser le déchiffrement : Modifiez les métadonnées du binaire pour indiquer l'absence de chiffrement en utilisant des outils comme MachOView, en définissant cryptid à 0.

Déchiffrement (Automatiquement)

frida-ios-dump

L'outil frida-ios-dump est utilisé pour déchiffrer et extraire automatiquement des applications des appareils iOS. Au départ, il faut configurer dump.py pour se connecter à l'appareil iOS, ce qui peut être fait via localhost sur le port 2222 via iproxy ou directement via l'adresse IP de l'appareil et le port.

Les applications installées sur l'appareil peuvent être listées avec la commande :

$ python dump.py -l

Pour extraire une application spécifique, comme Telegram, la commande suivante est utilisée :

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

Cette commande initie le dump de l'application, ce qui entraîne la création d'un fichier Telegram.ipa dans le répertoire actuel. Ce processus est adapté aux appareils jailbreakés, car les applications non signées ou faussement signées peuvent être réinstallées à l'aide d'outils comme ios-deploy.

flexdecrypt

L'outil flexdecrypt, ainsi que son wrapper flexdump, permet l'extraction de fichiers IPA à partir des applications installées. Les commandes d'installation pour flexdecrypt sur l'appareil incluent le téléchargement et l'installation du package .deb. flexdump peut être utilisé pour lister et dumper des applications, comme le montrent les commandes ci-dessous :

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 autre outil basé sur Frida, nécessite un appareil jailbreaké pour le décryptage des applications :

bagbak --raw Chrome

r2flutch

r2flutch, utilisant à la fois radare et frida, sert à la décryption et au dumping d'applications. Plus d'informations peuvent être trouvées sur sa page GitHub.

Installation d'Applications

Sideloading fait référence à l'installation d'applications en dehors de l'App Store officiel. Ce processus est géré par le daemon installd et nécessite que les applications soient signées avec un certificat délivré par Apple. Les appareils jailbreakés peuvent contourner cela grâce à AppSync, permettant l'installation de paquets IPA faussement signés.

Outils de Sideloading

  • Cydia Impactor : Un outil pour signer et installer des fichiers IPA sur iOS et des fichiers APK sur Android. Des guides et des solutions aux problèmes peuvent être trouvés sur yalujailbreak.net.

  • libimobiledevice : Une bibliothèque pour Linux et macOS pour communiquer avec des appareils iOS. Des commandes d'installation et des exemples d'utilisation pour ideviceinstaller sont fournis pour installer des applications via USB.

  • ipainstaller : Cet outil en ligne de commande permet l'installation directe d'applications sur des appareils iOS.

  • ios-deploy : Pour les utilisateurs de macOS, ios-deploy installe des applications iOS depuis la ligne de commande. Décompresser l'IPA et utiliser le drapeau -m pour un lancement direct de l'application font partie du processus.

  • Xcode : Utilisez Xcode pour installer des applications en naviguant vers Window/Devices and Simulators et en ajoutant l'application à Installed Apps.

Autoriser l'Installation d'Applications sur des Appareils Non-iPad

Pour installer des applications spécifiques à l'iPad sur des appareils iPhone ou iPod touch, la valeur UIDeviceFamily dans le fichier Info.plist doit être changée en 1. Cette modification nécessite cependant de re-signer le fichier IPA en raison des vérifications de validation de signature.

Note : Cette méthode peut échouer si l'application exige des capacités exclusives aux modèles d'iPad plus récents tout en utilisant un ancien iPhone ou iPod touch.

Références

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}