Architettura di sicurezza
Questa pagina spiega come Bugbane protegge i dati che raccoglie. Descrive Bugbane 0.2.3. Tutto quello che leggi qui si può verificare nel codice sorgente: la cifratura è implementata nel modulo crypto, e gli obiettivi di progettazione sono descritti in THREAT_MODELING.md.
In breve:
- Le acquisizioni sono sempre cifrate.
- La chiave di decifratura è custodita nell’hardware di sicurezza del dispositivo e non viene mai scritta in chiaro nell’archiviazione dell’app.
- Una password opzionale per le acquisizioni aggiunge un secondo livello indipendente contro l’estrazione forense non consensuale.
- Le esportazioni sono cifrate con una passphrase mostrata una sola volta. Per il resto, i tuoi dati non lasciano mai il dispositivo.
- Gli aggiornamenti degli indicatori passano da un relay che protegge la privacy: il server di aggiornamento non vede mai il tuo indirizzo IP.
Da cosa si difende Bugbane #
Il threat model considera, tra gli altri:
- Spyware sul dispositivo stesso. Se il dispositivo è compromesso a livello root, ciò che Bugbane salva potrebbe essere letto. Inoltre, lo spyware potrebbe aver già rimosso le proprie tracce, o sapere che Bugbane è in uso e interferire con i suoi risultati.
- Accesso fisico ed estrazione forense. Chi prende il dispositivo, o vi usa uno strumento forense non consensuale, non deve poter leggere le tue acquisizioni.
- Una rete ostile. L’acquisizione avviene tramite il Debug Wireless del dispositivo stesso. Altri soggetti sulla stessa rete possono sapere quando attivi il Debug Wireless: non farlo mai su una rete pubblica, condivisa o non fidata. Bugbane avvisa inoltre sulle versioni di Android vulnerabili, quando applicabile, e ti invita a disabilitare le Opzioni sviluppatore dopo ogni sessione.
- L’infrastruttura di aggiornamento. Scaricare gli indicatori non deve rivelare chi usa l’app, e una sorgente compromessa deve avere un potere limitato (vedi limitazioni).
Come sono salvate le acquisizioni #
Ogni acquisizione è un singolo file: un normale archivio ZIP avvolto in una busta di cifratura age. L’archivio viene cifrato mentre viene scritto, artefatto per artefatto: il testo in chiaro non viene mai salvato su disco, nemmeno temporaneamente. Se l’acquisizione si interrompe, ciò che esiste su disco è comunque cifrato.
Una cosa resta volutamente leggibile senza sbloccare nulla: un piccolo file di metadati con nome, data e stato dell’acquisizione. Serve a mostrare l’elenco delle acquisizioni senza chiederti di autenticarti, ma significa anche che chi ha il dispositivo può vedere che esistono acquisizioni e quando sono state fatte. La cifratura ne protegge il contenuto.
La chiave delle acquisizioni #
Ogni installazione genera una identità di acquisizione: una coppia di chiavi X25519.
- La chiave pubblica è salvata in chiaro. Cifra le nuove acquisizioni, ed è il motivo per cui acquisire non richiede mai l’autenticazione.
- La chiave privata è quella che le decifra. È avvolta da una chiave custodita nell’hardware di sicurezza di Android, un secure element (StrongBox) dove disponibile e altrimenti il TEE, e sbloccarla richiede la conferma del blocco schermo.
La conseguenza di questa separazione è che un’acquisizione può sempre essere scritta, anche subito dopo un riavvio, mentre leggerla, analizzarla, esportarla o condividerla richiede sempre le tue credenziali.
La password delle acquisizioni #
La Guida introduttiva mostra dove impostarla. Tecnicamente, la password sigilla l’identità di acquisizione con Argon2id (i parametri memory-hard raccomandati da RFC 9106, dimensionati per mobile: 64 MiB, 3 iterazioni) più ChaCha20-Poly1305, dentro il livello protetto dall’hardware anziché sostituirlo.
Gli strumenti di estrazione forense funzionano estraendo il materiale crittografico e forzando i PIN corti. Se questo riesce contro il tuo dispositivo, la password resta una barriera indipendente, e forzare una password lunga e casuale attraverso Argon2id non è praticabile. Per questo l’app incoraggia a impostare la password sui dispositivi senza secure element, e la considera opzionale dove StrongBox fornisce già una protezione a livello hardware.
Non c’è recupero. Bugbane non salva mai la password, quindi dimenticarla significa che le acquisizioni già sul dispositivo diventano permanentemente illeggibili. Rimuovere il blocco schermo ha un effetto simile: Android invalida in modo permanente la chiave protetta dall’hardware (cambiare il blocco schermo invece no), e le acquisizioni già sul dispositivo diventano illeggibili.
Esporta e Condividi #
Quando esporti o condividi un’acquisizione, Bugbane non decifra e ri-cifra i tuoi dati. Estrae la chiave del file dell’archivio con la tua identità di acquisizione, la riavvolge verso una passphrase (il recipient scrypt di age) e copia il contenuto cifrato byte per byte. In concreto:
- Il file esportato è un normale
.zip.age: chiunque abbia la passphrase e lo strumento age può aprirlo. È questo che rende possibile l’analisi con MVT. - La passphrase è di 32 caratteri alfanumerici casuali, generata al momento dell’esportazione e mostrata una sola volta. Bugbane non la conserva.
- Condividi trasmette l’archivio direttamente all’app che scegli (Signal, email, …); nulla viene salvato su disco e solo l’app scelta ottiene l’accesso, quindi, a seconda dell’app ricevente, può funzionare anche quando lo spazio su disco è poco.
Invia la passphrase attraverso un canale diverso da quello dell’archivio. Se viaggiano attraverso lo stesso canale, la cifratura non offre alcuna protezione.
La chiave ADB #
L’accoppiamento con il Debug Wireless crea un’identità ADB RSA-2048. La sua chiave privata è avvolta dallo stesso keystore protetto dall’hardware prima di essere salvata: una copia dei file dell’app non basta per impersonare l’accoppiamento. Uno strumento forense in grado di estrarre la chiave non ne ha bisogno: estrarla richiede già più privilegi di quelli che la chiave stessa concede.
Aggiornamenti degli indicatori #
Bugbane scarica periodicamente gli Indicatori di Compromissione aggiornati da update.bugbane.org. Non contatta mai quel server direttamente: le richieste passano da un relay Oblivious HTTP (RFC 9458). Il relay vede il tuo IP ma non la richiesta; il server vede la richiesta ma non il tuo IP. Nessuno dei due, da solo, può sapere chi sta aggiornando indicatori di spyware, un’informazione a sua volta sensibile. Gli aggiornamenti sono scaricati come delta compatti e verificati per hash rispetto al risultato atteso. L’attuale fornitore del relay è oblivious.network, che distribuisce i propri relay sulla CDN di Fastly. Un provider di rete vede una connessione a relay.oblivious.network, lo stesso nome SNI condiviso tra tutti i tenant, quindi in teoria non può distinguere direttamente il traffico di Bugbane da quello di altri servizi che usano lo stesso fornitore.
Limitazioni note #
- Bugbane è sperimentale e non è ancora stato sottoposto a un audit di sicurezza indipendente; vedi Rischi e avvertenze.
- I bundle di indicatori sono scaricati via HTTPS/OHTTP e verificati per hash, ma la verifica end-to-end della firma del feed di indicatori non è ancora implementata. È in programma. Fino ad allora, una compromissione dell’infrastruttura di aggiornamento potrebbe servire indicatori alterati.
- L’uso di Bugbane è rilevabile sul dispositivo. Funzionalità come nascondere l’app non sono implementate.
Verifica ciò che installi #
Le build sono riproducibili, e F-Droid le verifica in modo indipendente. Se installi l’APK direttamente, controlla prima il certificato di firma.