iOS UIPasteboard

Unterstützen Sie HackTricks

Die Datenfreigabe innerhalb und zwischen Anwendungen auf iOS-Geräten erfolgt über den UIPasteboard Mechanismus, der in zwei Hauptkategorien unterteilt ist:

  • Systemweiter allgemeiner Pasteboard: Dieser wird verwendet, um Daten mit beliebigen Anwendungen zu teilen und ist so konzipiert, dass Daten über Geräte-Neustarts und App-Deinstallationen hinweg bestehen bleiben, eine Funktion, die seit iOS 10 verfügbar ist.

  • Benutzerdefinierte / benannte Pasteboards: Diese sind speziell für die Datenfreigabe innerhalb einer App oder mit einer anderen App, die dieselbe Team-ID teilt, und sind nicht dafür ausgelegt, über die Lebensdauer des Anwendungsprozesses, der sie erstellt, hinaus zu bestehen, gemäß den Änderungen, die in iOS 10 eingeführt wurden.

Sicherheitsüberlegungen spielen eine bedeutende Rolle bei der Nutzung von Pasteboards. Zum Beispiel:

  • Es gibt keinen Mechanismus für Benutzer, um die App-Berechtigungen zum Zugriff auf das Pasteboard zu verwalten.

  • Um das Risiko einer unbefugten Hintergrundüberwachung des Pasteboards zu verringern, ist der Zugriff auf den Vordergrund der Anwendung beschränkt (seit iOS 9).

  • Die Verwendung von persistenten benannten Pasteboards wird aus Datenschutzgründen zugunsten von gemeinsamen Containern nicht empfohlen.

  • Die mit iOS 10 eingeführte Universal Clipboard-Funktion, die das Teilen von Inhalten über Geräte hinweg über das allgemeine Pasteboard ermöglicht, kann von Entwicklern verwaltet werden, um die Datenablaufzeit festzulegen und die automatische Inhaltsübertragung zu deaktivieren.

Es ist entscheidend, sicherzustellen, dass sensible Informationen nicht versehentlich im globalen Pasteboard gespeichert werden. Darüber hinaus sollten Anwendungen so gestaltet sein, dass sie den Missbrauch von globalen Pasteboard-Daten für unbeabsichtigte Aktionen verhindern, und Entwickler werden ermutigt, Maßnahmen zu ergreifen, um das Kopieren sensibler Informationen in die Zwischenablage zu verhindern.

Statische Analyse

Für die statische Analyse suchen Sie im Quellcode oder in der Binärdatei nach:

  • generalPasteboard, um die Nutzung des systemweiten allgemeinen Pasteboards zu identifizieren.

  • pasteboardWithName:create: und pasteboardWithUniqueName zur Erstellung von benutzerdefinierten Pasteboards. Überprüfen Sie, ob die Persistenz aktiviert ist, obwohl dies veraltet ist.

Dynamische Analyse

Die dynamische Analyse umfasst das Hooking oder Tracing spezifischer Methoden:

  • Überwachen Sie generalPasteboard für die systemweite Nutzung.

  • Verfolgen Sie pasteboardWithName:create: und pasteboardWithUniqueName für benutzerdefinierte Implementierungen.

  • Beobachten Sie veraltete setPersistent:-Methodenaufrufe, um die Persistenzeinstellungen zu überprüfen.

Wichtige Details, die überwacht werden sollten, sind:

  • Pasteboard-Namen und Inhalte (zum Beispiel Überprüfung auf Strings, URLs, Bilder).

  • Anzahl der Elemente und Datentypen, die vorhanden sind, unter Verwendung von Standard- und benutzerdefinierten Datentypprüfungen.

  • Ablauf- und lokal nur-Optionen durch Überprüfung der setItems:options:-Methode.

Ein Beispiel für die Nutzung eines Überwachungstools ist objection's pasteboard monitor, der das generalPasteboard alle 5 Sekunden auf Änderungen abfragt und die neuen Daten ausgibt.

Hier ist ein einfaches JavaScript-Skriptbeispiel, inspiriert von der Vorgehensweise von objection, um alle 5 Sekunden Änderungen vom Pasteboard zu lesen und zu protokollieren:

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);

References

Support HackTricks

Last updated