각 Android 애플리케이션이 다른 Dalvik VM 프로세스에서 실행되는 이유는 무엇입니까?


10

각 안드로이드 응용 프로그램이 다른 Dalvik VM 프로세스 (zygote에서 분기 됨)에서 실행된다는 것을 읽었습니다.

또한 이러한 VM은 실제로 가볍고 쓰기 버퍼에 복사 및 그 밖의 모든 것을 사용합니다.

그러나 나는 이것이 보안상의 이유로 (예를 들어 격리) 수행되지 않았다는 것을 읽었습니다. 실제로 dalvik vm은 보안 경계로 간주되어서는 안됩니다.

그래서 내 질문은 이것입니다 : 왜 각 프로세스가 다른 VM에서 실행되어야합니까?

답변:


11

Android에서는 모든 애플리케이션 이 별도의 사용자로 실행됩니다. Linux 커널에서 각 프로세스 는 단일 사용자가 소유하므로 단일 Linux 프로세스에서 여러 Dalvik 애플리케이션을 실행할 수 없습니다.

Linux fork()시스템 호출이 COW (Copy-On-Write)이므로 공유 COW 페이지에 쓰면 "페이지 결함"이 발생하고 해당 페이지가 복사 되므로 여러 Dalvik VM 인스턴스를 실행하면 오버 헤드가 적습니다 . 따라서 RAM에있는 대부분의 VM 메모리 영역이 공유 되더라도 VM간에 "공유 상태"는 없습니다.

분기 프로세스는 상태 격리 만 제공하지만 권한 격리는 제공하지 않습니다.

dalvik vm은 보안 경계로 간주되어서는 안됩니다

VM이 보안 경계를 적용 할 수 없기 때문입니다. VM이 사용자 모드 (실행중인 프로그램과 동일한 모드)에서 실행 중입니다. 즉, VM의 버그로 인해 응용 프로그램이 의도하지 않은 방식으로 VM 상태를 수정할 수 있습니다. 그러나 커널은 권한 모드에서 실행되며 보안 경계를 강화할 수 있습니다.


4

각 Dalvikvm 프로세스는 uid실행중인 애플리케이션 의 사용자 ID ( )가 소유 한 샌드 박스 환경에서 실행되며, 애플리케이션 설치시 uid설치된 각 애플리케이션에 할당되고 할당됩니다.

결과적으로 각 실행중인 응용 프로그램은 서로 다른 uid할당 된 응용 프로그램으로 인해 다른 프로세스를 짓밟을 수 없으므로 실행중인 응용 프로그램에 대한 보호 기능이 부여됩니다.

그것을 보는 또 다른 방법은 이것이다 -가 하나 개의 공통되고 있었다 uid위한 모든 후 악성 응용 프로그램이 정말 혼란 원인, 하나의 설정, 재정, 절편 다른 응용 프로그램의 실행 코드를 들여다하고 나쁜 일의 모든 종류의 할 수있는 응용 프로그램 TM 것과을 신청.


3

Dalvik VM은 보안 경계를 제공하지 않지만 커널 VM이 실행되는 프로세스와 관련하여 보안 경계를 제공합니다. 예를 들어 Android 애플리케이션이 원시 코드를 실행하는 것이 큰 이유는 아닙니다. 정의에 따라 (약간) VM 외부에서 실행됩니다. 아직 프로세스 중이며 커널은 프로세스가 VM 내에서 코드를 실행하는지 여부에 관계없이 프로세스가 다른 응용 프로그램을 손상시킬 수 없도록합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.