11 votes

Pourquoi chaque application Android fonctionne-t-elle sur un processus Dalvik VM différent ?

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

J'ai également lu que ces VM sont vraiment légères et utilisent des tampons de copie pour l'écriture et tout le reste, 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'isolation) - en fait, dalvik vm ne devrait pas être considéré comme une frontière de sécurité, dit Google.

Ma question est donc la suivante : Pourquoi chaque processus doit-il s'exécuter sur une VM différente ?

12voto

Thej Points 655

Dans Android, chaque application fonctionne comme un utilisateur distinct. Dans le noyau Linux, chaque processus est détenu par un seul utilisateur, il n'est donc pas possible d'exécuter plusieurs applications Dalvik sur un seul processus Linux.

La surcharge liée à l'exécution de plusieurs instances Dalvik VM est légère car Linux fork() est copy-on-write, 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.

La bifurcation des processus ne fournit qu'une isolation d'état, mais pas une isolation de privilège.

la vm dalvik ne doit pas être considérée comme une frontière de sécurité

Cela est dû au fait que la VM ne peut pas faire respecter une frontière de sécurité. La VM fonctionne en mode utilisateur (le même mode que le programme qu'elle exécute), ce qui signifie qu'un bogue dans la VM pourrait permettre à l'application de modifier l'état de la VM d'une manière non prévue ; le noyau, cependant, fonctionne en mode privilégié et peut faire respecter les limites de sécurité.

5voto

Nick Pierpoint Points 7976

Chaque processus Dalvikvm s'exécute dans un environnement de type bac à sable appartenant à l'utilisateur id ( uid ) de l'application en cours d'exécution, il convient de noter que lors de l'installation de l'application, la fonction uid est 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 de la différence entre les deux. uid assigné, qui accorde la protection pour les applications en cours.

Une autre façon de voir les choses est la suivante : s'il y avait un point commun uid pour tous une application malveillante peut alors faire des ravages, s'introduire dans les paramètres d'une personne, remplacer, intercepter le code d'une autre application et faire toutes sortes de choses néfastes. TM à cette application.

3voto

Todd White Points 4257

La VM Dalvik ne fournit pas une frontière de sécurité, mais le noyau ist en fournissant une frontière de sécurité en termes de processus dans lequel la VM s'exécute. C'est pourquoi, par exemple, une application Android n'a rien à craindre si elle exécute du code natif, qui s'exécute (plus ou moins) par définition en dehors de la VM. Il est toujours dans le processus, et le noyau garantit que le processus ne pourra pas nuire aux autres applications, que le processus exécute du code dans la VM ou non.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X