Funzionalità
La versione originale inglese non tradotta la trovate su https://grapheneos.org/features
(*quando leggete pixel si intende il telefono, nel nostro caso ShieldPhone)
Le sezioni in rosso sono le più importanti che consigliamo caldamente di leggere
Panoramica delle funzionalità
GrapheneOS è un sistema operativo mobile privato e sicuro dotato di grandi doti di funzionalità e usabilità. Parte dalla solida base dell'Android Open Source Project (AOSP) e dedica estrema cura nell'evitare l'aumento della superficie di attacco o il danneggiamento del robusto modello di sicurezza. GrapheneOS apporta miglioramenti sostanziali sia alla privacy che alla sicurezza attraverso numerose funzionalità accuratamente progettate per operare contro avversari reali. Il progetto tiene molto in considerazione l'usabilità e la compatibilità delle app, elementi che vengono integrati in ogni nostra funzionalità.
GrapheneOS si concentra sulla sostanza piuttosto che sul branding e sul marketing. Non adotta il tipico approccio di accumulare una serie di funzioni insicure confidando nel fatto che gli avversari non le conoscano, rischiando di regredire i livelli effettivi di privacy e sicurezza. È un progetto altamente tecnico che integra la privacy e la sicurezza direttamente nel sistema operativo, piuttosto che includere fronzoli assortiti poco utili o raggruppare scelte soggettive di app di terze parti.
GrapheneOS è inoltre duramente al lavoro per colmare le lacune derivanti dal non includere le app e i servizi Google nel sistema operativo. Non siamo contrari all'uso dei servizi Google da parte degli utenti, ma riteniamo che non debbano essere integrati nel sistema in modo invasivo. GrapheneOS non accetterà la scorciatoia di includere semplicemente una reimplementazione di terze parti dei servizi Google, incompleta e scarsamente protetta, all'interno del sistema. Non sarebbe mai qualcosa su cui gli utenti potrebbero fare affidamento. Inoltre, si tratterebbe di inseguire un obiettivo in continua evoluzione offrendo una sicurezza inferiore all'originale, qualora l'obiettivo fosse semplicemente far funzionare le cose senza la massima cura nel farlo in modo robusto e sicuro.
Questa pagina fornisce una panoramica delle funzionalità attualmente implementate che differenziano GrapheneOS da AOSP. Non documenta le nostre numerose funzionalità storiche che non sono più incluse per una ragione o per l'altra. Molte delle nostre funzioni sono state implementate in AOSP, Linux, LLVM e altri progetti su cui GrapheneOS si basa, e queste non sono elencate qui. In molti casi, siamo stati coinvolti nell'implementazione di tali funzionalità nei progetti delle infrastrutture principali.
GrapheneOS
Queste sono le funzionalità di GrapheneOS che vanno oltre quanto fornito dalla versione 14 dell'Android Open Source Project. Copre solo i nostri miglioramenti ad AOSP e non le funzioni di base. Questa sezione non elenca funzioni come la sandbox standard delle app, il verified boot, le mitigazioni degli exploit (ASLR, SSP, Shadow Call Stack, Control Flow Integrity, ecc.), il sistema dei permessi e così via, ma solo i nostri miglioramenti al moderno Android.
Difesa contro lo sfruttamento di vulnerabilità ignote
GrapheneOS è fortemente focalizzato sulla protezione degli utenti contro gli attaccanti che sfruttano vulnerabilità ignote (0-day). Patchare le vulnerabilità non protegge gli utenti prima che la vulnerabilità sia nota al produttore e che una patch venga sviluppata e distribuita.
Le vulnerabilità ignote (0-day) sono molto più utilizzate di quanto si creda per colpire gli utenti, non solo in attacchi mirati ma anche in distribuzioni di massa. Project Zero gestisce un foglio di calcolo che traccia lo sfruttamento di zero-day rilevati "in the wild". Questa è solo una minima parte di ciò che accade, poiché documenta solo i casi in cui gli attaccanti sono stati sorpresi, spesso perché gli attacchi non erano mirati ma distribuiti su siti web pubblici.
La prima linea di difesa è la riduzione della superficie di attacco. Rimuovere codice non necessario o superfici di attacco esposte elimina completamente molte vulnerabilità. GrapheneOS evita di rimuovere funzionalità utili per gli utenti finali, ma può comunque disabilitare molte funzioni per impostazione predefinita e richiedere che gli utenti scelgano di utilizzarle (opt-in).
La seconda linea di difesa consiste nell'impedire a un attaccante di sfruttare una vulnerabilità, rendendo l'operazione impossibile, inaffidabile o significativamente più difficile. La stragrande maggioranza delle vulnerabilità appartiene a classi di bug ben comprese e lo sfruttamento può essere prevenuto evitando i bug tramite linguaggi/strumenti o prevenendo l'exploit con forti mitigazioni.
La linea di difesa finale è il contenimento tramite sandboxing a vari livelli. GrapheneOS migliora tutte queste sandbox fortificando il kernel e altri componenti di base del sistema operativo, insieme al miglioramento delle politiche di sandboxing.
Riduzione della superficie di attacco
Superficie di attacco remota, locale e di prossimità notevolmente ridotta eliminando il codice non necessario, rendendo opzionali più funzioni e disabilitando le funzioni opzionali per impostazione predefinita (NFC, Bluetooth, UWB, ecc.), quando lo schermo è bloccato (USB, USB-C, pogo pins, accesso alla fotocamera) e facoltativamente dopo un timeout (Bluetooth, Wi-Fi).
L'accesso al debugging nativo (ptrace) è bloccato per tutte le app incluse. L'accesso ptrace è consentito per impostazione predefinita per le app installate dall'utente per compatibilità, con un'opzione per bloccarlo di default.
Controllo della porta USB-C e dei pogo pins
La nostra impostazione per la porta USB-C e i pogo pins protegge dagli attacchi tramite USB-C o pogo pins mentre il sistema operativo è avviato.
La funzione ha cinque modalità:
1. Off
2. Charging-only (Solo ricarica)
3. Charging-only when locked (Solo ricarica quando bloccato)
4. Charging-only when locked, except before first unlock (Solo ricarica quando bloccato, eccetto prima del primo sblocco)
5. On
L'impostazione predefinita è Charging-only when locked, che riduce significativamente la superficie di attacco quando il dispositivo è bloccato. Dopo il blocco, blocca immediatamente qualsiasi nuova connessione USB sia tramite USB-C che pogo pins, sia a livello hardware (configurando il controller USB) sia a livello di sistema operativo nel kernel. La modalità più sicura, Off, disabilita anche la ricarica per rimuovere la restante superficie di attacco dal controller USB.
(Questo capitolo potete saltarlo se non vi interessano i dati tecnici da nerd)
Mitigazioni degli exploit
Runtime delle app indurito (Hardened)
• Sistema di generazione delle applicazioni (spawning) sicuro, che evita la condivisione del layout dello spazio di indirizzamento e di altri segreti tra le diverse applicazioni.
• libc indurita che fornisce difese contro le classi più comuni di vulnerabilità (corruzione della memoria).
• Il nostro allocatore di memoria (malloc) indurito, che sfrutta le moderne capacità hardware per fornire difese sostanziali contro le classi più comuni di vulnerabilità (corruzione della memoria heap), riducendo al contempo la persistenza dei dati sensibili in memoria. Il progetto hardened_malloc è portabile su altri sistemi operativi basati su Linux ed è in fase di adozione da parte di altri OS focalizzati sulla sicurezza come secureblue. Il nostro allocatore ha influenzato pesantemente anche il design della prossima generazione dell'implementazione musl malloc.
• Metadati completamente "out-of-line" con protezione dalla corruzione, escludendo lo sfruttamento dei tradizionali allocatori.
• Regioni di memoria separate per metadati, allocazioni grandi e per ogni classe di dimensione delle "slab", con basi casuali ad alta entropia e nessun riutilizzo dello spazio di indirizzamento tra le diverse regioni.
• Rilevamento deterministico di ogni free non valida.
• Zero-on-free: azzeramento della memoria al momento del rilascio con rilevamento di "write-after-free" tramite il controllo che la memoria sia ancora azzerata prima di riassegnarla.
• Riutilizzo ritardato dello spazio di indirizzamento e delle allocazioni di memoria attraverso una combinazione di quarantene deterministiche e casuali per mitigare le vulnerabilità di "use-after-free".
• Randomizzazione a grana fine e controlli di consistenza aggressivi.
• Regioni di protezione (guard regions) protette in memoria attorno alle allocazioni superiori a 16k, con randomizzazione delle dimensioni delle regioni per allocazioni da 128k in su.
• Le allocazioni inferiori a 16k hanno regioni di protezione attorno a ciascuna delle "slab" che contengono le allocazioni.
• Canarini casuali con uno zero iniziale vengono aggiunti a queste allocazioni più piccole per bloccare gli overflow delle stringhe C, assorbire piccoli overflow e rilevare corruzioni dell'heap quando il valore del canarino viene controllato (principalmente durante il free).
• Memory tagging hardware per le allocazioni slab (128k e inferiori) che fornisce un rilevamento probabilistico di tutti gli "use-after-free" e degli overflow tra oggetti, insieme al rilevamento deterministico di tutti gli overflow piccoli/lineari.
• Su ARMv9, sono abilitati il Branch Target Identification (BTI) e la protezione dell'indirizzo di ritorno Pointer Authentication Code (PAC) per il codice del sistema operativo in spazio utente da noi compilato.
• L'overflow degli interi con segno è reso ben definito in C e C++ per il codice in cui il controllo automatico dell'overflow è disabilitato.
Kernel indurito (Hardened)
• Le tabelle delle pagine a 4 livelli sono abilitate su arm64 per fornire uno spazio di indirizzamento molto più ampio (48-bit invece di 39-bit) con una randomizzazione del layout (ASLR) a entropia significativamente più alta (33-bit invece di 24-bit).
• Il memory tagging hardware di base è utilizzato nei principali allocatori di memoria del kernel per fornire il rilevamento probabilistico di "use-after-free" e overflow tra oggetti.
• Aggiunta di canarini casuali con zero iniziale all'heap del kernel (slub) per bloccare overflow di stringhe C e rilevare corruzioni dell'heap.
• Wiping della memoria: la memoria viene azzerata non appena viene rilasciata sia nell'allocatore di pagine di basso livello che nell'heap del kernel. Ciò riduce drasticamente la durata dei dati sensibili in memoria e rende innocue la maggior parte delle vulnerabilità legate all'uso di dati non inizializzati.
• Nelle prime fasi di avvio, tutta la memoria non utilizzata dall'OS viene azzerata per eliminare eventuali residui di sessioni precedenti.
• Le allocazioni dello stack del kernel vengono azzerate per neutralizzare le vulnerabilità da dati non inizializzati.
• Riduzione della superficie di attacco tramite la disattivazione di funzioni o la configurazione di infrastrutture per abilitarle/disabilitarle dinamicamente solo quando necessario (perf, ptrace).
• Firma forzata dei moduli del kernel con chiavi RSA 4096 e SHA256 per singola build, e modalità lockdown impostata su riservatezza forzata (forced confidentiality).
• Su ARMv9, è abilitato il Branch Target Identification (BTI) in aggiunta al Control Flow Integrity (CFI) basato su tipi Clang.
• Su ARMv9, lo ShadowCallStack (SCS) è abilitato insieme alla protezione PAC.
Compilazione e caricamento del codice
• La compilazione Just-In-Time (JIT) di Android Runtime è completamente disabilitata e sostituita dalla compilazione Ahead-Of-Time (AOT) integrale. L'unica compilazione JIT nel sistema base è quella JavaScript di V8, che è disabilitata per impostazione predefinita nel browser Vanadium.
• Il caricamento dinamico del codice (sia nativo che classi Java/Kotlin) è bloccato per quasi l'intero sistema operativo di base. Questo lavora insieme al Verified Boot per impedire ai processi di sistema di eseguire codice controllato da un attaccante.
• Il caricamento dinamico del codice può essere disabilitato per le app installate dall'utente tramite 3 selettori di protezione: Caricamento dinamico del codice dalla memoria, Caricamento dinamico del codice dall'archiviazione e JIT di WebView. GrapheneOS mostra una notifica all'utente quando un'app viene bloccata da queste impostazioni, permettendo di abilitarle solo dove strettamente necessario.
•Indurimento dell'accesso al Filesystem
(Ora potete tornare a leggere se avete saltato il capitolo precedente)
Sandboxing migliorato
GrapheneOS migliora la sandbox delle app attraverso l'indurimento delle policy SELinux e seccomp-bpf, insieme a tutto il lavoro di rafforzamento dei componenti (come il kernel) che implementano la sandbox stessa e che potrebbero fornire all'attaccante una via di fuga in caso di exploit. Ci concentriamo principalmente sulla sandbox delle app, ma miglioriamo anche le altre, apportando miglioramenti diretti alla sandbox del renderer del browser web, utilizzata sia dal browser predefinito che dal motore di rendering WebView (sfruttato da un numero enorme di altre app, dai browser dedicati alle app di messaggistica).
Anti-persistenza e rilevamento
• Verified Boot potenziato con migliori proprietà di sicurezza e superficie di attacco ridotta.
• GrapheneOS completa l'implementazione incompleta del Verified Boot per gli aggiornamenti fuori banda dei pacchetti (APK) nel sistema operativo. Imponiamo l'uso di metadati fs-verity firmati con una chiave fidata per gli aggiornamenti delle app di sistema, sia al momento dell'installazione che all'avvio. Questo garantisce una verifica continua: ogni lettura da un aggiornamento APK viene verificata, analogamente a quanto avviene per il firmware o l'immagine del sistema operativo.
• Abbiamo chiuso una falla che permetteva il downgrade dei componenti di sistema basati su app a versioni precedenti (a causa del mancato incremento di versionCode). Imponiamo il controllo della versione sia all'installazione che al boot.
• Attestazione basata su hardware migliorata con informazioni sulla versione più precise.
• Verifica della sicurezza e monitoraggio hardware tramite la nostra app Auditor e il relativo servizio di attestazione.
• Il supporto per i moduli APEX compressi è disabilitato, poiché non utile e fonte di ulteriore superficie di attacco per il Verified Boot.
Patching più completo
GrapheneOS include correzioni per un gran numero di vulnerabilità non ancora risolte in Android.
Siamo in grado di distribuire rapidamente e in sicurezza le ultime versioni LTS del kernel Linux sui dispositivi con supporto GKI (Generic Kernel Image). Questo ci permette di essere avanti di diversi mesi rispetto al sistema operativo stock dei Pixel, fornendo centinaia di patch rilevanti per il kernel, comprese molte patch di sicurezza non ancora incluse ufficialmente da Google.
Spesso scopriamo noi stessi nuove vulnerabilità e le segnaliamo ai produttori. Abbiamo segnalato decine di vulnerabilità sia per la base di codice generica di Android, sia specificamente per i Pixel. Il nostro approccio si concentra sui miglioramenti sistemici di privacy e sicurezza, ma la correzione delle singole vulnerabilità rimane fondamentale.
Sandboxed Google Play
GrapheneOS dispone di un livello di compatibilità che offre l'opzione di installare e utilizzare le versioni ufficiali di Google Play all'interno della standard app sandbox. Su GrapheneOS, Google Play non riceve assolutamente alcun accesso speciale o privilegio, a differenza di quanto avviene normalmente dove bypassa la sandbox e riceve permessi altamente privilegiati. Invece, il nostro livello di compatibilità "insegna" a Google Play come funzionare all'interno della sandbox completa. Google Play non viene utilizzato come backend per i servizi del sistema operativo, poiché GrapheneOS non lo utilizza nemmeno quando è installato.
• Isolamento nei profili: Essendo normali app, i servizi Google Play vengono installati solo all'interno di uno specifico profilo utente o di lavoro e sono disponibili solo lì.
• Nessun privilegio speciale: Come ogni altra app, non possono accedere ai dati di altre applicazioni e richiedono il consenso esplicito dell'utente per accedere ai dati del profilo o ai permessi standard.
• Piena funzionalità: La stragrande maggioranza delle funzioni di Google Play funziona perfettamente, inclusi i moduli scaricati dinamicamente e i componenti come Google Play Games.
• Geolocalizzazione: Per impostazione predefinita, le richieste di posizione vengono reindirizzate a una reimplementazione del servizio di geolocalizzazione fornita da GrapheneOS. È possibile disattivare questo reindirizzamento se si desidera utilizzare il servizio di localizzazione di rete nativo di Google.
• Play Store: Il nostro livello di compatibilità include il pieno supporto per il Play Store, inclusi gli acquisti in-app, Play Asset Delivery e i controlli delle licenze. Può installare e aggiornare le app richiedendo l'autorizzazione dell'utente come sorgente di app e utilizzando la funzione di aggiornamento automatico di Android 12+.
Android Auto
GrapheneOS offre l'opzione di installare e utilizzare le versioni ufficiali di Android Auto.
Android Auto richiede un accesso privilegiato per funzionare. GrapheneOS utilizza un'estensione del livello di compatibilità di Sandboxed Google Play per far funzionare Android Auto con un livello ridotto di privilegi.
Per maggiori dettagli, consulta la sezione della guida all'uso dedicata ad Android Auto.
Selettore del permesso di Rete (Network permission toggle)
GrapheneOS aggiunge un selettore per il permesso di Rete che consente di negare sia l'accesso diretto che quello indiretto a qualsiasi rete disponibile. Anche la rete locale del dispositivo (localhost) è protetta da questo permesso, il che è fondamentale per impedire alle app di usarla per comunicare tra profili diversi. A differenza di un'implementazione basata su firewall, questo selettore impedisce alle app di utilizzare la rete tramite le API fornite dal sistema operativo o da altre app nello stesso profilo.
Il permesso standard INTERNET, usato come base per questa funzione, è potenziato con un secondo livello di applicazione e un supporto adeguato per la concessione/revoca su base per-profilo.
Per evitare di compromettere la compatibilità con le app Android, il selettore è abilitato per impostazione predefinita. Tuttavia, l'interfaccia di installazione è stata estesa per mostrare il selettore nella pagina di conferma, consentendo agli utenti di disabilitarlo subito. Quando il permesso è negato, GrapheneOS finge che la rete sia assente, restituendo errori di connettività standard invece di errori di "permesso revocato", evitando così che le app vadano in crash.
Selettore del permesso Sensori (Sensors permission toggle)
Questo selettore permette di negare l'accesso a tutti i sensori non coperti dai permessi Android esistenti (Fotocamera, Microfono, Sensori corporei, Riconoscimento attività), inclusi accelerometro, giroscopio, bussola, barometro, termometro e altri. Quando l'accesso è disabilitato, le app ricevono dati azzerati e non ricevono eventi dai sensori. GrapheneOS genera una notifica quando un'app tenta di accedere ai sensori bloccati, rendendo la funzione più trasparente per l'utente.
Storage Scopes (Ambiti di Archiviazione)
GrapheneOS offre gli Storage Scopes come alternativa completamente compatibile ai permessi di archiviazione standard di Android. Invece di concedere il permesso completo alla memoria, gli utenti possono attivare gli Storage Scopes per far credere all'app di avere tutti i permessi richiesti. Su Android, un'app senza permessi può comunque creare file e accedervi; con questa funzione, gli utenti possono aggiungere facoltativamente file e cartelle specifici a cui l'app è autorizzata ad accedere, isolando il resto dei dati.
Contact Scopes (Ambiti dei Contatti)
GrapheneOS fornisce i Contact Scopes come alternativa alla concessione del permesso "Contatti". Per impostazione predefinita, il sistema si comporta come se la lista dei contatti fosse vuota; l'utente può quindi scegliere di concedere l'accesso solo a specifici contatti o gruppi di contatti.
Ampio supporto agli operatori senza accessi invasivi
GrapheneOS supporta una vasta gamma di operatori, eguagliando quasi il sistema operativo stock dei Pixel senza fare gli stessi sacrifici. Convertiamo i database degli APN, delle configurazioni operatore, degli MMS e della segreteria visiva nei formati usati da AOSP. Rimuoviamo le configurazioni "anti-utente" (come quelle che richiedono il provisioning per il tethering o che impediscono di disattivare il 2G) e non includiamo le app invasive specifiche degli operatori o il supporto per Open Mobile Alliance Device Management (OMA DM).
Modalità LTE-only
È disponibile una modalità solo LTE per ridurre la superficie di attacco della radio cellulare, disabilitando enormi quantità di codice sia legacy (2G, 3G) che sperimentale (5G).
Privacy Wi-Fi
GrapheneOS supporta e abilita di default la randomizzazione del MAC per-connessione, un approccio più privato rispetto al MAC randomizzato per-rete standard di Android. Ogni volta che ci si riconnette, lo stato del client DHCP viene cancellato per evitare di rivelare che si tratta dello stesso dispositivo. GrapheneOS applica inoltre correzioni a gravi falle nell'implementazione IPv6 del kernel Linux che potrebbero essere usate come identificatori tra diverse reti.
Localizzazione di rete (Network location)
GrapheneOS fornisce la localizzazione basata sulla rete come funzione opzionale (opt-in) con una propria implementazione. Rileva la posizione in base alle reti vicine invece di affidarsi solo ai satelliti (GNSS), rendendo la localizzazione al chiuso o tra grattacieli molto più rapida.
A differenza del servizio di Google, la nostra funzione esegue la stima della posizione localmente sul dispositivo recuperando i dati dal servizio e memorizzandoli in cache per 15 minuti. Questo permette di funzionare offline dopo il download iniziale e non richiede di inviare costantemente dati sulle distanze al server. Attualmente, gli utenti possono scegliere tra il nostro proxy per il servizio di Apple o l'uso diretto del servizio Apple. Stiamo creando un nostro database che supporterà l'utilizzo completamente offline tramite il download di database locali.
Screenshot privati
GrapheneOS disabilita l'inclusione di metadati sensibili all'interno degli screenshot.
• Su Android, ogni screenshot include un tag EXIF Software con informazioni dettagliate sulla build e sulla versione del sistema operativo (android.os.Build.DISPLAY). Questo dato rivela il tipo di OS, la versione e solitamente la famiglia o il modello del dispositivo. GrapheneOS disabilita completamente questo tag.
• Su Android, ogni screenshot include anche tag EXIF con la data locale, l'ora e l'offset del fuso orario. GrapheneOS disabilita questi dati per impostazione predefinita per evitare fughe di informazioni temporali e di quasi-posizione (tramite il fuso orario). La data e l'ora rimangono incluse nel nome del file dello screenshot, che è visibile e facilmente modificabile dall'utente. È possibile riattivare questi metadati in Impostazioni > Sicurezza e privacy > Altra sicurezza e privacy.
Chiusura delle perdite di identificatori del dispositivo
GrapheneOS corregge diverse falle che permettono la fuga di identificatori del dispositivo, impedendo alle app di identificare univocamente un device.
• Il nostro sistema di generazione sicura delle applicazioni (secure application spawning), oltre a migliorare la protezione dagli exploit, migliora la privacy: i segreti usati per le mitigazioni probabilistiche (come l'ASLR) non sono più utilizzabili come identificatori persistenti tra diversi profili.
• Abbiamo eliminato diverse falle che consentivano alle app di accedere agli identificatori hardware, inasprendo le restrizioni anche per le app che puntano a versioni legacy di Android.
Privacy per impostazione predefinita (Privacy by default)
GrapheneOS non include né utilizza app e servizi Google di default e preferisce impostazioni che privilegiano la privacy rispetto a piccole comodità:
• I suggerimenti personalizzati della tastiera basati sulla cronologia sono disabilitati.
• Le notifiche sensibili sono nascoste nella schermata di blocco.
• Le password vengono nascoste durante l'inserimento.
Per impostazione predefinita, GrapheneOS utilizza i propri server (invece di quelli Google) per i seguenti servizi:
• Controlli di connettività.
• Provisioning delle chiavi di attestazione.
• Download degli almanacchi GNSS (PSDS/XTRA).
• SUPL (Secure User Plane Location).
• Orario di rete.
• Aggiornamenti dei componenti di Vanadium (Chromium).
È presente un selettore per tornare ai server Google per i controlli di connettività e altri servizi, permettendo al dispositivo di apparire come un device AOSP standard in rete.
Scrambling del PIN (PIN scrambling)
GrapheneOS aggiunge un'opzione per "rimescolare" l'ordine dei numeri sulla tastiera del PIN. Questo rende molto più difficile per un osservatore esterno (o tramite canali laterali) capire quale PIN venga inserito tramite la posizione delle dita. Lo scrambling si applica sia alla schermata di blocco che al PIN della SIM.
Sblocco tramite impronta a due fattori
GrapheneOS aggiunge l'opzione di richiedere un secondo fattore (PIN) dopo l'autenticazione riuscita con l'impronta digitale per completare lo sblocco. Ciò consente di utilizzare una passphrase forte come metodo principale e la comodità dell'impronta unita a un PIN breve come sblocco secondario.
Supporto per password più lunghe
GrapheneOS supporta l'impostazione di password fino a 128 caratteri (invece dei 16 standard). Questo permette l'uso di "passphrase" (metodo diceware) senza dover dipendere esclusivamente dalla sicurezza dell'elemento sicuro (Secure Element) del dispositivo.
Riavvio automatico (Auto reboot)
GrapheneOS offre una funzione di riavvio automatico che riavvia i dispositivi bloccati dopo un periodo di tempo prestabilito per riportare i dati a riposo (crittografati).
• Un timer parte ogni volta che il dispositivo viene bloccato; se non avviene uno sblocco entro la fine del conteggio, il dispositivo si riavvia.
• Il timer è impostato su 18 ore di default, ma può essere regolato da 10 minuti a 72 ore.
• Questa funzione non si attiva se il dispositivo è nello stato "Prima del primo sblocco" (After First Unlock), evitando riavvii continui.
• È implementata nel processo init, rendendola impossibile da bypassare tramite crash dei processi di sistema.
Cancellazione dei dati sensibili dalla memoria
GrapheneOS aggiunge l'azzeramento (zeroing) della memoria liberata sia per gli allocatori in spazio utente che per quelli del kernel. Questo garantisce che i dati sensibili vengano rimossi non appena non sono più necessari.
• Quando il dispositivo viene bloccato, attiviamo una "garbage collection" (GC) completa per i processi SystemUI e system_server per rilasciare la memoria non utilizzata e azzerare i dati riferiti agli oggetti (come frammenti del PIN o chiavi derivate).
• Abbiamo modificato le modalità di riavvio per garantire che la memoria venga effettivamente liberata e azzerata dalle funzioni del kernel durante il processo.
PIN/Password di emergenza (Duress PIN/Password)
GrapheneOS offre agli utenti la possibilità di impostare un PIN o una Password di emergenza che, se inseriti in qualsiasi punto in cui vengano richieste le credenziali del dispositivo (schermata di blocco o prompt di sistema), avvieranno la cancellazione irreversibile del dispositivo (inclusi eventuali profili eSIM installati).
La cancellazione non richiede un riavvio e non può essere interrotta. Può essere configurata in Impostazioni > Sicurezza e privacy > Sblocco del dispositivo > Duress Password all'interno del profilo proprietario. Il "Duress PIN" viene utilizzato esclusivamente per l'inserimento del PIN, mentre la "Duress Password" esclusivamente per l'inserimento della password. È obbligatorio impostare entrambi per attivare la funzione, così da coprire diversi profili che potrebbero avere metodi di sblocco differenti. Il PIN di emergenza cancellerà il dispositivo anche se inserito come PIN per lo sblocco tramite impronta a due fattori, ma attualmente non se inserito come PIN della SIM.
Nota: Se il PIN o la Password di emergenza sono identici al metodo di sblocco reale, quest'ultimo avrà sempre la precedenza e non avverrà alcuna cancellazione.
Sblocco tramite impronta digitale più sicuro
GrapheneOS migliora la sicurezza dello sblocco tramite impronta consentendo solo 5 tentativi totali, invece di implementare un ritardo di 30 secondi ogni 5 tentativi falliti per un totale di 20. Questo non solo riduce il numero di potenziali tentativi, ma permette anche di disabilitare facilmente lo sblocco biometrico fallendo intenzionalmente i 5 tentativi con un dito diverso.
Inoltre, GrapheneOS aggiunge il supporto per utilizzare il lettore di impronte digitali solo per l'autenticazione nelle app e per lo sblocco delle chiavi del keystore hardware, disattivando la funzione di sblocco del dispositivo. Questa funzione era già presente per lo sblocco facciale standard di Android.
Profili utente migliorati
I profili utente di Android sono spazi di lavoro isolati con proprie istanze di app, dati delle app e dati del profilo (contatti, file multimediali, directory home, ecc.). Ogni profilo ha le proprie chiavi di crittografia basate sul rispettivo metodo di blocco. GrapheneOS apporta diversi miglioramenti a questa funzionalità.
• Più profili utente: GrapheneOS innalza il limite del numero di profili utente secondari a 32 (31 + ospite) invece dei soli 4 (3 + ospite) previsti normalmente, rendendo questa funzione molto più flessibile.
• Termina sessione (End session): GrapheneOS abilita il supporto per il logout dai profili utente senza necessità di un software di gestione aziendale (device manager). Il logout rende i profili inattivi, impedendo l'esecuzione delle app in essi installate. Inoltre, elimina le chiavi di crittografia del disco dalla memoria e dai registri hardware, riportando i dati del profilo utente "a riposo" (at rest).
• Disabilitazione dell'installazione app: GrapheneOS aggiunge un selettore nelle impostazioni di gestione utenti per disabilitare l'installazione di app negli utenti secondari. Il proprietario può installare le app necessarie e poi bloccare la possibilità di aggiungerne altre.
• Installazione app disponibili migliorata: GrapheneOS abilita la funzione standard (non attiva in AOSP o nei Pixel stock) che permette all'utente Proprietario di installare pacchetti già presenti in altri profili. Ciò consente di installare in un profilo secondario un'app già scaricata nel profilo principale senza doverla scaricare nuovamente.
• Inoltro delle notifiche: GrapheneOS supporta l'inoltro delle notifiche dagli utenti in esecuzione in background verso l'utente attualmente attivo. Questa funzione è disattivata per impostazione predefinita e può essere abilitata all'interno di ogni profilo da cui si desidera ricevere gli avvisi. Le notifiche inoltrate vengono visualizzate in un canale di notifica locale standard.
Repository delle app di GrapheneOS
GrapheneOS include un proprio client per il repository delle applicazioni, focalizzato su sicurezza, minimalismo e usabilità. Attualmente, il nostro repository è utilizzato per distribuire le nostre app ufficiali e un mirror di Google Play per la funzione Sandboxed Google Play. In futuro, verrà utilizzato per distribuire versioni prodotte da GrapheneOS di app open source sviluppate esternamente, con l'aggiunta di misure di indurimento (hardening).
Vanadium: WebView indurita e browser predefinito
GrapheneOS include Vanadium sia come implementazione WebView di sistema, sia come browser predefinito. Vanadium è una variante indurita di Chromium che offre privacy e sicurezza potenziate. Sebbene attualmente non aggiunga molte funzioni estetiche, sono previsti numerosi miglioramenti a lungo termine.
Alcune delle caratteristiche aggiunte rispetto al normale Chromium per dispositivi mobili:
• Hardware memory tagging (MTE) abilitato per l'allocatore principale.
• Control Flow Integrity (CFI) basato sui tipi.
• Protezione dello stack (stack protector) rafforzata.
• Inizializzazione automatica a zero delle variabili.
• Overflow degli interi con segno ben definito.
• Isolamento dei siti (site isolation) rigoroso e iframe in sandbox.
• JavaScript JIT disabilitato di default con selettore per singolo sito tramite il menu a discesa dei permessi.
• Supporto per l'interprete WebAssembly DrumBrake (precedentemente esclusiva di Microsoft Edge) per supportare WebAssembly quando il JIT è disabilitato.
• Esecuzione dinamica del codice bloccata per i processi senza JIT abilitato (estensione della sandbox seccomp-bpf).
• Implementazione nativa dell'autocompletamento Android (Autofill) per non dipendere dai servizi Google Play.
• Supporto nativo al Credential Manager di Android per le passkey.
• WebGPU disabilitato per ridurre la superficie di attacco.
• Selettore della policy di gestione IP per WebRTC (controllo della modalità peer-to-peer).
• Motore di filtraggio dei contenuti ad alte prestazioni con selettore per singolo sito (utilizza EasyList, EasyPrivacy e altre liste di blocco pubblicità).
• Partizionamento dello stato più completo.
• Riduzione dell'User Agent: sostituzione dei dettagli su versione OS, modello dispositivo e versione specifica del browser con valori segnaposto standard.
• API della batteria falsificata: mostra sempre il dispositivo in carica e al 100% della capacità.
• Servizi remoti disabilitati o rimossi: di default si connette solo ai server GrapheneOS per aggiornamenti di componenti (certificati) e controlli di connettività DoH.
• Opzione per aprire sempre link da app esterne, schede personalizzate o ricerche in modalità Incognito.
• Crittografia post-quantistica ibrida abilitata di default.
• Esportazione e importazione dei segnalibri.
Impostazioni predefinite migliorate:
• Intestazione Accept-Language ridotta.
• Cookie di terze parti disabilitati di default.
• Supporto ai pagamenti e sincronizzazione in background dei siti disabilitati.
• Accesso ai sensori e contenuti multimediali protetti (DRM) disabilitati di default.
• Funzione "Do Not Track" abilitata di default (principalmente per evitare che gli utenti si distinguano dagli altri abilitandola manualmente).
Non è previsto il supporto alle estensioni, poiché in contrasto con l'isolamento dei siti e le strategie anti-fingerprinting. L'obiettivo è implementare funzioni native che siano attive per tutti gli utenti, evitando che configurazioni personalizzate rendano l'utente più identificabile. In futuro, verranno aggiunti selettori per disabilitare singolarmente WebGL, WebGPU, WebRTC e altre funzioni per mitigare ulteriormente il fingerprinting.
App Auditor e servizio di attestazione
La nostra app Auditor e il relativo servizio di attestazione forniscono una solida verifica basata sull'hardware dell'autenticità e dell'integrità del firmware e del software sul dispositivo. Viene utilizzato un rigoroso approccio basato sull'accoppiamento (pairing), che verifica anche l'identità del dispositivo tramite una chiave protetta dall'hardware generata per ogni accoppiamento. I controlli basati sul software sono stratificati sopra di essi, con una catena di fiducia (trust) che parte in modo sicuro dall'hardware.
GrapheneOS Camera
GrapheneOS Camera è un'app fotocamera moderna con un'ottima interfaccia utente e una forte attenzione alla privacy e alla sicurezza. È progettata per gestire i metadati in modo sicuro e per operare senza richiedere permessi non necessari.
GrapheneOS PDF Viewer
GrapheneOS PDF Viewer è un visualizzatore PDF isolato (sandboxed) e indurito (hardened). Utilizza il rendering HiDPI e include funzionalità come il pinch-to-zoom, la selezione del testo e la visualizzazione di PDF crittografati.
Configurazione guidata (Setup Wizard)
Disponiamo di una nostra Configurazione guidata per il setup iniziale del dispositivo e dei profili utente. È molto simile a quella dei Pixel stock, ma pone maggiore enfasi sulla sicurezza:
• Rileva se il bootloader è sbloccato all'avvio e avverte l'utente, fornendo un tasto per riavviare in modalità fastboot e bloccare il dispositivo.
• Disabilita lo sblocco OEM (OEM unlocking) per impostazione predefinita al termine del processo.
• Prevediamo di includere opzioni per metodi di blocco avanzati, come l'autenticazione tramite impronta a due fattori e la generazione automatica di password casuali (diceware).
Backup crittografati
Supporto ai backup crittografati tramite l'integrazione dell'app Seedvault, con supporto per backup locali e per qualsiasi fornitore di archiviazione cloud tramite le relative app. Sebbene Seedvault sia attualmente l'opzione migliore inclusa, GrapheneOS ha apportato diverse correzioni di sicurezza al progetto e pianifica di sostituirlo in futuro con una nuova implementazione proprietaria.
Indicatore di accesso ai dati sulla posizione
GrapheneOS abilita un indicatore di privacy per l'accesso alla posizione, in aggiunta agli indicatori standard di Android per fotocamera e microfono.
• L'indicatore appare come un'icona verde brillante (che poi si riduce a un puntino) ogni volta che un'app richiede dati sulla posizione tramite qualsiasi API.
• A differenza di Android 13 standard, che spesso mostra l'indicatore solo per le richieste GNSS (GPS), GrapheneOS lo mostra per tutti gli accessi, inclusi quelli tramite rete o altre API protette dal permesso di posizione.
Disattivazione delle app installate dall'utente
GrapheneOS aggiunge il supporto per disabilitare le app installate dall'utente, oltre a quelle di sistema. Questo permette di impedire completamente l'esecuzione di un'app senza doverla disinstallare e perdere i relativi dati. È un blocco molto più rigido rispetto al "Termina" (force stop) standard, poiché impedisce all'app di riavviarsi autonomamente tramite attività o servizi richiamati da altre app.
Miglioramento del blocco delle perdite VPN (VPN leak blocking)
GrapheneOS migliora notevolmente la protezione contro le fughe di dati (leaks) quando è attiva l'opzione "Blocca connessioni senza VPN":
• Prevenzione perdite DNS: Impedisce che le query DNS sfuggano verso i server DNS della rete locale durante i cali di connessione della VPN (una condizione critica presente in Android standard).
• Blocco Multicast: Android standard permette a processi e app di bypassare la VPN inviando pacchetti multicast. GrapheneOS estende il filtraggio eBPF per bloccare completamente queste vie di fuga.
• Isolamento tra profili: Impedisce l'invio di pacchetti multicast attraverso tunnel VPN appartenenti a profili diversi.
• Chiusura dei bypass tramite chiamate di sistema: Risolve una falla che permetteva di bypassare il firewall eBPF specificando un'interfaccia di rete specifica tramite una particolare chiamata di sistema.
Rilevare e risolvere ogni forma di perdita VPN è attualmente una delle nostre massime priorità.
Visualizzatore log e segnalazione crash per l'utente
GrapheneOS aggiunge un visualizzatore di log accessibile all'utente nell'app Impostazioni per il sistema di logging in memoria standard di Android. Questa funzione sostituisce la segnalazione automatica dei crash, che GrapheneOS non implementa per motivi di privacy. In questo modo, gli utenti hanno il controllo su ciò che viene acquisito e condiviso. Il visualizzatore supporta il filtraggio per livello di log, buffer e ricerca testuale. Gli utenti possono copiare, condividere o salvare i log visualizzati in un file.
• Log di sistema totali: Impostazioni > Sistema > Visualizza log.
• Log per singola app: Impostazioni > App > [Nome App] > Visualizza log.
Abbiamo implementato una segnalazione crash orientata all'utente collegata al visualizzatore di log per i crash del sistema operativo e delle app. Il sistema include un supporto speciale per la corruzione della memoria rilevata da hardened_malloc e dal memory tagging hardware, informando l'utente quando viene rilevata una corruzione. Gli utenti possono scegliere se attivare i selettori di compatibilità per l'app qualora ritengano che si tratti di un bug del software e non di un exploit. Non permettiamo di disabilitare queste protezioni per il sistema operativo di base, ma forniamo l'opzione per le app installate dall'utente per garantirne il funzionamento nonostante bug latenti.
Altre funzionalità
Questo è un elenco incompleto di ulteriori funzionalità di GrapheneOS:
• Padding dei nomi dei file: Aumentato da 16 a 32 byte per ridurre le informazioni trapelate tramite la lunghezza dei nomi dei file nella crittografia del disco.
• Verifica del firmware: Migliore visibilità per l'utente sulla sicurezza persistente del firmware tramite la verifica della versione e della configurazione.
• Orario di rete sicuro: Crittografia autenticata per gli aggiornamenti dell'orario tramite un server proprietario, per impedire attacchi basati sulla modifica dell'ora (es. per bypassare la scadenza di certificati).
• Disabilitazione orario di rete: Supporto effettivo per disattivare gli aggiornamenti dell'orario via rete.
• Aggiornamenti OS automatici: Sistema di aggiornamento fluido che lavora in background senza interrompere l'uso del dispositivo, con supporto al rollback automatico in caso di fallimento del primo avvio.
• Sblocco richiesto per i Quick Tiles: Richiede lo sblocco del dispositivo per accedere a funzioni sensibili tramite i toggle rapidi.
• App preinstallate minime: Solo le app essenziali sono integrate. Non facciamo partnership per preinstallare app di terzi.
• Avvisi di emergenza wireless opzionali: GrapheneOS aggiunge un selettore per rendere opzionali anche gli avvisi di tipo "presidenziale" (particolarmente utile in regioni come il Canada, dove il sistema viene talvolta abusato per avvisi non critici).
• Rimozione CA: Rimosse le autorità di certificazione root di Chunghwa Telecom e Netlock dai certificati di sistema fidati.
• Restrizioni Archiviazione: Le app senza permessi di archiviazione non possono leggere l'elenco delle directory create dall'utente (operazione invece permessa su Android standard).
• Suono otturatore screenshot: Disattivabile tramite l'opzione "Suoni tocco e clic" in Impostazioni > Audio e vibrazione.
• Orologio di sistema più preciso: Ridotta la soglia di aggiornamento e di deriva dell'orologio, utile per protocolli basati sul tempo come il TOTP (2FA).
• Registrazione chiamate: Funzionalità inclusa nell'app Dialer che utilizza lo storage moderno di Android (cartella Recordings/Call Recordings), senza restrizioni regionali o toni di avviso forzati (l'utente resta responsabile del rispetto delle leggi locali).
• Stato delle app dopo aggiornamento: Se un'app è disabilitata, rimane tale anche dopo un aggiornamento (Android standard tenderebbe a riabilitarla).
• VPN Always-on di default: I selettori "VPN sempre attiva" e "Blocca connessioni senza VPN" sono abilitati per impostazione predefinita.
• Protezione contro tocchi accidentali: I prompt dei permessi e l'autorizzazione USB ADB hanno l'azione "Consenti" disabilitata di default per 1 secondo dopo la comparsa, per evitare che l'utente accetti per errore mentre sta toccando lo schermo.
Servizi
Caratteristiche dell'infrastruttura dei servizi:
• Rigorose pratiche di privacy e sicurezza per la nostra infrastruttura.
• Logging superfluo evitato: i log vengono eliminati automaticamente dopo un periodo che va dai 4 giorni (per i servizi di rete usati dall'OS) ai 10 giorni.
• Hosting indipendente: i servizi sono ospitati interamente tramite i nostri server dedicati e macchine virtuali, senza coinvolgere terze parti per CDN, piattaforme SaaS, mirror o altri servizi.
• Stack tecnologici aperti: i nostri servizi sono costruiti per evitare il "lock-in" verso qualsiasi fornitore di hosting o venditore specifico.
• Documentazione aperta sull'infrastruttura: include l'elenco di tutti i nostri servizi, guide per configurazioni simili, configurazioni pubblicate per ogni servizio web, ecc.
• Assenza di servizi proprietari.
• Crittografia autenticata per tutti i nostri servizi.
• Configurazioni di cifratura forti (SSH, TLS, ecc.) con l'uso esclusivo di moderni cifrari AEAD che garantiscono la forward secrecy.
• Siti web senza contenuti di terze parti: l'inclusione di elementi esterni è interamente vietata tramite rigorose regole di Content Security Policy (CSP).
• Disabilitazione degli header "referrer" sui nostri siti per massimizzare la privacy.
• Isolamento cross-origin completo e divieto di incorporamento (embedding) dei nostri siti in altri contenuti.
• DNSSEC implementato per tutti i domini, per fornire una radice di fiducia (root of trust) per la crittografia e l'autenticazione delle configurazioni.
• Record DNS CAA (Certification Authority Authorization) che permettono solo a Let's Encrypt di emettere certificati, con pinning degli account autorizzati.
• Record DANE TLSA per il pinning delle chiavi di tutti i nostri servizi TLS.
• Server mail con DNSSEC/DANE forzato per garantire crittografia autenticata nell'invio di email (inclusi i messaggi di allerta del servizio di attestazione).
• SSHFP su tutti i domini per il pinning delle chiavi SSH.
• Pinning statico delle chiavi per i nostri servizi all'interno di app come Auditor.
• Assenza di cookie persistenti o stati simili lato client, eccetto per le sessioni di login (configurate in modo sicuro con flag SameSite=Strict, Secure, HttpOnly, prefisso __Host e tracciamento lato server).
• Hashing delle password basato su scrypt (verrà probabilmente adottato Argon2 quando le implementazioni saranno più mature).
Progetto
Oltre alle caratteristiche tecniche del sistema operativo:
• Progetto open source collaborativo con una comunità e contributori molto attivi.
• Indipendenza: puoi creare le tue build e apportare le modifiche desiderate, senza essere vincolato alle decisioni del progetto a monte.
• Progetto no-profit: evitiamo conflitti di interesse mantenendo a distanza la commercializzazione. Sono le aziende a supportare il progetto, e non il progetto a servire i bisogni di una particolare azienda.
• Forti politiche di privacy applicate a tutti i nostri software e servizi.
• Track record comprovato: il team ha dimostrato negli anni di saper resistere ai tentativi di compromettere l'integrità del progetto, ponendo la sicurezza davanti al guadagno personale.
GrapheneOS