¿Por qué cada aplicación de Android se ejecuta en un proceso diferente de Dalvik VM?

10

He leído que cada aplicación de Android se ejecuta en un proceso Dalvik VM diferente (todo bifurcado desde cigoto).

También leí que estas máquinas virtuales son realmente livianas y usan copia en buffers de escritura y todo eso, hasta ahora todo bien.

Pero también leí que esto no se hizo por razones de seguridad (por ejemplo, aislamiento); de hecho, Dalvik VM no debe considerarse un límite de seguridad, dice Google.

Entonces mi pregunta es esta: ¿Por qué cada proceso tiene que ejecutarse en una VM diferente?

AndroidSec
fuente

Respuestas:

11

En Android, cada aplicación se ejecuta como un usuario separado. En el kernel de Linux, cada proceso es propiedad de un solo usuario, por lo tanto, no es posible ejecutar múltiples aplicaciones Dalvik en un solo proceso de Linux.

La sobrecarga de ejecutar múltiples instancias de Dalvik VM es liviana porque la fork()llamada al sistema Linux es copia en escritura, una escritura en una página COW compartida causará un "error de página" y esa página se copiará; entonces, aunque la mayor parte de la región de memoria de la VM en la RAM es compartida, no hay un "estado compartido" entre las VM.

Los procesos de bifurcación solo proporcionan aislamiento de estado, pero no aislamiento de privilegios.

Dalvik vm no debe considerarse un límite de seguridad

Esto se debe a que la VM no puede imponer un límite de seguridad. La VM se está ejecutando en modo de usuario (el mismo modo que el programa que está ejecutando), lo que significa que un error en la VM podría permitir que la aplicación modifique el estado de la VM de una manera no prevista; Sin embargo, el núcleo se ejecuta en modo privilegiado y puede imponer límites de seguridad.

Lie Ryan
fuente
4

Cada proceso Dalvikvm se ejecuta en un entorno protegido propiedad del ID de usuario ( uid) de la aplicación en ejecución, debe tenerse en cuenta que, después de la instalación de la aplicación, uidse asigna y se asigna a cada aplicación instalada.

El resultado neto es que cada aplicación en ejecución no puede pisotear el proceso de otra debido a los diferentes uidasignados, que otorgan la protección para las aplicaciones en ejecución.

Otra forma de verlo es esta: si hubiera una común uidpara todas las aplicaciones, entonces una aplicación maliciosa realmente puede causar estragos, mirar la configuración, anular, interceptar el código en ejecución de otra aplicación y hacer todo tipo de cosas malas TM para eso solicitud.

t0mm13b
fuente
3

La máquina virtual Dalvik no está proporcionando un límite de seguridad, pero el núcleo está proporcionando un límite de seguridad en términos del proceso de la máquina virtual se ejecuta en. Es por eso que, por ejemplo, no es un gran problema para una aplicación Android para ejecutar código nativo, el cual (más o menos), por definición, se ejecuta fuera de la VM. Todavía está en el proceso, y el núcleo asegura que el proceso no pueda dañar otras aplicaciones, ya sea que el proceso esté ejecutando código dentro de la VM o no.

danfuzz
fuente