A livello di sistema operativo, la piattaforma Android fornisce la sicurezza del kernel Linux, nonché una funzione IPC (Inter-Process Communication) sicura per consentire comunicazioni sicure tra le applicazioni in esecuzione in processi diversi. Queste funzionalità di sicurezza a livello di sistema operativo assicurano che anche il codice nativo sia vincolato dall'Application Sandbox. Indipendentemente dal fatto che tale codice sia il risultato del comportamento dell'applicazione inclusa o dello sfruttamento di una vulnerabilità dell'applicazione, il sistema è progettato per impedire all'applicazione non autorizzata di danneggiare altre applicazioni, il sistema Android o il dispositivo stesso. Vedi Configurazione del kernel per le misure che puoi adottare per rafforzare il kernel sui tuoi dispositivi. Vedere il documento di definizione della compatibilità Android (CDD) per le impostazioni richieste.
Sicurezza Linux
La base della piattaforma Android è il kernel Linux. Il kernel Linux è ampiamente utilizzato da anni ed è utilizzato in milioni di ambienti sensibili alla sicurezza. Attraverso la sua storia di costante ricerca, attacco e correzione da parte di migliaia di sviluppatori, Linux è diventato un kernel stabile e sicuro considerato affidabile da molte aziende e professionisti della sicurezza.
Come base per un ambiente di mobile computing, il kernel Linux fornisce ad Android diverse funzionalità di sicurezza chiave, tra cui:
- Un modello di autorizzazioni basato sull'utente
- Isolamento del processo
- Meccanismo estensibile per IPC sicuro
- La capacità di rimuovere parti del kernel non necessarie e potenzialmente non sicure
In quanto sistema operativo multiutente, un obiettivo di sicurezza fondamentale del kernel Linux è isolare le risorse degli utenti l'una dall'altra. 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
- Assicura che l'utente A non esaurisca la memoria dell'utente B
- Assicura 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)
La sandbox dell'applicazione
La sicurezza delle applicazioni di Android viene applicata dalla sandbox dell'applicazione, che isola le app l'una dall'altra e protegge le app e il sistema da app dannose. Per ulteriori dettagli, vedere Application Sandbox .
Partizione di sistema e modalità provvisoria
Le varie partizioni protette dall'integrità contengono il kernel di Android, le librerie del sistema operativo, il runtime dell'applicazione, il framework dell'applicazione e le applicazioni. Questa partizione è impostata su sola lettura. Quando un utente avvia il dispositivo in modalità provvisoria, le applicazioni 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 in stile UNIX, i permessi del filesystem assicurano che un utente non possa alterare o leggere i file di un altro utente. Nel caso di Android, ogni applicazione viene eseguita come proprio utente. A meno che lo sviluppatore non condivida esplicitamente i file con altre applicazioni, i file creati da un'applicazione non possono essere letti o modificati da un'altra applicazione.
Linux con protezione avanzata
Android utilizza Security-Enhanced Linux (SELinux) per applicare criteri di controllo degli accessi e stabilire il controllo di accesso obbligatorio (mac) sui processi. Vedere Linux con sicurezza avanzata in Android per i dettagli .
Avvio verificato
Android 7.0 e versioni successive supportano l'avvio verificato rigorosamente applicato, il che significa che i dispositivi compromessi non possono avviarsi. L'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.
Vedi Avvio verificato per maggiori dettagli.
Crittografia
Android fornisce un set di API crittografiche per l'utilizzo da parte delle applicazioni. Questi includono implementazioni di primitive crittografiche standard e comunemente utilizzate come AES, RSA, DSA e SHA. Inoltre, vengono fornite API per protocolli di livello superiore come SSL e HTTPS.
Android 4.0 ha introdotto la classe KeyChain per consentire alle applicazioni di utilizzare l'archiviazione delle credenziali di sistema per le chiavi private e le catene di certificati.
Rooting dei dispositivi
Per impostazione predefinita, su Android solo il kernel e un piccolo sottoinsieme dei servizi principali vengono eseguiti con i permessi di root. SELinux limita ancora i processi dello spazio utente in esecuzione come root. L'avvio verificato impedisce a un utente o 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 root per eseguire il debug di applicazioni e componenti di sistema o per accedere a funzionalità non presentate alle applicazioni dalle API Android.
Su alcuni dispositivi, una persona con il controllo fisico di un dispositivo e un cavo USB è in grado di installare un nuovo sistema operativo che fornisce privilegi di root all'utente. Per proteggere qualsiasi dato utente esistente dalla compromissione, il meccanismo di sblocco del bootloader richiede che il bootloader cancelli tutti i dati utente esistenti come parte della fase di sblocco. L'accesso root ottenuto sfruttando un bug del kernel o una falla di sicurezza può aggirare questa protezione.
La crittografia dei dati con una chiave memorizzata sul dispositivo non protegge i dati dell'applicazione dagli utenti root sui dispositivi rooted. Le applicazioni possono aggiungere un livello di protezione dei dati utilizzando la crittografia con una chiave archiviata fuori dal 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'applicazione e diventa quindi accessibile agli utenti root.
Un approccio più robusto alla protezione dei dati dagli utenti root è attraverso l'uso di soluzioni hardware. Gli OEM possono scegliere di implementare soluzioni hardware che limitino l'accesso a specifici tipi di contenuti come DRM per la riproduzione di video o l'archiviazione attendibile relativa a NFC per Google Wallet. In caso di smarrimento o furto di un dispositivo, la crittografia dell'archiviazione garantisce che non sia possibile accedere ai dati dell'utente senza conoscere le credenziali della schermata di blocco dell'utente.
Funzioni di sicurezza dell'utente
Crittografia dell'archiviazione
Il CDD richiede che tutti i dispositivi che si avviano con Android 10 o versioni successive e la maggior parte dei dispositivi che si avviano con Android 6.0 o versioni successive abilitino la crittografia dell'archiviazione pronta all'uso.
L'attuale implementazione di Android della crittografia dell'archiviazione è la crittografia basata su file in combinazione con la crittografia dei metadati . La crittografia basata su file crittografa in modo trasparente i contenuti ei nomi dei file sulla partizione userdata, utilizzando chiavi diverse per directory diverse. Fornisce directory di archiviazione crittografate con credenziali e dispositivo per ciascun utente, inclusi i profili di lavoro.
La crittografia dei metadati integra la crittografia basata su file. Crittografa tutti i blocchi sulla partizione userdata che non sono già crittografati dalla crittografia basata su file, utilizzando una chiave non associata alle credenziali della schermata di blocco di alcun utente ma comunque protetta da Avvio verificato.
Protezione delle credenziali della schermata di blocco
Android può essere configurato per verificare una credenziale lockscreen fornita dall'utente (PIN, password o sequenza) prima di fornire l'accesso a un dispositivo. Oltre a impedire l'uso non autorizzato del dispositivo, le credenziali della schermata di blocco proteggono la chiave crittografica per i dati crittografati con credenziali. L'uso di una credenziale di blocco schermo e/o delle regole di complessità delle credenziali può essere richiesto da un amministratore del dispositivo.
Amministrazione del dispositivo
Android 2.2 e versioni successive forniscono l'API di amministrazione dei dispositivi Android, che fornisce funzionalità di amministrazione dei dispositivi a livello di sistema. Ad esempio, l'applicazione di posta elettronica Android integrata utilizza le API per migliorare il supporto di Exchange. Attraverso l'applicazione di posta elettronica, gli amministratori di Exchange possono applicare i criteri delle credenziali di blocco schermo, incluse password alfanumeriche o PIN numerici, su tutti i dispositivi. Gli amministratori possono anche cancellare da remoto (ovvero ripristinare le impostazioni predefinite di fabbrica) i telefoni smarriti o rubati.
Oltre a essere utilizzate nelle applicazioni incluse nel sistema Android, queste API sono disponibili per fornitori di soluzioni di gestione dei dispositivi di terze parti. I dettagli sull'API sono forniti in Device Administration .