Sicurezza del sistema e del kernel

A livello del sistema operativo, la piattaforma Android fornisce la sicurezza del kernel Linux, nonché una funzionalità di comunicazione interprocesso sicura (IPC) per consentire la comunicazione sicura tra applicazioni in esecuzione in processi diversi. Queste funzionalità di sicurezza a livello del sistema operativo garantiscono che anche il codice nativo sia vincolato dall'Application Sandbox. Che il codice sia il risultato del comportamento dell'applicazione incluso 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. Consulta il documento di definizione della compatibilità Android (CDD) per le impostazioni richieste.

Sicurezza di Linux

Il fondamento della piattaforma Android è il kernel Linux. Il kernel Linux è ampiamente utilizzato 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 a cui si affidano 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 possibilità di rimuovere parti del kernel non necessarie e potenzialmente non sicure

Essendo un sistema operativo multiutente, un obiettivo di sicurezza fondamentale del kernel Linux è isolare le risorse degli utenti le une dalle altre. La filosofia di sicurezza di Linux è quella di proteggere le risorse degli utenti le une dalle altre, 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)

La sandbox dell'applicazione

La sicurezza delle applicazioni Android viene rafforzata dalla sandbox dell'applicazione, che isola le app le une dalle altre e protegge le app e il sistema da app dannose. Per ulteriori dettagli, vedere Sandbox dell'applicazione .

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 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 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, ciascuna 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 sicurezza avanzata

Android utilizza Security-Enhanced Linux (SELinux) per applicare policy di controllo degli accessi e stabilire un controllo degli accessi obbligatorio (mac) sui processi. Per i dettagli, vedere Linux con sicurezza avanzata in Android .

Avvio verificato

Android 7.0 e versioni successive supportano l'avvio verificato rigorosamente applicato, il che significa che i dispositivi compromessi non possono essere avviati. L'avvio verificato garantisce l'integrità del software del dispositivo a partire da una root of trust 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 utilizzabili dalle 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 chiavi private e catene di certificati.

Rooting dei dispositivi

Per impostazione predefinita, su Android solo il kernel e un piccolo sottoinsieme dei servizi core vengono eseguiti con permessi di root. SELinux limita ancora i processi dello spazio utente eseguiti 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 scopi di 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 eventuali dati utente esistenti 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 archiviata 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 all'esterno 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'applicazione e diventa quindi accessibile agli utenti root.

Un approccio più efficace alla protezione dei dati dagli utenti root avviene attraverso l'uso di soluzioni hardware. Gli OEM possono scegliere di implementare soluzioni hardware che limitino l'accesso a tipi specifici di contenuti come DRM per la riproduzione video o l'archiviazione attendibile relativa a NFC per Google Wallet. In caso di dispositivo smarrito o rubato, la crittografia di archiviazione garantisce che non sia possibile accedere ai dati dell'utente senza conoscere le credenziali della schermata di blocco dell'utente.

Funzionalità di sicurezza dell'utente

Crittografia dell'archiviazione

Il CDD richiede che tutti i dispositivi avviati con Android 10 o versioni successive e la maggior parte dei dispositivi avviati con Android 6.0 o versioni successive abilitino immediatamente la crittografia dell'archiviazione.

L'attuale implementazione della crittografia di archiviazione di Android è la crittografia basata su file in combinazione con la crittografia dei metadati . La crittografia basata su file crittografa in modo trasparente il contenuto e i nomi dei file sulla partizione dei dati utente, 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 dei dati utente 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 le credenziali della schermata di blocco fornite 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 le credenziali. L'uso di credenziali della schermata di blocco e/o 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 del dispositivo Android, che fornisce funzionalità di amministrazione del dispositivo 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 e-mail, gli amministratori di Exchange possono applicare policy relative alle credenziali della schermata di blocco, incluse password alfanumeriche o PIN numerici, su tutti i dispositivi. Gli amministratori possono anche cancellare da remoto (ovvero ripristinare le impostazioni di fabbrica) i telefoni smarriti o rubati.

Oltre all'utilizzo nelle applicazioni incluse nel sistema Android, queste API sono disponibili per fornitori di terze parti di soluzioni di gestione dei dispositivi. I dettagli sull'API sono forniti in Amministrazione dispositivo .