8 poin oleh ahwjdekf 2025-03-16 | Belum ada komentar. | Bagikan ke WhatsApp

Apakah Rust benar-benar aman?

Apakah C++ benar-benar seburuk itu dalam hal keamanan?

Saya menemukan sebuah presentasi di YouTube dengan topik yang menarik, jadi saya membawanya ke sini.
Jika judulnya diterjemahkan, nuansanya kurang lebih seperti “mengatakan untuk memakai bahasa yang aman terhadap memori bukanlah persoalan sesederhana itu”.
Pembicaranya menyampaikan pandangannya dari posisi yang relatif adil dan tidak berat sebelah.

  • Rust mencegah eksekusi kode yang tidak aman terhadap memori melalui panic, tetapi "Rust yang tidak aman" dapat melewati perlindungan ini.
  • Namun, unsafe Rust memerlukan opt-in yang eksplisit, sehingga lebih menonjol dibandingkan C/C++ yang tidak aman. Bagian ini bisa ditinjau secara lebih terfokus.
  • Sekitar 30% crate Rust menggunakan kode tidak aman, dan pada sistem embedded angkanya dua kali lebih tinggi.
  • Sanitizer (alat analisis dinamis) dapat mendeteksi kesalahan memori baik pada kode Rust maupun C/C++.
  • 70% pengembang Rust memanggil kode tidak aman melalui FFI (foreign function interface / antarmuka fungsi eksternal) ke library C/C++.
  • Banyak library penting yang digunakan juga dalam proyek Rust ditulis dalam C/C++ (SQLite, library OPCUA).
  • Sanitizer dapat menganalisis kode Rust dan C/C++ pada lapisan LLVM IR jika source code tersedia.
  • Miri adalah alat pelengkap untuk mendeteksi undefined behavior Rust pada representasi tingkat menengah.
  • Kelebihan Miri: memberikan error yang jelas dan memeriksa semua undefined behavior sekaligus. Keterbatasan: tidak dapat menginterpretasikan kode C/C++.
  • Sekitar 20% fungsi dalam standard library Rust menggunakan kode tidak aman.
  • Infrastruktur penting membutuhkan bukan hanya kode yang aman terhadap memori, tetapi juga kode yang benar agar dapat mencegah kerusakan properti atau ancaman terhadap nyawa.
  • Bahkan program Rust yang aman pun bisa mengalami malfunction atau rentan terhadap serangan denial-of-service.
  • Property testing dapat membantu dengan menghasilkan input acak untuk menemukan edge case, tetapi kesulitan dengan error yang mustahil terjadi.
  • Kani adalah model checker yang menggunakan matematika untuk memverifikasi kebenaran program dalam batasan tertentu.
  • Kelebihan Kani: mengevaluasi semua input dalam batasan secara matematis. Keterbatasan: loop harus di-unroll dan tidak mendukung konkurensi maupun FFI C/C++.
  • Kesimpulan tentang Rust: Rust memang aman, tetapi tidak seaman yang mungkin dibayangkan.
  • Bjarne Stroustrup membedakan C dan C++, serta menyebut bahwa C++ dirancang untuk kode yang lebih aman.
  • C++ Core Guidelines menyediakan profil untuk type safety, bounds safety, dan lifetime safety sehingga mendekati jaminan yang diberikan Rust.
  • Masalah terbesar C++ adalah bahwa secara bawaan terlalu mudah menulis kode yang tidak aman. Bukan berarti para pengembang tidak berusaha.

Belum ada komentar.

Belum ada komentar.