Sandbox Aplikasi

Platform Android memanfaatkan perlindungan berbasis pengguna Linux untuk mengidentifikasi dan mengisolasi resource aplikasi. Hal ini mengisolasi aplikasi satu sama lain dan melindungi aplikasi serta sistem dari aplikasi berbahaya. Untuk melakukannya, Android menetapkan ID pengguna unik (UID) ke setiap aplikasi Android dan menjalankannya dalam prosesnya sendiri.

Android menggunakan UID untuk menyiapkan Sandbox Aplikasi tingkat kernel. Kernel menerapkan keamanan antara aplikasi dan sistem di 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 menelepon tanpa izin, aplikasi tersebut akan dicegah untuk melakukannya karena tidak memiliki hak istimewa pengguna default yang sesuai. Sandbox ini sederhana, dapat diaudit, dan didasarkan pada pemisahan proses dan izin file pengguna gaya UNIX yang sudah ada sejak puluhan tahun lalu.

Karena Application Sandbox berada di kernel, model keamanan ini memperluas kode native dan aplikasi OS. Semua software di atas kernel, seperti library OS, framework aplikasi, runtime aplikasi, dan semua aplikasi, berjalan dalam Application Sandbox. Di beberapa platform, developer dibatasi pada framework pengembangan, kumpulan API, atau bahasa tertentu. Di Android, tidak ada batasan tentang cara aplikasi dapat ditulis yang diperlukan untuk menerapkan keamanan; dalam hal ini, kode native di-sandbox sebagai kode yang ditafsirkan.

Perlindungan

Umumnya, untuk keluar dari Sandbox Aplikasi di perangkat yang dikonfigurasi dengan benar, seseorang harus mengorbankan keamanan kernel Linux. Namun, mirip dengan fitur keamanan lainnya, perlindungan individual yang menerapkan sandbox aplikasi tidak kebal, sehingga pertahanan menyeluruh penting untuk mencegah satu kerentanan menyebabkan kompromi OS atau aplikasi lainnya.

Android mengandalkan sejumlah perlindungan untuk menerapkan sandbox aplikasi. Penerapan ini telah diperkenalkan dari waktu ke waktu dan telah secara signifikan memperkuat sandbox kontrol akses diskresional (DAC) berbasis UID asli. 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 DAC UID.
  • Di Android 6.0, sandbox SELinux diperluas untuk mengisolasi aplikasi di seluruh batas per pengguna fisik. Selain itu, Android juga menetapkan setelan default yang lebih aman untuk data aplikasi: Untuk aplikasi dengan targetSdkVersion >= 24, izin DAC default di direktori utama aplikasi diubah dari 751 menjadi 700. Hal ini memberikan setelan default yang lebih aman untuk data aplikasi pribadi (meskipun aplikasi dapat mengganti setelan default ini).
  • Di Android 8.0, semua aplikasi disetel untuk berjalan dengan filter seccomp-bpf yang membatasi syscall yang diizinkan untuk digunakan aplikasi, sehingga memperkuat batas aplikasi/kernel.
  • Di Android 9, semua aplikasi tanpa hak istimewa dengan targetSdkVersion >= 28 harus berjalan di setiap sandbox SELinux, yang menyediakan MAC per aplikasi. Perlindungan ini meningkatkan pemisahan aplikasi, mencegah penggantian default yang aman, dan (yang paling penting) mencegah aplikasi membuat dunia datanya dapat diakses.
  • Di Android 10, aplikasi memiliki tampilan mentah terbatas dari sistem file, tanpa akses langsung ke jalur seperti /sdcard/DCIM. Namun, aplikasi mempertahankan akses mentah penuh ke jalur khusus paketnya, seperti yang ditampilkan oleh metode yang berlaku, seperti Context.getExternalFilesDir().

Panduan untuk berbagi file

Menetapkan data aplikasi sebagai dapat diakses oleh semua orang adalah praktik keamanan yang buruk. Akses diberikan kepada semua orang dan tidak mungkin membatasi akses hanya kepada penerima yang dimaksud. Praktik ini telah menyebabkan kebocoran pengungkapan informasi dan kebingungan pada kerentanan deputi, serta merupakan target favorit bagi malware yang menargetkan aplikasi dengan data sensitif (seperti klien email). Di Android 9 dan yang lebih baru, berbagi file dengan cara ini secara eksplisit tidak diizinkan untuk aplikasi dengan targetSdkVersion>=28.

Daripada membuat data aplikasi dapat diakses oleh semua orang, gunakan panduan berikut saat berbagi file:

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

Izin runtime Penyimpanan mengontrol akses ke koleksi dengan jenis yang kuat melalui MediaStore. Untuk mengakses file dengan jenis lemah seperti PDF dan class MediaStore.Downloads, aplikasi harus menggunakan intent seperti intent ACTION_OPEN_DOCUMENT.

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

  • Nilai default tanda manifes adalah true untuk aplikasi yang menargetkan Android 9 (dan yang lebih rendah).
  • Nilai defaultnya adalah false untuk aplikasi yang menargetkan Android 10. Untuk sementara memilih tidak menggunakan tampilan penyimpanan yang difilter di aplikasi yang menargetkan Android 10, tetapkan nilai tanda manifes ke true.
  • Dengan menggunakan izin terbatas, penginstal mengizinkan aplikasi yang diizinkan untuk penyimpanan tanpa sandbox. Aplikasi yang tidak diizinkan akan di-sandbox.