79 lines
4.9 KiB
Markdown

{{#include ../../banners/hacktricks-training.md}}
Die Datenfreigabe innerhalb und zwischen Anwendungen auf iOS-Geräten wird durch den [`UIPasteboard`](https://developer.apple.com/documentation/uikit/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
- [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/)
{{#include ../../banners/hacktricks-training.md}}