Warum läuft jede Android-Anwendung auf einem anderen Dalvik VM-Prozess?

10

Ich habe gelesen, dass jede Android-Anwendung auf einem anderen Dalvik VM-Prozess ausgeführt wird (alle von Zygote gespalten).

Ich habe auch gelesen, dass diese VMs sehr leicht sind und Copy für Schreibpuffer verwenden und all das, soweit so gut.

Ich habe aber auch gelesen, dass dies aus Sicherheitsgründen (z. B. Isolation) nicht getan wurde - tatsächlich sollte dalvik vm nicht als Sicherheitsgrenze betrachtet werden, sagt Google.

Meine Frage lautet also: Warum muss jeder Prozess auf einer anderen VM ausgeführt werden?

AndroidSec
quelle

Antworten:

11

In Android wird jede Anwendung als separater Benutzer ausgeführt. Im Linux-Kernel gehört jeder Prozess einem einzelnen Benutzer. Daher ist es nicht möglich, mehrere Dalvik-Anwendungen auf einem einzigen Linux-Prozess auszuführen.

Der Aufwand für das Ausführen mehrerer Dalvik VM-Instanzen ist gering, da der Linux- fork()Systemaufruf beim Schreiben kopiert wird. Das Schreiben auf eine gemeinsam genutzte COW-Seite führt zu einem "Seitenfehler" und diese Seite wird kopiert. Obwohl der größte Teil des Speicherbereichs der VM im RAM gemeinsam genutzt wird, gibt es keinen "gemeinsamen Status" zwischen VMs.

Forking-Prozesse bieten nur Statusisolation, keine Berechtigungsisolation.

dalvik vm sollte nicht als Sicherheitsgrenze betrachtet werden

Dies liegt daran, dass die VM keine Sicherheitsgrenze erzwingen kann. Die VM wird im Benutzermodus ausgeführt (der gleiche Modus wie das Programm, das sie ausführt). Dies bedeutet, dass ein Fehler in der VM es der Anwendung möglicherweise ermöglicht, den VM-Status auf eine Weise zu ändern, die nicht beabsichtigt ist. Der Kernel wird jedoch im privilegierten Modus ausgeführt und kann Sicherheitsgrenzen erzwingen.

Lie Ryan
quelle
4

Jeder Dalvikvm-Prozess wird in einer Sandbox-Umgebung ausgeführt, die der Benutzer-ID ( uid) der ausgeführten Anwendung gehört. Beachten Sie, dass bei der Installation der Anwendung die uidjeder installierten Anwendung zugewiesen und zugewiesen wird.

Das Nettoergebnis ist, dass jede laufende Anwendung aufgrund der unterschiedlichen uidZuweisung nicht den Prozess einer anderen mit Füßen treten kann, was den Schutz für die laufenden Apps gewährt.

Ein anderer Weg, es zu betrachten dies ist - hatte es eine gemeinsame sein uidfür alle Anwendungen, dann eine bösartige Anwendung kann wirklich Ursache Chaos, sein Peering in die eigene Einstellungen, überschreiben, Intercept einer anderen Anwendung Ausführen von Code und machen alle möglichen schlechten Dinge TM zu , dass Anwendung.

t0mm13b
quelle
3

Die Dalvik VM ist keine Sicherheitsgrenze bereitstellt, aber der Kern ist eine Sicherheitsgrenze in Bezug auf den Prozess bietet die VM in ausgeführt wird . Aus diesem Grunde, zum Beispiel, ist es keine große Sache für eine Android - Anwendung nativen Code ausführen kann , die (mehr oder weniger) wird per Definition außerhalb der VM ausgeführt. Es befindet sich noch im Prozess und der Kernel stellt sicher, dass der Prozess anderen Anwendungen keinen Schaden zufügen kann, unabhängig davon, ob auf dem Prozess Code in der VM ausgeführt wird oder nicht.

Danfuzz
quelle