Linux yang Ditingkatkan Keamanan di Android

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 domain init .
  • 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.