Linux yang Ditingkatkan Keamanan di Android

Sebagai bagian dari model keamanan Android , Android menggunakan Security-Enhanced Linux (SELinux) untuk memberlakukan 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 efek 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 dilarang dicegah dan semua percobaan 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 sistem lainnya dalam mode penegakan global. Domain hanyalah label yang mengidentifikasi proses atau rangkaian 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 yang terus meningkat dari pengembangan sistem dan kebijakan untuk layanan baru (sambil mempertahankan penegakan 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 dengan pembuatan UID Linux unik untuk setiap aplikasi pada saat penginstalan. Android 4.3 dan yang lebih baru menggunakan SELinux untuk menentukan lebih jauh batasan kotak pasir aplikasi Android.

Di Android 5.0 dan yang lebih baru, SELinux diterapkan sepenuhnya, dibuat berdasarkan rilis permisif Android 4.3 dan penerapan sebagian Android 4.4. Dengan perubahan ini, Android beralih dari pemberlakuan pada kumpulan terbatas domain penting ( installd , netd , vold dan zygote ) ke semuanya (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 domain init .
  • Penolakan generik 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, mengurangi ancaman layanan yang terekspos, pengetatan domain SELinux lebih lanjut, 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 ruang lingkup 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 terlepas dari platform atau sebaliknya.

Meskipun dimungkinkan untuk menjalankan versi platform (kerangka kerja) 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 SELinux vendor. Model Android 8.0 menyediakan metode untuk mempertahankan kompatibilitas untuk mencegah OTA simultan yang tidak perlu.

Sumber daya tambahan

Untuk membantu menyusun kebijakan SELinux yang berguna, lihat sumber daya berikut.