Pourquoi chaque application Android s'exécute sur un processus Dalvik VM différent?

10

J'ai lu que chaque application Android s'exécute sur un processus Dalvik VM différent (tous issus de zygote).

J'ai également lu que ces machines virtuelles sont vraiment légères et utilisent la copie sur des tampons d'écriture et tout cela, jusqu'ici tout va bien.

Mais, j'ai également lu que cela n'a pas été fait pour des raisons de sécurité (par exemple, l'isolement) - en fait, dalvik vm ne doit pas être considéré comme une limite de sécurité, explique Google.

Ma question est donc la suivante: pourquoi chaque processus doit s'exécuter sur une machine virtuelle différente?

AndroidSec
la source

Réponses:

11

Sous Android, chaque application s'exécute en tant qu'utilisateur distinct. Dans le noyau Linux, chaque processus appartient à un seul utilisateur, il n'est donc pas possible d'exécuter plusieurs applications Dalvik sur un seul processus Linux.

Le surcoût lié à l'exécution de plusieurs instances de machine virtuelle Dalvik est léger car l' fork()appel système Linux est une copie sur écriture, une écriture sur une page COW partagée provoquera un «défaut de page» et cette page sera copiée; Ainsi, même si la plupart de la région mémoire de la VM dans la RAM est partagée, il n'y a pas "d'état partagé" entre les VM.

Les processus de bifurcation fournissent uniquement l'isolement des états, mais pas l'isolement des privilèges.

dalvik vm ne doit pas être considéré comme une limite de sécurité

En effet, la machine virtuelle ne peut pas appliquer une limite de sécurité. La machine virtuelle s'exécute en mode utilisateur (le même mode que le programme qu'elle exécute), ce qui signifie qu'un bogue dans la machine virtuelle peut permettre à l'application de modifier l'état de la machine virtuelle d'une manière qui n'est pas prévue; le noyau, cependant, fonctionne en mode privilégié et peut appliquer une limite de sécurité.

Lie Ryan
la source
4

Chaque processus Dalvikvm s'exécute dans un environnement en bac à sable appartenant à l'ID utilisateur ( uid) de l'application en cours d'exécution, il convient de noter qu'à l'installation de l'application, le uidest alloué et attribué à chaque application installée.

Le résultat net est que chaque application en cours d'exécution ne peut pas piétiner le processus d'une autre en raison des différentes uidaffectations, qui accordent la protection aux applications en cours d'exécution.

Une autre façon de voir les choses est la suivante: s'il y en avait une commune uidpour toutes les applications, une application malveillante peut vraiment causer des ravages, regarder dans ses paramètres, remplacer, intercepter le code en cours d'exécution d'une autre application et faire toutes sortes de mauvaises choses TM à cela application.

t0mm13b
la source
3

Le Dalvik VM ne fournit pas une limite de sécurité, mais le noyau est fournit une limite de sécurité en termes de processus de la machine virtuelle fonctionne. C'est la raison pour laquelle, par exemple, il n'y a pas grand - chose pour une application Android pour exécuter du code natif, (plus ou moins) par définition s'exécute en dehors de la machine virtuelle. Il est toujours en cours et le noyau garantit que le processus ne pourra pas endommager d'autres applications, que le processus exécute du code dans la machine virtuelle ou non.

danfuzz
la source