ptrace
tampaknya menjadi alat yang paling jelas tapi selain itu…
util-linux[-ng] memiliki perintah unshare
, yang menggunakan clone
kernel /unshare
antarmuka. Jika Anda menjalankan proses baru melalui unshare -n
(atau clone(CLONE_NEWNET)
), semua soket jaringan yang dibuatnya berada di ruang nama yang berbeda. Itu tidak menyelesaikan masalah sumber daya kernel tetapi itu mem-sandbox prosesnya.
Kernel Linux juga mendukung seccomp, sebuah mode yang dimasukkan dengan prctl(PR_SET_SECCOMP, 1)
yang mencegah proses (yah, utas, sungguh) memanggil syscall apa pun selain read
, write
, exit
, dan sigreturn
. Ini adalah kotak pasir yang cukup efektif tetapi sulit digunakan dengan kode yang tidak dimodifikasi.
Anda dapat menentukan domain SELinux yang melarang socket
/bind
/dll. panggilan, dan melakukan transisi dinamis ke jenis tersebut. Ini (jelas) membutuhkan sistem dengan kebijakan SELinux yang aktif ditegakkan. (Kemungkinan hal serupa dimungkinkan dengan AppArmor dan TOMOYO, tapi saya tidak terlalu paham dengan salah satunya.)
Lihatlah systrace - tidak terbatas pada soket, tetapi generator/penegak kebijakan syscall generik. Kutipan:
Port GNU/Linux selesai dan patch kernel dikelola secara aktif oleh Marius Eriksen. Dapat dijalankan tanpa perubahan kernel menggunakan backend ptrace.
Penafian - Saya tidak pernah mencobanya di Linux.