Come parte del modello di sicurezza Android , Android utilizza Security-Enhanced Linux (SELinux) per applicare il controllo di accesso obbligatorio (MAC) su tutti i processi, anche i processi in esecuzione con privilegi root/superutente (funzionalità Linux). Molte aziende e organizzazioni hanno contribuito all'implementazione di SELinux di Android. Con SELinux, Android può proteggere meglio e confinare i servizi di sistema, controllare l'accesso ai dati delle applicazioni e ai registri di sistema, ridurre gli effetti del software dannoso e proteggere gli utenti da potenziali falle nel codice sui dispositivi mobili.
SELinux opera secondo il principio della negazione predefinita: tutto ciò che non è esplicitamente consentito viene negato. SELinux può operare in due modalità globali:
- Modalità permissiva , in cui i rifiuti di autorizzazione vengono registrati ma non applicati.
- Modalità di applicazione , in cui i dinieghi di autorizzazione vengono registrati e applicati.
Android include SELinux in modalità di applicazione e una policy di sicurezza corrispondente che funziona per impostazione predefinita su AOSP. In modalità di applicazione, le azioni non consentite vengono impedite e tutti i tentativi di violazione vengono registrati dal kernel in dmesg
e logcat
. Durante lo sviluppo, dovresti utilizzare questi errori per perfezionare il tuo software e le politiche di SELinux prima di applicarle. Per maggiori dettagli, vedere Implementazione di SELinux .
SELinux supporta anche una modalità permissiva per dominio in cui specifici domini (processi) possono essere resi permissivi ponendo il resto del sistema in modalità di applicazione globale. Un dominio è semplicemente un'etichetta che identifica un processo o un insieme di processi nella politica di sicurezza, in cui tutti i processi etichettati con lo stesso dominio vengono trattati in modo identico dalla politica di sicurezza. La modalità permissiva per dominio consente l'applicazione incrementale di SELinux a una porzione sempre maggiore del sistema e lo sviluppo di policy per nuovi servizi (mantenendo l'applicazione del resto del sistema).
Sfondo
Il modello di sicurezza di Android si basa in parte sul concetto di sandbox delle applicazioni . Ogni applicazione viene eseguita nella propria sandbox. Prima di Android 4.3, queste sandbox erano definite dalla creazione di un UID Linux univoco per ciascuna applicazione al momento dell'installazione. Android 4.3 e versioni successive utilizzano SELinux per definire ulteriormente i confini della sandbox dell'applicazione Android.
In Android 5.0 e versioni successive, SELinux è completamente applicato, basandosi sul rilascio permissivo di Android 4.3 e sull'applicazione parziale di Android 4.4. Con questa modifica, Android è passato dall'applicazione su un insieme limitato di domini cruciali ( installd
, netd
, vold
e zygote
) a tutto (più di 60 domini). Nello specifico:
- Tutto è in modalità applicazione in Android 5.x e versioni successive.
- Nessun processo diverso da
init
dovrebbe essere eseguito nel dominioinit
. - Qualsiasi negazione generica (per un
block_device
,socket_device
,default_service
) indica che il dispositivo necessita di un dominio speciale.
Android 6.0 ha rafforzato il sistema riducendo la permissività della nostra politica per includere un migliore isolamento tra utenti, filtri IOCTL, ridotta minaccia di servizi esposti, ulteriore restringimento dei domini SELinux e accesso /proc
estremamente limitato.
Android 7.0 ha aggiornato la configurazione di SELinux per bloccare ulteriormente la sandbox dell'applicazione e ridurre la superficie di attacco. Questa versione ha anche suddiviso lo stack monolitico del mediaserver in processi più piccoli per ridurre l'ambito delle loro autorizzazioni. Per ulteriori dettagli, consulta Protezione di Android con più difese del kernel Linux e Rafforzamento dello stack multimediale .
Android 8.0 ha aggiornato SELinux per funzionare con Treble , che separa il codice del fornitore di livello inferiore dal framework del sistema Android. Questa versione ha aggiornato la politica di SELinux per consentire ai produttori di dispositivi e ai fornitori di SOC di aggiornare le proprie parti della politica, creare le proprie immagini ( vendor.img
, boot.img
, ecc.), quindi aggiornare tali immagini indipendentemente dalla piattaforma o viceversa.
Sebbene sia possibile avere una versione della piattaforma (framework) superiore/più recente in esecuzione sul dispositivo, il caso opposto non è supportato; le immagini del fornitore ( vendor.img/odm.img
) non possono avere una versione più recente della piattaforma ( system.img
). Pertanto, una versione della piattaforma più recente potrebbe introdurre problemi di compatibilità con SELinux perché la politica della piattaforma SELinux è a una versione più recente rispetto alle parti della politica del fornitore SELinux. Il modello Android 8.0 fornisce un metodo per mantenere la compatibilità per evitare OTA simultanei non necessari.
Risorse addizionali
Per assistenza nella creazione di utili policy SELinux, fare riferimento alle seguenti risorse.
- The SELinux Notebook , riferimento aggiornato per SELinux. Questo documento contiene ulteriori dettagli sul linguaggio delle policy, sul significato di ciascuna delle parole chiave e su come vengono calcolati i contesti di sicurezza.
- La tua guida visiva per l'applicazione delle policy di SELinux
- Miglioramenti della sicurezza per Linux
- Security Enhanced (SE) Android: porta il MAC flessibile su Android
- Implementazione di SELinux come modulo di sicurezza Linux
- Configurazione della politica SELinux