mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
79 lines
4.6 KiB
Markdown
79 lines
4.6 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
La condivisione dei dati all'interno e tra le applicazioni sui dispositivi iOS è facilitata dal meccanismo [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard), che è suddiviso in due categorie principali:
|
|
|
|
- **Appunti generali a livello di sistema**: Questo viene utilizzato per condividere dati con **qualsiasi applicazione** ed è progettato per mantenere i dati anche dopo riavvii del dispositivo e disinstallazioni delle app, una funzionalità disponibile da iOS 10.
|
|
- **Appunti personalizzati / nominati**: Questi sono specificamente per la condivisione dei dati **all'interno di un'app o con un'altra app** che condivide lo stesso ID team, e non sono progettati per persistere oltre la vita del processo dell'applicazione che li crea, seguendo le modifiche introdotte in iOS 10.
|
|
|
|
**Considerazioni sulla sicurezza** giocano un ruolo significativo quando si utilizzano gli appunti. Ad esempio:
|
|
|
|
- Non esiste un meccanismo per gli utenti per gestire le autorizzazioni delle app per accedere agli **appunti**.
|
|
- Per mitigare il rischio di monitoraggio non autorizzato in background degli appunti, l'accesso è limitato a quando l'applicazione è in primo piano (da iOS 9).
|
|
- L'uso di appunti nominati persistenti è sconsigliato a favore di contenitori condivisi a causa di preoccupazioni sulla privacy.
|
|
- La funzionalità **Universal Clipboard** introdotta con iOS 10, che consente di condividere contenuti tra dispositivi tramite gli appunti generali, può essere gestita dagli sviluppatori per impostare la scadenza dei dati e disabilitare il trasferimento automatico dei contenuti.
|
|
|
|
Assicurarsi che **le informazioni sensibili non siano memorizzate involontariamente** negli appunti globali è cruciale. Inoltre, le applicazioni dovrebbero essere progettate per prevenire l'uso improprio dei dati degli appunti globali per azioni non intenzionali, e gli sviluppatori sono incoraggiati a implementare misure per prevenire la copia di informazioni sensibili negli appunti.
|
|
|
|
### Analisi Statica
|
|
|
|
Per l'analisi statica, cerca nel codice sorgente o nel binario:
|
|
|
|
- `generalPasteboard` per identificare l'uso degli **appunti generali a livello di sistema**.
|
|
- `pasteboardWithName:create:` e `pasteboardWithUniqueName` per creare **appunti personalizzati**. Verifica se la persistenza è abilitata, anche se questo è deprecato.
|
|
|
|
### Analisi Dinamica
|
|
|
|
L'analisi dinamica comporta il hooking o il tracciamento di metodi specifici:
|
|
|
|
- Monitora `generalPasteboard` per l'uso a livello di sistema.
|
|
- Traccia `pasteboardWithName:create:` e `pasteboardWithUniqueName` per implementazioni personalizzate.
|
|
- Osserva le chiamate al metodo deprecato `setPersistent:` per controllare le impostazioni di persistenza.
|
|
|
|
Dettagli chiave da monitorare includono:
|
|
|
|
- **Nomi degli appunti** e **contenuti** (ad esempio, controllare stringhe, URL, immagini).
|
|
- **Numero di elementi** e **tipi di dati** presenti, sfruttando controlli sui tipi di dati standard e personalizzati.
|
|
- **Opzioni di scadenza e solo locali** ispezionando il metodo `setItems:options:`.
|
|
|
|
Un esempio di utilizzo di uno strumento di monitoraggio è il **monitor degli appunti di objection**, che interroga il generalPasteboard ogni 5 secondi per rilevare cambiamenti e restituisce i nuovi dati.
|
|
|
|
Ecco un semplice esempio di script JavaScript, ispirato all'approccio di objection, per leggere e registrare le modifiche dagli appunti ogni 5 secondi:
|
|
```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)
|
|
```
|
|
## Riferimenti
|
|
|
|
- [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}}
|