TL; DR: Jangan ragu untuk langsung menuju ke kesimpulan di bagian bawah jika Anda suka :)!
Tujuan SELinux adalah untuk mencegah peningkatan hak istimewa dengan memberlakukan kebijakan wajib yang membatasi tindakan yang mungkin dari pengguna yang tidak memiliki hak istimewa dan yang istimewa.
Istilah "pengguna" di sini juga mencakup setiap proses yang berjalan pada perangkat, tidak peduli apakah itu terkait langsung dengan tindakan pengguna fisik (manusia, Anda;)), karena setiap proses berjalan menggunakan beberapa akun "pengguna" sistem.
Secara historis, izin pada sistem berbasis Unix ditangani menggunakan apa yang disebut sistem Discretionary Access Control (DAC). Dalam model ini:
- Sumber daya seperti file memiliki pemilik yang dapat menentukan hak akses pada sumber daya yang mereka miliki: ini memungkinkan mereka untuk memutuskan apakah sumber daya tertentu harus pribadi (hanya pemilik yang dapat mengaksesnya) atau jika harus dibagikan dengan beberapa pengguna lain.
- Selain itu, Anda memiliki pengguna super (dipanggil
root
pada sistem berbasis Unix) yang merupakan pengguna administratif dan memiliki akses ke semua yang ada di sistem. Akun ini dapat digunakan secara interaktif oleh manusia (biasanya administrator sistem) untuk memelihara atau memperbaiki perangkat, tetapi biasanya akun ini sebagian besar akan digunakan oleh layanan latar belakang atau tingkat rendah yang memerlukan tingkat hak istimewa: driver perangkat, layanan konfigurasi jaringan, layanan perlu mengakses file dari setiap pengguna atau menangani komunikasi internal antar pengguna.
Ini sangat bagus dan sudah memberikan keamanan yang baik. Namun, bagaimana dengan keadaan seperti ini:
- Apa yang akan terjadi jika bug dalam layanan berjalan seperti
root
yang ditemukan yang akan memungkinkan penyerang menipu layanan tersebut untuk menjalankan beberapa kode arbitrer? Penyerang seperti itu akan mendapatkan akses lengkap ke perangkat. Untuk memberikan beberapa contoh nyata, bug tersebut dapat dipicu dengan mengirimkan informasi konfigurasi jaringan yang dibuat khusus ( DHCP ) atau MMS ke telepon.
- Apa yang akan terjadi jika beberapa pengguna tidak melindungi sumber daya pribadi dengan benar? Kemudian sumber daya ini dapat diakses dengan jahat (baca, bahkan mungkin dimodifikasi atau dihapus) oleh pengguna yang tidak memiliki hak pribadi lainnya. Ini biasanya apa yang Anda miliki ketika aplikasi jahat sedang berjalan di ponsel Anda (tidak peduli apakah Anda telah tertipu untuk menginstalnya, atau jika datang sendiri ke sini dengan menggunakan bug di aplikasi lain yang tidak memiliki privasi, browser atau klien email untuk contoh), dan aplikasi jahat ini mencoba untuk secara langsung mengakses data aplikasi atau lokasi penyimpanan lainnya (dapat melakukannya untuk mengakses data yang biasanya tidak dapat dijangkau atau menginstal sendiri di beberapa tempat untuk membuat penghapusannya lebih sulit).
Di sinilah SELinux.
SELinux adalah sistem Kontrol Akses Wajib (MAC). Sementara dalam sistem DAC yang dijelaskan sebelumnya, pengguna bertanggung jawab untuk menetapkan hak yang sesuai pada sumber daya mereka sendiri, dengan sistem MAC kebijakan seluruh sistem (disediakan dengan sistem operasi) diberlakukan baik untuk pengguna yang memiliki hak istimewa maupun yang tidak terjangkau.
Ini menyelesaikan dua masalah yang disebutkan di atas dengan cara berikut:
- Seperti yang saya katakan, kebijakan ini juga berlaku untuk pengguna istimewa. Ini berarti bahwa, dengan kebijakan yang dirancang dengan benar, layanan yang dirancang untuk menangani konfigurasi jaringan perangkat tidak akan dapat melakukan hal lain: ia tidak akan memiliki akses ke SMS misalnya, dan layanan yang menangani SMS tidak akan memiliki akses ke konfigurasi jaringan , dan tidak satu pun dari mereka akan memiliki akses ke data pengguna, terlepas dari kenyataan bahwa keduanya berjalan menggunakan akun pengguna super.
- Android baru-baru ini menyertakan fitur multi-pengguna yang diberlakukan oleh SELinux, mencegah pengguna mengakses data pengguna lain. Tetapi di luar itu, kebijakan SELinux juga bertanggung jawab dari menggambarkan perilaku aplikasi yang diizinkan, dan kemungkinan besar bahkan jika beberapa sumber daya tidak terlindungi dengan baik menggunakan sistem DAC SELinux akan datang pada penyelamatan dan masih mencegah aplikasi jahat mengakses langsung mereka.
Sistem DAC dan MAC tidak saling eksklusif, sebaliknya sistem MAC (SELinux) bertindak sebagai lapisan pertahanan kedua di belakang sistem DAC (izin tradisional seperti Unix). Tugas SELinux adalah memblokir aktivitas yang bertentangan dengan kebijakan yang, jika hanya diberikan sistem DAC, akan diterima.
Yang rumit adalah bahwa kebijakan semacam itu bisa sangat rumit untuk ditulis: kebijakan itu memang harus mencakup komponen setiap perangkat untuk setiap kemungkinan penggunaan dalam setiap situasi. Faktanya, tidak masalah jika beberapa tindakan mungkin sah dalam situasi Anda: jika tidak ada dalam kebijakan, itu dilarang . Karena itu, kebijakan yang dirancang dengan buruk dapat memiliki konsekuensi acak, seperti kerusakan aplikasi, fungsi yang tidak dapat digunakan, dan sebagainya.
Karena itulah versi pertama pengiriman Android SELinux memasukkannya dalam mode "Permissive" secara default. Dalam mode ini, SELinux akan mencatat pelanggaran kebijakan, tetapi tidak akan mencoba untuk memblokir aktivitas terkait. Dengan menganalisis file log yang dihasilkan, menjadi mungkin untuk memperbaiki dan meningkatkan kebijakan hingga titik ketika satu-satunya pelanggaran kebijakan yang tersisa memang perilaku berbahaya atau tidak diinginkan. Pada titik ini, SELinux dapat diubah menjadi mode "Penegakan": sekarang tidak hanya login tetapi juga memblokir setiap tindakan yang menyinggung.
Kesimpulan
SELinux adalah teknik mitigasi. Ini tidak mencegah penyerang masuk ke ponsel Anda, tetapi memastikan bahwa begitu mereka dapat melakukan sesedikit mungkin hal, idealnya tidak ada yang berguna sehingga menghilangkan minat untuk menyerang ponsel.
Semakin tua ROM, semakin besar jumlah bug keamanan yang akan membuka akses tersebut. SELinux akan menjadi cara yang efisien untuk menjaga keamanan minimum terlepas dari kerentanan yang diketahui ini, namun untuk berfungsi dengan baik SELinux bergantung pada kebijakan yang kompleks.
Jika ROM Anda dilengkapi dengan SELinux dalam mode "Permissive" secara default, ini kemungkinan berarti bahwa kebijakan yang dikandungnya tidak cukup andal untuk beralih ke mode "Penegakan" dengan aman.
Jika Anda cukup pintar dan memiliki akses ke log telepon ( dmesg
setidaknya, tetapi biasanya juga disalin ke logcat
: ada aplikasi yang memungkinkan untuk melihat yang terakhir tetapi tergantung pada versi Android Anda, mereka mungkin memerlukan akses root), Anda dapat memeriksa apakah Anda menemukan entri "avc": ini adalah pesan yang memberitahu Anda bahwa SELinux baru saja mendeteksi tindakan yang bertentangan dengan kebijakan.
Berikut adalah contoh entri yang diambil dari situs web CyanogenMod :
type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace"
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t
tcontext=system_u:object_r:sysfs_t tclass=file
Jika tidak ada, hanya beberapa dari mereka atau karena alasan apa pun yang menurut Anda tidak membuat Anda tidak dapat menggunakan telepon, Anda dapat mencoba mengalihkan SELinux ke mode "Penegakan". Dalam ROM CyanogenMod yang lama, ini mudah dan mungkin hanya menggunakan opsi tersembunyi di GUI (tidak perlu me-root ponsel atau menginstal aplikasi tertentu), saya tidak tahu apakah ROM lain menawarkan fitur yang sama tetapi karena Anda menggunakan CyanogenMod tag saya kira Anda mungkin beruntung;).
setenforce 1
dari emulator terminal (sebagai root)?