Sicurezza del sistema e del kernel

A livello di sistema operativo, la piattaforma Android fornisce la sicurezza del kernel Linux, nonché una struttura di comunicazione sicura tra processi (IPC) per consentire la comunicazione sicura tra 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 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 canaglia di danneggiare altre applicazioni, il sistema Android o il dispositivo stesso. Consulta 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 Linux

La base della piattaforma Android è il kernel Linux. Il kernel Linux è ampiamente utilizzato da anni e viene utilizzato in milioni di ambienti sensibili alla sicurezza. Attraverso la sua storia di ricerche, attacchi e riparazioni costanti da parte di 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 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 non necessarie e potenzialmente non sicure del kernel

Essendo un 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 consiste nel proteggere le risorse degli utenti l'una dall'altra. Quindi, 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
  • 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 di Android è rafforzata dalla sandbox dell'applicazione, che isola le app l'una dall'altra e protegge le app e il sistema da app dannose. Per maggiori dettagli, vedere Sandbox dell'applicazione .

Partizione di sistema e modalità provvisoria

La partizione di sistema contiene 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 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 il 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 criteri di controllo degli accessi e stabilire il controllo degli accessi (mac) obbligatorio sui processi. Per i dettagli, vedere Linux ottimizzato per la sicurezza in Android .

Stivale verificato

Android 6.0 e versioni successive supportano l'avvio verificato e la verifica della mappatura del dispositivo. L'avvio verificato garantisce l'integrità del software del dispositivo a partire da una radice hardware di fiducia fino alla partizione di sistema. Durante l'avvio, ogni fase verifica crittograficamente l'integrità e l'autenticità della fase successiva prima di eseguirla.

Android 7.0 e versioni successive supportano l'avvio verificato rigorosamente imposto, il che significa che i dispositivi compromessi non possono avviarsi.

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 delle applicazioni principali vengono eseguiti con i permessi di root. Android non impedisce a un utente o un'applicazione con autorizzazioni di root di modificare il sistema operativo, il kernel o qualsiasi altra applicazione. In generale, root ha pieno accesso a tutte le applicazioni ea tutti i dati delle applicazioni. Gli utenti che modificano le autorizzazioni su un dispositivo Android per concedere l'accesso come root alle applicazioni aumentano l'esposizione della sicurezza alle applicazioni dannose e ai potenziali difetti delle applicazioni.

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 root ai fini del 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 i privilegi di root all'utente. Per proteggere i dati utente esistenti dalla compromissione, il meccanismo di sblocco del bootloader richiede che il bootloader cancelli tutti i dati utente esistenti come parte del passaggio di sblocco. L'accesso alla radice ottenuto sfruttando un bug del kernel o una falla nella sicurezza può aggirare questa protezione.

La crittografia dei dati con una chiave archiviata nel dispositivo non protegge i dati dell'applicazione dagli utenti root. 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 quindi diventa accessibile agli utenti root.

Un approccio più solido alla protezione dei dati dagli utenti root è l'uso 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 di video o l'archiviazione affidabile relativa a NFC per il portafoglio Google.

In caso di smarrimento o furto di un dispositivo, la crittografia completa del filesystem sui dispositivi Android utilizza la password del dispositivo per proteggere la chiave di crittografia, quindi la modifica del bootloader o del sistema operativo non è sufficiente per accedere ai dati dell'utente senza la password del dispositivo dell'utente.

Funzionalità di sicurezza dell'utente

Crittografia del file system

Android 3.0 e versioni successive forniscono la crittografia completa del filesystem, quindi tutti i dati utente possono essere crittografati nel kernel.

Android 5.0 e versioni successive supportano la crittografia dell'intero disco . La crittografia dell'intero disco utilizza un'unica chiave, protetta dalla password del dispositivo dell'utente, per proteggere l'intera partizione dei dati utente di un dispositivo. All'avvio, gli utenti devono fornire le proprie credenziali prima che qualsiasi parte del disco sia accessibile.

Android 7.0 e versioni successive supportano la crittografia basata su file . La crittografia basata su file consente di crittografare file diversi con chiavi diverse che possono essere sbloccate in modo indipendente.

Maggiori dettagli sull'implementazione della crittografia del filesystem sono disponibili nella sezione Crittografia .

Protezione della password

Android può essere configurato per verificare una password fornita dall'utente prima di fornire l'accesso a un dispositivo. Oltre a prevenire l'uso non autorizzato del dispositivo, questa password protegge la chiave crittografica per la crittografia completa del filesystem.

L'uso di una password e/o delle regole di complessità della password può essere richiesto da un amministratore del dispositivo.

Amministrazione del dispositivo

Android 2.2 e versioni successive forniscono l'API Android Device Administration, che fornisce funzionalità di amministrazione del dispositivo a livello di sistema. Ad esempio, l'applicazione di posta elettronica Android incorporata utilizza le API per migliorare il supporto di Exchange. Tramite l'applicazione e-mail, gli amministratori di Exchange possono applicare criteri per le password, comprese password alfanumeriche o PIN numerici, su tutti i dispositivi. Gli amministratori possono anche cancellare in 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 .