Perché ogni applicazione Android viene eseguita su un diverso processo VM Dalvik?


10

Ho letto che ogni applicazione Android viene eseguita su un diverso processo VM Dalvik (tutto biforcato da zygote).

Ho anche letto che queste macchine virtuali sono molto leggere e usano la copia sui buffer di scrittura e tutto il resto, finora tutto bene.

Ma ho anche letto che ciò non è stato fatto per motivi di sicurezza (ad es. Isolamento) - in realtà dalvik vm non dovrebbe essere considerato un limite di sicurezza, afferma Google.

Quindi la mia domanda è questa: perché ogni processo deve essere eseguito su una VM diversa?

Risposte:


11

In Android, ogni applicazione viene eseguita come utente separato. Nel kernel Linux, ogni processo è di proprietà di un singolo utente, quindi non è possibile eseguire più applicazioni Dalvik su un singolo processo Linux.

Il sovraccarico dell'esecuzione di più istanze di VM Dalvik è leggero poiché la fork()chiamata di sistema Linux è copia-scrittura-scrittura, una scrittura su una pagina COW condivisa provocherà un "errore di pagina" e tale pagina verrà copiata; quindi anche se la maggior parte della regione di memoria della VM nella RAM è condivisa, non ci sono "stati condivisi" tra le VM.

I processi di forking forniscono solo l'isolamento dello stato, ma non l'isolamento dei privilegi.

dalvik vm non deve essere considerato un limite di sicurezza

Questo perché la VM non può imporre un limite di sicurezza. La VM è in esecuzione in modalità utente (la stessa modalità del programma in esecuzione), il che significa che un errore nella VM potrebbe consentire all'applicazione di modificare lo stato della VM in un modo non previsto; il kernel, tuttavia, funziona in modalità privilegiata e può imporre limiti di sicurezza.


4

Ogni processo Dalvikvm viene eseguito in un ambiente sand-box di proprietà dell'utente id ( uid) dell'applicazione in esecuzione, si noti che al momento dell'installazione dell'applicazione, uidviene allocato e assegnato a ciascuna applicazione installata.

Il risultato netto è che ogni applicazione in esecuzione non può calpestare il processo di un'altra a causa dei diversi uidassegnati, che garantisce la protezione per le app in esecuzione.

Un altro modo di vedere le cose è questo - ha avuto ragione di un comune uidper tutte le applicazioni, quindi un'applicazione dannosa può davvero causare il caos, essere scrutando le proprie impostazioni, di override, intercettare il codice in esecuzione di un'altra applicazione e fare ogni sorta di cose cattive TM a quella applicazione.


3

La Dalvik VM non sta fornendo un limite di protezione, ma il kernel è fornendo un limite di protezione in termini di processo la VM viene eseguito in. Ecco perché, per esempio, non è un grosso problema per un'applicazione Android di eseguire codice nativo, che (più o meno) per definizione viene eseguito al di fuori della VM. È ancora in corso e il kernel garantisce che il processo non sarà in grado di danneggiare altre applicazioni, indipendentemente dal fatto che il processo esegua o meno codice all'interno della VM.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.