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

9.6 KiB

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Le UIPasteboard permet de partager des données au sein d'une application, et d'une application à d'autres applications. Il existe deux types de presse-papiers :

  • presse-papier général système : pour partager des données avec n'importe quelle application. Persistant par défaut après les redémarrages de l'appareil et les désinstallations d'applications (depuis iOS 10).
  • presse-papiers personnalisés / nommés : pour partager des données avec une autre application (ayant le même ID d'équipe que l'application d'origine) ou avec l'application elle-même (ils ne sont disponibles que dans le processus qui les crée). Non persistants par défaut (depuis iOS 10), c'est-à-dire qu'ils n'existent que tant que l'application propriétaire (créatrice) est en cours d'exécution.

Quelques considérations de sécurité :

  • Les utilisateurs ne peuvent pas accorder ou refuser la permission aux applications de lire le presse-papier.
  • Depuis iOS 9, les applications ne peuvent pas accéder au presse-papier en arrière-plan, cela atténue la surveillance du presse-papier en arrière-plan.
  • Apple met en garde contre les presse-papiers nommés persistants et déconseille leur utilisation. À la place, des conteneurs partagés devraient être utilisés.
  • À partir d'iOS 10, il y a une nouvelle fonctionnalité Handoff appelée Presse-papier Universel qui est activée par défaut. Elle permet au contenu du presse-papier général de se transférer automatiquement entre les appareils. Cette fonctionnalité peut être désactivée si le développeur le souhaite et il est également possible de définir une date et une heure d'expiration pour les données copiées.

Il est donc important de vérifier que les informations sensibles ne sont pas enregistrées dans le presse-papier global.
Il est également important de vérifier qu'une application n'utilise pas les données du presse-papier global pour effectuer des actions, car une application malveillante pourrait altérer ces données.

Une application peut également empêcher ses utilisateurs de copier des données sensibles dans le presse-papier (ce qui est recommandé).

Analyse statique

Le presse-papier général système peut être obtenu en utilisant generalPasteboard, recherchez cette méthode dans le code source ou le binaire compilé. L'utilisation du presse-papier général système devrait être évitée lorsqu'il s'agit de données sensibles.

Les presse-papiers personnalisés peuvent être créés avec pasteboardWithName:create: ou pasteboardWithUniqueName. Vérifiez si les presse-papiers personnalisés sont définis pour être persistants car cela est déprécié depuis iOS 10. Un conteneur partagé devrait être utilisé à la place.

Analyse dynamique

Accrochez ou tracez les éléments suivants :

  • generalPasteboard pour le presse-papier général système.
  • pasteboardWithName:create: et pasteboardWithUniqueName pour les presse-papiers personnalisés.

Vous pouvez également accrocher ou tracer la méthode dépréciée setPersistent: et vérifier si elle est appelée.

Lors de la surveillance des presse-papiers, plusieurs détails peuvent être récupérés de manière dynamique :

  • Obtenez le nom du presse-papier en accrochant pasteboardWithName:create: et en inspectant ses paramètres d'entrée ou pasteboardWithUniqueName et en inspectant sa valeur de retour.
  • Obtenez le premier élément disponible dans le presse-papier : par exemple, pour les chaînes de caractères, utilisez la méthode string. Ou utilisez n'importe quelle autre méthode pour les types de données standards.
  • Obtenez le nombre d'éléments avec numberOfItems.
  • Vérifiez l'existence de types de données standards avec les méthodes de commodité, par exemple hasImages, hasStrings, hasURLs (à partir d'iOS 10).
  • Vérifiez les autres types de données (typiquement des UTIs) avec containsPasteboardTypes:inItemSet:. Vous pouvez inspecter des types de données plus concrets comme, par exemple, une image en tant que public.png et public.tiff (UTIs) ou pour des données personnalisées telles que com.mycompany.myapp.mytype. Rappelez-vous que, dans ce cas, seules les applications qui déclarent connaître le type sont capables de comprendre les données écrites dans le presse-papier. Récupérez-les en utilisant itemSetWithPasteboardTypes: et en définissant les UTIs correspondants.
  • Vérifiez les éléments exclus ou expirants en accrochant setItems:options: et en inspectant ses options pour UIPasteboardOptionLocalOnly ou UIPasteboardOptionExpirationDate.

Si vous ne cherchez que des chaînes de caractères, vous pouvez utiliser la commande objection ios pasteboard monitor :

Accroche la classe UIPasteboard d'iOS et sonde le generalPasteboard toutes les 5 secondes pour des données. Si de nouvelles données sont trouvées, différentes des données précédentes, ces données seront affichées à l'écran.

Vous pouvez également construire votre propre moniteur de presse-papier qui surveille des informations spécifiques comme vu ci-dessus.

Par exemple, ce script (inspiré du script derrière le moniteur de presse-papier d'objection) lit les éléments du presse-papier toutes les 5 secondes, s'il y a quelque chose de nouveau, il l'imprimera :

const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();

setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();

if (currentCount === count) { return; }

items = currentItems;
count = currentCount;

console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);

}, 1000 * 5);

Références

{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :