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 vive nel modulo crypto, gli obiettivi di progettazione in THREAT_MODELING.md.
In breve:
- Le acquisizioni sono sempre cifrate.
- La chiave di decifratura vive nell’hardware di sicurezza del dispositivo e non tocca mai in chiaro l’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 ci usa sopra 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 spinge 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. È il loro contenuto che la cifratura protegge.
La chiave delle acquisizioni #
Ogni installazione genera una identità di acquisizione: una coppia di chiavi X25519.
- La chiave pubblica è salvata in chiaro. È quella che cifra le nuove acquisizioni — ed è il motivo per cui acquisire non chiede mai di autenticarti.
- La chiave privata è quella che le decifra. È avvolta da una chiave custodita nell’hardware di sicurezza di Android — un secure element (StrongBox) dove disponibile, altrimenti il TEE — e sbloccarla richiede la conferma del blocco schermo.
Questa separazione conta: un’acquisizione può sempre essere scritta, anche subito dopo un riavvio, ma 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, non al suo posto.
Cosa aggiunge: 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 comunque in mezzo — e forzare una password lunga e casuale attraverso Argon2id non è praticabile. Per questo l’app incoraggia la password sui dispositivi senza secure element, e la considera opzionale dove StrongBox alza già l’asticella.
Il compromesso è reale: non c’è recupero. Bugbane non salva mai la password, quindi dimenticarla significa che le acquisizioni già sul dispositivo restano sigillate per sempre. 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 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 insieme, la cifratura non protegge nulla.
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.