mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
79 lines
4.9 KiB
Markdown
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}}
|