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 non autorizzata di danneggiare altre app, il sistema Android o il dispositivo stesso. Consulta la sezione Configurazione del kernel per conoscere le misure che puoi adottare per rafforzare il kernel sui tuoi dispositivi. 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 ricerca, attacco e correzione da parte di migliaia di sviluppatori, Linux è diventato un kernel stabile e sicuro su cui fanno affidamento 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 superflue 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
- Assicura 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 potrebbero essere avviate manualmente dal proprietario del dispositivo, ma non per impostazione predefinita.
Autorizzazioni del file system
In un ambiente di tipo UNIX, le autorizzazioni del file system assicurano 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 criteri di controllo dell'accesso e stabilire un controllo dell'accesso obbligatorio (Mac) sui processi. 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. Avvio verificato garantisce l'integrità del software del dispositivo a partire da una radice 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 set di API crittografiche per l'utilizzo da parte delle 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. L'Avvio verificato impedisce a un utente o a un servizio con autorizzazioni root di modificare in modo permanente 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 possono 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 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 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 DRM per la riproduzione video o lo spazio di archiviazione attendibile relativo all'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 con Android 10 o versioni successive e la maggior parte dei dispositivi con Android 6.0 o versioni successive attivino subito la crittografia dello spazio di archiviazione.
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 sulla partizione dei dati utente, utilizzando chiavi diverse per directory diverse. Fornisce directory di archiviazione criptate con credenziali e criptate per dispositivo per ogni utente, inclusi i profili di lavoro.
La crittografia dei metadati completa 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 dispositivo.