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

194 lines
13 KiB
Markdown
Raw Normal View History

# iOS Basic Testing Operations
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## **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](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
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`:**
```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
```
* **Utilisation de `ideviceinstaller` pour macOS (et Linux) :**
```bash
$ brew install ideviceinstaller
$ idevice_id -l
```
* **Utilisation de `system_profiler` :**
```bash
$ 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 :**
```bash
$ 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.
2022-04-05 22:24:52 +00:00
**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 :
```bash
$ 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 :
```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 .
```
### **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.
```bash
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.
```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
```
### **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.
2021-05-15 12:48:28 +00:00
### **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 :**
```bash
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.
```bash
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é.
```bash
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**](https://github.com/AloneMonkey/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.
2021-07-19 10:18:19 +00:00
Les applications installées sur l'appareil peuvent être listées avec la commande :
```bash
$ python dump.py -l
```
Pour extraire une application spécifique, comme Telegram, la commande suivante est utilisée :
```bash
$ 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**](https://github.com/ios-control/ios-deploy).
#### **flexdecrypt**
L'outil [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), ainsi que son wrapper [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), 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 :
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
flexdump list
flexdump dump Twitter.app
2021-07-19 10:18:19 +00:00
```
#### **bagbak**
[**bagbak**](https://github.com/ChiChou/bagbak), un autre outil basé sur Frida, nécessite un appareil jailbreaké pour le décryptage des applications :
```bash
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**](https://github.com/as0ler/r2flutch).
### **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](https://yalujailbreak.net/how-to-use-cydia-impactor/).
- **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
* [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
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}