Sebelum menulis filter seccomp pertama, ada beberapa skill dan tools yang wajib kalian siapkan, mulai dari pemahaman syscall lewat strace, konsep dasar BPF, hingga instalasi libseccomp, seccomp-tools, strace, dan bpftool di atas kernel Linux 5.15 atau lebih baru.

Selamat datang di series Belajar Seccomp! Series ini akan mengajak kalian menguasai seccomp — mekanisme Linux kernel untuk menyaring system call — dari nol hingga level siap produksi: mulai dari sejarah dan arsitektur, modes & return actions, API libseccomp, profile container Docker/runc, integrasi systemd dan Kubernetes, hingga desain filter yang aman untuk aplikasi production.
Seccomp adalah salah satu mekanisme sandboxing paling penting di Linux modern. Ia dipakai oleh Docker, Kubernetes, Chromium, systemd, dan hampir semua runtime container untuk membatasi syscall yang boleh dipanggil sebuah proses. Tapi sebelum masuk ke semua itu, kalian butuh fondasi: kemampuan membaca kode, memahami syscall, dan environment Linux yang siap uji. Episode 0 ini adalah peta jalan untuk memastikan kalian semua siap.
Mengapa prasyarat ini begitu penting? Seccomp bekerja di level kernel dan berkomunikasi lewat syscall. Berbeda dengan belajar web framework yang cukup menguasai bahasa pemrograman, seccomp menuntut kalian memahami apa yang terjadi "di bawah" aplikasi: bagaimana program berinteraksi dengan kernel. Tanpa fondasi ini, kalian akan membaca dokumentasi libseccomp tanpa mengerti apa yang sebenarnya terjadi — seperti mencoba mengemudikan pesawat tanpa memahami cara kerja mesinnya.
Empat skill ini akan kalian pakai di setiap episode. Siapkan sejak sekarang agar perjalanan belajar kalian mulus.
Seccomp adalah teknologi kernel yang dioperasikan lewat terminal. Kalian harus nyaman berpindah direktori, membuat file konfigurasi, menjalankan perintah dengan sudo, dan membaca output log. Bukan perlu jadi sysadmin pro — cukup lancar dengan perintah dasar berikut:
pwd # cetak direktori kerja saat ini
mkdir -p ~/lab-seccomp # buat direktori lab
cd ~/lab-seccomp # pindah ke direktori lab
ls -la # lihat isi direktori (termasuk hidden file)Sepanjang series ini, hampir semua eksperimen dijalankan lewat gcc, strace, bpftool, dan binary hasil kompilasi. Jika kalian masih sering kebingungan dengan output error di terminal, luangkan waktu berlatih dulu — karena error debugging seccomp hampir selalu muncul di terminal.
Ini skill paling inti. Seccomp menyaring system call — jadi kalian harus paham apa itu syscall. Secara sederhana: aplikasi yang berjalan di user mode tidak bisa menyentuh hardware atau memori kernel secara langsung. Setiap kali butuh layanan kernel — membaca file, membuka socket, membuat proses baru — aplikasi memanggil syscall. Contoh: read, write, openat, execve, socket, clone.
Cara tercepat membangun intuisi ini adalah dengan strace, tool yang merekam semua syscall yang dipanggil sebuah program:
strace -c /bin/echo "halo dunia"
# Contoh ringkas hasilnya
% time seconds usecs/call calls syscall
------ ----------- ----------- ------- ----------------
0.00 0.000000 0 12 write
0.00 0.000000 0 1 execve
0.00 0.000000 0 2 mmap
0.00 0.000000 0 1 exit_groupLihat? Program sekecil echo saja memanggil belasan syscall. Sekarang bayangkan seberapa banyak syscall yang dipanggil program kompleks seperti web server atau database — dan setiap syscall itu adalah pintu masuk potensial bagi attacker. Inilah alasan utama seccomp ada, dan kita akan bedah tuntas di episode 1.
Seccomp modern (seccomp-bpf) mengekspresikan aturannya sebagai program BPF — Berkeley Packet Filter, bahasa bytecode kecil yang awalnya dirancang untuk menyaring paket jaringan. Filter seccomp adalah daftar instruksi BPF yang dijalankan kernel setiap kali proses memanggil syscall, dan kernel mengeksekusi instruksi tersebut secara berurutan hingga mencapai sebuah return action.
Kalian tidak perlu bisa menulis BPF dengan tangan — libseccomp akan menyusunnya otomatis dari aturan deklaratif. Tapi memahami konsep "instruksi berurutan yang dievaluasi per syscall" akan sangat membantu saat kita men-disassemble filter dan melakukan debugging di episode-episode berikutnya.
Sebagian besar contoh di series ini memakai API libseccomp dalam bahasa C karena itulah bahasa yang didukung penuh oleh library-nya. Kalian tidak harus jadi expert C, tapi wajib bisa membaca dan meng-compile program C sederhana. Jika environment kalian belum punya compiler, install dulu:
sudo apt install -y gcc make
gcc --version
gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0Alternatifnya, kalian bisa bereksperimen cepat dengan Python menggunakan ctypes untuk memanggil fungsi libseccomp — cocok untuk membuat prototype filter tanpa repot kompilasi. Tapi untuk mengikuti series ini secara penuh, siapkan C compiler sejak sekarang.
Tip
Jangan takut dengan C. Contoh kode di series ini selalu disertai penjelasan baris per baris. Yang penting kalian bisa mengenali sintaks dasar seperti #include, int main(void), dan pemanggilan fungsi. Kemampuan itu saja sudah cukup untuk sebagian besar episode.
Seccomp-bpf sudah ada sejak kernel 3.5 (2012), tapi fitur-fitur penting — seperti SECCOMP_RET_NOTIFY (kernel 5.0), dukungan multi-ABI yang lebih rapi, dan perbaikan performa — baru matang di kernel modern. Kami rekomendasikan kernel 5.15 atau lebih baru karena:
SECCOMP_RET_NOTIFY.Verifikasi versi kernel kalian:
uname -r
6.8.0-45-genericJika kernel kalian lebih tua dari 5.15, pertimbangkan upgrade distro atau gunakan VM dengan distro terbaru (Ubuntu 22.04+, Debian 12+, Fedora 38+).
| Tool | Fungsi | Keterangan |
|---|---|---|
libseccomp | Pustaka C untuk membangun dan memuat filter seccomp | Paket dev wajib: libseccomp-dev / libseccomp-devel |
seccomp-tools | Alat bantu analisis BPF filter (disassemble, dump) | Ruby gem oleh David942j |
strace | Merekam syscall yang dipanggil proses | Sudah kita pakai di atas |
bpftool | Inspeksi BPF programs dan maps di kernel | Membantu memverifikasi filter yang terpasang |
sudo apt update
sudo apt install -y libseccomp-dev strace bpftoolUntuk seccomp-tools, install via Ruby gem karena tidak tersedia di repo apt. Pastikan Ruby sudah terpasang di sistem:
sudo gem install seccomp-toolssudo dnf install -y libseccomp-devel strace bpftool
sudo gem install seccomp-toolsSetelah semua terpasang, pastikan semuanya bekerja dengan benar:
gcc --version
pkg-config --modversion libseccomp
2.6.1seccomp-tools version
SeccompTools Version: v1.7.0Note
Keluaran pkg-config --modversion libseccomp menunjukkan versi library yang terpasang. Saat ini versi stable berada di jalur 2.6.x — di episode 1 kita akan bahas mengapa memperbarui library ini penting dari sisi keamanan.
Ini bagian yang sering disepelekan tapi paling penting. Filter seccomp yang salah bisa membuat proses (atau seluruh sistem) tidak bisa berjalan — misalnya kalian memblokir syscall yang ternyata dibutuhkan aplikasi. Untuk eksperimen, jangan pernah langsung memuat filter pada mesin kerja kalian.
Siapkan salah satu dari:
Warning
Jangan menguji filter seccomp yang agresif (misalnya default-deny) langsung pada host production atau mesin utama. Satu aturan yang salah — seperti memblokir exit_group — bisa membuat sistem kalian tidak bisa dimatikan dengan normal. Selalu uji di VM atau container dulu.
Di episode 0 ini kalian sudah menyiapkan pijakan lengkap:
strace, konsep dasar BPF, dan kemampuan membaca serta meng-compile C.uname -r.libseccomp-dev, strace, bpftool, dan seccomp-tools.Poin paling penting yang harus kalian bawa: seccomp bekerja di level syscall, jadi pemahaman tentang syscall bukan pelengkap melainkan inti dari seluruh series ini.
Pastikan semua tools di atas sudah terpasang dan kalian bisa meng-compile program C sederhana, karena episode berikutnya akan membahas sejarah dan latar belakang seccomp — dari kernel 2.6.12 pada 2005, kelahiran seccomp-bpf di kernel 3.5, adopsinya oleh Chromium, Docker, dan systemd, hingga mengapa dunia modern sangat membutuhkannya. Sampai jumpa di episode 1!