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 domaininit
. - 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.
- The SELinux Notebook, referensi terbaru untuk SELinux. Dokumen ini berisi detail lebih lanjut tentang bahasa kebijakan, arti setiap kata kunci, dan cara konteks keamanan dihitung.
- Panduan visual tentang cara menerapkan kebijakan SELinux
- Peningkatan Keamanan untuk Linux
- Android dengan Keamanan yang Ditingkatkan (SE): Mendapatkan MAC Fleksibel di Android
- Mengimplementasikan SELinux sebagai Modul Keamanan Linux
- Mengonfigurasi Kebijakan SELinux