Kotak Pasir Aplikasi

Platform Android memanfaatkan perlindungan berbasis pengguna Linux untuk mengidentifikasi dan mengisolasi sumber daya aplikasi. Ini mengisolasi aplikasi satu sama lain dan melindungi aplikasi dan sistem dari aplikasi berbahaya. Untuk melakukan hal ini, Android menetapkan ID pengguna unik (UID) untuk setiap aplikasi Android dan menjalankannya dalam prosesnya sendiri.

Android menggunakan UID untuk menyiapkan Application Sandbox tingkat kernel. Kernel menerapkan keamanan antara aplikasi dan sistem pada tingkat proses melalui fasilitas Linux standar seperti ID pengguna dan grup yang ditetapkan ke aplikasi. Secara default, aplikasi tidak dapat berinteraksi satu sama lain dan memiliki akses terbatas ke OS. Jika aplikasi A mencoba melakukan sesuatu yang berbahaya, seperti membaca data aplikasi B atau memutar nomor telepon tanpa izin, aplikasi tersebut akan dicegah karena tidak memiliki hak pengguna default yang sesuai. Sandbox ini sederhana, dapat diaudit, dan didasarkan pada pemisahan proses dan izin file oleh pengguna bergaya UNIX yang telah berusia puluhan tahun.

Karena Application Sandbox ada di kernel, model keamanan ini meluas ke kode asli dan aplikasi OS. Semua perangkat lunak di atas kernel, seperti pustaka OS, kerangka aplikasi, runtime aplikasi, dan semua aplikasi, dijalankan dalam Application Sandbox. Pada beberapa platform, pengembang dibatasi pada kerangka pengembangan, kumpulan API, atau bahasa tertentu. Di Android, tidak ada batasan mengenai cara penulisan aplikasi yang diperlukan untuk menegakkan keamanan; dalam hal ini, kode asli sama seperti kode yang ditafsirkan.

Perlindungan

Umumnya, untuk keluar dari Application Sandbox di perangkat yang dikonfigurasi dengan benar, seseorang harus membahayakan keamanan kernel Linux. Namun, mirip dengan fitur keamanan lainnya, perlindungan individual yang menerapkan sandbox aplikasi tidak kebal, jadi pertahanan mendalam penting untuk mencegah kerentanan tunggal yang mengarah pada kompromi pada OS atau aplikasi lain.

Android mengandalkan sejumlah perlindungan untuk menerapkan sandbox aplikasi. Penegakan ini telah diterapkan dari waktu ke waktu dan secara signifikan telah memperkuat sandbox kontrol akses diskresioner (DAC) berbasis UID. Rilis Android sebelumnya menyertakan perlindungan berikut:

  • Di Android 5.0, SELinux menyediakan pemisahan kontrol akses wajib (MAC) antara sistem dan aplikasi. Namun, semua aplikasi pihak ketiga berjalan dalam konteks SELinux yang sama sehingga isolasi antar aplikasi terutama diterapkan oleh UID DAC.
  • Di Android 6.0, sandbox SELinux diperluas untuk mengisolasi aplikasi melintasi batas per pengguna fisik. Selain itu, Android juga menyetel default yang lebih aman untuk data aplikasi: Untuk aplikasi dengan targetSdkVersion >= 24 , izin DAC default pada direktori beranda aplikasi diubah dari 751 menjadi 700. Hal ini memberikan default yang lebih aman untuk data aplikasi pribadi (walaupun aplikasi mungkin mengesampingkan default ini) .
  • Di Android 8.0, semua aplikasi diatur untuk berjalan dengan filter seccomp-bpf yang membatasi syscall yang boleh digunakan oleh aplikasi, sehingga memperkuat batasan aplikasi/kernel.
  • Di Android 9, semua aplikasi yang tidak memiliki hak istimewa dengan targetSdkVersion >= 28 harus dijalankan di sandbox SELinux individual, yang menyediakan MAC per aplikasi. Perlindungan ini meningkatkan pemisahan aplikasi, mencegah penggantian default yang aman, dan (yang paling signifikan) mencegah aplikasi membuat dunia datanya dapat diakses.
  • Di Android 10, aplikasi memiliki tampilan mentah sistem file yang terbatas, tanpa akses langsung ke jalur seperti /sdcard/DCIM. Namun, aplikasi tetap memiliki akses mentah penuh ke jalur khusus paketnya, sebagaimana dikembalikan oleh metode apa pun yang berlaku, seperti Context.getExternalFilesDir() .

Pedoman untuk berbagi file

Menyetel data aplikasi agar dapat diakses oleh seluruh dunia adalah praktik keamanan yang buruk. Akses diberikan kepada semua orang dan tidak mungkin membatasi akses hanya kepada penerima yang dituju. Praktik ini telah menyebabkan kebocoran informasi dan kerentanan yang membingungkan, serta merupakan target favorit malware yang menargetkan aplikasi dengan data sensitif (seperti klien email). Di Android 9 dan lebih tinggi, berbagi file dengan cara ini secara eksplisit tidak diizinkan untuk aplikasi dengan targetSdkVersion>=28 .

Daripada membuat data aplikasi dapat diakses oleh seluruh dunia, gunakan panduan berikut saat berbagi file:

  • Jika aplikasi Anda perlu berbagi file dengan aplikasi lain, gunakan penyedia materi . Penyedia konten berbagi data dengan perincian yang tepat dan tanpa banyak kelemahan dari izin UNIX yang dapat diakses di seluruh dunia (untuk detailnya, lihat Dasar-dasar penyedia konten ).
  • Jika aplikasi Anda memiliki file yang benar-benar dapat diakses oleh semua orang (seperti foto), file tersebut harus spesifik untuk media (hanya file foto, video, dan audio) dan disimpan menggunakan kelas MediaStore . (Untuk detail selengkapnya tentang cara menambahkan item media, lihat Mengakses file media dari penyimpanan bersama .)

Izin runtime Storage mengontrol akses ke koleksi yang diketik dengan kuat melalui MediaStore . Untuk mengakses file dengan tipe lemah seperti PDF dan kelas MediaStore.Downloads , aplikasi harus menggunakan maksud seperti maksud ACTION_OPEN_DOCUMENT .

Untuk mengaktifkan perilaku Android 10, gunakan atribut manifes requestLegacyExternalStorage , dan ikuti praktik terbaik izin aplikasi .

  • Nilai default tanda manifes true untuk aplikasi yang menargetkan Android 9 (dan lebih rendah).
  • Nilai defaultnya adalah false untuk aplikasi yang menargetkan Android 10. Untuk menyisih sementara dari tampilan penyimpanan yang difilter di aplikasi yang menargetkan Android 10, setel nilai tanda manifes ke true .
  • Dengan menggunakan izin terbatas, penginstal memasukkan aplikasi ke daftar putih yang diizinkan untuk penyimpanan non-sandbox. Aplikasi yang tidak masuk daftar putih akan dimasukkan ke dalam sandbox.