hacktricks/mobile-pentesting/ios-pentesting/ios-uipasteboard.md

91 lines
7.3 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks :
2022-04-28 16:01:33 +00:00
* 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) dépôts GitHub.
2022-04-28 16:01:33 +00:00
</details>
Le partage de données au sein et entre les applications sur les appareils iOS est facilité par le mécanisme [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard), qui est divisé en deux catégories principales :
2022-04-28 16:01:33 +00:00
- **Presse-papiers général à l'échelle du système** : Il est utilisé pour partager des données avec **n'importe quelle application** et est conçu pour persister les données à travers les redémarrages de l'appareil et les désinstallations d'applications, une fonctionnalité disponible depuis iOS 10.
- **Presse-papiers personnalisés / nommés** : Ceux-ci sont spécifiquement pour le partage de données **au sein d'une application ou avec une autre application** partageant le même ID d'équipe, et ne sont pas conçus pour persister au-delà de la durée de vie du processus d'application qui les crée, suite aux changements introduits dans iOS 10.
2021-05-21 16:38:18 +00:00
Les **considérations de sécurité** jouent un rôle significatif lors de l'utilisation des presse-papiers. Par exemple :
- Il n'existe aucun mécanisme permettant aux utilisateurs de gérer les autorisations d'application pour accéder au **presse-papiers**.
- Pour atténuer le risque de surveillance non autorisée en arrière-plan du presse-papiers, l'accès est restreint lorsque l'application est à l'avant-plan (depuis iOS 9).
- L'utilisation de presse-papiers nommés persistants est déconseillée au profit des conteneurs partagés en raison de préoccupations de confidentialité.
- La fonctionnalité **Presse-papiers universel** introduite avec iOS 10, permettant le partage de contenu entre les appareils via le presse-papiers général, peut être gérée par les développeurs pour définir l'expiration des données et désactiver le transfert automatique de contenu.
2021-05-21 16:38:18 +00:00
Il est crucial de s'assurer que les **informations sensibles ne sont pas stockées involontairement** sur le presse-papiers général. De plus, les applications doivent être conçues pour empêcher l'utilisation abusive des données du presse-papiers général pour des actions non intentionnelles, et les développeurs sont encouragés à mettre en place des mesures pour empêcher la copie d'informations sensibles dans le presse-papiers.
2021-05-21 16:38:18 +00:00
### Analyse statique
2021-05-21 16:38:18 +00:00
Pour l'analyse statique, recherchez le code source ou binaire pour :
- `generalPasteboard` pour identifier l'utilisation du **presse-papiers général à l'échelle du système**.
- `pasteboardWithName:create:` et `pasteboardWithUniqueName` pour la création de **presse-papiers personnalisés**. Vérifiez si la persistance est activée, bien que cela soit obsolète.
2021-05-21 16:38:18 +00:00
### Analyse dynamique
2021-05-21 16:38:18 +00:00
L'analyse dynamique implique l'accrochage ou le traçage de méthodes spécifiques :
- Surveillez `generalPasteboard` pour une utilisation à l'échelle du système.
- Tracez `pasteboardWithName:create:` et `pasteboardWithUniqueName` pour des implémentations personnalisées.
- Observez les appels de méthode `setPersistent:` obsolètes pour vérifier les paramètres de persistance.
2021-05-21 16:38:18 +00:00
Les détails clés à surveiller comprennent :
- Les **noms des presse-papiers** et **contenus** (par exemple, vérification des chaînes, des URL, des images).
- Le **nombre d'éléments** et les **types de données** présents, en utilisant des vérifications de types de données standard et personnalisées.
- Les options d'expiration et de local uniquement en inspectant la méthode `setItems:options:`.
2021-05-21 16:38:18 +00:00
Un exemple d'utilisation d'outil de surveillance est le **moniteur de presse-papiers d'objection**, qui interroge le presse-papiers général toutes les 5 secondes pour les changements et affiche les nouvelles données.
2021-05-21 16:38:18 +00:00
Voici un exemple de script JavaScript simple, inspiré de l'approche d'objection, pour lire et enregistrer les changements du presse-papiers toutes les 5 secondes :
2021-05-21 16:38:18 +00:00
```javascript
const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();
2021-05-21 16:38:18 +00:00
setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();
2021-05-21 16:38:18 +00:00
if (currentCount === count) { return; }
2021-05-21 16:38:18 +00:00
items = currentItems;
count = currentCount;
2021-05-21 16:38:18 +00:00
console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);
2021-05-21 16:38:18 +00:00
}, 1000 * 5);
2021-05-21 16:38:18 +00:00
```
## Références
2022-04-28 16:01:33 +00:00
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks:
2022-04-28 16:01:33 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>