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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.