mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['mobile-pentesting/ios-pentesting/README.md'] to fr
This commit is contained in:
parent
39ca008942
commit
276d3a44f2
1 changed files with 343 additions and 164 deletions
|
@ -12,13 +12,13 @@ Accédez dès aujourd'hui :
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -30,7 +30,7 @@ D'autres façons de soutenir HackTricks :
|
|||
|
||||
## Environnement de test
|
||||
|
||||
Sur cette page, vous trouverez des informations sur le **simulateur iOS**, les **émulateurs** et le **jailbreak** :
|
||||
Sur cette page, vous trouverez des informations sur le **simulateur iOS**, les **émulateurs** et le **jailbreaking** :
|
||||
|
||||
{% content-ref url="ios-testing-environment.md" %}
|
||||
[ios-testing-environment.md](ios-testing-environment.md)
|
||||
|
@ -38,7 +38,7 @@ Sur cette page, vous trouverez des informations sur le **simulateur iOS**, les *
|
|||
|
||||
## Analyse initiale
|
||||
|
||||
### Opérations de test iOS de base
|
||||
### Opérations de test de base sur iOS
|
||||
|
||||
Pendant le test, **plusieurs opérations seront suggérées** (connexion à l'appareil, lecture/écriture/téléchargement de fichiers, utilisation de certains outils...). Par conséquent, si vous ne savez pas comment effectuer l'une de ces actions, veuillez **commencer par lire la page** :
|
||||
|
||||
|
@ -48,7 +48,7 @@ Pendant le test, **plusieurs opérations seront suggérées** (connexion à l'ap
|
|||
|
||||
{% hint style="info" %}
|
||||
Pour les étapes suivantes, **l'application doit être installée** sur l'appareil et vous devez déjà avoir obtenu le **fichier IPA** de l'application.\
|
||||
Consultez la page [Opérations de test iOS de base](basic-ios-testing-operations.md) pour apprendre comment faire cela.
|
||||
Lisez la page [Opérations de test de base sur iOS](basic-ios-testing-operations.md) pour apprendre comment faire cela.
|
||||
{% endhint %}
|
||||
|
||||
### Analyse statique de base
|
||||
|
@ -57,12 +57,12 @@ Il est recommandé d'utiliser l'outil [**MobSF**](https://github.com/MobSF/Mobil
|
|||
|
||||
Identification des **protections présentes dans le binaire** :
|
||||
|
||||
* **PIE (Executable Position Independent)** : Lorsqu'il est activé, l'application se charge à une adresse mémoire aléatoire à chaque lancement, ce qui rend plus difficile de prédire son adresse mémoire initiale.
|
||||
* **PIE (Executable à adresses indépendantes)** : Lorsqu'il est activé, l'application se charge à une adresse mémoire aléatoire à chaque lancement, ce qui rend plus difficile de prédire son adresse mémoire initiale.
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # Il devrait inclure le drapeau PIE
|
||||
```
|
||||
* **Canaries de pile** : Pour valider l'intégrité de la pile, une valeur de « canary » est placée sur la pile avant d'appeler une fonction et est validée à nouveau une fois que la fonction se termine.
|
||||
* **Canaris de pile** : Pour valider l'intégrité de la pile, une valeur de « canari » est placée sur la pile avant d'appeler une fonction et est validée à nouveau une fois que la fonction se termine.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # Il devrait inclure les symboles : stack_chk_guard et stack_chk_fail
|
||||
|
@ -87,11 +87,11 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Le cryptid devrait ê
|
|||
otool -Iv <app> | grep -w "_CC_MD5"
|
||||
otool -Iv <app> | grep -w "_CC_SHA1"
|
||||
|
||||
# Sur Linux
|
||||
# Sur linux
|
||||
grep -iER "_CC_MD5"
|
||||
grep -iER "_CC_SHA1"
|
||||
```
|
||||
* **Fonctions de génération aléatoire non sécurisées**
|
||||
* **Fonctions de génération de nombres aléatoires non sécurisées**
|
||||
|
||||
```bash
|
||||
# Sur l'appareil iOS
|
||||
|
@ -99,7 +99,7 @@ otool -Iv <app> | grep -w "_random"
|
|||
otool -Iv <app> | grep -w "_srand"
|
||||
otool -Iv <app> | grep -w "_rand"
|
||||
|
||||
# Sur Linux
|
||||
# Sur linux
|
||||
grep -iER "_random"
|
||||
grep -iER "_srand"
|
||||
grep -iER "_rand"
|
||||
|
@ -110,7 +110,7 @@ grep -iER "_rand"
|
|||
# Sur l'appareil iOS
|
||||
otool -Iv <app> | grep -w "_malloc"
|
||||
|
||||
# Sur Linux
|
||||
# Sur linux
|
||||
grep -iER "_malloc"
|
||||
```
|
||||
* **Fonctions non sécurisées et vulnérables**
|
||||
|
@ -129,7 +129,7 @@ otool -Iv <app> | grep -w "_sprintf"
|
|||
otool -Iv <app> | grep -w "_printf"
|
||||
otool -Iv <app> | grep -w "_vsprintf"
|
||||
|
||||
# Sur Linux
|
||||
# Sur linux
|
||||
grep -R "_gets"
|
||||
grep -iER "_memcpy"
|
||||
grep -iER "_strncpy"
|
||||
|
@ -164,7 +164,7 @@ PID Name Identifier
|
|||
```
|
||||
### Énumération de base & Hooking
|
||||
|
||||
Apprenez à **énumérer les composants de l'application** et comment **accrocher facilement les méthodes et les classes** avec objection:
|
||||
Apprenez à **énumérer les composants de l'application** et comment **accrocher facilement des méthodes et des classes** avec objection :
|
||||
|
||||
{% content-ref url="ios-hooking-with-objection.md" %}
|
||||
[ios-hooking-with-objection.md](ios-hooking-with-objection.md)
|
||||
|
@ -174,26 +174,26 @@ Apprenez à **énumérer les composants de l'application** et comment **accroche
|
|||
|
||||
La structure d'un fichier **IPA** est essentiellement celle d'un **paquet compressé**. En renommant son extension en `.zip`, il peut être **décompressé** pour révéler son contenu. Dans cette structure, un **Bundle** représente une application entièrement empaquetée prête pour l'installation. À l'intérieur, vous trouverez un répertoire nommé `<NOM>.app`, qui encapsule les ressources de l'application.
|
||||
|
||||
* **`Info.plist`**: Ce fichier contient des détails de configuration spécifiques de l'application.
|
||||
* **`_CodeSignature/`**: Ce répertoire inclut un fichier plist qui contient une signature, assurant l'intégrité de tous les fichiers dans le bundle.
|
||||
* **`Assets.car`**: Une archive compressée qui stocke des fichiers d'actifs tels que des icônes.
|
||||
* **`Frameworks/`**: Ce dossier contient les bibliothèques natives de l'application, qui peuvent être sous forme de fichiers `.dylib` ou `.framework`.
|
||||
* **`PlugIns/`**: Cela peut inclure des extensions de l'application, appelées fichiers `.appex`, bien qu'ils ne soient pas toujours présents.
|
||||
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Il est utilisé pour sauvegarder les données permanentes de votre application pour une utilisation hors ligne, mettre en cache des données temporaires et ajouter des fonctionnalités d'annulation à votre application sur un seul appareil. Pour synchroniser les données sur plusieurs appareils dans un seul compte iCloud, Core Data reflète automatiquement votre schéma dans un conteneur CloudKit.
|
||||
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Le fichier `PkgInfo` est un moyen alternatif de spécifier les codes de type et de créateur de votre application ou bundle.
|
||||
* **en.lproj, fr.proj, Base.lproj**: Sont les packs de langues qui contiennent des ressources pour ces langues spécifiques, et une ressource par défaut au cas où une langue n'est pas prise en charge.
|
||||
* **Sécurité**: Le répertoire `_CodeSignature/` joue un rôle critique dans la sécurité de l'application en vérifiant l'intégrité de tous les fichiers regroupés grâce à des signatures numériques.
|
||||
* **Gestion des actifs**: Le fichier `Assets.car` utilise la compression pour gérer efficacement les actifs graphiques, essentiels pour optimiser les performances de l'application et réduire sa taille globale.
|
||||
* **Frameworks et PlugIns**: Ces répertoires soulignent la modularité des applications iOS, permettant aux développeurs d'inclure des bibliothèques de code réutilisables (`Frameworks/`) et d'étendre les fonctionnalités de l'application (`PlugIns/`).
|
||||
* **Localisation**: La structure prend en charge plusieurs langues, facilitant la portée mondiale de l'application en incluant des ressources pour des packs de langues spécifiques.
|
||||
* **`Info.plist`** : Ce fichier contient des détails de configuration spécifiques de l'application.
|
||||
* **`_CodeSignature/`** : Ce répertoire inclut un fichier plist qui contient une signature, assurant l'intégrité de tous les fichiers dans le bundle.
|
||||
* **`Assets.car`** : Une archive compressée qui stocke des fichiers d'actifs tels que des icônes.
|
||||
* **`Frameworks/`** : Ce dossier contient les bibliothèques natives de l'application, qui peuvent être sous forme de fichiers `.dylib` ou `.framework`.
|
||||
* **`PlugIns/`** : Cela peut inclure des extensions de l'application, appelées fichiers `.appex`, bien qu'ils ne soient pas toujours présents.
|
||||
* [**`Core Data`**](https://developer.apple.com/documentation/coredata) : Il est utilisé pour sauvegarder les données permanentes de votre application pour une utilisation hors ligne, mettre en cache des données temporaires, et ajouter une fonctionnalité d'annulation à votre application sur un seul appareil. Pour synchroniser les données sur plusieurs appareils dans un seul compte iCloud, Core Data reflète automatiquement votre schéma dans un conteneur CloudKit.
|
||||
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html) : Le fichier `PkgInfo` est une façon alternative de spécifier les codes de type et de créateur de votre application ou bundle.
|
||||
* **en.lproj, fr.proj, Base.lproj** : Sont les packs de langues qui contiennent des ressources pour ces langues spécifiques, et une ressource par défaut au cas où une langue n'est pas prise en charge.
|
||||
* **Sécurité** : Le répertoire `_CodeSignature/` joue un rôle critique dans la sécurité de l'application en vérifiant l'intégrité de tous les fichiers regroupés via des signatures numériques.
|
||||
* **Gestion des actifs** : Le fichier `Assets.car` utilise la compression pour gérer efficacement les actifs graphiques, crucial pour optimiser les performances de l'application et réduire sa taille globale.
|
||||
* **Cadres et PlugIns** : Ces répertoires soulignent la modularité des applications iOS, permettant aux développeurs d'inclure des bibliothèques de code réutilisables (`Frameworks/`) et d'étendre la fonctionnalité de l'application (`PlugIns/`).
|
||||
* **Localisation** : La structure prend en charge plusieurs langues, facilitant la portée mondiale de l'application en incluant des ressources pour des packs de langues spécifiques.
|
||||
|
||||
**Info.plist**
|
||||
|
||||
Le **Info.plist** sert de pierre angulaire pour les applications iOS, encapsulant les données de configuration clés sous forme de paires **clé-valeur**. Ce fichier est requis non seulement pour les applications, mais aussi pour les extensions d'application et les frameworks inclus. Il est structuré en XML ou en format binaire et contient des informations critiques allant des autorisations d'application aux configurations de sécurité. Pour une exploration détaillée des clés disponibles, on peut se référer à la [**Documentation du développeur Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
|
||||
Le **Info.plist** sert de pierre angulaire pour les applications iOS, encapsulant des données de configuration clés sous forme de paires **clé-valeur**. Ce fichier est requis non seulement pour les applications, mais aussi pour les extensions d'application et les frameworks inclus. Il est structuré en XML ou en format binaire et contient des informations critiques allant des autorisations d'application aux configurations de sécurité. Pour une exploration détaillée des clés disponibles, on peut se référer à la [**Documentation du développeur Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
|
||||
|
||||
Pour ceux qui souhaitent travailler avec ce fichier dans un format plus accessible, la conversion en XML peut être réalisée facilement en utilisant `plutil` sur macOS (disponible nativement sur les versions 10.2 et ultérieures) ou `plistutil` sur Linux. Les commandes de conversion sont les suivantes:
|
||||
Pour ceux qui souhaitent travailler avec ce fichier dans un format plus accessible, la conversion en XML peut être réalisée facilement en utilisant `plutil` sur macOS (disponible nativement sur les versions 10.2 et ultérieures) ou `plistutil` sur Linux. Les commandes de conversion sont les suivantes :
|
||||
|
||||
* **Pour macOS**:
|
||||
* **Pour macOS** :
|
||||
```bash
|
||||
$ plutil -convert xml1 Info.plist
|
||||
```
|
||||
|
@ -202,13 +202,19 @@ $ plutil -convert xml1 Info.plist
|
|||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Parmi la myriade d'informations que le fichier **Info.plist** peut divulguer, les entrées notables incluent les chaînes d'autorisation de l'application (`UsageDescription`), les schémas d'URL personnalisés (`CFBundleURLTypes`), et les configurations pour la sécurité du transport de l'application (`NSAppTransportSecurity`). Ces entrées, ainsi que d'autres comme les types de documents personnalisés exportés/importés (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), peuvent être facilement localisées en inspectant le fichier ou en utilisant une simple commande `grep`:
|
||||
Parmi la myriade d'informations que le fichier **Info.plist** peut divulguer, les entrées notables incluent les chaînes de permissions de l'application (`UsageDescription`), les schémas d'URL personnalisés (`CFBundleURLTypes`), et les configurations pour la sécurité du transport de l'application (`NSAppTransportSecurity`). Ces entrées, ainsi que d'autres comme les types de documents personnalisés exportés/importés (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), peuvent être facilement localisés en inspectant le fichier ou en utilisant une simple commande `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
**Chemins des données**
|
||||
|
||||
Dans l'environnement iOS, les répertoires sont spécifiquement désignés pour les **applications système** et les **applications installées par l'utilisateur**. Les applications système résident dans le répertoire `/Applications`, tandis que les applications installées par l'utilisateur sont placées sous `/private/var/containers/`. Ces applications se voient attribuer un identifiant unique connu sous le nom d'**UUID de 128 bits**, rendant la tâche de localiser manuellement le dossier d'une application difficile en raison du caractère aléatoire des noms de répertoire.
|
||||
Dans l'environnement iOS, des répertoires sont spécifiquement désignés pour les **applications système** et les **applications installées par l'utilisateur**. Les applications système résident dans le répertoire `/Applications`, tandis que les applications installées par l'utilisateur sont placées sous `/var/mobile/containers/Data/Application/`. Ces applications se voient attribuer un identifiant unique connu sous le nom d'**UUID de 128 bits**, rendant la tâche de localiser manuellement le dossier d'une application difficile en raison du caractère aléatoire des noms de répertoire.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Comme les applications sur iOS doivent être isolées, chaque application aura également un dossier à l'intérieur de **`$HOME/Library/Containers`** avec l'**`CFBundleIdentifier`** de l'application comme nom de dossier.
|
||||
|
||||
Cependant, les deux dossiers (dossiers de données et de conteneurs) contiennent le fichier **`.com.apple.mobile_container_manager.metadata.plist`** qui lie les deux fichiers dans la clé `MCMetadataIdentifier`).
|
||||
{% endhint %}
|
||||
|
||||
Pour faciliter la découverte du répertoire d'installation d'une application installée par l'utilisateur, l'outil **objection** fournit une commande utile, `env`. Cette commande révèle des informations détaillées sur le répertoire de l'application en question. Voici un exemple d'utilisation de cette commande:
|
||||
```bash
|
||||
|
@ -221,7 +227,7 @@ CachesDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
|||
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
|
||||
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
|
||||
```
|
||||
Alternativement, le nom de l'application peut être recherché dans `/private/var/containers` en utilisant la commande `find`:
|
||||
Alternativement, le nom de l'application peut être recherché dans `/private/var/containers` en utilisant la commande `find` :
|
||||
```bash
|
||||
find /private/var/containers -name "Progname*"
|
||||
```
|
||||
|
@ -232,44 +238,44 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
|||
```
|
||||
**Répertoire du bundle :**
|
||||
|
||||
- **AppName.app**
|
||||
- Il s'agit du Bundle de l'application tel que vu précédemment dans l'IPA, il contient des données d'application essentielles, du contenu statique ainsi que le binaire compilé de l'application.
|
||||
- Ce répertoire est visible par les utilisateurs, mais **les utilisateurs ne peuvent pas y écrire**.
|
||||
- Le contenu de ce répertoire n'est **pas sauvegardé**.
|
||||
- Le contenu de ce dossier est utilisé pour **valider la signature du code**.
|
||||
* **AppName.app**
|
||||
* Il s'agit du Bundle de l'application tel que vu précédemment dans l'IPA, il contient des données d'application essentielles, du contenu statique ainsi que le binaire compilé de l'application.
|
||||
* Ce répertoire est visible par les utilisateurs, mais **les utilisateurs ne peuvent pas y écrire**.
|
||||
* Le contenu de ce répertoire n'est **pas sauvegardé**.
|
||||
* Les contenus de ce dossier sont utilisés pour **valider la signature du code**.
|
||||
|
||||
**Répertoire des données :**
|
||||
|
||||
- **Documents/**
|
||||
- Contient toutes les données générées par l'utilisateur. L'utilisateur final de l'application initie la création de ces données.
|
||||
- Visible par les utilisateurs et **les utilisateurs peuvent y écrire**.
|
||||
- Le contenu de ce répertoire est **sauvegardé**.
|
||||
- L'application peut désactiver les chemins en définissant `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/**
|
||||
- Contient tous les **fichiers qui ne sont pas spécifiques à l'utilisateur**, tels que les **caches**, les **préférences**, les **cookies** et les fichiers de configuration de liste de propriétés (plist).
|
||||
- Les applications iOS utilisent généralement les sous-répertoires `Application Support` et `Caches`, mais l'application peut créer des sous-répertoires personnalisés.
|
||||
- **Library/Caches/**
|
||||
- Contient des fichiers mis en cache **semi-persistants**.
|
||||
- Invisible pour les utilisateurs et **les utilisateurs ne peuvent pas y écrire**.
|
||||
- Le contenu de ce répertoire n'est **pas sauvegardé**.
|
||||
- Le système d'exploitation peut supprimer automatiquement les fichiers de ce répertoire lorsque l'application ne s'exécute pas et que l'espace de stockage est insuffisant.
|
||||
- **Library/Application Support/**
|
||||
- Contient des **fichiers persistants** nécessaires au fonctionnement de l'application.
|
||||
- **Invisible** pour les utilisateurs et les utilisateurs ne peuvent pas y écrire.
|
||||
- Le contenu de ce répertoire est **sauvegardé**.
|
||||
- L'application peut désactiver les chemins en définissant `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/Preferences/**
|
||||
- Utilisé pour stocker des propriétés qui peuvent **persister même après le redémarrage d'une application**.
|
||||
- Les informations sont enregistrées, non chiffrées, à l'intérieur du bac à sable de l'application dans un fichier plist appelé \[BUNDLE\_ID].plist.
|
||||
- Toutes les paires clé/valeur stockées à l'aide de `NSUserDefaults` peuvent être trouvées dans ce fichier.
|
||||
- **tmp/**
|
||||
- Utilisez ce répertoire pour écrire des **fichiers temporaires** qui n'ont pas besoin de persister entre les lancements de l'application.
|
||||
- Contient des fichiers mis en cache non persistants.
|
||||
- **Invisible** pour les utilisateurs.
|
||||
- Le contenu de ce répertoire n'est pas sauvegardé.
|
||||
- Le système d'exploitation peut supprimer automatiquement les fichiers de ce répertoire lorsque l'application ne s'exécute pas et que l'espace de stockage est insuffisant.
|
||||
* **Documents/**
|
||||
* Contient toutes les données générées par l'utilisateur. L'utilisateur final de l'application initie la création de ces données.
|
||||
* Visible par les utilisateurs et **les utilisateurs peuvent y écrire**.
|
||||
* Le contenu de ce répertoire est **sauvegardé**.
|
||||
* L'application peut désactiver les chemins en définissant `NSURLIsExcludedFromBackupKey`.
|
||||
* **Library/**
|
||||
* Contient tous les **fichiers qui ne sont pas spécifiques à l'utilisateur**, tels que les **caches**, les **préférences**, les **cookies** et les fichiers de configuration de liste de propriétés (plist).
|
||||
* Les applications iOS utilisent généralement les sous-répertoires `Application Support` et `Caches`, mais l'application peut créer des sous-répertoires personnalisés.
|
||||
* **Library/Caches/**
|
||||
* Contient des fichiers mis en cache **semi-persistants**.
|
||||
* Invisible pour les utilisateurs et **les utilisateurs ne peuvent pas y écrire**.
|
||||
* Le contenu de ce répertoire n'est **pas sauvegardé**.
|
||||
* Le système d'exploitation peut supprimer automatiquement les fichiers de ce répertoire lorsque l'application ne s'exécute pas et que l'espace de stockage est insuffisant.
|
||||
* **Library/Application Support/**
|
||||
* Contient des **fichiers persistants** nécessaires au fonctionnement de l'application.
|
||||
* **Invisible** pour les **utilisateurs** et les utilisateurs ne peuvent pas y écrire.
|
||||
* Le contenu de ce répertoire est **sauvegardé**.
|
||||
* L'application peut désactiver les chemins en définissant `NSURLIsExcludedFromBackupKey`.
|
||||
* **Library/Preferences/**
|
||||
* Utilisé pour stocker des propriétés qui peuvent **persister même après le redémarrage d'une application**.
|
||||
* Les informations sont enregistrées, non chiffrées, à l'intérieur du bac à sable de l'application dans un fichier plist appelé \[BUNDLE\_ID].plist.
|
||||
* Toutes les paires clé/valeur stockées à l'aide de `NSUserDefaults` peuvent être trouvées dans ce fichier.
|
||||
* **tmp/**
|
||||
* Utilisez ce répertoire pour écrire des **fichiers temporaires** qui n'ont pas besoin de persister entre les lancements de l'application.
|
||||
* Contient des fichiers mis en cache non persistants.
|
||||
* **Invisible** pour les utilisateurs.
|
||||
* Le contenu de ce répertoire n'est pas sauvegardé.
|
||||
* Le système d'exploitation peut supprimer automatiquement les fichiers de ce répertoire lorsque l'application ne s'exécute pas et que l'espace de stockage est insuffisant.
|
||||
|
||||
Jetons un coup d'œil plus attentif au répertoire du Bundle de l'Application (.app) d'iGoat-Swift à l'intérieur du répertoire Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`) :
|
||||
Jetons un coup d'œil plus attentif au répertoire du Bundle de l'Application (.app) d'iGoat-Swift à l'intérieur du répertoire du Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`) :
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||
NSFileType Perms NSFileProtection ... Name
|
||||
|
@ -366,7 +372,7 @@ Cependant, les meilleures options pour désassembler le binaire sont : [**Hopper
|
|||
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour créer facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour créer et **automatiser des workflows** facilement grâce aux outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -380,19 +386,19 @@ Pour en savoir plus sur la manière dont iOS stocke les données sur l'appareil,
|
|||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Les emplacements suivants pour stocker des informations doivent être vérifiés **juste après l'installation de l'application**, **après avoir vérifié toutes les fonctionnalités** de l'application et même après **s'être déconnecté d'un utilisateur et s'être connecté à un autre**.\
|
||||
Les emplacements suivants pour stocker des informations doivent être vérifiés **juste après l'installation de l'application**, **après avoir vérifié toutes les fonctionnalités** de l'application et même après **déconnexion d'un utilisateur et connexion d'un autre**.\
|
||||
L'objectif est de trouver des **informations sensibles non protégées** de l'application (mots de passe, jetons), de l'utilisateur actuel et des utilisateurs précédemment connectés.
|
||||
{% endhint %}
|
||||
|
||||
### Plist
|
||||
|
||||
Les fichiers **plist** sont des fichiers XML structurés qui **contiennent des paires clé-valeur**. C'est une façon de stocker des données persistantes, donc parfois vous pouvez trouver des **informations sensibles dans ces fichiers**. Il est recommandé de vérifier ces fichiers après l'installation de l'application et après l'avoir utilisée intensivement pour voir si de nouvelles données sont écrites.
|
||||
Les fichiers **plist** sont des fichiers XML structurés qui **contiennent des paires clé-valeur**. C'est une façon de stocker des données persistantes, donc parfois vous pouvez trouver **des informations sensibles dans ces fichiers**. Il est recommandé de vérifier ces fichiers après l'installation de l'application et après l'avoir utilisée intensivement pour voir si de nouvelles données sont écrites.
|
||||
|
||||
La manière la plus courante de persister les données dans les fichiers plist est par l'utilisation de **NSUserDefaults**. Ce fichier plist est enregistré à l'intérieur du bac à sable de l'application dans **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
La classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fournit une interface programmatique pour interagir avec le système par défaut. Le système par défaut permet à une application de personnaliser son comportement en fonction des **préférences de l'utilisateur**. Les données enregistrées par `NSUserDefaults` peuvent être consultées dans le bundle de l'application. Cette classe stocke des **données** dans un **fichier plist**, mais elle est destinée à être utilisée avec de petites quantités de données.
|
||||
|
||||
Ces données ne peuvent pas être directement consultées via un ordinateur de confiance, mais peuvent être consultées en effectuant une **sauvegarde**.
|
||||
Ces données ne peuvent plus être directement consultées via un ordinateur de confiance, mais peuvent être consultées en effectuant une **sauvegarde**.
|
||||
|
||||
Vous pouvez **extraire** les informations enregistrées en utilisant **`NSUserDefaults`** en utilisant `ios nsuserdefaults get` d'objection.
|
||||
|
||||
|
@ -411,7 +417,7 @@ $ plutil -convert xml1 Info.plist
|
|||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Au sein d'une session Objection :** Pour analyser les applications mobiles, une commande spécifique vous permet de convertir directement les fichiers plist :
|
||||
**Dans une session Objection :** Pour analyser les applications mobiles, une commande spécifique vous permet de convertir directement les fichiers plist :
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
|
@ -422,8 +428,6 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
|||
Vous pouvez trouver les informations SQLite Core Data d'une application dans le chemin `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
**Si vous pouvez ouvrir le SQLite et accéder à des informations sensibles, alors vous avez trouvé une mauvaise configuration.**
|
||||
|
||||
{% code title="Code from iGoat" %}
|
||||
```objectivec
|
||||
-(void)storeDetails {
|
||||
AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate);
|
||||
|
@ -462,7 +466,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
|
|||
```
|
||||
### Bases de données en temps réel Firebase
|
||||
|
||||
Les développeurs peuvent **stocker et synchroniser des données** dans une **base de données hébergée dans le cloud NoSQL** via Firebase Real-Time Databases. Stockées au format JSON, les données sont synchronisées en temps réel avec tous les clients connectés.
|
||||
Les développeurs peuvent **stocker et synchroniser des données** dans une **base de données hébergée dans le cloud NoSQL** grâce aux Bases de données en temps réel Firebase. Stockées au format JSON, les données sont synchronisées en temps réel avec tous les clients connectés.
|
||||
|
||||
Vous pouvez trouver comment vérifier les bases de données Firebase mal configurées ici:
|
||||
|
||||
|
@ -472,9 +476,9 @@ Vous pouvez trouver comment vérifier les bases de données Firebase mal configu
|
|||
|
||||
### Bases de données Realm
|
||||
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) et [Realm Swift](https://realm.io/docs/swift/latest/) offrent une alternative puissante pour le stockage de données, non fournie par Apple. Par défaut, ils **stockent les données non chiffrées**, avec le chiffrement disponible via une configuration spécifique.
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) et [Realm Swift](https://realm.io/docs/swift/latest/) offrent une alternative puissante pour le stockage de données, non fournie par Apple. Par défaut, ils **stockent des données non chiffrées**, avec le chiffrement disponible via une configuration spécifique.
|
||||
|
||||
Les bases de données se trouvent à : `/private/var/mobile/Containers/Data/Application/{APPID}`. Pour explorer ces fichiers, on peut utiliser des commandes comme :
|
||||
Les bases de données se trouvent à : `/private/var/mobile/Containers/Data/Application/{APPID}`. Pour explorer ces fichiers, on peut utiliser des commandes telles que :
|
||||
```bash
|
||||
iPhone:/private/var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Documents root# ls
|
||||
default.realm default.realm.lock default.realm.management/ default.realm.note|
|
||||
|
@ -483,7 +487,7 @@ $ find ./ -name "*.realm*"
|
|||
```
|
||||
Pour visualiser ces fichiers de base de données, l'outil [**Realm Studio**](https://github.com/realm/realm-studio) est recommandé.
|
||||
|
||||
Pour implémenter le chiffrement dans une base de données Realm, le code suivant peut être utilisé :
|
||||
Pour implémenter le chiffrement dans une base de données Realm, le snippet de code suivant peut être utilisé :
|
||||
```swift
|
||||
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
|
||||
let config = Realm.Configuration(encryptionKey: getKey())
|
||||
|
@ -505,7 +509,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
|||
```
|
||||
### Cookies
|
||||
|
||||
iOS stocke les cookies des applications dans le **`Library/Cookies/cookies.binarycookies`** à l'intérieur du dossier de chaque application. Cependant, les développeurs décident parfois de les sauvegarder dans le **trousseau** car le **fichier de cookies mentionné peut être accédé dans les sauvegardes**.
|
||||
iOS stocke les cookies des applications dans le **`Library/Cookies/cookies.binarycookies`** à l'intérieur de chaque dossier d'application. Cependant, les développeurs décident parfois de les sauvegarder dans le **trousseau** car le **fichier de cookie mentionné peut être accédé dans les sauvegardes**.
|
||||
|
||||
Pour inspecter le fichier de cookies, vous pouvez utiliser [**ce script python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou utiliser la commande **`ios cookies get`** d'objection.\
|
||||
**Vous pouvez également utiliser objection pour** convertir ces fichiers en format JSON et inspecter les données.
|
||||
|
@ -526,7 +530,7 @@ Pour inspecter le fichier de cookies, vous pouvez utiliser [**ce script python**
|
|||
```
|
||||
### Cache
|
||||
|
||||
Par défaut, NSURLSession stocke des données, telles que les **requêtes et réponses HTTP dans la base de données Cache.db**. Cette base de données peut contenir des **données sensibles**, si des jetons, des noms d'utilisateur ou toute autre information sensible ont été mises en cache. Pour trouver les informations mises en cache, ouvrez le répertoire de données de l'application (`/var/mobile/Containers/Data/Application/<UUID>`) et allez à `/Library/Caches/<Bundle Identifier>`. Le **cache WebKit est également stocké dans le fichier Cache.db**. **Objection** peut ouvrir et interagir avec la base de données avec la commande `sqlite connect Cache.db`, car il s'agit d'une **base de données SQLite normale**.
|
||||
Par défaut, NSURLSession stocke des données, telles que les **requêtes HTTP et les réponses dans la base de données Cache.db**. Cette base de données peut contenir des **données sensibles**, si des jetons, des noms d'utilisateur ou toute autre information sensible ont été mises en cache. Pour trouver les informations mises en cache, ouvrez le répertoire de données de l'application (`/var/mobile/Containers/Data/Application/<UUID>`) et allez dans `/Library/Caches/<Bundle Identifier>`. Le **cache WebKit est également stocké dans le fichier Cache.db**. **Objection** peut ouvrir et interagir avec la base de données avec la commande `sqlite connect Cache.db`, car il s'agit d'une **base de données SQLite normale**.
|
||||
|
||||
Il est **recommandé de désactiver la mise en cache de ces données**, car elles peuvent contenir des informations sensibles dans la requête ou la réponse. La liste ci-dessous montre différentes façons d'y parvenir :
|
||||
|
||||
|
@ -539,16 +543,16 @@ Cette méthode supprimera toutes les requêtes et réponses mises en cache du fi
|
|||
|
||||
[Documentation Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) :
|
||||
|
||||
`Un objet de configuration de session éphémère est similaire à un objet de configuration de session par défaut (voir default), sauf que l'objet de session correspondant ne stocke pas de caches, de magasins de certificats ou de données liées à la session sur le disque. Au lieu de cela, les données liées à la session sont stockées en RAM. La seule fois où une session éphémère écrit des données sur le disque est lorsque vous lui demandez d'écrire le contenu d'une URL dans un fichier.`
|
||||
`Un objet de configuration de session éphémère est similaire à une configuration de session par défaut (voir default), sauf que l'objet de session correspondant ne stocke pas de caches, de magasins de certificats ou de données liées à la session sur le disque. Au lieu de cela, les données liées à la session sont stockées en RAM. La seule fois où une session éphémère écrit des données sur le disque est lorsque vous lui demandez d'écrire le contenu d'une URL dans un fichier.`
|
||||
3. Le cache peut également être désactivé en définissant la politique de cache sur [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Cela désactivera le stockage du cache de quelque manière que ce soit, que ce soit en mémoire ou sur disque.
|
||||
|
||||
### Snapshots
|
||||
|
||||
Chaque fois que vous appuyez sur le bouton d'accueil, iOS **prend un instantané de l'écran actuel** pour pouvoir effectuer la transition vers l'application de manière plus fluide. Cependant, si des **données sensibles** sont présentes à l'écran actuel, elles seront **enregistrées** dans l'**image** (qui **persiste** **à travers** les **redémarrages**). Ce sont les instantanés auxquels vous pouvez également accéder en double-cliquant sur l'écran d'accueil pour passer d'une application à l'autre.
|
||||
Chaque fois que vous appuyez sur le bouton d'accueil, iOS **prend un instantané de l'écran actuel** pour pouvoir effectuer la transition vers l'application de manière plus fluide. Cependant, si des **données sensibles** sont présentes à l'écran actuel, elles seront **enregistrées** dans l'**image** (qui **persiste** **à travers** les **redémarrages**). Ce sont les instantanés auxquels vous pouvez également accéder en double-cliquant sur l'écran d'accueil pour basculer entre les applications.
|
||||
|
||||
Sauf si l'iPhone est jailbreaké, l'**attaquant** doit avoir **accès** au **dispositif** **débloqué** pour voir ces captures d'écran. Par défaut, le dernier instantané est stocké dans le sandbox de l'application dans le dossier `Library/Caches/Snapshots/` ou `Library/SplashBoard/Snapshots` (les ordinateurs de confiance ne peuvent pas accéder au système de fichiers à partir de iOS 7.0).
|
||||
Sauf si l'iPhone est jailbreaké, l'**attaquant** doit avoir **accès** au **dispositif** **débloqué** pour voir ces captures d'écran. Par défaut, le dernier instantané est stocké dans le sandbox de l'application dans le dossier `Library/Caches/Snapshots/` ou `Library/SplashBoard/Snapshots` (les ordinateurs de confiance ne peuvent pas accéder au système de fichiers à partir de iOX 7.0).
|
||||
|
||||
Une façon de prévenir ce comportement indésirable est de mettre un écran vide ou de supprimer les données sensibles avant de prendre l'instantané en utilisant la fonction `ApplicationDidEnterBackground()`.
|
||||
Une façon de prévenir ce mauvais comportement est de mettre un écran vide ou de supprimer les données sensibles avant de prendre l'instantané en utilisant la fonction `ApplicationDidEnterBackground()`.
|
||||
|
||||
Voici une méthode de remédiation d'exemple qui définira une capture d'écran par défaut.
|
||||
|
||||
|
@ -567,7 +571,7 @@ func applicationWillEnterForeground(_ application: UIApplication) {
|
|||
backgroundImage?.removeFromSuperview()
|
||||
}
|
||||
```
|
||||
Objective-C:
|
||||
Objective-C :
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
|
@ -600,7 +604,7 @@ Pour extraire ces informations d'identification stockées, la commande `ios nsur
|
|||
|
||||
## **Claviers personnalisés et cache du clavier**
|
||||
|
||||
À partir d'iOS 8.0, les utilisateurs peuvent installer des extensions de clavier personnalisées, gérables sous **Réglages > Général > Clavier > Claviers**. Bien que ces claviers offrent une fonctionnalité étendue, ils posent un risque de journalisation des frappes et de transmission de données à des serveurs externes, bien que les utilisateurs soient informés des claviers nécessitant un accès réseau. Les applications peuvent, et doivent, restreindre l'utilisation des claviers personnalisés pour la saisie d'informations sensibles.
|
||||
À partir d'iOS 8.0, les utilisateurs peuvent installer des extensions de clavier personnalisées, qui sont gérables sous **Réglages > Général > Clavier > Claviers**. Bien que ces claviers offrent une fonctionnalité étendue, ils posent un risque de journalisation des frappes et de transmission de données à des serveurs externes, bien que les utilisateurs soient informés des claviers nécessitant un accès réseau. Les applications peuvent, et doivent, restreindre l'utilisation des claviers personnalisés pour la saisie d'informations sensibles.
|
||||
|
||||
**Recommandations en matière de sécurité :**
|
||||
|
||||
|
@ -610,7 +614,7 @@ Pour extraire ces informations d'identification stockées, la commande `ios nsur
|
|||
|
||||
### **Prévention de la mise en cache des champs de texte**
|
||||
|
||||
Le protocole [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) offre des propriétés pour gérer la correction automatique et la saisie de texte sécurisée, essentielles pour prévenir la mise en cache d'informations sensibles. Par exemple, la désactivation de la correction automatique et l'activation de la saisie de texte sécurisée peuvent être réalisées avec :
|
||||
Le [protocole UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) offre des propriétés pour gérer la correction automatique et la saisie de texte sécurisée, essentielles pour prévenir la mise en cache d'informations sensibles. Par exemple, la désactivation de la correction automatique et l'activation de la saisie de texte sécurisée peuvent être réalisées avec :
|
||||
```objectivec
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
|
@ -626,9 +630,9 @@ Le débogage du code implique souvent l'utilisation de **journaux**. Il y a un r
|
|||
|
||||
Malgré ces restrictions, un **attaquant ayant un accès physique** à un appareil déverrouillé peut toujours exploiter cela en connectant l'appareil à un ordinateur et **en lisant les journaux**. Il est important de noter que les journaux restent sur le disque même après la désinstallation de l'application.
|
||||
|
||||
Pour atténuer les risques, il est conseillé d'**interagir pleinement avec l'application**, en explorant toutes ses fonctionnalités et ses entrées pour s'assurer qu'aucune information sensible n'est enregistrée involontairement.
|
||||
Pour atténuer les risques, il est conseillé d'**interagir pleinement avec l'application**, en explorant toutes ses fonctionnalités et entrées pour s'assurer qu'aucune information sensible n'est enregistrée involontairement.
|
||||
|
||||
Lors de l'examen du code source de l'application pour des fuites potentielles, recherchez à la fois les **déclarations de journalisation prédéfinies** et **personnalisées** en utilisant des mots-clés tels que `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` pour les fonctions intégrées, et toute mention de `Logging` ou `Logfile` pour les implémentations personnalisées.
|
||||
Lors de l'examen du code source de l'application pour des fuites potentielles, recherchez à la fois les **déclarations de journalisation prédéfinies** et **personnalisées** en utilisant des mots-clés tels que `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` pour les fonctions intégrées, et toute mention de `Logging` ou `Logfile` pour des implémentations personnalisées.
|
||||
|
||||
### **Surveillance des journaux système**
|
||||
|
||||
|
@ -646,7 +650,7 @@ Sont utiles. De plus, **Xcode** fournit un moyen de collecter des journaux de co
|
|||
5. Déclenchez le problème que vous étudiez.
|
||||
6. Utilisez le bouton **Ouvrir la console** pour afficher les journaux dans une nouvelle fenêtre.
|
||||
|
||||
Pour des journaux plus avancés, se connecter à l'invite de commande de l'appareil et utiliser **socat** peut fournir une surveillance des journaux en temps réel :
|
||||
Pour des journaux plus avancés, se connecter à l'interpréteur de commandes de l'appareil et utiliser **socat** peut fournir une surveillance des journaux en temps réel :
|
||||
```bash
|
||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
```
|
||||
|
@ -657,7 +661,7 @@ Suivi des commandes pour observer les activités de journal, qui peuvent être i
|
|||
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire facilement et **automatiser des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -668,7 +672,7 @@ Les fonctionnalités de **sauvegarde automatique** sont intégrées à iOS, faci
|
|||
|
||||
### Risques de sécurité
|
||||
|
||||
L'inclusion des **applications installées et de leurs données** dans les sauvegardes soulève la question d'une **fuite de données potentielle** et du risque que les **modifications de sauvegarde puissent altérer la fonctionnalité de l'application**. Il est conseillé de **ne pas stocker d'informations sensibles en texte clair** dans le répertoire d'une application ou ses sous-répertoires pour atténuer ces risques.
|
||||
L'inclusion des **applications installées et de leurs données** dans les sauvegardes soulève la question d'une **fuite de données potentielle** et du risque que les **modifications de sauvegarde puissent altérer la fonctionnalité de l'application**. Il est conseillé de **ne pas stocker d'informations sensibles en texte brut** dans le répertoire d'une application ou ses sous-répertoires pour atténuer ces risques.
|
||||
|
||||
### Exclusion de fichiers des sauvegardes
|
||||
|
||||
|
@ -676,7 +680,7 @@ Les fichiers dans `Documents/` et `Library/Application Support/` sont sauvegard
|
|||
|
||||
### Test des vulnérabilités
|
||||
|
||||
Pour évaluer la sécurité de la sauvegarde d'une application, commencez par **créer une sauvegarde** en utilisant Finder, puis localisez-la en suivant les instructions de la [documentation officielle d'Apple](https://support.apple.com/en-us/HT204215). Analysez la sauvegarde pour repérer des données sensibles ou des configurations qui pourraient être modifiées pour affecter le comportement de l'application.
|
||||
Pour évaluer la sécurité de la sauvegarde d'une application, commencez par **créer une sauvegarde** en utilisant Finder, puis localisez-la en suivant les instructions de la [documentation officielle d'Apple](https://support.apple.com/en-us/HT204215). Analysez la sauvegarde pour y repérer des données sensibles ou des configurations qui pourraient être modifiées pour affecter le comportement de l'application.
|
||||
|
||||
Les informations sensibles peuvent être recherchées à l'aide d'outils en ligne de commande ou d'applications comme [iMazing](https://imazing.com). Pour les sauvegardes chiffrées, la présence de chiffrement peut être confirmée en vérifiant la clé "IsEncrypted" dans le fichier "Manifest.plist" à la racine de la sauvegarde.
|
||||
```xml
|
||||
|
@ -695,7 +699,7 @@ Pour traiter les sauvegardes chiffrées, les scripts Python disponibles dans le
|
|||
|
||||
### Modification du comportement de l'application
|
||||
|
||||
Un exemple de modification du comportement de l'application via des modifications de sauvegarde est démontré dans l'application de portefeuille bitcoin Bither (https://github.com/bither/bither-ios), où le code PIN de verrouillage de l'interface utilisateur est stocké dans `net.bither.plist` sous la clé **pin\_code**. En supprimant cette clé du plist et en restaurant la sauvegarde, l'exigence du code PIN est supprimée, offrant un accès illimité.
|
||||
Un exemple de modification du comportement de l'application via des modifications de sauvegarde est démontré dans l'application de portefeuille Bitcoin Bither (https://github.com/bither/bither-ios), où le code PIN de verrouillage de l'interface utilisateur est stocké dans `net.bither.plist` sous la clé **pin\_code**. En supprimant cette clé du plist et en restaurant la sauvegarde, l'exigence du code PIN est supprimée, offrant un accès illimité.
|
||||
|
||||
## Résumé sur les tests de mémoire pour les données sensibles
|
||||
|
||||
|
@ -703,7 +707,7 @@ Lorsqu'il s'agit d'informations sensibles stockées dans la mémoire d'une appli
|
|||
|
||||
## **Récupération et analyse d'un vidage de mémoire**
|
||||
|
||||
Pour les appareils jailbreakés et non jailbreakés, des outils tels que [objection](https://github.com/sensepost/objection) et [Fridump](https://github.com/Nightbringer21/fridump) permettent de faire un vidage de la mémoire du processus d'une application. Une fois le vidage effectué, l'analyse de ces données nécessite divers outils, en fonction de la nature des informations recherchées.
|
||||
Pour les appareils jailbreakés et non jailbreakés, des outils tels que [objection](https://github.com/sensepost/objection) et [Fridump](https://github.com/Nightbringer21/fridump) permettent de faire un vidage de la mémoire d'un processus d'application. Une fois le vidage effectué, l'analyse de ces données nécessite divers outils, en fonction de la nature des informations recherchées.
|
||||
|
||||
Pour extraire des chaînes d'un vidage de mémoire, des commandes telles que `strings` ou `rabin2 -zz` peuvent être utilisées :
|
||||
```bash
|
||||
|
@ -726,15 +730,15 @@ $ r2 <name_of_your_dump_file>
|
|||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
```
|
||||
## Cryptographie défaillante
|
||||
## Cryptographie Défaillante
|
||||
|
||||
### Processus de gestion de clés médiocres
|
||||
### Processus de Gestion de Clés Médiocres
|
||||
|
||||
Certains développeurs enregistrent des données sensibles dans le stockage local et les cryptent avec une clé codée/prévisible dans le code. Cela ne devrait pas être fait car une rétro-ingénierie pourrait permettre aux attaquants d'extraire les informations confidentielles.
|
||||
Certains développeurs enregistrent des données sensibles dans le stockage local et les cryptent avec une clé codée en dur/prévisible dans le code. Ceci ne devrait pas être fait car une rétro-ingénierie pourrait permettre aux attaquants d'extraire les informations confidentielles.
|
||||
|
||||
### Utilisation d'algorithmes non sécurisés et/ou obsolètes
|
||||
### Utilisation d'Algorithmes Insécurisés et/ou Obsolètes
|
||||
|
||||
Les développeurs ne devraient pas utiliser des **algorithmes obsolètes** pour effectuer des **vérifications** d'autorisation, **stocker** ou **envoyer** des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des **hashes** sont utilisés pour stocker des mots de passe par exemple, des **hashes résistants** aux attaques par force brute devraient être utilisés avec un sel.
|
||||
Les développeurs ne devraient pas utiliser des **algorithmes obsolètes** pour effectuer des **vérifications** d'autorisation, **stocker** ou **envoyer** des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des **hashes** sont utilisés pour stocker des mots de passe par exemple, des **hashes résistants** aux attaques par force brute devraient être utilisés avec du sel.
|
||||
|
||||
### Vérification
|
||||
|
||||
|
@ -750,7 +754,7 @@ Pour **plus d'informations** sur les API et bibliothèques cryptographiques iOS,
|
|||
|
||||
L'**authentification locale** joue un rôle crucial, surtout lorsqu'il s'agit de protéger l'accès à un point d'extrémité distant à travers des méthodes cryptographiques. L'essence ici est qu'une implémentation correcte est essentielle, sinon les mécanismes d'authentification locale peuvent être contournés.
|
||||
|
||||
Le [**framework d'authentification locale**](https://developer.apple.com/documentation/localauthentication) d'Apple et le [**trousseau**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) fournissent des API robustes aux développeurs pour faciliter les dialogues d'authentification utilisateur et gérer de manière sécurisée des données secrètes, respectivement. L'Enclave sécurisée sécurise l'empreinte digitale pour Touch ID, tandis que Face ID repose sur la reconnaissance faciale sans compromettre les données biométriques.
|
||||
Le [**framework d'authentification locale d'Apple**](https://developer.apple.com/documentation/localauthentication) et le [**trousseau**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) fournissent des API robustes aux développeurs pour faciliter les dialogues d'authentification utilisateur et gérer de manière sécurisée des données secrètes. L'Enclave sécurisée sécurise l'empreinte digitale pour Touch ID, tandis que Face ID repose sur la reconnaissance faciale sans compromettre les données biométriques.
|
||||
|
||||
Pour intégrer Touch ID/Face ID, les développeurs ont deux choix d'API :
|
||||
|
||||
|
@ -758,7 +762,7 @@ Pour intégrer Touch ID/Face ID, les développeurs ont deux choix d'API :
|
|||
* **`Security.framework`** pour un accès aux services de trousseau de bas niveau, sécurisant les données secrètes avec une authentification biométrique. Divers [enveloppes open-source](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) rendent l'accès au trousseau plus simple.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Cependant, à la fois `LocalAuthentication.framework` et `Security.framework` présentent des vulnérabilités, car ils retournent principalement des valeurs booléennes sans transmettre de données pour les processus d'authentification, les rendant susceptibles d'être contournés (voir [Ne me touchez pas de cette façon, par David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
Cependant, à la fois `LocalAuthentication.framework` et `Security.framework` présentent des vulnérabilités, car ils retournent principalement des valeurs booléennes sans transmettre de données pour les processus d'authentification, les rendant ainsi susceptibles d'être contournés (voir [Ne me touchez pas de cette façon, par David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
{% endhint %}
|
||||
|
||||
### Implémentation de l'authentification locale
|
||||
|
@ -772,7 +776,7 @@ Une authentification réussie est indiquée par une valeur de retour booléenne
|
|||
|
||||
### Authentification locale en utilisant le trousseau
|
||||
|
||||
L'implémentation de l'**authentification locale** dans les applications iOS implique l'utilisation des **API du trousseau** pour stocker de manière sécurisée des données secrètes telles que des jetons d'authentification. Ce processus garantit que les données ne peuvent être accédées que par l'utilisateur, en utilisant son code d'accès de l'appareil ou une authentification biométrique comme Touch ID.
|
||||
Implémenter l'**authentification locale** dans les applications iOS implique l'utilisation des **API de trousseau** pour stocker de manière sécurisée des données secrètes telles que des jetons d'authentification. Ce processus garantit que les données ne peuvent être accédées que par l'utilisateur, en utilisant son code d'accès de l'appareil ou une authentification biométrique comme Touch ID.
|
||||
|
||||
Le trousseau offre la possibilité de définir des éléments avec l'attribut `SecAccessControl`, qui restreint l'accès à l'élément jusqu'à ce que l'utilisateur s'authentifie avec succès via Touch ID ou le code d'accès de l'appareil. Cette fonctionnalité est cruciale pour renforcer la sécurité.
|
||||
|
||||
|
@ -820,55 +824,175 @@ if status == noErr {
|
|||
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
## Analyzing iOS Applications
|
||||
### Analyzing iOS Applications
|
||||
|
||||
### Static Analysis
|
||||
#### Static Analysis
|
||||
|
||||
#### Class-Dump-Z
|
||||
During static analysis, you can use tools like class-dump-z and otool to extract information from the binary file of the iOS application. This information can include class and method names, as well as details about the application's architecture.
|
||||
|
||||
Class-Dump-Z is a tool used to list the classes in a Mach-O file. It can be used to analyze the classes and methods in an iOS application.
|
||||
#### Dynamic Analysis
|
||||
|
||||
To use Class-Dump-Z, you can run the following command:
|
||||
For dynamic analysis, you can use tools like Cycript and Frida to interact with the running iOS application. These tools allow you to inspect and manipulate the application's runtime behavior, making it easier to understand how the application works and identify potential security issues.
|
||||
|
||||
```bash
|
||||
class-dump-z -H /path/to/application
|
||||
```
|
||||
#### Network Traffic Analysis
|
||||
|
||||
### Dynamic Analysis
|
||||
Analyzing the network traffic generated by an iOS application can help you identify sensitive information being sent over the network in plaintext. Tools like Burp Suite and Wireshark can be used to intercept and analyze this network traffic.
|
||||
|
||||
#### Cycript
|
||||
#### File System Analysis
|
||||
|
||||
Cycript is a powerful runtime manipulation tool for iOS applications. It allows you to inspect, modify, and interact with running applications dynamically.
|
||||
Examining the files stored on the iOS device can reveal valuable information about the application's data storage mechanisms. Tools like iExplorer and iFunBox can be used to explore the file system of the device and extract relevant data for analysis.
|
||||
|
||||
To use Cycript, you can attach it to a running process using the following command:
|
||||
#### Jailbreak Detection Bypass
|
||||
|
||||
```bash
|
||||
cycript -p <process_id>
|
||||
```
|
||||
Some iOS applications implement jailbreak detection mechanisms to prevent them from running on jailbroken devices. Techniques like method swizzling and hooking can be used to bypass these detection mechanisms and run the application on a jailbroken device.
|
||||
|
||||
### Network Traffic Analysis
|
||||
#### Runtime Manipulation
|
||||
|
||||
#### Burp Suite
|
||||
Tools like Cycript and Frida can also be used for runtime manipulation of iOS applications. By injecting scripts into the application's runtime environment, you can modify its behavior in real-time, allowing you to test for vulnerabilities and security weaknesses.
|
||||
|
||||
Burp Suite is a popular tool for intercepting and analyzing network traffic. You can configure your iOS device to route traffic through Burp Suite and analyze the network requests made by an application.
|
||||
#### Data Storage Analysis
|
||||
|
||||
### File System Analysis
|
||||
Analyzing how an iOS application stores sensitive data locally can help you identify potential security risks. By examining the application's data storage mechanisms, you can determine if sensitive information is being stored securely or if there are vulnerabilities that could lead to data leakage.
|
||||
|
||||
#### iFunBox
|
||||
#### Reverse Engineering
|
||||
|
||||
iFunBox is a file management tool for iOS devices that allows you to browse the file system of an iOS application. You can use iFunBox to access and analyze the files stored by an application on the device.
|
||||
Reverse engineering an iOS application can provide valuable insights into how the application is designed and implemented. Tools like Hopper and IDA Pro can be used to disassemble the application's binary code and analyze its underlying logic and algorithms.
|
||||
|
||||
### Jailbreak Detection
|
||||
#### Code Injection
|
||||
|
||||
#### Frida
|
||||
Injecting code into an iOS application can help you understand how the application processes data and interacts with external components. Tools like Frida and objection can be used to inject code into the application's runtime environment and manipulate its behavior for testing and analysis purposes.
|
||||
|
||||
Frida is a dynamic instrumentation toolkit that can be used to bypass jailbreak detection in iOS applications. You can use Frida to hook and modify methods that perform jailbreak detection checks.
|
||||
#### Exploitation
|
||||
|
||||
### Runtime Analysis
|
||||
Identifying and exploiting vulnerabilities in an iOS application can lead to unauthorized access to sensitive data or the compromise of the application's functionality. By using techniques like buffer overflows and format string vulnerabilities, you can attempt to exploit security weaknesses in the application and gain control over its execution flow.
|
||||
|
||||
#### LLDB
|
||||
#### Cryptography Analysis
|
||||
|
||||
LLDB is the debugger used in Xcode for debugging iOS applications. You can use LLDB to perform runtime analysis, set breakpoints, inspect variables, and manipulate the execution flow of an application.
|
||||
Analyzing how an iOS application implements cryptography can help you assess the security of its data protection mechanisms. By examining the application's use of encryption algorithms and key management practices, you can identify potential weaknesses that could be exploited by an attacker to decrypt sensitive information.
|
||||
|
||||
#### Code Signing Bypass
|
||||
|
||||
iOS applications are required to be signed with a valid code signature to run on iOS devices. Bypassing code signing checks can allow you to run modified or unsigned applications on a device, potentially exposing it to security risks. Techniques like patching the binary code or using jailbreak tweaks can be used to bypass code signing restrictions.
|
||||
|
||||
#### Memory Analysis
|
||||
|
||||
Analyzing the memory usage of an iOS application can help you identify vulnerabilities related to memory management, such as buffer overflows or memory leaks. Tools like Frida and LLDB can be used to inspect the application's memory space and detect potential memory-related security issues.
|
||||
|
||||
#### WebView Analysis
|
||||
|
||||
Many iOS applications use web views to display web content within the app. Analyzing how the application interacts with web views can help you identify security risks related to web content loading and processing. Tools like Burp Suite and Frida can be used to intercept and analyze web view traffic for potential vulnerabilities.
|
||||
|
||||
#### API Security Testing
|
||||
|
||||
Testing the security of APIs used by an iOS application is crucial for ensuring the overall security of the app. By analyzing how the application interacts with external APIs and identifying potential security weaknesses, you can prevent unauthorized access to sensitive data and protect the app from API-related vulnerabilities.
|
||||
|
||||
#### Jailbreak Detection Evasion
|
||||
|
||||
Evading jailbreak detection mechanisms implemented by an iOS application can allow you to run the app on a jailbroken device without restrictions. Techniques like method swizzling, runtime hooking, and binary patching can be used to bypass jailbreak detection checks and run the application in a jailbroken environment.
|
||||
|
||||
#### SSL Pinning Bypass
|
||||
|
||||
SSL pinning is a security mechanism used by iOS applications to prevent man-in-the-middle attacks on SSL/TLS connections. Bypassing SSL pinning can allow you to intercept and analyze encrypted network traffic for security testing purposes. Tools like Frida and Objection can be used to bypass SSL pinning checks and inspect SSL/TLS communication.
|
||||
|
||||
#### Data Validation Testing
|
||||
|
||||
Testing the input validation mechanisms implemented by an iOS application is essential for preventing common security vulnerabilities like injection attacks and data manipulation. By analyzing how the application validates user input and identifying potential weaknesses, you can ensure that the app is protected against data tampering and exploitation.
|
||||
|
||||
#### Binary Analysis
|
||||
|
||||
Analyzing the binary code of an iOS application can help you understand its inner workings and identify potential security flaws. Tools like IDA Pro and Hopper can be used to disassemble the application's binary code and analyze its structure, functions, and dependencies for security assessment and vulnerability identification.
|
||||
|
||||
#### Code Obfuscation
|
||||
|
||||
iOS applications often use code obfuscation techniques to protect their intellectual property and prevent reverse engineering. Analyzing how an application is obfuscated can help you uncover hidden functionality and security vulnerabilities that may be obscured by obfuscation. Tools like Hopper and IDA Pro can assist in deobfuscating iOS applications for security analysis and testing.
|
||||
|
||||
#### Keychain Analysis
|
||||
|
||||
Analyzing how an iOS application uses the keychain for storing sensitive information like passwords and cryptographic keys can help you assess the security of its data protection mechanisms. By examining how the application interacts with the keychain and identifying potential vulnerabilities, you can determine if sensitive data is being adequately protected or if there are weaknesses that could be exploited by an attacker.
|
||||
|
||||
#### URL Scheme Analysis
|
||||
|
||||
Many iOS applications use custom URL schemes to communicate with other apps and services on the device. Analyzing how an application handles URL schemes can help you identify security risks related to inter-app communication and data sharing. Tools like Frida and Objection can be used to intercept and analyze URL scheme interactions for potential vulnerabilities and security weaknesses.
|
||||
|
||||
#### Third-Party Library Analysis
|
||||
|
||||
iOS applications often rely on third-party libraries to implement various features and functionalities. Analyzing the security of these third-party libraries is crucial for identifying potential vulnerabilities that could be exploited by an attacker. By examining how the application integrates and uses third-party libraries, you can assess the overall security posture of the app and mitigate any security risks associated with third-party dependencies.
|
||||
|
||||
#### Jailbreak Detection Bypass
|
||||
|
||||
Some iOS applications implement jailbreak detection mechanisms to prevent them from running on jailbroken devices. Techniques like method swizzling and hooking can be used to bypass these detection mechanisms and run the application on a jailbroken device.
|
||||
|
||||
#### Runtime Manipulation
|
||||
|
||||
Tools like Cycript and Frida can also be used for runtime manipulation of iOS applications. By injecting scripts into the application's runtime environment, you can modify its behavior in real-time, allowing you to test for vulnerabilities and security weaknesses.
|
||||
|
||||
#### Data Storage Analysis
|
||||
|
||||
Analyzing how an iOS application stores sensitive data locally can help you identify potential security risks. By examining the application's data storage mechanisms, you can determine if sensitive information is being stored securely or if there are vulnerabilities that could lead to data leakage.
|
||||
|
||||
#### Reverse Engineering
|
||||
|
||||
Reverse engineering an iOS application can provide valuable insights into how the application is designed and implemented. Tools like Hopper and IDA Pro can be used to disassemble the application's binary code and analyze its underlying logic and algorithms.
|
||||
|
||||
#### Code Injection
|
||||
|
||||
Injecting code into an iOS application can help you understand how the application processes data and interacts with external components. Tools like Frida and objection can be used to inject code into the application's runtime environment and manipulate its behavior for testing and analysis purposes.
|
||||
|
||||
#### Exploitation
|
||||
|
||||
Identifying and exploiting vulnerabilities in an iOS application can lead to unauthorized access to sensitive data or the compromise of the application's functionality. By using techniques like buffer overflows and format string vulnerabilities, you can attempt to exploit security weaknesses in the application and gain control over its execution flow.
|
||||
|
||||
#### Cryptography Analysis
|
||||
|
||||
Analyzing how an iOS application implements cryptography can help you assess the security of its data protection mechanisms. By examining the application's use of encryption algorithms and key management practices, you can identify potential weaknesses that could be exploited by an attacker to decrypt sensitive information.
|
||||
|
||||
#### Code Signing Bypass
|
||||
|
||||
iOS applications are required to be signed with a valid code signature to run on iOS devices. Bypassing code signing checks can allow you to run modified or unsigned applications on a device, potentially exposing it to security risks. Techniques like patching the binary code or using jailbreak tweaks can be used to bypass code signing restrictions.
|
||||
|
||||
#### Memory Analysis
|
||||
|
||||
Analyzing the memory usage of an iOS application can help you identify vulnerabilities related to memory management, such as buffer overflows or memory leaks. Tools like Frida and LLDB can be used to inspect the application's memory space and detect potential memory-related security issues.
|
||||
|
||||
#### WebView Analysis
|
||||
|
||||
Many iOS applications use web views to display web content within the app. Analyzing how the application interacts with web views can help you identify security risks related to web content loading and processing. Tools like Burp Suite and Frida can be used to intercept and analyze web view traffic for potential vulnerabilities.
|
||||
|
||||
#### API Security Testing
|
||||
|
||||
Testing the security of APIs used by an iOS application is crucial for ensuring the overall security of the app. By analyzing how the application interacts with external APIs and identifying potential security weaknesses, you can prevent unauthorized access to sensitive data and protect the app from API-related vulnerabilities.
|
||||
|
||||
#### Jailbreak Detection Evasion
|
||||
|
||||
Evading jailbreak detection mechanisms implemented by an iOS application can allow you to run the app on a jailbroken device without restrictions. Techniques like method swizzling, runtime hooking, and binary patching can be used to bypass jailbreak detection checks and run the application in a jailbroken environment.
|
||||
|
||||
#### SSL Pinning Bypass
|
||||
|
||||
SSL pinning is a security mechanism used by iOS applications to prevent man-in-the-middle attacks on SSL/TLS connections. Bypassing SSL pinning can allow you to intercept and analyze encrypted network traffic for security testing purposes. Tools like Frida and Objection can be used to bypass SSL pinning checks and inspect SSL/TLS communication.
|
||||
|
||||
#### Data Validation Testing
|
||||
|
||||
Testing the input validation mechanisms implemented by an iOS application is essential for preventing common security vulnerabilities like injection attacks and data manipulation. By analyzing how the application validates user input and identifying potential weaknesses, you can ensure that the app is protected against data tampering and exploitation.
|
||||
|
||||
#### Binary Analysis
|
||||
|
||||
Analyzing the binary code of an iOS application can help you understand its inner workings and identify potential security flaws. Tools like IDA Pro and Hopper can be used to disassemble the application's binary code and analyze its structure, functions, and dependencies for security assessment and vulnerability identification.
|
||||
|
||||
#### Code Obfuscation
|
||||
|
||||
iOS applications often use code obfuscation techniques to protect their intellectual property and prevent reverse engineering. Analyzing how an application is obfuscated can help you uncover hidden functionality and security vulnerabilities that may be obscured by obfuscation. Tools like Hopper and IDA Pro can assist in deobfuscating iOS applications for security analysis and testing.
|
||||
|
||||
#### Keychain Analysis
|
||||
|
||||
Analyzing how an iOS application uses the keychain for storing sensitive information like passwords and cryptographic keys can help you assess the security of its data protection mechanisms. By examining how the application interacts with the keychain and identifying potential vulnerabilities, you can determine if sensitive data is being adequately protected or if there are weaknesses that could be exploited by an attacker.
|
||||
|
||||
#### URL Scheme Analysis
|
||||
|
||||
Many iOS applications use custom URL schemes to communicate with other apps and services on the device. Analyzing how an application handles URL schemes can help you identify security risks related to inter-app communication and data sharing. Tools like Frida and Objection can be used to intercept and analyze URL scheme interactions for potential vulnerabilities and security weaknesses.
|
||||
|
||||
#### Third-Party Library Analysis
|
||||
|
||||
iOS applications often rely on third-party libraries to implement various features and functionalities. Analyzing the security of these third-party libraries is crucial for identifying potential vulnerabilities that could be exploited by an attacker. By examining how the application integrates and uses third-party libraries, you can assess the overall security posture of the app and mitigate any security risks associated with third-party dependencies.
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
|
@ -926,37 +1050,89 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Objective-C" %}
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
### iOS Pentesting
|
||||
## Méthodes de détection des jailbreaks
|
||||
|
||||
#### Setting up the Environment
|
||||
### 1. Vérification des fichiers système
|
||||
|
||||
To start iOS pentesting, you need a macOS machine with Xcode installed. Xcode is the official IDE for developing iOS applications and comes with the necessary tools for iOS pentesting.
|
||||
- Recherche de fichiers système spécifiques aux jailbreaks tels que `/Applications/Cydia.app`, `/Library/MobileSubstrate/MobileSubstrate.dylib`, etc.
|
||||
|
||||
#### Device Setup
|
||||
### 2. Vérification des processus en cours d'exécution
|
||||
|
||||
You can use a physical iOS device or an emulator like the iOS Simulator provided by Xcode for testing. Make sure the device is connected to the macOS machine.
|
||||
- Vérification des processus en cours d'exécution pour détecter des processus associés au jailbreak tels que `sshd`, `Cydia`, etc.
|
||||
|
||||
#### Tools
|
||||
### 3. Vérification des symboles
|
||||
|
||||
There are various tools available for iOS pentesting, such as Frida, Cycript, Hopper, and objection. These tools help in dynamic analysis, reverse engineering, and manipulation of iOS applications.
|
||||
- Recherche de symboles spécifiques aux jailbreaks dans les fichiers binaires de l'application.
|
||||
|
||||
#### Jailbroken Devices
|
||||
### 4. Vérification des fichiers de configuration
|
||||
|
||||
For advanced iOS pentesting, you may need a jailbroken device to bypass certain security restrictions imposed by Apple. Tools like Cydia and Cydia Substrate are commonly used on jailbroken devices.
|
||||
- Recherche de fichiers de configuration spécifiques aux jailbreaks tels que `/etc/apt/sources.list.d/cydia.list`, `/var/lib/cydia`, etc.
|
||||
|
||||
#### Resources
|
||||
### 5. Vérification des fichiers de préférences
|
||||
|
||||
- [iOS Application Security Testing Guide](https://owasp.org/www-pdf-archive/OWASP_iOS_Application_Security_Testing_Guide_v1.pdf) by OWASP
|
||||
- [iOS Hacker's Handbook](https://www.wiley.com/en-us/iOS+Hacker%27s+Handbook-p-9781118204122) by Charlie Miller, Dion Blazakis, Dino Dai Zovi, and Stefan Esser
|
||||
- Recherche de fichiers de préférences spécifiques aux jailbreaks tels que `/var/mobile/Library/Preferences/com.saurik.Cydia.plist`, etc.
|
||||
|
||||
#### References
|
||||
### 6. Vérification des URL de schéma
|
||||
|
||||
- [Frida](https://frida.re/)
|
||||
- [Cycript](http://www.cycript.org/)
|
||||
- [Hopper](https://www.hopperapp.com/)
|
||||
- [objection](https://github.com/sensepost/objection)
|
||||
- Recherche d'URL de schéma spécifiques aux jailbreaks dans le code de l'application.
|
||||
|
||||
### 7. Vérification des fichiers de cache
|
||||
|
||||
- Recherche de fichiers de cache spécifiques aux jailbreaks tels que `/var/cache/apt`, `/var/tmp/cydia`, etc.
|
||||
|
||||
### 8. Vérification des fichiers de log
|
||||
|
||||
- Recherche de fichiers de log spécifiques aux jailbreaks tels que `/var/log/syslog`, `/var/log/apt/history.log`, etc.
|
||||
|
||||
### 9. Vérification des fichiers de base de données
|
||||
|
||||
- Recherche de bases de données spécifiques aux jailbreaks telles que `com.saurik.Cydia`, etc.
|
||||
|
||||
### 10. Vérification des fichiers de clés SSH
|
||||
|
||||
- Recherche de fichiers de clés SSH dans le système de fichiers de l'application.
|
||||
|
||||
### 11. Vérification des fichiers de certificats
|
||||
|
||||
- Recherche de certificats spécifiques aux jailbreaks dans le trousseau de l'application.
|
||||
|
||||
### 12. Vérification des fichiers de profil
|
||||
|
||||
- Recherche de fichiers de profil spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 13. Vérification des fichiers de ressources
|
||||
|
||||
- Recherche de fichiers de ressources spécifiques aux jailbreaks dans le bundle de l'application.
|
||||
|
||||
### 14. Vérification des fichiers de scripts
|
||||
|
||||
- Recherche de scripts spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 15. Vérification des fichiers de frameworks
|
||||
|
||||
- Recherche de frameworks spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 16. Vérification des fichiers de bibliothèques dynamiques
|
||||
|
||||
- Recherche de bibliothèques dynamiques spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 17. Vérification des fichiers de plug-ins
|
||||
|
||||
- Recherche de plug-ins spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 18. Vérification des fichiers de données
|
||||
|
||||
- Recherche de fichiers de données spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 19. Vérification des fichiers de médias
|
||||
|
||||
- Recherche de fichiers de médias spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
### 20. Vérification des fichiers de sauvegarde
|
||||
|
||||
- Recherche de fichiers de sauvegarde spécifiques aux jailbreaks dans le système de fichiers de l'application.
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
|
@ -979,9 +1155,12 @@ NSLog(@"%@", password);
|
|||
NSLog(@"Something went wrong");
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
### Détection
|
||||
|
||||
L'utilisation de frameworks dans une application peut également être détectée en analysant la liste des bibliothèques dynamiques partagées de l'application binaire. Cela peut être fait en utilisant `otool`:
|
||||
L'utilisation de frameworks dans une application peut également être détectée en analysant la liste des bibliothèques dynamiques partagées de l'application binaire. Cela peut être fait en utilisant `otool` :
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
|
@ -996,9 +1175,9 @@ Si `Security.framework` est utilisé, seul le second sera affiché.
|
|||
|
||||
#### **Objection**
|
||||
|
||||
Grâce au **Contournement Biométrique Objection**, situé sur [cette page GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), une technique est disponible pour contourner le mécanisme **LocalAuthentication**. L'essence de cette approche consiste à exploiter **Frida** pour manipuler la fonction `evaluatePolicy`, garantissant ainsi un résultat `True` de manière constante, indépendamment de la réussite de l'authentification réelle. Ceci est particulièrement utile pour contourner les processus d'authentification biométrique défectueux.
|
||||
Grâce au **Contournement Biométrique Objection**, situé sur [cette page GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), une technique est disponible pour contourner le mécanisme **LocalAuthentication**. Le cœur de cette approche implique l'utilisation de **Frida** pour manipuler la fonction `evaluatePolicy`, garantissant qu'elle produit systématiquement un résultat `True`, indépendamment de la réussite de l'authentification réelle. Ceci est particulièrement utile pour contourner les processus d'authentification biométrique défectueux.
|
||||
|
||||
Pour activer ce contournement, la commande suivante est utilisée:
|
||||
Pour activer ce contournement, la commande suivante est utilisée :
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||
|
@ -1039,7 +1218,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
|||
}
|
||||
}
|
||||
```
|
||||
Pour réaliser le **contournement** de l'Authentification Locale, un script Frida est écrit. Ce script cible la vérification **evaluatePolicy**, interceptant son rappel pour s'assurer qu'il renvoie **success=1**. En modifiant le comportement du rappel, la vérification d'authentification est contournée de manière efficace.
|
||||
Pour réaliser le **contournement** de l'Authentification Locale, un script Frida est écrit. Ce script cible la vérification de **evaluatePolicy**, interceptant son rappel pour s'assurer qu'il renvoie **success=1**. En modifiant le comportement du rappel, la vérification d'authentification est contournée de manière efficace.
|
||||
|
||||
Le script ci-dessous est injecté pour modifier le résultat de la méthode **evaluatePolicy**. Il modifie le résultat du rappel pour indiquer toujours le succès.
|
||||
```swift
|
||||
|
@ -1105,7 +1284,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
|
|||
[ios-webviews.md](ios-webviews.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Sérialisation et Encodage
|
||||
### Sérialisation et encodage
|
||||
|
||||
{% content-ref url="ios-serialisation-and-encoding.md" %}
|
||||
[ios-serialisation-and-encoding.md](ios-serialisation-and-encoding.md)
|
||||
|
@ -1113,7 +1292,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
|
|||
|
||||
## Communication réseau
|
||||
|
||||
Il est important de vérifier qu'aucune communication ne se fait **sans chiffrement** et également que l'application **valide correctement le certificat TLS** du serveur.\
|
||||
Il est important de vérifier qu'aucune communication n'a lieu **sans chiffrement** et également que l'application valide correctement **le certificat TLS** du serveur.\
|
||||
Pour vérifier ce type de problèmes, vous pouvez utiliser un proxy comme **Burp** :
|
||||
|
||||
{% content-ref url="burp-configuration-for-ios.md" %}
|
||||
|
@ -1127,35 +1306,35 @@ Pour vérifier ce problème en utilisant Burp, après avoir fait confiance à l'
|
|||
|
||||
### Épinglage de certificat
|
||||
|
||||
Si une application utilise correctement l'épinglage SSL, alors l'application ne fonctionnera que si le certificat est celui attendu. Lors du test d'une application, **cela peut poser problème car Burp servira son propre certificat.**\
|
||||
Pour contourner cette protection sur un appareil jailbreaké, vous pouvez installer l'application [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ou installer [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
Si une application utilise correctement l'épinglage SSL, alors l'application ne fonctionnera que si le certificat est celui attendu. Lors du test d'une application **cela peut poser problème car Burp servira son propre certificat.**\
|
||||
Pour contourner cette protection dans un appareil jailbreaké, vous pouvez installer l'application [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ou installer [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
Vous pouvez également utiliser la commande **`ios sslpinning disable`** de **objection**
|
||||
Vous pouvez également utiliser la commande **`ios sslpinning disable`** de **objection**.
|
||||
|
||||
## Divers
|
||||
|
||||
* Dans **`/System/Library`**, vous pouvez trouver les frameworks installés dans le téléphone utilisés par les applications système
|
||||
* Les applications installées par l'utilisateur depuis l'App Store se trouvent dans **`/User/Applications`**
|
||||
* Les applications installées par l'utilisateur depuis l'App Store sont situées à l'intérieur de **`/User/Applications`**
|
||||
* Et le **`/User/Library`** contient les données enregistrées par les applications de niveau utilisateur
|
||||
* Vous pouvez accéder à **`/User/Library/Notes/notes.sqlite`** pour lire les notes enregistrées dans l'application.
|
||||
* À l'intérieur du dossier d'une application installée (**`/User/Applications/<ID APP>/`**), vous pouvez trouver des fichiers intéressants :
|
||||
* À l'intérieur du dossier d'une application installée (**`/User/Applications/<ID APP>/`**), vous pouvez trouver certains fichiers intéressants :
|
||||
* **`iTunesArtwork`** : L'icône utilisée par l'application
|
||||
* **`iTunesMetadata.plist`** : Infos de l'application utilisées dans l'App Store
|
||||
* **`/Library/*`** : Contient les préférences et le cache. Dans **`/Library/Cache/Snapshots/*`**, vous pouvez trouver la capture d'écran effectuée par l'application avant de la mettre en arrière-plan.
|
||||
* **`/Library/*`** : Contient les préférences et le cache. Dans **`/Library/Cache/Snapshots/*`** vous pouvez trouver la capture d'écran effectuée par l'application avant de l'envoyer en arrière-plan.
|
||||
|
||||
### Patching à chaud / Mise à jour forcée
|
||||
|
||||
Les développeurs peuvent **patcher à distance toutes les installations de leur application instantanément** sans avoir à soumettre à nouveau l'application à l'App Store et attendre son approbation.\
|
||||
À cette fin, on utilise généralement [**JSPatch**](https://github.com/bang590/JSPatch)**.** Mais il existe également d'autres options telles que [Siren](https://github.com/ArtSabintsev/Siren) et [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
À cette fin, on utilise généralement [**JSPatch**](https://github.com/bang590/JSPatch)**.** Mais il existe d'autres options telles que [Siren](https://github.com/ArtSabintsev/Siren) et [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Il s'agit d'un mécanisme dangereux qui pourrait être abusé par des SDK tiers malveillants, il est donc recommandé de vérifier quelle méthode est utilisée pour la mise à jour automatique (le cas échéant) et de la tester.** Vous pourriez essayer de télécharger une version antérieure de l'application à cette fin.
|
||||
|
||||
### Tiers
|
||||
|
||||
Un défi important avec les **SDK tiers** est le **manque de contrôle granulaire** sur leurs fonctionnalités. Les développeurs sont confrontés à un choix : intégrer le SDK et accepter toutes ses fonctionnalités, y compris les vulnérabilités potentielles en matière de sécurité et les préoccupations en matière de confidentialité, ou renoncer entièrement à ses avantages. Souvent, les développeurs ne peuvent pas corriger eux-mêmes les vulnérabilités au sein de ces SDK. De plus, à mesure que les SDK gagnent la confiance de la communauté, certains peuvent commencer à contenir des logiciels malveillants.
|
||||
Un défi significatif avec les **SDK tiers** est le **manque de contrôle granulaire** sur leurs fonctionnalités. Les développeurs sont confrontés à un choix : intégrer le SDK et accepter toutes ses fonctionnalités, y compris les vulnérabilités potentielles en matière de sécurité et les préoccupations en matière de confidentialité, ou renoncer entièrement à ses avantages. Souvent, les développeurs ne peuvent pas corriger eux-mêmes les vulnérabilités au sein de ces SDK. De plus, à mesure que les SDK gagnent la confiance au sein de la communauté, certains peuvent commencer à contenir des logiciels malveillants.
|
||||
|
||||
Les services fournis par les SDK tiers peuvent inclure le suivi du comportement des utilisateurs, l'affichage de publicités ou des améliorations de l'expérience utilisateur. Cependant, cela introduit un risque car les développeurs peuvent ne pas être pleinement conscients du code exécuté par ces bibliothèques, ce qui peut entraîner des risques potentiels en matière de confidentialité et de sécurité. Il est crucial de limiter les informations partagées avec les services tiers à ce qui est nécessaire et de s'assurer qu'aucune donnée sensible n'est exposée.
|
||||
|
||||
L'implémentation des services tiers se présente généralement sous deux formes : une bibliothèque autonome ou un SDK complet. Pour protéger la vie privée des utilisateurs, toutes les données partagées avec ces services doivent être **anonymisées** pour éviter la divulgation d'informations personnellement identifiables (PII).
|
||||
L'implémentation des services tiers se présente généralement sous deux formes : une bibliothèque autonome ou un SDK complet. Pour protéger la vie privée des utilisateurs, toutes les données partagées avec ces services doivent être **anonymisées** pour empêcher la divulgation d'informations personnellement identifiables (PII).
|
||||
|
||||
Pour identifier les bibliothèques qu'une application utilise, la commande **`otool`** peut être utilisée. Cet outil doit être exécuté contre l'application et chaque bibliothèque partagée qu'elle utilise pour découvrir d'autres bibliothèques.
|
||||
```bash
|
||||
|
@ -1192,7 +1371,7 @@ otool -L <application_path>
|
|||
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement** des workflows alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -1206,7 +1385,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue