Penjelasan Sandbox2

Desain Sandbox2 dibangun berdasarkan teknologi yang sudah dikenal dan mapan, framework kebijakan, dan dua proses: Sandbox Executor dan Sandboxee.

Teknologi yang Terlibat

Bagian berikut mencakup teknologi yang membangun lapisan dasar untuk Sandbox2.

Namespace Linux

Namespace Linux adalah upaya untuk menyediakan virtualisasi tingkat sistem operasi. Meskipun beberapa ruang pengguna berjalan secara independen satu sama lain, ruang pengguna tersebut berbagi satu instance kernel. Sandbox2 menggunakan jenis namespace berikut:

  • IPC
  • Jaringan (kecuali jika dinonaktifkan secara eksplisit dengan memanggil PolicyBuilder::AllowUnrestrictedNetworking())
  • Pasang (menggunakan tampilan kustom hierarki sistem file)
  • PID
  • Pengguna
  • UTS

Baca selengkapnya tentang namespace Linux di Wikipedia atau di halaman manual terkait.

IPC

Sandbox2 memungkinkan pertukaran data arbitrer antara Sandbox Executor dan Sandboxee yang tidak tepercaya. API ini mendukung pesan Type-Length-Value (TLV), meneruskan deskriptor file, dan pertukaran kredensial melalui token dan handle.

Seccomp-BPF

Sandbox2 mengandalkan seccomp-bpf, yang merupakan ekstensi untuk Mode Komputasi Aman (seccomp) yang memungkinkan penggunaan aturan Berkeley Packet Filter (BPF) untuk memfilter syscall.

seccomp adalah fasilitas kernel Linux yang membatasi panggilan sistem suatu proses agar hanya mengizinkan exit, sigreturn, read, dan write. Jika proses mencoba mengeksekusi syscall lain, proses tersebut akan dihentikan. Ekstensi seccomp-bpf memberikan fleksibilitas yang lebih besar daripada seccomp. Daripada mengizinkan serangkaian syscall tetap, seccomp-bpf menjalankan program BPF pada data syscall dan bergantung pada nilai yang ditampilkan program, seccomp-bpf dapat mengeksekusi syscall, melewati syscall dan menampilkan nilai tiruan, menghentikan proses, menghasilkan sinyal, atau memberi tahu tracer.

Ptrace

Syscall ptrace (process trace) menyediakan fungsi yang memungkinkan proses tracer mengamati dan mengontrol eksekusi proses tracee. Proses tracer memiliki kontrol penuh atas tracee setelah dilampirkan. Baca selengkapnya tentang ptrace di Wikipedia atau di halaman manual terkait.

Kebijakan Sandbox

Kebijakan Sandbox adalah bagian terpenting dari sandbox, karena menentukan tindakan yang dapat dan tidak dapat dilakukan oleh Sandboxee. Ada 2 bagian dalam kebijakan sandbox:

  • Kebijakan Syscall
  • Penyiapan namespace

Kebijakan Syscall Default

Kebijakan default memblokir syscall yang selalu berbahaya dan lebih diutamakan daripada kebijakan yang diperluas yang disediakan pengguna.

Kebijakan Syscall yang Diperluas

Kebijakan syscall yang diperluas dapat dibuat menggunakan class PolicyBuilder kami. Class ini menentukan sejumlah aturan praktis (misalnya, AllowStaticStartup, AllowDynamicStartup, AllowOpen) yang dapat digunakan untuk meningkatkan keterbacaan kebijakan Anda.

Jika Anda ingin membatasi syscall lebih lanjut atau memerlukan aturan yang lebih kompleks, Anda dapat menentukan makro BPF mentah dengan AddPolicyOnSyscall dan AddPolicyOnSyscalls. Contoh crc4 menggunakan mekanisme ini untuk membatasi argumen untuk syscall read, write, dan close.

Secara umum, semakin ketat Kebijakan Sandbox, semakin baik karena eksploitasi terhadap kerentanan apa pun yang ada dalam kode akan dibatasi oleh kebijakan. Jika Anda dapat menentukan secara persis syscall dan argumen mana yang diperlukan untuk operasi normal program, maka penyerang mana pun yang mengeksploitasi kerentanan eksekusi kode juga dibatasi pada batas yang sama.

Kebijakan Sandbox yang sangat ketat dapat menolak semua panggilan sistem kecuali operasi baca dan tulis pada deskriptor file input dan output standar. Di dalam sandbox ini, program dapat mengambil input, memprosesnya, dan menampilkan output. Namun, jika proses mencoba melakukan syscall lain, proses tersebut akan dihentikan karena pelanggaran kebijakan. Oleh karena itu, jika prosesnya terganggu (eksekusi kode oleh pengguna jahat), proses tersebut tidak dapat melakukan hal yang lebih jahat daripada menghasilkan output yang buruk (yang masih perlu ditangani dengan benar oleh eksekutor dan lainnya).

Penyiapan Namespace

Objek PolicyBuilder juga digunakan untuk menyiapkan tampilan individual Sandboxee terhadap sistem file. File tunggal (AddFile / AddFileAt), seluruh direktori (AddDirectory / AddDirectoryAt), serta penyimpanan sementara (AddTmpfs) dapat dipetakan ke lingkungan Sandboxee. Selain itu, AddLibrariesForBinary dapat digunakan untuk memetakan semua library yang diperlukan oleh executable yang ditautkan secara dinamis yang ditentukan secara otomatis.

Tanda Command Line

Kebijakan Sandbox2 dapat dinonaktifkan dengan menentukan salah satu flag command line berikut. Flag ini ditujukan untuk tujuan pengujian (misalnya, saat menyempurnakan Kebijakan Syscall yang Diperluas).

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

Sandbox Executor

Sandbox Executor adalah proses yang tidak di-sandbox itu sendiri. Proses ini adalah proses pelacak ptrace yang terhubung ke Sandboxee (proses yang dilacak ptrace). Sandbox Executor juga menyiapkan dan menjalankan instance Monitor yang melacak Sandboxee dan memberikan informasi status.

Sandbox2 memungkinkan tiga mode eksekusi: Mandiri, Sandbox2 Forkserver, dan Forkserver Kustom. Jika Anda menggunakan forkserver, Sandboxee dibuat sebagai proses turunan dari Sandbox Executor. Mode ini dijelaskan secara mendetail di sini.

Sandboxee

Sandboxee adalah proses yang berjalan di lingkungan sandbox yang dibatasi yang ditentukan oleh Kebijakan Sandbox. Sandbox Executor mengirimkan kebijakan ke Sandboxee melalui IPC. Sandboxee kemudian menerapkan kebijakan. Setiap pelanggaran terhadap kebijakan akan mengakibatkan penghentian proses, kecuali jika dikonfigurasi lainnya (lihat Kebijakan Sandbox).