1 poin oleh GN⁺ 2025-12-14 | Belum ada komentar. | Bagikan ke WhatsApp
  • Keamanan memori dan sandboxing adalah konsep keamanan yang saling independen, dan keduanya harus dimiliki untuk membentuk sistem pertahanan yang kuat
  • Fil-C adalah implementasi aman memori untuk C/C++, yang menjamin keamanan hingga tingkat system call Linux dan dapat digunakan bahkan pada komponen sistem seperti OpenSSH
  • Dalam proses mem-porting sandbox berbasis seccomp-BPF milik OpenSSH ke Fil-C, pembatasan pembuatan thread dan penyesuaian filter seccomp menjadi tantangan utama
  • Untuk pengelolaan thread latar belakang pada runtime Fil-C, ditambahkan API zlock_runtime_threads() untuk mengendalikan perilaku thread di dalam sandbox
  • Fil-C mengimplementasikan sinkronisasi penerapan pemanggilan prctl ke semua thread runtime, agar no_new_privs dan filter seccomp diterapkan secara konsisten ke seluruh proses

Hubungan antara keamanan memori dan sandboxing

  • Keamanan memori dan sandboxing adalah dua lapisan keamanan yang berbeda; hanya memiliki salah satunya tidak memberikan perlindungan yang lengkap
    • Contoh aman memori tetapi tidak di-sandbox: program Java yang dapat menimpa file melalui input pengguna
    • Contoh di-sandbox tetapi tidak aman memori: program dengan hak terbatas yang ditulis dalam assembly
  • Sandbox nyata juga memiliki celah struktural, seperti mengizinkan komunikasi dengan proses broker
  • Karena itu, menggabungkan keamanan memori dan sandboxing adalah pendekatan pertahanan terbaik

Menggabungkan Fil-C dan sandbox OpenSSH

  • Fil-C adalah implementasi aman memori untuk C/C++, yang mempertahankan keamanan pada tingkat system call Linux
    • Runtime Fil-C dapat berjalan bahkan pada komponen sistem level rendah seperti init dan udevd
    • OpenSSH berjalan normal di atas Fil-C dan memanfaatkan sandbox seccomp-BPF
  • Di Linux, OpenSSH membangun sandbox dengan alat berikut
    • chroot untuk membatasi akses filesystem
    • Menjalankan proses sebagai pengguna/grup sshd
    • setrlimit untuk membatasi pembukaan file dan pembuatan proses
    • Filter seccomp-BPF untuk hanya mengizinkan system call yang diperbolehkan
  • Fil-C pada dasarnya mendukung chroot dan pergantian pengguna, tetapi setrlimit dan seccomp-BPF dapat berbenturan dengan perilaku runtime sehingga memerlukan penyesuaian tambahan

Kontrol thread pada runtime Fil-C

  • Runtime Fil-C menggunakan thread latar belakang untuk garbage collection, dan akan menghentikan serta memulainya kembali secara otomatis bila diperlukan
  • Sandbox setrlimit milik OpenSSH bertujuan melarang pembuatan proses baru, sehingga pembuatan thread oleh runtime dapat melanggar tujuan tersebut
  • Untuk mengatasinya, API zlock_runtime_threads() ditambahkan ke <stdfil.h>
    • Runtime segera membuat thread yang dibutuhkan, lalu menonaktifkan penghentian otomatis setelahnya
    • Dipanggil di fungsi ssh_sandbox_child milik OpenSSH sebelum pemanggilan setrlimit atau seccomp-BPF

Penyesuaian filter seccomp OpenSSH

  • Setelah zlock_runtime_threads() diterapkan, sebagian besar fitur sandbox tetap bekerja seperti semula
  • Perubahan berikut dilakukan pada filter seccomp
    • Saat terjadi pelanggaran, diatur ke SECCOMP_RET_KILL_PROCESS agar thread latar belakang Fil-C juga ikut dihentikan
    • MAP_NORESERVE ditambahkan ke daftar yang diizinkan untuk mendukung allocator memori Fil-C
    • Pemanggilan sched_yield diizinkan karena digunakan dalam implementasi lock milik Fil-C
  • Pemanggilan futex untuk sinkronisasi di Fil-C sudah diizinkan, sehingga tidak memerlukan perubahan tambahan

Cara kerja implementasi prctl di Fil-C

  • Saat memasang filter seccomp, OpenSSH menggunakan dua pemanggilan prctl
    • PR_SET_NO_NEW_PRIVS untuk mencegah perolehan hak tambahan
    • PR_SET_SECCOMP, SECCOMP_MODE_FILTER untuk mengaktifkan filter
  • Masalahnya, prctl hanya berlaku pada thread yang memanggilnya, sehingga ada risiko thread runtime Fil-C lainnya tetap tanpa filter
  • Untuk mencegah hal ini, Fil-C menggunakan API filc_runtime_threads_handshake() agar penerapan dilakukan secara tersinkron ke semua thread runtime
    • Menjamin setiap thread melakukan pemanggilan prctl yang sama
    • Jika ada beberapa thread pengguna, Fil-C memunculkan error keamanan Fil-C untuk memperkuat perlindungan

Kesimpulan

  • Menggabungkan keamanan memori dan sandboxing adalah kombinasi keamanan yang paling kuat
  • Fil-C mengintegrasikan sepenuhnya sandbox berbasis seccomp milik OpenSSH sambil tetap menjaga keamanan memori tanpa menurunkan tingkat perlindungan
  • Dengan memanfaatkan Fil-C di lingkungan Linux, keamanan tingkat sistem dan keamanan tingkat bahasa dapat diperoleh secara bersamaan

Belum ada komentar.

Belum ada komentar.