Versi stabil pertama sudo-rs, implementasi sudo yang aman terhadap memori, dirilis
(memorysafety.org)- sudo-rs, implementasi ulang sudo dalam Rust yang digunakan untuk berpindah melintasi batas hak istimewa, telah dirilis sebagai versi stabil pertamanya
- Perkiraan bahwa sekitar sepertiga bug keamanan pada sudo asli berasal dari masalah pengelolaan memori menjadi latar belakang utama penulisan ulang dalam Rust
- Dengan mengecualikan fitur yang jarang digunakan, sudo-rs mengurangi permukaan serangan, dan test suite-nya juga dimanfaatkan untuk menemukan bug pada sudo asli
- Wolfi Linux OS sudah menyertakan sudo-rs, dan Chainguard menilai perbaikan pada alat inti keamanan dapat berdampak ke seluruh industri
- Audit keamanan eksternal dijadwalkan dimulai pada September 2023, dan setelah itu pekerjaan akan berlanjut ke Milestone 4 yang berfokus pada fitur enterprise
sudo-rs yang diimplementasikan ulang dalam Rust
- Prossimo mengumumkan rilis stabil pertama sudo-rs
- sudo-rs adalah proyek implementasi ulang utilitas sudo dalam Rust, yang umum digunakan di Linux untuk melintasi batas hak istimewa antara akun pengguna dan akun administrator
- Proyek sudo-rs berfokus pada peningkatan keamanan dibandingkan sudo asli
- Menggunakan Rust untuk memastikan keamanan memori
- Titik awalnya adalah perkiraan bahwa sekitar sepertiga bug keamanan pada sudo asli berasal dari masalah pengelolaan memori
- Mengurangi permukaan serangan dengan mengecualikan fitur yang kurang umum digunakan
- Mengembangkan test suite yang luas, dan pengujian ini juga menemukan bug pada sudo asli
Status adopsi dan langkah berikutnya
- Wolfi Linux OS sudah menyertakan sudo-rs
- CEO sekaligus salah satu pendiri Chainguard, Dan Lorenc, menilai bahwa saat membangun Wolfi, keamanan memori adalah prioritas utama, dan perbaikan pada alat inti keamanan seperti sudo dapat memberi dampak besar pada seluruh industri
- sudo-rs dibangun oleh tim gabungan dari Tweede Golf dan Ferrous Systems melalui kontrak dengan Prossimo
- Proyek ini dimulai pada Desember 2022, dan audit keamanan eksternal terhadap kode sudo-rs dijadwalkan dimulai pada September 2023
- Setelah audit, tim akan beralih ke Milestone 4 dari rencana kerja, yang pada tahap ini berfokus pada fitur enterprise
- Utilitas sudo berbasis C yang asli telah lama dipelihara oleh Todd C. Miller, yang juga memberikan saran untuk implementasi sudo-rs
- NLnet Foundation menyediakan pendanaan untuk audit sudo-rs, dan Amazon Web Services mendukung pekerjaan ini serta transisi ke perangkat lunak yang aman terhadap memori
1 komentar
Komentar Hacker News
Sebagai salah satu pengembang asli sudo (https://en.wikipedia.org/wiki/Sudo), saya telah menyaksikan prosesnya selama 43 tahun terakhir, di mana ia hampir sepenuhnya ditulis ulang dan terus diperbaiki bug-nya
Mungkin ini adalah perintah UNIX yang paling banyak ditinjau dari sisi celah keamanan, dan kerentanan yang ditemukan sejauh ini telah diperbaiki
Saya ragu apakah satu tim pengembang dapat mengimplementasikan ulang sepenuhnya alat yang telah ditelaah oleh ribuan pengembang dan pakar keamanan tanpa menciptakan satu atau dua bug baru
Apakah ada sesuatu dari bahasa Rust yang secara ajaib menghilangkan seluruh kemungkinan masuknya bug?
Dari sudut pandang kami yang membuat sudo-rs, kami tidak pernah berniat meniadakan pekerjaan yang sudah ada, dan terutama pada tahap awal kami sangat sadar bahwa implementasi kami tidak akan bebas bug
Secara pribadi, dengan membuat versi Rust saya bisa menangani area yang biasanya sulit saya sentuh, karena saya tidak terlalu percaya diri bisa menulis kode C yang relatif aman
Setidaknya berkat pekerjaan ini, kami sudah menemukan beberapa bug di sudo yang ada, dan meskipun telah diperbaiki selama 43 tahun, selama lingkungan sekitarnya berubah, perangkat lunak seperti ini sulit menjadi benar-benar bebas bug
Selama kita saling bekerja sama dan belajar dari pekerjaan serta kesalahan masing-masing, memiliki sedikit alternatif bukanlah hal yang buruk
Saat melakukan RiiR, hal terbaik yang dapat dilakukan pengembang adalah mengikuti praktik terbaik dan belajar dari kesalahan masa lalu
Kita sudah sangat maju selama 43 tahun, dan hanya dengan meninggalkan penanganan string C saja, banyak bug bisa dihilangkan bahkan sebelum membahas keamanan memori
Siapa pun yang hari ini ingin membuat pengganti sudo yang aman bahkan dengan hanya memakai C bisa melakukannya jauh lebih baik daripada dulu, dan proyek OpenBSD menunjukkan hal itu dengan cukup baik
Jika banyak sisi tajam yang dihindari oleh kode OpenBSD dihilangkan pada level bahasa, titik awalnya tentu lebih menguntungkan, tetapi tetap dibutuhkan banyak kehati-hatian dan pengalaman, dan bahasa pemrograman tidak bisa menggantikannya
Setidaknya ini layak ditinjau secara serius, tetapi sepertinya belum seharusnya didistribusikan sebagai default untuk sementara waktu
Sekarang itu sudah masuk kurikulum sekolah menengah, dan jika lulus Anda bisa cukup mahir; dengan sedikit usaha tambahan Anda bahkan bisa menangani dengan sangat baik apa yang mereka capai sepanjang hidup mereka
Itu karena kita bisa berdiri di atas bahu para raksasa, serta memperoleh hindsight dan teknologi serta metode belajar yang lebih baik, sehingga tidak perlu mengulangi semua kesalahan mereka
Jika pengembang asli menulis ulang sudo dari nol sekarang dengan pengalaman dan pengetahuan yang dimilikinya saat ini, besar kemungkinan hasilnya akan lebih rapi, lebih sederhana, dan selesai dalam waktu jauh lebih singkat
Ini bukan meremehkan usaha dan pengalaman yang ada, melainkan bahwa mengubah pengalaman itu menjadi sesuatu yang lebih baik dalam waktu yang lebih singkat bukanlah hal yang mustahil
Namun saat mengganti sudo atau alat lain yang ditulis dalam C, kerentanan seperti null pointer atau penyalahgunaan buffer dengan mudah menyumbang 50% dari keseluruhan masalah
Menurut saya, dua hal yang dikedepankan proyek ini justru lebih sering diabaikan daripada penggunaan Rust itu sendiri
Yaitu mengurangi permukaan serangan dengan membuang fitur yang jarang dipakai, serta mengembangkan rangkaian pengujian yang luas yang bahkan berhasil menemukan bug di sudo yang sudah ada
Saat menulis kode yang penting bagi keamanan, hal-hal seperti ini lebih penting daripada sekadar menulis ulangnya dalam Rust
Membuktikannya dengan sistem manajemen pembuktian formal bernama Coq: https://coq.inria.fr/
Untuk contoh nyata bisa lihat https://aws.amazon.com/security/provable-security/, dan computer-aided verification (CAV) juga layak untuk ditinjau
Jika tujuan proyek ini adalah menggantikan sudo, agak mengkhawatirkan bila bagian “mengecualikan fitur yang jarang dipakai” dilewati begitu saja
Yang penting adalah fitur apa saja itu, seberapa jarang dipakai, dan bagaimana kegagalannya pada konfigurasi yang menggunakan fitur tersebut
Suntingan: tampaknya beberapa keterbatasan dirangkum di README GitHub, https://github.com/memorysafety/sudo-rs#differences-from-ori...
sudoeditatausudo -eIni sering dipakai saat mengedit file di /etc atau file yang tidak punya izin akses untuk pengguna saya; flag ini pertama-tama menyalin file ke lokasi sementara yang bisa diedit oleh pengguna saya, lalu menjalankan editor teks dengan hak akses pengguna saya, tanpa hak sudo
Editor ditentukan oleh variabel lingkungan
$SUDO_EDITOR, dan setelah ditutup file hanya akan disalin kembali dengan izin aslinya jika memang ada perubahanHal yang bagus adalah editor dijalankan sebagai pengguna saya, bukan sebagai root, jadi pengaturan dan plugin milik pengguna saya ikut dimuat
make me a sandwich(https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)Pada sudo biasa, hak sudo untuk seluruh jaringan bisa dikelola dari konfigurasi LDAP terpusat, dan aturan yang dibatasi berdasarkan waktu, host, pengguna, dan perintah juga bisa dibuat secara terpusat
Tanpa risiko satu kesalahan sintaks sederhana menghapus seluruh konfigurasi; dalam kasus ini, hanya aturan terkait saja yang akan diabaikan
Pasti juga ada dokumentasi teknis yang bagus, dan menurut saya rilis promosi seperti ini memang bukan tempat untuk mencari daftar fitur yang belum ada
Kalau melihat perbedaan antara
Apache-2.0+MITdanGPL-2.0, Anda memang bisa mendapatkan su/sudo-rs yang aman secara memori, tetapi pihak yang mendistribusikannya dalam bentuk biner tidak wajib membuka kode sumber yang dipakai untuk build, termasuk modifikasi yang mungkin adaSaya sangat khawatir tren mendorong keluar alat GPL dengan penulisan ulang Rust berlisensi MIT/Apache pada akhirnya akan mengarah ke Linux proprietari, tetapi sudo asli memang bukan GPL
Lisensinya bergaya ISC/MIT [1]
Karena alasan yang baru saja disebutkan di atas, dan saya menulis ini untuk menegaskan masalah itu
su tampaknya memang GPL
[0]: https://www.sudo.ws/about/license/
Kita bebas untuk tidak memakai distribusi seperti itu
Dari sisi keamanan, pelaku jahat juga bisa saja mendistribusikan biner sambil menunjukkan kode sumber yang berbeda
Itu tetap sama, baik dengan GPL maupun tanpa GPL
Di ranah sistem operasi mirip UNIX bebas dan open source untuk IoT, semua kandidat—termasuk ZephyrOS yang didukung Linux Foundation—mencampur lisensi Apache, MIT, dan BSD
Setelah generasi GPL menghilang, sistem operasi mirip UNIX dengan lisensi yang lebih menarik bagi perusahaan besar kemungkinan akan muncul tidak lama lagi sebagai alternatif pengelolaan lain untuk kernel Linux
Menarik juga melihat turunan Debian yang menggabungkan ini dengan implementasi GNU Coreutils dalam Rust
Bisa memberi keuntungan besar dalam keamanan memori dan performa
[1] https://github.com/uutils/coreutils
Setidaknya kita tidak perlu mengimplementasikan compiler C
Apakah ini cuma memoles sampah?
Reimplementasi yang lebih baik tentu bagus, tapi bukankah Anda terkejut saat membaca fitur-fitur aneh sudo?
Bahkan bagian yang tampak biasa pun sangat aneh dan subtil, sehingga sama rentannya
Orang yang memakai sudo secara “mendalam” sebaiknya mempertimbangkan apakah ada cara lain
Akan bagus jika ada flag atau alat validasi/pemeriksaan yang mencoba menjalankan konfigurasi sudo saat ini lalu menampilkan bagian mana yang tidak didukung oleh sudo-rs
Proyek seperti ini perlu punya pembantu portabilitas agar transisinya berjalan mulus
Kalau ingatan saya benar, semua kerentanan sudo belakangan ini adalah kesalahan logika, bukan masalah keamanan memori
Menulis ulang itu bagus, tetapi jangan berpura-pura bahwa bug baru tidak bisa masuk hanya karena ada salah paham tentang cara kerja sesuatu atau sekadar kesalahan biasa
2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
Saya memang banyak melihat klaim tentang keamanan memori, tetapi proyek ini tidak terlihat mengatakan bahwa jenis bug lain pasti sudah dihilangkan
Mengurangi permukaan serangan lewat pemeriksaan statis tampak seperti trade-off yang lebih baik dalam jangka panjang
doas adalah alat yang jauh lebih sederhana untuk melakukan hal yang sama
Saya tidak begitu paham mengapa alat ini tidak lebih banyak dipakai
doas berukuran 43184 byte, dan sudah melakukan semua yang saya butuhkan
eksploit sudo itu menjadi peringatan keras
kalau belum pindah, opendoas (paket Debian) cukup layak untuk dicoba
Tidak terlindungi dari serangan tty pushback: https://github.com/Duncaen/OpenDoas/issues/106
Ini masalah keamanan serius yang belum terselesaikan