Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Sandbox applicazione

La piattaforma Android sfrutta la protezione basata su utenti Linux per identificare e isolare le risorse delle app. Ciò isola le app l'una dall'altra e protegge le app e il sistema da app dannose. A tale scopo, Android assegna un ID utente univoco (UID) a ciascuna applicazione Android e lo esegue nel proprio processo.

Android utilizza l'UID per configurare un Sandbox applicazione a livello di kernel. Il kernel applica la sicurezza tra le app e il sistema a livello di processo attraverso strutture Linux standard come ID utente e gruppo assegnati alle app. Per impostazione predefinita, le app non possono interagire tra loro e hanno un accesso limitato al sistema operativo. Se l'app A tenta di eseguire attività dannose, ad esempio leggere i dati dell'applicazione B o comporre il numero di telefono senza autorizzazione, viene impedito perché non dispone dei privilegi utente predefiniti appropriati. Il sandbox è semplice, controllabile e basato sulla secolare separazione di processi e autorizzazioni dei file in stile UNIX.

Poiché Application Sandbox è nel kernel, questo modello di sicurezza si estende sia al codice nativo che alle applicazioni del sistema operativo. Tutto il software sopra il kernel, come le librerie del sistema operativo, il framework dell'applicazione, il runtime dell'applicazione e tutte le applicazioni, viene eseguito all'interno dell'applicazione Sandbox. Su alcune piattaforme, gli sviluppatori sono vincolati a uno specifico framework di sviluppo, set di API o linguaggio. Su Android, non ci sono restrizioni sul modo in cui un'applicazione può essere scritta necessaria per far rispettare la sicurezza; a questo proposito, il codice nativo è sandbox come codice interpretato.

protezioni

In genere, per uscire dall'applicazione Sandbox in un dispositivo correttamente configurato, è necessario compromettere la sicurezza del kernel Linux. Tuttavia, analogamente ad altre funzionalità di sicurezza, le protezioni individuali che impongono il sandbox dell'applicazione non sono invulnerabili, quindi la difesa in profondità è importante per impedire che singole vulnerabilità possano compromettere il sistema operativo o altre app.

Android si affida a una serie di protezioni per imporre l'applicazione sandbox. Queste disposizioni sono state introdotte nel tempo e hanno notevolmente rafforzato la sandbox DAC (discrezionale controllo di accesso) basata su UID. Le versioni precedenti di Android includevano le seguenti protezioni:

  • In Android 5.0, SELinux ha fornito la separazione obbligatoria del controllo degli accessi (MAC) tra il sistema e le app. Tuttavia, tutte le app di terze parti venivano eseguite nello stesso contesto SELinux, quindi l'isolamento tra le app era applicato principalmente dal DAC UID.
  • In Android 6.0, il sandbox SELinux è stato esteso per isolare le app oltre il limite per utente fisico. Inoltre, Android imposta anche valori predefiniti più sicuri per i dati dell'applicazione: per le app con targetSdkVersion >= 24 , le autorizzazioni DAC predefinite sulla home targetSdkVersion >= 24 un'app sono cambiate da 751 a 700. Ciò forniva valori predefiniti più sicuri per i dati delle app private (anche se le app possono ignorare queste impostazioni predefinite) .
  • In Android 8.0, tutte le app erano impostate per funzionare con un filtro seccomp-bpf che limitava le syscalls che le app potevano usare, rafforzando così il limite app / kernel.
  • In Android 9 tutte le app non privilegiate con targetSdkVersion >= 28 devono essere eseguite in sandbox SELinux individuali, fornendo MAC su base per app. Questa protezione migliora la separazione delle app, impedisce di ignorare le impostazioni predefinite sicure e (soprattutto) impedisce alle app di rendere accessibili i loro dati nel mondo.
  • In Android 10 le app hanno una visione raw limitata del filesystem, senza accesso diretto a percorsi come / sdcard / DCIM. Tuttavia, le app mantengono l'accesso completo non elaborato ai percorsi specifici del pacchetto, come restituito da qualsiasi metodo applicabile, come Context.getExternalFilesDir () .

Linee guida per la condivisione di file

Impostare i dati delle app come accessibili al mondo è una pratica di sicurezza scadente. L'accesso è concesso a tutti e non è possibile limitare l'accesso solo ai destinatari previsti. Questa pratica ha portato a perdite di divulgazione di informazioni e confuse vulnerabilità dei vice, ed è il bersaglio preferito del malware che si rivolge alle app con dati sensibili (come i client di posta elettronica). In Android 9 e versioni successive, la condivisione di file in questo modo è esplicitamente targetSdkVersion>=28 per le app con targetSdkVersion>=28 .

Invece di rendere accessibili i dati delle app in tutto il mondo, utilizzare le seguenti linee guida per la condivisione di file:

  • Se la tua app deve condividere file con un'altra app, usa un fornitore di contenuti . I fornitori di contenuti condividono i dati con la granularità corretta e senza i molti lati negativi delle autorizzazioni UNIX accessibili al mondo (per i dettagli, consultare le basi del fornitore di contenuti ).
  • Se la tua app ha file che dovrebbero essere veramente accessibili al mondo (come le foto), devono essere specifici per i media (solo foto, video e file audio) e archiviati usando la classe MediaStore . (Per ulteriori informazioni, consultare la guida di anteprima su DAC .)

L'autorizzazione di runtime di archiviazione controlla l'accesso a raccolte fortemente tipizzate tramite MediaStore . Per accedere a file di tipo debole come PDF e la classe MediaStore.Downloads , le app devono utilizzare intenti come l'intento ACTION_OPEN_DOCUMENT .

Per abilitare il comportamento di Android 10, utilizza l' requestLegacyExternalStorage manifest requestLegacyExternalStorage e segui le best practice per le autorizzazioni delle app .

  • Il valore predefinito del flag manifest è true per le app destinate ad Android 9 (e precedenti).
  • Il valore predefinito è falso per le app destinate ad Android 10. Per disattivare temporaneamente la visualizzazione dell'archiviazione filtrata nelle app destinate ad Android 10, imposta il valore del flag manifest su true .
  • Utilizzando autorizzazioni limitate, il programma di installazione autorizza le app autorizzate per l'archiviazione non sandbox. Le app non autorizzate sono in modalità sandbox.