Sebagai bagian dari model keamanan Android, Android menggunakan Security-Enhanced Linux (SELinux) untuk menerapkan kontrol akses wajib (MAC) atas semua proses, bahkan proses yang berjalan dengan hak akses root/superuser (kemampuan Linux). Banyak perusahaan dan organisasi telah berkontribusi pada implementasi SELinux Android. Dengan SELinux, Android dapat melindungi dan membatasi layanan sistem dengan lebih baik, mengontrol akses ke data aplikasi dan log sistem, mengurangi efek perangkat lunak berbahaya, dan melindungi pengguna dari potensi kelemahan kode pada perangkat seluler.
SELinux beroperasi pada prinsip penolakan default: Apa pun yang tidak diizinkan secara eksplisit ditolak. SELinux dapat beroperasi dalam dua mode global:
- Mode permisif , di mana penolakan izin dicatat tetapi tidak diberlakukan.
- Mode penegakan , di mana penolakan izin dicatat dan diterapkan.
Android menyertakan SELinux dalam mode penegakan dan kebijakan keamanan terkait yang berfungsi secara default di seluruh AOSP. Dalam mode penegakan, tindakan yang tidak diizinkan dicegah dan semua upaya pelanggaran dicatat oleh kernel ke dmesg
dan logcat
. Saat mengembangkan, Anda harus menggunakan kesalahan ini untuk menyempurnakan perangkat lunak dan kebijakan SELinux Anda sebelum menerapkannya. Untuk detail lebih lanjut, lihat Menerapkan SELinux .
SELinux juga mendukung mode permisif per domain di mana domain (proses) tertentu dapat dibuat permisif sambil menempatkan sisa sistem dalam mode penegakan global. Domain hanyalah label yang mengidentifikasi proses atau kumpulan proses dalam kebijakan keamanan, di mana semua proses yang diberi label dengan domain yang sama diperlakukan secara identik oleh kebijakan keamanan. Mode permisif per domain memungkinkan aplikasi tambahan SELinux ke bagian sistem dan pengembangan kebijakan yang terus meningkat untuk layanan baru (sambil menjaga penerapan sistem lainnya).
Latar belakang
Model keamanan Android sebagian didasarkan pada konsep kotak pasir aplikasi . Setiap aplikasi berjalan di kotak pasirnya sendiri. Sebelum Android 4.3, kotak pasir ini ditentukan oleh pembuatan UID Linux yang unik untuk setiap aplikasi pada saat penginstalan. Android 4.3 dan yang lebih baru menggunakan SELinux untuk lebih mendefinisikan batas-batas kotak pasir aplikasi Android.
Di Android 5.0 dan yang lebih baru, SELinux diterapkan sepenuhnya, berdasarkan rilis Android 4.3 yang permisif dan penerapan sebagian Android 4.4. Dengan perubahan ini, Android beralih dari penegakan pada sekumpulan domain penting yang terbatas ( installd
, netd
, vold
dan zygote
) ke segalanya (lebih dari 60 domain). Secara khusus:
- Semuanya dalam mode penegakan di Android 5.x dan lebih tinggi.
- Tidak ada proses selain
init
yang harus dijalankan di domaininit
. - Penolakan umum apa pun (untuk
block_device
,socket_device
,default_service
) menunjukkan bahwa perangkat memerlukan domain khusus.
Android 6.0 memperkuat sistem dengan mengurangi permisif kebijakan kami untuk menyertakan isolasi yang lebih baik antara pengguna, pemfilteran IOCTL, pengurangan ancaman layanan yang terpapar, pengetatan lebih lanjut domain SELinux, dan akses /proc
yang sangat terbatas.
Android 7.0 memperbarui konfigurasi SELinux untuk mengunci lebih jauh kotak pasir aplikasi dan mengurangi permukaan serangan. Rilis ini juga memecah tumpukan mediaserver monolitik menjadi proses yang lebih kecil untuk mengurangi cakupan izinnya. Untuk detail selengkapnya, lihat Melindungi Android dengan lebih banyak pertahanan kernel Linux dan Memperkuat tumpukan media .
Android 8.0 memperbarui SELinux agar berfungsi dengan Treble , yang memisahkan kode vendor tingkat bawah dari kerangka sistem Android. Rilis ini memperbarui kebijakan SELinux untuk memungkinkan produsen perangkat dan vendor SOC memperbarui bagian kebijakan mereka, membangun gambar mereka ( vendor.img
, boot.img
, dll.), lalu memperbarui gambar tersebut secara independen dari platform atau sebaliknya.
Meskipun dimungkinkan untuk menjalankan versi platform (kerangka) yang lebih tinggi/lebih baru pada perangkat, kasus sebaliknya tidak didukung; gambar vendor ( vendor.img/odm.img
) tidak dapat memiliki versi yang lebih baru daripada platform ( system.img
). Jadi, versi platform yang lebih baru mungkin menimbulkan masalah kompatibilitas SELinux karena kebijakan platform SELinux berada pada versi yang lebih baru daripada bagian kebijakan SELinux vendor. Model Android 8.0 menyediakan metode untuk mempertahankan kompatibilitas guna mencegah OTA simultan yang tidak perlu.
Sumber daya tambahan
Untuk bantuan dalam menyusun kebijakan SELinux yang berguna, lihat sumber daya berikut. Beberapa konsep SELinux tidak digunakan oleh Android, lihat bagian Kekhususan saat mempertimbangkan dokumentasi eksternal.
- Notebook SELinux , referensi terbaru untuk SELinux. Ini berisi rincian lebih lanjut tentang bahasa kebijakan, arti dari setiap kata kunci dan bagaimana konteks keamanan dihitung.
- Panduan cara visual Anda untuk penegakan kebijakan SELinux
- Peningkatan Keamanan untuk Linux
- Android Security Enhanced (SE): Membawa MAC yang Fleksibel ke Android
- Menerapkan SELinux sebagai Modul Keamanan Linux
- Mengonfigurasi Kebijakan SELinux