Security-Enhanced Linux di Android

Sebagai bagian dari model keamanan Android, Android menggunakan Security-Enhanced Linux (SELinux) untuk menerapkan mandatory access control (MAC) pada semua proses, bahkan proses yang berjalan dengan hak istimewa root/superuser (kemampuan Linux). Banyak perusahaan dan organisasi telah berkontribusi pada penerapan SELinux Android. Dengan SELinux, Android dapat melindungi dan membatasi layanan sistem dengan lebih baik, mengontrol akses ke data aplikasi dan log sistem, mengurangi efek software berbahaya, dan melindungi pengguna dari potensi kekurangan dalam kode di perangkat seluler.

SELinux beroperasi berdasarkan prinsip penolakan default: Apa pun yang tidak diizinkan secara eksplisit akan ditolak. SELinux dapat beroperasi dalam dua mode global:

  • Mode Permissive, yang mencatat penolakan izin tetapi tidak diterapkan.
  • Mode Menerapkan, yang mencatat izin yang ditolak ke dalam log dan menerapkannya.

Android menyertakan SELinux dalam mode penerapan dan kebijakan keamanan yang sesuai yang berfungsi secara default di seluruh AOSP. Dalam mode penegakan, tindakan yang tidak diizinkan akan dicegah dan semua upaya pelanggaran akan dicatat oleh kernel ke dmesg dan logcat. Saat mengembangkan, Anda harus menggunakan error ini untuk meningkatkan kualitas software dan kebijakan SELinux sebelum menerapkannya. Untuk mengetahui detail selengkapnya, lihat Menerapkan SELinux.

SELinux juga mendukung mode permissive per domain, tempat domain (proses) tertentu dapat dibuat permisif sekaligus menempatkan seluruh sistem dalam mode pemberlakuan global. Domain hanyalah label yang mengidentifikasi proses atau serangkaian proses dalam kebijakan keamanan, dengan semua proses yang diberi label dengan domain yang sama diperlakukan secara identik oleh kebijakan keamanan. Mode permisif per domain memungkinkan penerapan inkremental SELinux ke bagian sistem dan pengembangan kebijakan yang terus meningkat untuk layanan baru (sambil mempertahankan pemberlakuan sistem lainnya).

Latar belakang

Model keamanan Android sebagian didasarkan pada konsep sandbox aplikasi. Setiap aplikasi berjalan di sandbox-nya sendiri. Sebelum Android 4.3, sandbox ini ditentukan oleh pembuatan UID Linux unik untuk setiap aplikasi pada saat penginstalan. Android 4.3 dan yang lebih baru menggunakan SELinux untuk lebih menentukan batas sandbox aplikasi Android.

Di Android 5.0 dan yang lebih baru, SELinux diterapkan sepenuhnya, berdasarkan rilis permisif Android 4.3 dan penerapan sebagian Android 4.4. Dengan perubahan ini, Android beralih dari penerapan pada sekumpulan domain penting yang terbatas (installd, netd, vold, dan zygote) ke semua domain (lebih dari 60 domain). Khususnya:

  • Semuanya dalam mode penerapan di Android 5.x dan yang lebih baru.
  • Tidak ada proses selain init yang boleh berjalan di domain init.
  • Setiap penolakan generik (untuk block_device, socket_device, default_service) menunjukkan bahwa perangkat memerlukan domain khusus.

Android 6.0 meningkatkan keamanan sistem dengan mengurangi permisifitas kebijakan kami untuk menyertakan isolasi yang lebih baik di antara pengguna, pemfilteran IOCTL, mengurangi ancaman layanan yang terekspos, memperketat domain SELinux lebih lanjut, dan akses /proc yang sangat terbatas.

Android 7.0 memperbarui konfigurasi SELinux untuk lebih mengunci sandbox aplikasi dan mengurangi platform serangan. Rilis ini juga memecah stack mediaserver monolitik menjadi proses yang lebih kecil untuk mengurangi cakupan izinnya. Untuk mengetahui detail selengkapnya, lihat Melindungi Android dengan lebih banyak pertahanan kernel Linux dan Memperkuat stack media.

Android 8.0 mengupdate SELinux agar berfungsi dengan Treble, yang memisahkan kode vendor level rendah dari framework sistem Android. Rilis ini memperbarui kebijakan SELinux untuk memungkinkan produsen perangkat dan vendor SOC mengupdate bagian kebijakan mereka, mem-build image mereka (vendor.img, boot.img, dll.), lalu mengupdate image tersebut secara independen dari platform atau sebaliknya.

Meskipun Anda dapat memiliki versi platform (framework) yang lebih tinggi/baru yang berjalan di perangkat, kasus sebaliknya tidak didukung; image vendor (vendor.img/odm.img) tidak boleh memiliki versi yang lebih baru daripada platform (system.img). Jadi, versi platform yang lebih baru dapat menyebabkan masalah kompatibilitas SELinux karena kebijakan SELinux platform berada pada versi yang lebih baru daripada bagian SELinux vendor dalam kebijakan. Model Android 8.0 menyediakan metode untuk mempertahankan kompatibilitas guna mencegah OTA serentak yang tidak perlu.

Referensi lainnya

Untuk mendapatkan bantuan dalam membuat kebijakan SELinux yang berguna, lihat referensi berikut.