Mengapa setiap aplikasi Android berjalan pada proses Dalvik VM yang berbeda?

10

Saya telah membaca bahwa setiap aplikasi android berjalan pada proses Dalvik VM yang berbeda (semua bercabang dari zygote).

Saya juga membaca bahwa VM ini sangat ringan dan menggunakan copy pada buffer tulis dan semua itu, sejauh ini sangat bagus.

Tetapi, saya juga membaca bahwa ini tidak dilakukan untuk alasan keamanan (misalnya isolasi) - pada kenyataannya dalvik vm tidak boleh dianggap sebagai batas keamanan, kata Google.

Jadi pertanyaan saya adalah ini: Mengapa setiap proses harus dijalankan pada VM yang berbeda?

AndroidSec
sumber

Jawaban:

11

Di Android, setiap aplikasi berjalan sebagai pengguna yang terpisah. Dalam kernel Linux, setiap proses dimiliki oleh satu pengguna, oleh karena itu tidak mungkin untuk menjalankan beberapa aplikasi Dalvik pada satu proses Linux.

Overhead dari menjalankan beberapa instance Dalvik VM adalah ringan karena fork()panggilan sistem Linux adalah copy-on-write, penulisan ke halaman COW bersama akan menyebabkan "kesalahan halaman" dan halaman itu akan disalin; jadi meskipun sebagian besar wilayah memori VM dalam RAM digunakan bersama, tidak ada "keadaan bersama" antara VM.

Proses forking hanya menyediakan isolasi negara, tetapi bukan isolasi hak istimewa.

dalvik vm tidak boleh dianggap sebagai batas keamanan

Itu karena VM tidak dapat menegakkan batas keamanan. VM berjalan pada mode pengguna (mode yang sama dengan program yang dijalankannya), yang berarti bug di VM memungkinkan aplikasi untuk memodifikasi keadaan VM dengan cara yang tidak dimaksudkan; kernel, bagaimanapun, berjalan dalam mode istimewa dan dapat menegakkan batas keamanan.

Lie Ryan
sumber
4

Setiap proses Dalvikvm berjalan di bawah lingkungan kotak pasir yang dimiliki oleh id pengguna ( uid) dari aplikasi yang berjalan, harus dicatat bahwa pada saat instalasi aplikasi, uiddialokasikan dan ditugaskan untuk setiap aplikasi yang diinstal.

Hasil akhirnya adalah bahwa setiap aplikasi yang berjalan tidak dapat menginjak-injak proses yang lain karena perbedaan yang uidditetapkan, yang memberikan perlindungan untuk aplikasi yang berjalan.

Cara lain untuk melihatnya adalah ini - seandainya ada satu yang umum uiduntuk semua aplikasi, maka aplikasi jahat dapat benar-benar menyebabkan kekacauan, mengintip ke dalam pengaturan seseorang, menimpa, mencegat kode aplikasi yang berjalan aplikasi lain dan melakukan segala macam hal buruk TM untuk itu aplikasi.

t0mm13b
sumber
3

Dalvik VM tidak memberikan batas keamanan, tetapi kernel yang menyediakan batas keamanan dalam hal proses VM berjalan dalam. Itu sebabnya, misalnya, itu bukan masalah besar bagi sebuah aplikasi Android untuk menjalankan kode asli, yang (kurang lebih) secara definisi berjalan di luar VM. Masih dalam proses, dan kernel memastikan bahwa proses tidak akan dapat membahayakan aplikasi lain, apakah proses tersebut menjalankan kode dalam VM atau tidak.

danfuzz
sumber