Google sedang mengembangkan bagian Android di Rust untuk meningkatkan keamanan

Google sedang menulis dan menulis ulang bagian Android di Rust untuk meningkatkan keamanan OS secara keseluruhan, vs C dan C++. Baca terus untuk mengetahui lebih lanjut!

Android sebagai solusi OS lengkap melibatkan banyak bagian yang bergerak. Secara umum, bagian-bagian ini adalah ekosistem aplikasi dan OS itu sendiri. Sebagai pengembang, bahasa pemrograman pilihan Anda bervariasi tergantung pada bagian Android mana yang sedang Anda kerjakan. Bagi pengembang aplikasi, Java dan Kotlin adalah pilihan yang populer. Untuk pengembang yang mengerjakan OS dan level yang lebih rendah di dalamnya, C dan C++ telah menjadi pilihan populer sejauh ini. Saat ini, Google menambahkan opsi ketiga untuk pengembang OS, karena Proyek Sumber Terbuka Android sekarang mendukung bahasa pemrograman Rust untuk mengembangkan OS itu sendiri.

Keterbatasan C dan C++

OS Android tingkat bawah memerlukan bahasa pemrograman sistem seperti C dan C++. Bahasa-bahasa ini memberi pengembang kendali dan prediktabilitas, yang penting ketika mengakses sumber daya sistem dan perangkat keras tingkat rendah.

Sayangnya, C dan C++ gagal memberikan jaminan keamanan memori, sehingga rentan terhadap bug dan kerentanan keamanan. Pengembang bertanggung jawab untuk mengelola masa pakai memori pada bahasa-bahasa ini, tetapi dalam basis kode yang kompleks dan multi-utas, hal ini lebih mudah diucapkan daripada dilakukan.

C dan C++ bersama-sama membentuk puluhan juta baris kode di platform Android. Bug keamanan memori ini menjadi sumber kesalahan kode yang paling sulit diatasi, mewakili ~70% kerentanan keamanan Android dengan tingkat keparahan tinggi. Memperbaiki bug ini saja tidak cukup untuk mengatasi masalah ini, dan pendekatan yang lebih baik adalah dengan mencegahnya sejak awal.

Kurangnya jaminan keamanan memori memaksa pengembang untuk menjalankan proses Android dalam sandbox yang sangat terbatas dan tidak memiliki hak istimewa. Namun sandbox membutuhkan sumber daya yang mahal, menghabiskan overhead tambahan, dan menimbulkan latensi. Sandboxing juga tidak sepenuhnya menghilangkan kerentanan kode, dan efektivitasnya berkurang karena kepadatan bug yang tinggi, sehingga memungkinkan penyerang untuk merantai beberapa kerentanan.

Keterbatasan lainnya, meskipun tidak hanya terjadi pada C dan C++ namun berlaku untuk semua masalah keamanan memori, adalah bahwa status kesalahan harus benar-benar dipicu dalam kode yang diinstrumentasi agar dapat dideteksi. Jadi meskipun kode Anda memiliki pengujian yang sangat baik, bug sebenarnya mungkin tetap tidak terdeteksi. Dan ketika bug ditemukan, memperbaikinya adalah tugas lain yang memerlukan proses panjang dan mahal yang mungkin tidak selalu menghasilkan perbaikan yang benar. Oleh karena itu, deteksi bug menjadi tidak dapat diandalkan, dan pencegahan bug adalah pendekatan yang lebih baik mengingat keterbatasan ini.

Di sinilah peralihan ke bahasa yang aman untuk memori seperti Rust muncul.

Karat dan manfaatnya

Rust memberikan jaminan keamanan memori dengan menggunakan kombinasi pemeriksaan waktu kompilasi untuk menegakkan masa pakai/kepemilikan objek, dan pemeriksaan waktu proses untuk memastikan bahwa akses memori valid. Keamanan ini dicapai sambil memberikan kinerja yang setara dengan C dan C++. Rust juga mengurangi kebutuhan akan sandboxing, sehingga memberi pengembang lebih banyak ruang untuk memperkenalkan fitur-fitur baru yang lebih aman dan hemat sumber daya.

Meskipun Rust memang memiliki manfaatnya, tidak mungkin untuk mengalihkan seluruh OS Android ke Rust dalam semalam. Dan hal itu mungkin tidak diperlukan, karena sebagian besar bug memori Android terjadi pada kode baru atau yang baru saja dimodifikasi, dengan sekitar 50% berusia kurang dari satu tahun. Google percaya bahwa upaya bahasa yang aman untuk memori sebaiknya difokuskan pada pengembangan baru daripada menulis ulang kode C dan C++ yang sudah matang.

Rust juga berfokus pada pencegahan bug daripada mengandalkan deteksi bug, sehingga menghasilkan peningkatan kebenaran kode. Ini memiliki beberapa fitur utama, seperti keamanan memori, konkurensi data, sistem tipe yang lebih ekspresif, dan tidak dapat diubah referensi dan variabel secara default, penanganan bilangan bulat yang lebih aman, penanganan kesalahan yang lebih baik di perpustakaan standar, dan banyak lagi lagi.

Apa arti peralihan ke Rust untuk Android?

Google mengatakan telah menambahkan dukungan Rust ke Proyek Open Source Android selama 18 bulan terakhir. Namun menambahkan bahasa baru ke platform Android merupakan upaya yang sangat besar. Beberapa rantai alat dan ketergantungan perlu dipelihara, infrastruktur pengujian dan alat harus diperbarui, dan pengembang perlu dilatih.

Google memiliki beberapa proyek pengguna awal yang akan mereka bagikan dalam beberapa bulan mendatang. Namun demikian, telah dijelaskan bahwa penskalaan dukungan Rust ke lebih banyak OS adalah proyek multi-tahun.

Dari apa yang kami lihat, Google sudah menggunakan Rust di beberapa tempat. Tumpukan Bluetooth baru Android menulis ulang dengan nama kode "Gabeldorsche" sedang ditulis dalam Rust. Pekerjaan dimulai pada Gabeldorsche sekitar waktu Android 11 tetapi masih belum digunakan. Android Penyimpanan Kunci 2.0 modul ditulis dalam Rust, begitu pula bagian userspace dari binder, driver IPC Android. Meskipun tidak terkait dengan Android, fuchsiabaru netstack juga sedang ditulis dalam Rust.

Bagi pengembang aplikasi, peralihan ini tidak mengubah cara Anda, sebagai pengembang aplikasi, menulis aplikasi atau cara kerja API kerangka kerja. Peralihan ini hanya memengaruhi cara penulisan OS. Menurut anggota tim Hubungan Pengembang Android, Google juga tidak berencana merilis Rust NDK saat ini. Bahasa yang didukung untuk pengembangan aplikasi akan tetap Kotlin, Java, C, dan C++.