iOS UIPasteboard

Support HackTricks

La condivisione dei dati all'interno e tra le applicazioni sui dispositivi iOS è facilitata dal meccanismo 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 il riavvio del dispositivo e la disinstallazione dell'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à Appunti Universali 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, controllando 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:

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

Supporta HackTricks

Last updated