各Androidアプリケーションが異なるDalvik VMプロセスで実行されるのはなぜですか?


10

私は、各androidアプリケーションが異なるDalvik VMプロセス(すべてzygoteから分岐)で実行されることを読みました。

また、これらのVMは非常に軽量で、書き込みバッファのコピーなどを使用しているため、これまでのところ非常に優れています。

しかし、これはセキュリティ上の理由(分離など)のために行われなかったことも読みました。実際、dalvik vmはセキュリティの境界と見なすべきではないとGoogleは述べています。

だから私の質問はこれです:なぜ各プロセスは異なるVMで実行しなければならないのですか?

回答:


11

Androidでは、すべてのアプリケーションが個別のユーザーとして実行されます。Linuxカーネルでは、各プロセスは単一のユーザーによって所有されているため、単一のLinuxプロセスで複数のDalvikアプリケーションを実行することはできません。

Linux fork()システムコールはコピーオンライトであり、共有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.