tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Die Datenfreigabe innerhalb und zwischen Anwendungen auf iOS-Geräten wird durch den UIPasteboard-Mechanismus erleichtert, 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 aufgrund von Datenschutzbedenken 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 der Missbrauch von globalen Pasteboard-Daten für unbeabsichtigte Aktionen verhindert wird, 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 die veralteten setPersistent:-Methodenaufrufe, um die Persistenzeinstellungen zu überprüfen.

Wichtige Details, die überwacht werden sollten, sind:

  • Pasteboard-Namen und Inhalte (zum Beispiel das Überprüfen von Strings, URLs, Bildern).
  • Anzahl der Elemente und Datentypen, die vorhanden sind, unter Verwendung von Standard- und benutzerdefinierten Datentypprüfungen.
  • Ablauf- und nur-lokale 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:

javascript
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

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks