1 poin oleh GN⁺ 2023-11-07 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2023-11-07
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?

    • Saya hanya bisa berterima kasih atas pekerjaan yang menciptakan sudo, dan menurut saya itu benar-benar alat yang sangat berharga dalam penggunaan sehari-hari banyak orang
      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
    • Apa pun yang terjadi selama 43 tahun terakhir, pada 2021 ada kerentanan korupsi memori bernama Baron Samedit yang dapat dieksploitasi secara luas
    • Sistem tipe tingkat lanjut, borrow checker, dan bahasa yang aman terhadap memori memang sangat membantu, tetapi tentu saja tidak menghilangkan semua bug
      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
    • Saya tidak bermaksud meremehkan pengalaman, dan saya juga memperkirakan proyek ini pasti akan menemukan kembali berbagai penderitaan lama, tetapi penting juga untuk diingat bahwa untuk benar-benar memahami fisika klasik kita tidak perlu mengulang begitu saja kerja seumur hidup Newton, Leibniz, dan Maxwell
      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
    • Untuk keamanan memori, memang begitu; bahasa yang secara default lebih aman jelas jauh lebih baik, tetapi untuk bug logika tidak membantu sama sekali
      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

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

    • Salah satu fitur yang belum ada adalah sudoedit atau sudo -e
      Ini 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 perubahan
      Hal yang bagus adalah editor dijalankan sebagai pengguna saya, bukan sebagai root, jadi pengaturan dan plugin milik pengguna saya ikut dimuat
    • Salah satu fitur yang tidak disebut sebagai hilang adalah kemampuan untuk menjalankan make me a sandwich (https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)
    • Salah satu fitur untuk lingkungan yang lebih besar, yang juga tidak ada di roadmap sudo-rs dan belum diimplementasikan, adalah dukungan LDAP
      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
    • Saya juga pernah melewati proses migrasi ke systemd, jadi administrator sistem seharusnya bisa mengelola hal seperti ini
      Pasti juga ada dokumentasi teknis yang bagus, dan menurut saya rilis promosi seperti ini memang bukan tempat untuk mencari daftar fitur yang belum ada
    • Fakta bahwa salah satu alat UNIX paling dasar punya terlalu banyak fitur itu sendiri adalah sinyal bahaya yang jauh lebih besar
  • Kalau melihat perbedaan antara Apache-2.0+MIT dan GPL-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 ada

    • Saya juga ingin menulis komentar ini
      Saya 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]
      1. https://www.sudo.ws/about/license/
    • Menjauh dari GPL pada komponen inti seperti ini adalah ide yang sangat buruk
      Karena alasan yang baru saja disebutkan di atas, dan saya menulis ini untuk menegaskan masalah itu
    • Sudo bukan GPL, melainkan lisensi yang sangat permisif dari keluarga ISC[0]
      su tampaknya memang GPL
      [0]: https://www.sudo.ws/about/license/
    • Apakah itu benar-benar buruk?
      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
    • Entah baik atau buruk, penggunaan GPL sedang menurun, dan masa depan kernel Linux juga tidak terjamin
      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

    • Saya penasaran berapa lama lagi sampai kita punya ruang pengguna UNIX berbasis Rust
      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

    • 2021: https://nvd.nist.gov/vuln/detail/CVE-2021-3156
      2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
    • Siapa yang berpura-pura begitu?
      Saya memang banyak melihat klaim tentang keamanan memori, tetapi proyek ini tidak terlihat mengatakan bahwa jenis bug lain pasti sudah dihilangkan
    • Dengan cara yang sama, bug memori baru juga bisa masuk ke sudo lama
      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