Dlaczego każda aplikacja na Androida działa na innym procesie VM Dalvik?

10

Przeczytałem, że każda aplikacja na Androida działa na innym procesie VM Dalvik (wszystkie rozwidlone z zygote).

Przeczytałem również, że te maszyny wirtualne są naprawdę lekkie i używają kopiowania na buforach zapisu i tak dalej, jak dotąd.

Ale przeczytałem również, że nie zrobiono tego ze względów bezpieczeństwa (np. Izolacji) - w rzeczywistości dalvik vm nie powinien być uważany za granicę bezpieczeństwa, mówi Google.

Moje pytanie brzmi zatem: dlaczego każdy proces musi działać na innej maszynie wirtualnej?

AndroidSec
źródło

Odpowiedzi:

11

W systemie Android każda aplikacja działa jako osobny użytkownik. W jądrze Linux każdy proces jest własnością jednego użytkownika, dlatego nie można uruchamiać wielu aplikacji Dalvik na jednym procesie Linux.

Narzut związany z uruchomieniem wielu instancji Dalvik VM jest niewielki, ponieważ fork()wywołanie systemowe Linux to kopiowanie przy zapisie, zapis na udostępnionej stronie COW spowoduje „błąd strony” i ta strona zostanie skopiowana; więc nawet jeśli większość obszaru pamięci maszyny wirtualnej w pamięci RAM jest współużytkowana, nie ma „wspólnego stanu” między maszynami wirtualnymi.

Procesy rozwidlania zapewniają jedynie izolację stanu, ale nie izolację uprawnień.

Dalvik vm nie powinien być uważany za granicę bezpieczeństwa

Jest tak, ponieważ maszyna wirtualna nie może egzekwować granicy bezpieczeństwa. Maszyna wirtualna działa w trybie użytkownika (ten sam tryb, co program, który wykonuje), co oznacza, że ​​błąd w maszynie wirtualnej może pozwolić aplikacji na modyfikację stanu maszyny wirtualnej w sposób niezamierzony; jądro działa jednak w trybie uprzywilejowanym i może egzekwować granicę bezpieczeństwa.

Lie Ryan
źródło
4

Każdy proces Dalvikvm działa w środowisku piaskownicowym, którego właścicielem jest id użytkownika ( uid) uruchomionej aplikacji, należy zauważyć, że po zainstalowaniu aplikacji uidjest on przydzielany i przypisywany do każdej zainstalowanej aplikacji.

W rezultacie każda uruchomiona aplikacja nie może podeptać procesu innej ze względu na inny uidprzypisany, który zapewnia ochronę uruchomionym aplikacjom.

Innym sposobem patrzenia na to jest - miał tam być jeden wspólny uiddla wszystkich aplikacji, a następnie złośliwa aplikacja może naprawdę spowodować chaos, bądź zaglądając do swoich ustawień, nadpisywania, przechwycić kod uruchomiony innej aplikacji i robić różnego rodzaju złych rzeczy TM do tego podanie.

t0mm13b
źródło
3

Dalvik VM nie jest dostarczanie granicę bezpieczeństwa, ale jądro jest dostarczenie granicę bezpieczeństwa w zakresie procesu VM działa w. Dlatego, na przykład, nie jest wielka sprawa dla aplikacji Android uruchomić natywny kod, który (mniej więcej) z definicji działa poza maszyną wirtualną. Nadal jest w trakcie procesu, a jądro zapewnia, że ​​proces nie będzie w stanie zaszkodzić innym aplikacjom, niezależnie od tego, czy proces uruchamia kod w maszynie wirtualnej, czy nie.

Danfuzz
źródło