Linux con sicurezza avanzata in Android

Come parte del modello di sicurezza Android, Android utilizza Security-Enhanced Linux (SELinux) per imporre il controllo dell'accesso obbligatorio (MAC) su tutti i processi, anche i processi in esecuzione con privilegi di root/superutente (funzionalità Linux). Molte aziende e organizzazioni hanno contribuito all'implementazione di SELinux di Android. Con SELinux, Android può proteggere e limitare meglio 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 difetti 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 le negazioni delle autorizzazioni vengono registrate e applicate.

Android include SELinux in modalità di applicazione e una politica 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 usare questi errori per perfezionare il tuo software e le politiche di SELinux prima di applicarli. Per maggiori dettagli, vedere Implementazione di SELinux .

SELinux supporta anche una modalità permissiva per dominio in cui domini specifici (processi) possono essere resi permissivi mentre si pone 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 sono trattati in modo identico dalla politica di sicurezza. La modalità permissiva per dominio consente l'applicazione incrementale di SELinux a una porzione sempre crescente del sistema e lo sviluppo di politiche per nuovi servizi (mantenendo il resto del sistema in vigore).

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à di applicazione in Android 5.x e versioni successive.
  • Nessun processo diverso da init dovrebbe essere eseguito nel dominio init .
  • Qualsiasi rifiuto generico (per 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 gli utenti, filtro IOCTL, minaccia ridotta dei 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 server multimediale 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 loro parti della politica, creare le loro immagini ( vendor.img , boot.img , ecc.), quindi aggiornare quelle 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 ). Quindi, una versione più recente della piattaforma potrebbe introdurre problemi di compatibilità con SELinux perché la politica SELinux della piattaforma è a una versione più recente rispetto alle parti della politica SELinux del fornitore. Il modello Android 8.0 fornisce un metodo per mantenere la compatibilità per evitare OTA simultanee non necessarie.

Risorse addizionali

Per aiuto nella costruzione di utili politiche SELinux, fare riferimento alle seguenti risorse. Alcuni concetti di SELinux non vengono utilizzati da Android, vedere la sezione Specificità quando si considera la documentazione esterna.