Kotak pasir
Sandboxing adalah pola keamanan yang memungkinkan browser Anda menjalankan JavaScript dari situs mana pun, ponsel Anda menjalankan aplikasi dari pengembang mana pun, dan laptop Anda membuka lampiran email — semuanya tanpa program tersebut dapat membaca file rekening bank Anda. Lapisan teknologilah yang mengubah kode tidak tepercaya dari kerentanan menjadi fitur.
Badan artikel selengkapnya disediakan dalam bahasa Inggris di bawah ini.
Sandboxing adalah praktik menjalankan kode di dalam lingkungan terbatas yang mencegahnya mengakses sumber daya di luar batasnya. Sandbox membatasi file apa yang dapat dibaca, koneksi jaringan apa yang dapat dibuat, proses lain apa yang dapat berkomunikasi, dan panggilan sistem apa yang dapat dipanggil. Jika kode ternyata berbahaya atau bermasalah, maka kerusakannya ada.
Mengapa sandboxing penting
Komputasi modern bergantung pada kode yang berjalan yang tidak sepenuhnya kami percayai:
- JavaScript dari situs web mana pun yang dikunjungi browser Anda
- Aplikasi seluler dari toko aplikasi (diperiksa tetapi tidak secara formal terverifikasi)
- Ekstensi browser, plugin IDE, dependensi dalam kode Anda
- Makro dalam dokumen, skrip yang dilampirkan ke email
- Beban kerja kontainer di infrastruktur cloud
Tanpa sandboxing, semua ini akan menjadi serangan pencurian kredensial yang menunggu untuk terjadi. Sandbox inilah yang memungkinkan model bekerja.
Bagaimana sandbox dibuat
Teknik implementasi, berlapis:
- Isolasi proses. Setiap tab di browser modern adalah proses OS yang terpisah. Kernel browser mengatur apa yang boleh dilakukan oleh proses tersebut.
- seccomp-bpf di Linux — filter yang didukung kernel tempat panggilan sistem dapat dilakukan oleh suatu proses. Sandbox mendeklarasikan panggilan sistem yang diperlukan (baca, tulis, mmap, dll.) dan kernel menolak yang lainnya.
- Namespaces dan kemampuan di Linux — pandangan terisolasi dari sistem file, proses, jaringan, dan sebagainya. Kontainer dibuat dari primitif ini.
- App Sandbox di macOS/iOS — hak deklaratif yang menjelaskan kemampuan mana yang dibutuhkan aplikasi (akses kamera, jaringan, jalur tertentu). Aplikasi tanpa hak tidak dapat mengakses fitur tersebut.
- AppContainer / Windows Sandbox — model isolasi yang setara dengan Microsoft.
- Isolasi Situs di Chrome dan Firefox — memisahkan proses per asal, mencegah JavaScript satu situs membaca memori situs lain meskipun eksploitasi tingkat kernel dilakukan ditemukan.
Kotak pasir browser secara detail
Browser adalah kotak pasir yang paling umum dan paling banyak diserang dalam komputasi. Kernel browser berjalan sebagai proses tepercaya. Setiap proses penyaji — satu atau lebih per tab — berjalan sebagai proses yang tidak tepercaya dengan kemampuan minimal. Penyaji dapat:
- Mengalokasikan memori
- Berkomunikasi dengan kernel browser melalui IPC untuk operasi yang sangat spesifik
- Render ke buffer grafis
- Menjalankan JavaScript dan WebAssembly
It tidak bisa:
- Membuka file di luar direktori sandboxnya
- TBerbicara ke tujuan jaringan yang berubah-ubah (kernel browser membuat koneksi tersebut)
- Memunculkan proses lain
- Membaca memori proses lain
Vendor browser membayar bug puluhan juta hadiah khusus untuk kerentanan sandbox-escape. Hadiah tunggal yang paling menguntungkan di Chrome (lebih dari $200.000) berlaku untuk rantai penuh yang lolos dari kotak pasir.
Kotak pasir aplikasi seluler
iOS dan Android membawa kotak pasir ke titik ekstrem logisnya: setiap aplikasi berjalan dalam UID-nya sendiri, melihat tampilan sistem filenya sendiri, dan dapat berkomunikasi dengan aplikasi lain hanya melalui saluran IPC yang sempit dan dimediasi OS (Maksud di Android, URL skema dan AppExtensions di iOS). OS meminta pengguna untuk memberikan izin gaya kemampuan (kamera, mikrofon, kontak) saat runtime. Hasilnya: malware di ponsel tertampung jauh lebih rapat dibandingkan di desktop.
WebAssembly dan sandbox baru
WebAssembly dirancang sejak awal dengan sandboxing sebagai properti kelas satu. Modul WASM tidak memiliki panggilan sistemnya sendiri; semuanya harus disediakan oleh lingkungan host (WASI untuk API gaya panggilan sistem, API web di browser). Hal ini menjadikan WASM kandidat kuat untuk menjalankan plugin yang tidak tepercaya di dalam aplikasi tepercaya — sebuah kasus penggunaan yang sebelumnya memerlukan isolasi proses yang berat. Alat seperti wasmtime dan wasmer menggunakan model ini.
Ketika sandbox gagal
Kerentanan pelarian sandbox adalah nyata dan berharga. Mode kegagalan berulang:
- Bugs di permukaan kernel. Bahkan proses yang dibatasi oleh seccomp terkadang dapat mengeksploitasi bug kernel yang dapat dijangkau melalui syscalls yang diizinkan.
- IPC bug. Antarmuka yang digunakan kotak pasir untuk berkomunikasi dengan proses broker itu sendiri adalah permukaan serangan.
- Saluran samping. Spectre dan Meltdown menunjukkan bahwa pengoptimalan CPU dapat membocorkan data melintasi batas-batas proses. Sandbox modern memitigasi hal ini namun masalah utamanya tetap menjadi kekhawatiran di tingkat perangkat keras. Kesalahan profil
- Sandbox. Operator terkadang melonggarkan profil sandbox untuk membuat perangkat lunak berfungsi, tanpa sengaja membuka lubang.
Sandboxing adalah pertahanan probabilistik — hal ini meningkatkan standar eksploitasi, bukan menghilangkannya. Pertahanan mendalam menggabungkan sandboxing dengan tindakan lain (bahasa yang aman untuk memori, pembersih, pengurangan permukaan serangan).
Apa arti sandboxing bagi Anda
Bagi pengguna akhir, sandboxing sebagian besar tidak terlihat. Implikasi praktisnya: selalu perbarui browser dan OS, karena pelolosan sandbox adalah perbaikan keamanan dengan prioritas tertinggi. Hindari menonaktifkan fitur sandbox (beberapa pengguna Linux mematikan profil seccomp, beberapa power user menonaktifkan tanda sandbox Chrome) kecuali Anda memahami konsekuensinya. Browser dikirimkan dengan pengerasan secara default; defaultnya benar untuk hampir semua pengguna.
Pertanyaan yang sering diajukan
- Apakah sandboxing sama dengan virtualisasi?
- Mereka tumpang tindih tetapi tidak identik. Virtualisasi menjalankan seluruh sistem operasi di dalam emulator; isolasi berada pada tingkat virtualisasi perangkat keras. Sandboxing biasanya menjalankan proses di dalam OS yang sama dengan batasan yang diberlakukan kernel. Virtualisasi lebih berat namun memberikan isolasi yang lebih kuat; desain modern sering kali menggabungkan keduanya (VM Firecracker untuk tanpa server, gVisor untuk container).
- Apakah sandboxing memperlambat segalanya?
- Overhead sederhana — biasanya satu digit persen untuk pemfilteran syscall, sedikit lebih banyak untuk isolasi proses. Biaya kinerja telah dikurangi secara aktif melalui dukungan perangkat keras (Intel CET, ARM PAC) sehingga sandbox modern pada dasarnya gratis untuk sebagian besar beban kerja.
- Bisakah VPN keluar dari kotak pasirnya?
- Perangkat lunak klien VPN biasanya memerlukan lebih banyak hak istimewa dibandingkan aplikasi sandbox — perangkat lunak ini mengonfigurasi perutean dan antarmuka jaringan. Di macOS dan iOS, mereka menggunakan API khusus (kerangka NetworkExtension) untuk melakukan ini dengan aman. Klien VPN itu sendiri memiliki hak istimewa; data yang mengalir melaluinya tidak tembus cahaya bagi aplikasi lain.
- Apakah menjalankan kode dalam wadah Docker sama dengan sandboxing?
- Kontainer Docker menggunakan namespace Linux dan seccomp untuk isolasi, yang merupakan bentuk sandboxing. Isolasi ini lebih lemah dibandingkan sandbox berbasis virtualisasi (container berbagi kernel host) dan lebih lemah dibandingkan sandbox ruang pengguna yang melarang sebagian besar syscall (container mengizinkan banyak syscall). Untuk beban kerja yang tidak tepercaya, proyek seperti gVisor atau Kata Containers memberikan isolasi yang lebih kuat pada Docker UX.
- Mengapa Chrome menggunakan begitu banyak memori?
- Isolasi Situs. Setiap asal berjalan dalam prosesnya sendiri — 50 tab situs berbeda berarti 50 proses, masing-masing dengan overhead memorinya sendiri. Biayanya adalah RAM; keuntungannya adalah eksploitasi satu tab tidak dapat membaca data tab lain (kata sandi, sesi). Chrome modern berupaya lebih keras dalam pengoptimalan berbagi memori untuk mengurangi dampaknya, namun arsitekturnya secara inheren menukar memori demi keamanan.