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