A livello di sistema operativo, la piattaforma Android fornisce la sicurezza del kernel Linux, nonché un'utilità di comunicazione interprocesso (IPC) sicura per consentire la comunicazione sicura tra le app in esecuzione in diversi processi. Queste funzionalità di sicurezza a livello di sistema operativo assicurano che anche il codice nativo sia limitato dalla sandbox dell'applicazione. Indipendentemente dal fatto che il codice sia il risultato del comportamento dell'app inclusa o dello sfruttamento di una vulnerabilità dell'app, il sistema è progettato per impedire all'app dannosa di danneggiare altre app, il sistema Android o il dispositivo stesso. Per le impostazioni richieste, consulta il Compatibility Definition Document (CDD) di Android.
Sicurezza di Linux
Il fondamento della piattaforma Android è il kernel Linux. Il kernel Linux è in uso da anni ed è utilizzato in milioni di ambienti sensibili alla sicurezza. Grazie alla sua storia di costante evoluzione, in cui è stato studiato, attaccato e corretto da migliaia di sviluppatori, Linux è diventato un kernel stabile e sicuro di cui si fidano molte aziende e professionisti della sicurezza.
Come base per un ambiente di calcolo mobile, il kernel Linux fornisce ad Android diverse funzionalità di sicurezza chiave, tra cui:
- Un modello di autorizzazioni basato sugli utenti
- Isolamento dei processi
- Meccanismo estensibile per l'IPC sicura
- La possibilità di rimuovere parti del kernel non necessarie e potenzialmente insicure
In quanto sistema operativo multiutente, un obiettivo di sicurezza fondamentale del kernel Linux è isolare le risorse utente le une dalle altre. La filosofia di sicurezza di Linux è proteggere le risorse degli utenti l'una dall'altra. Linux:
- Impedisce all'utente A di leggere i file dell'utente B
- Garantisce che l'utente A non esaurisca la memoria dell'utente B
- Garantisce che l'utente A non esaurisca le risorse della CPU dell'utente B
- Garantisce che l'utente A non esaurisca i dispositivi dell'utente B (ad esempio, telefonia, GPS e Bluetooth)
Sandbox dell'applicazione
La sicurezza delle app di Android viene applicata dalla sandbox delle applicazioni, che isola le app l'una dall'altra e protegge le app e il sistema dalle app dannose. Per maggiori dettagli, vedi Sandbox.
Partizione di sistema e modalità provvisoria
Le varie partizioni protette dall'integrità contengono il kernel di Android, nonché le librerie del sistema operativo, il runtime delle app, il framework delle app e le app. Questa partizione è impostata come di sola lettura. Quando un utente avvia il dispositivo in modalità provvisoria, le app di terze parti possono essere avviate manualmente dal proprietario del dispositivo, ma non vengono avviate per impostazione predefinita.
Autorizzazioni del file system
In un ambiente di tipo UNIX, le autorizzazioni del file system garantiscono che un utente non possa modificare o leggere i file di un altro utente. Nel caso di Android, ogni app viene eseguita come utente indipendente. A meno che lo sviluppatore non condivida esplicitamente i file con altre app, i file creati da un'app non possono essere letti o modificati da un'altra app.
Security-Enhanced Linux
Android utilizza Security-Enhanced Linux (SELinux) per applicare i criteri di controllo dell'accesso e stabilire il controllo dell'accesso obbligatorio (MAC) sulle procedure. Per maggiori dettagli, consulta Security-Enhanced Linux in Android.
Avvio verificato
Android 7.0 e versioni successive supportano il Boot verificato applicato rigorosamente, il che significa che i dispositivi compromessi non possono avviarsi. L'Avvio verificato garantisce l'integrità del software del dispositivo, a partire da un'autorità di attendibilità hardware fino alla partizione di sistema. Durante l'avvio, ogni fase verifica crittograficamente l'integrità
e l'autenticità della fase successiva prima di eseguirla.
Per ulteriori dettagli, consulta la sezione Avvio verificato.
Crittografia
Android fornisce un insieme di API di crittografia da utilizzare per le app. Queste includono implementazioni di primitive cryptographic standard e di uso comune come AES, RSA, DSA e SHA. Inoltre, sono disponibili API per protocolli di livello superiore come SSL e HTTPS.
Android 4.0 ha introdotto la classe KeyChain per consentire alle app di utilizzare lo spazio di archiviazione delle credenziali di sistema per le chiavi private e le catene di certificati.
Root del dispositivo
Per impostazione predefinita, su Android solo il kernel e un piccolo sottoinsieme dei servizi di base vengono eseguiti con autorizzazioni di root. SELinux limita ancora i processi dello spazio utente in esecuzione come root. Il Boot verificato impedisce a un utente o a un servizio con autorizzazioni di root di modificare definitivamente il sistema operativo.
La possibilità di modificare un dispositivo Android di loro proprietà è importante per gli sviluppatori che lavorano con la piattaforma Android. Su molti dispositivi Android, gli utenti hanno la possibilità di sbloccare il bootloader per consentire l'installazione di un sistema operativo alternativo. Questi sistemi operativi alternativi potrebbero consentire a un proprietario di ottenere l'accesso come utente root per eseguire il debug di app e componenti di sistema o accedere a funzionalità non presentate alle app dalle API Android.
Su alcuni dispositivi, una persona che ha il controllo fisico di un dispositivo e un cavo USB può installare un nuovo sistema operativo che fornisce all'utente i privilegi di root. Per proteggere eventuali dati utente esistenti da compromissione, il meccanismo di sblocco del bootloader richiede che il bootloader cancelli tutti i dati utente esistenti nell'ambito del passaggio di sblocco. L'accesso come utente root ottenuto sfruttando un bug del kernel o una vulnerabilità di sicurezza può aggirare questa protezione.
La crittografia dei dati con una chiave archiviata sul dispositivo non protegge i dati dell'app dagli utenti con accesso root sui dispositivi con accesso root. Le app possono aggiungere un livello di protezione dei dati utilizzando la crittografia con una chiave archiviata al di fuori del dispositivo, ad esempio su un server o una password utente. Questo approccio può fornire una protezione temporanea mentre la chiave non è presente, ma a un certo punto la chiave deve essere fornita all'app e diventa accessibile agli utenti root.
Un approccio più solido per proteggere i dati dagli utenti con accesso root è l'impiego di soluzioni hardware. Gli OEM possono scegliere di implementare soluzioni hardware che limitano l'accesso a tipi specifici di contenuti, come il DRM per la riproduzione di video, o lo spazio di archiviazione attendibile correlato al NFC per Google Wallet. In caso di furto o smarrimento di un dispositivo, la crittografia dello spazio di archiviazione garantisce che non sia possibile accedere ai dati utente senza conoscere la credenziale della schermata di blocco dell'utente.
Funzionalità di sicurezza utente
Crittografia dell'archiviazione
Il CDD richiede che tutti i dispositivi lanciati con Android 10 o versioni successive e la maggior parte dei dispositivi lanciati con Android 6.0 o versioni successive attivino la crittografia dello spazio di archiviazione immediatamente.
L'attuale implementazione della crittografia dello spazio di archiviazione di Android è la crittografia basata su file in combinazione con la crittografia dei metadati. La crittografia basata su file cripta in modo trasparente i contenuti e i nomi dei file nella partizione userdata, utilizzando chiavi diverse per directory diverse. Fornisce directory di archiviazione con crittografia delle credenziali e con crittografia del dispositivo per ogni utente, inclusi i profili di lavoro.
La crittografia dei metadati integra la crittografia basata su file. Crittografa tutti i blocchi della partizione userdata che non sono già criptati dalla crittografia basata su file, utilizzando una chiave non associata alle credenziali della schermata di blocco di nessun utente, ma ancora protetta da Verified Boot.
Protezione delle credenziali della schermata di blocco
Android può essere configurato per verificare una credenziale della schermata di blocco fornita dall'utente (PIN, password o sequenza) prima di fornire l'accesso a un dispositivo. Oltre a impedire l'uso non autorizzato del dispositivo, la credenziale della schermata di blocco protegge la chiave crittografica per i dati criptati con le credenziali. L'utilizzo di una credenziale della schermata di blocco e/o di regole di complessità delle credenziali può essere richiesto da un amministratore del dispositivo.
Amministr. dispositivo
Android 2.2 e versioni successive forniscono l'API Android Device Administration, che offre funzionalità di amministrazione del dispositivo a livello di sistema. Ad esempio, l'app email integrata di Android utilizza le API per migliorare il supporto di Exchange. Tramite l'app email, gli amministratori di Exchange possono applicare i criteri delle credenziali della schermata di blocco, tra cui password alfanumeriche o PIN numerici, su tutti i dispositivi. Gli amministratori possono anche cancellare da remoto (ovvero ripristinare i valori predefiniti di fabbrica) gli smartphone smarriti o rubati.
Oltre che nelle app incluse nel sistema Android, queste API sono disponibili per i fornitori di terze parti di soluzioni di gestione dei dispositivi. I dettagli sull'API sono disponibili in Amministrazione del dispositivo.