Sebagai bagian dari model keamanan Android, Android menggunakan Linux yang Ditingkatkan Keamanan (SELinux) untuk menerapkan kontrol akses wajib (MAC) atas semua proses, bahkan proses yang berjalan dengan hak istimewa root/pengguna super (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 dampak perangkat lunak berbahaya, dan melindungi pengguna dari potensi kelemahan kode pada 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 permisif , di mana penolakan izin dicatat tetapi tidak diterapkan.
- 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 lebih jelasnya, lihat Menerapkan SELinux .
SELinux juga mendukung mode permisif per-domain di mana domain (proses) tertentu dapat dibuat permisif sambil menempatkan seluruh sistem dalam mode penegakan global. Domain hanyalah sebuah label yang mengidentifikasi suatu proses atau serangkaian 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 penerapan SELinux secara bertahap ke bagian sistem yang terus meningkat dan pengembangan kebijakan untuk layanan baru (sambil menjaga sistem lainnya tetap diterapkan).
Latar belakang
Model keamanan Android sebagian didasarkan pada konsep kotak pasir aplikasi . Setiap aplikasi berjalan di kotak pasirnya sendiri. Sebelum Android 4.3, sandbox ini ditentukan oleh pembuatan UID Linux unik untuk setiap aplikasi pada saat instalasi. Android 4.3 dan yang lebih baru menggunakan SELinux untuk lebih menentukan batasan sandbox aplikasi Android.
Di Android 5.0 dan yang lebih baru, SELinux diterapkan sepenuhnya, berdasarkan rilis permisif Android 4.3 dan penegakan parsial Android 4.4. Dengan perubahan ini, Android beralih dari penerapan pada sekumpulan domain penting yang terbatas ( installd
, netd
, vold
, dan zygote
) menjadi semuanya (lebih dari 60 domain). Secara khusus:
- Semuanya dalam mode penegakan di Android 5.x dan lebih tinggi.
- Tidak ada proses selain
init
yang boleh 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 kebijakan kami yang permisif dengan menyertakan isolasi yang lebih baik antar pengguna, pemfilteran IOCTL, pengurangan ancaman terhadap layanan yang terekspos, pengetatan lebih lanjut terhadap domain SELinux, dan akses /proc
yang sangat terbatas.
Android 7.0 memperbarui konfigurasi SELinux untuk lebih mengunci sandbox aplikasi dan mengurangi permukaan serangan. Rilis ini juga memecah tumpukan server media 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 rendah dari kerangka sistem Android. Rilis ini memperbarui kebijakan SELinux untuk memungkinkan produsen perangkat dan vendor SOC memperbarui bagian kebijakan mereka, membuat image mereka ( vendor.img
, boot.img
, dll.), lalu memperbarui image 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 boleh memiliki versi yang lebih baru dari 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 vendor SELinux. Model Android 8.0 menyediakan metode untuk mempertahankan kompatibilitas guna mencegah OTA simultan yang tidak diperlukan.
Sumber daya tambahan
Untuk bantuan dalam menyusun kebijakan SELinux yang berguna, lihat sumber daya berikut.
- Notebook SELinux , referensi terkini untuk SELinux. Dokumen ini berisi rincian lebih lanjut mengenai bahasa kebijakan, arti setiap kata kunci, dan bagaimana konteks keamanan dihitung.
- Panduan visual Anda untuk penegakan kebijakan SELinux
- Peningkatan Keamanan untuk Linux
- Security Enhanced (SE) Android: Menghadirkan MAC Fleksibel ke Android
- Menerapkan SELinux sebagai Modul Keamanan Linux
- Mengonfigurasi Kebijakan SELinux