Studi kasus penggunaan seccomp di proyek sandboxing nyata: Chromium, gVisor, Firecracker, Landlock, dan QEMU. Membandingkan kapan memakai seccomp, sandbox penuh, atau virtual machine, serta merangkai lapisan keamanan yang saling melengkapi.

Di episode 18 kalian mengukur biaya seccomp dan menemukan bahwa untuk profile yang baik, overhead-nya nyaris tidak terlihat. Itulah alasan mengapa seccomp menjadi lapisan favorit di proyek sandboxing paling serius di dunia. Episode 19 ini adalah tur lapangan: kita membongkar bagaimana Chromium, gVisor, Firecracker, Landlock, dan QEMU memakai seccomp — lalu menutup dengan panduan praktis memilih antara seccomp, sandbox penuh, atau virtual machine.
Satu benang merah akan kalian lihat di semua kasus: tidak ada proyek yang mengandalkan seccomp sendirian. Seccomp selalu menjadi satu lapis di antara banyak lapis, dan kekuatan sebenarnya justru lahir dari kombinasi itu.
Chromium adalah contoh paling masif penggunaan seccomp-bpf di dunia nyata. Proses renderer — yang memproses HTML, JavaScript, dan konten web yang tidak tepercaya — dijalankan di dalam sandbox berlapis:
Gagasan desainnya jitu: setiap lapis menangkap apa yang mungkin lolos dari lapis lain. Seccomp di sini bekerja sebagai gerbang paling dalam — jika sebuah exploit berhasil, ia tetap berhadapan dengan dinding syscall yang hanya berisi segelintir pintu. Chromium memelihara daftar syscall yang diizinkan per platform dan terus memperbaruinya dari laporan crash dan bug — pola yang kelak kalian temui lagi di episode 20 sebagai policy-as-code.
gVisor, yang dijalankan melalui runtime OCI runsc, mengambil pendekatan yang berbeda. Aplikasi di dalamnya tidak memanggil kernel host sama sekali: setiap syscall diintersepsi dan diimplementasikan ulang oleh Sentry, sebuah "kernel" yang ditulis dalam Go dan berjalan di user space. Aplikasi mendapat ilusi kernel normal, tetapi permukaan serangan kernel host tidak pernah tersentuh.
Yang menarik untuk cerita kita: seccomp tetap ada, tetapi di lapisan berbeda. Sentry sendiri dibatasi oleh seccomp ke sejumlah kecil syscall host yang benar-benar dibutuhkannya. Dengan kata lain, seccomp mengurung kernel user-space itu sendiri — pertahanan terakhir jika ada bug di implementasi Sentry.
Kapan memakai gVisor? Ketika kode tidak tepercaya harus berjalan di mesin multi-tenant tanpa overhead virtual machine. Harganya adalah performa: untuk beberapa workload, overhead bisa mencapai 10–40 persen — trade-off yang wajar untuk isolasi sekuat ini.
Firecracker adalah virtual machine monitor (VMM) yang didesain untuk microVM tanpa memori dan tanpa beban startup yang besar. Setiap microVM memiliki proses VMM sendiri, dan proses itulah yang menjadi target seccomp.
Firecracker menerapkan filter seccomp yang sangat ketat: hanya beberapa lusin syscall host yang diizinkan, jauh lebih sedikit dari yang dibutuhkan sistem operasi normal. Tujuannya sederhana — jika terjadi bug di emulasi perangkat virtual, syscall berbahaya di host sudah terblokir lebih dulu. Firecracker juga menambahkan jailer yang mengunci direktori, user, dan cgroup, sehingga seccomp menjadi satu bagian dari "kotak di dalam kotak".
Landlock adalah Linux Security Module berbasis path yang tersedia sejak kernel 5.13. Ia membatasi akses filesystem — misalnya "proses ini hanya boleh membaca /var/www dan menulis /var/log/myapp" — tanpa membutuhkan root dan tanpa konfigurasi label yang rumit.
Bedanya dengan seccomp jelas: seccomp membatasi syscall, Landlock membatasi objek filesystem yang dapat dijangkau. Kombinasi keduanya sangat kuat: seccomp memblokir syscall berbahaya, Landlock mengunci area filesystem yang boleh diakses. Contoh kasus nyata: server web yang boleh membaca direktori tertentu saja, menulis ke log miliknya sendiri, dan tidak menyentuh apa pun di luar itu — semuanya tanpa menjalankan aplikasi sebagai root.
grep Seccomp /proc/<pid>/statusPerintah di atas — grep Seccomp /proc/<pid>/status' — adalah cara tercepat memastikan filter benar-benar terpasang pada proses produksi kalian.
QEMU juga menerapkan seccomp, tetapi untuk alasan yang sama seperti Firecracker: melindungi host dari proses VMM itu sendiri. Opsi -sandbox mengaktifkan filter yang membatasi syscall yang dapat dipanggil oleh proses QEMU:
qemu-system-x86_64 -sandbox on,obsolete=deny -m 1024 -hda disk.imgJika sebuah exploit di emulasi perangkat berhasil mengambil alih proses QEMU, ia hanya menemukan daftar syscall yang sangat pendek — bukan seluruh permukaan kernel host. Pendekatan yang sama, konteks yang berbeda: VMM sekecil Firecracker atau sebesar QEMU sama-sama menganggap seccomp sebagai biaya yang layak.
Seperti halnya memilih alat transportasi, pilihan sandbox tergantung pada apa yang diangkut dan seberapa berbahaya penumpangnya.
| Pendekatan | Overhead | Isolasi | Cocok untuk |
|---|---|---|---|
| Seccomp saja | Sangat rendah | Syscall | Hardening aplikasi tepercaya, daemon, container |
| Seccomp + Landlock/caps | Rendah | Syscall + filesystem | Aplikasi semi-tepercaya yang perlu dibatasi |
| gVisor (runsc) | Sedang | Kernel virtual user-space | Kode tidak tepercaya di multi-tenant |
| MicroVM (Firecracker) | Tinggi | Isolasi penuh per VM | Regulasi ketat, tenant yang harus terpisah keras |
Pedoman singkatnya:
Lapisan terbaik bukan salah satu mekanisme, melainkan semuanya secara berurutan:
kernel host
-> seccomp memblokir syscall berbahaya
-> capabilities memangkas hak root
-> Landlock/AppArmor mengunci akses filesystem
-> namespaces memisahkan resource
-> read-only filesystem menyulitkan persistensi
-> aplikasiSetiap lapis menangkap kesalahan yang mungkin dilewatkan lapis di bawahnya. Inilah inti defense in depth yang sudah kalian lihat sejak episode 12 tentang kombinasi seccomp dan capabilities — episode 19 memperluasnya ke seluruh ekosistem.
Important
Seccomp bukan pengganti virtual machine, dan virtual machine bukan alasan untuk menanggalkan seccomp. Semakin dalam isolasi yang dipilih, semakin penting setiap lapis tambahan yang murah dipasang. Dalam container, seccomp selalu bisa ditambahkan tanpa biaya berarti — lakukan, dan simpan virtual machine untuk isolasi yang memang membutuhkannya.
Pada episode 19 ini kalian melihat seccomp bekerja di medan perang yang sesungguhnya. Chromium menggunakannya sebagai gerbang terdalam piramida sandbox; gVisor mengurung kernel user-space miliknya sendiri; Firecracker membatasi VMM ke beberapa lusin syscall; Landlock melengkapinya di ranah filesystem; dan QEMU memakai pola yang sama untuk melindungi host.
Poin kunci yang perlu kalian bawa:
Di episode 20 berikutnya kita mengotomatiskan semuanya: seccomp sebagai policy-as-code, generator berbasis strace, validasi di CI, hingga rollout bertahap dari LOG ke ENFORCE. Sampai jumpa!