Linux con sicurezza avanzata in Android

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 sui 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 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 del default denial: tutto ciò che non è esplicitamente consentito viene negato. SELinux può operare in due modalità globali:

  • Modalità permissiva , in cui le autorizzazioni negate vengono registrate ma non applicate.
  • Modalità di applicazione , in cui le autorizzazioni negate vengono registrate e applicate.

Android include SELinux in modalità di applicazione e una politica di sicurezza corrispondente che funziona per impostazione predefinita su AOSP. Nella 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 SELinux prima di applicarle. Per maggiori dettagli, vedere Implementazione di SELinux .

SELinux supporta anche una modalità permissiva per dominio in cui domini specifici (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, dove 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 crescente del sistema e lo sviluppo di policy per nuovi servizi (mantenendo in vigore il resto del sistema).

Sfondo

Il modello di sicurezza di Android si basa in parte sul concetto di sandbox applicativo . Ogni applicazione viene eseguita nella propria sandbox. Prima di Android 4.3, questi sandbox erano definiti 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 policy per includere un migliore isolamento tra gli utenti, il filtraggio IOCTL, una ridotta minaccia dei servizi esposti, un ulteriore restringimento dei domini SELinux e un accesso /proc estremamente limitato.

Android 7.0 ha aggiornato la configurazione SELinux per bloccare ulteriormente la sandbox dell'applicazione e ridurre la superficie di attacco. Questa versione ha inoltre suddiviso lo stack monolitico dei mediaserver in processi più piccoli per ridurre l'ambito delle relative autorizzazioni. Per ulteriori dettagli, consulta Protezione di Android con ulteriori 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 policy SELinux per consentire ai produttori di dispositivi e ai fornitori di SOC di aggiornare le loro parti della policy, 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 più recente della piattaforma potrebbe introdurre problemi di compatibilità con SELinux perché la policy SELinux della piattaforma è a una versione più recente rispetto alle parti della policy SELinux del fornitore. Il modello Android 8.0 fornisce un metodo per mantenere la compatibilità per evitare OTA simultanee non necessarie.

Risorse addizionali

Per assistenza nella costruzione di utili policy SELinux, fare riferimento alle seguenti risorse.