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

7.4 KiB

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

{% embed url="https://websec.nl/" %}

Der Datenaustausch innerhalb und zwischen Anwendungen auf iOS-Geräten wird durch den Mechanismus UIPasteboard erleichtert, der in zwei Hauptkategorien unterteilt ist:

  • Systemweiter allgemeiner Pasteboard: Dies wird zum Austausch von Daten mit beliebigen Anwendungen verwendet und ist darauf ausgelegt, Daten über Geräteneustarts und App-Deinstallationen hinweg zu persistieren, eine Funktion, die seit iOS 10 verfügbar ist.
  • Benutzerdefinierte / benannte Pasteboards: Diese sind speziell für den Datenaustausch innerhalb einer App oder mit einer anderen App, die dieselbe Team-ID teilt, und sind nicht dazu gedacht, über die Lebensdauer des Anwendungsprozesses hinaus zu persistieren, wie es seit iOS 10 eingeführt wurde.

Sicherheitsüberlegungen spielen eine wichtige Rolle bei der Verwendung von Pasteboards. Zum Beispiel:

  • Es gibt keinen Mechanismus für Benutzer, die App-Berechtigungen zum Zugriff auf das Pasteboard zu verwalten.
  • Um das Risiko eines unbefugten Hintergrundmonitorings des Pasteboards zu verringern, ist der Zugriff auf die Anwendung im Vordergrund beschränkt (seit iOS 9).
  • Die Verwendung von persistenten benannten Pasteboards wird aufgrund von Datenschutzbedenken zugunsten von gemeinsamen Containern nicht empfohlen.
  • Das mit iOS 10 eingeführte Universal Clipboard-Feature, das den Inhalt über Geräte hinweg über das allgemeine Pasteboard teilen kann, kann von Entwicklern verwaltet werden, um Datenablauf und automatische Inhaltsübertragung zu deaktivieren.

Es ist entscheidend sicherzustellen, dass sensible Informationen nicht versehentlich auf dem globalen Pasteboard gespeichert werden. Darüber hinaus sollten Anwendungen so konzipiert sein, dass der Missbrauch von globalen Pasteboard-Daten für unbeabsichtigte Aktionen verhindert wird, und Entwickler werden ermutigt, Maßnahmen zu implementieren, um das Kopieren sensibler Informationen in die Zwischenablage zu verhindern.

Statische Analyse

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

  • generalPasteboard, um die Verwendung 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 Verfolgen spezifischer Methoden:

  • Überwachen Sie generalPasteboard für die systemweite Verwendung.
  • Verfolgen Sie pasteboardWithName:create: und pasteboardWithUniqueName für benutzerdefinierte Implementierungen.
  • Beobachten Sie veraltete setPersistent:-Methodenaufrufe, um die Persistenzeinstellungen zu überprüfen.

Zu überwachende Schlüsseldetails sind:

  • Pasteboard-Namen und Inhalte (zum Beispiel Überprüfung von Zeichenfolgen, URLs, Bildern).
  • Anzahl der Elemente und Datentypen, die vorhanden sind, unter Verwendung von Standard- und benutzerdefinierten Datentypüberprüfungen.
  • Ablauf- und Nur-lokal-Optionen, indem Sie die Methode setItems:options: inspizieren.

Ein Beispiel für die Verwendung eines Überwachungstools ist der Pasteboard-Monitor von objection, der alle 5 Sekunden das generalPasteboard auf Änderungen überprüft und die neuen Daten ausgibt.

Hier ist ein einfaches JavaScript-Skriptbeispiel, inspiriert vom Ansatz 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);

Referenzen

{% embed url="https://websec.nl/" %}

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: