
Profil kotak pasir tanpa hak istimewa untuk bubblewrap
Banyak alat waktu eksekusi kontainer, seperti SystemD-Nspawn, Dockeretc., Fokus pada penyediaan infrastruktur bagi administrator sistem dan alat orkestrasi (misalnya, Kubernettes) untuk menjalankan kontainer.
Alat -alat ini tidak cocok untuk memberikannya kepada pengguna tanpa hak istimewa, karena sepele untuk mengubah akses tersebut menjadi shell root dengan hak istimewa lengkap di host.
Ada sistem isolasi di tingkat kernel Linux yang disebut ruang nama pengguna "pengguna nama pengguna" yang mencoba memungkinkan pengguna tanpa hak istimewa untuk menggunakan fungsi wadah. Meskipun kemajuan yang signifikan telah tercapai, masih ada kekhawatiran dalam hal ini dan tidak tersedia untuk pengguna tanpa hak istimewa dalam beberapa distribusi produksi seperti CentOS / Red Hat Enterprise Linux 7, Debian Jessie, dll.
Lihat, misalnya, CVE-2016-3135, yang merupakan kerentanan root lokal yang diperkenalkan oleh pengguna. Publikasi Maret 2016 ini memiliki lebih banyak diskusi.
Bubblewrap dapat dilihat sebagai implementasi seluruh subset ruang nama pengguna. Penekanan pada subset - secara khusus relevan dengan CVE sebelumnya, BubblewRap tidak mengizinkan kontrol atas ptables.
Kode BubblewRap asli ada sebelum nama pengguna spasi: mewarisi kode helper XDG -App yang, pada gilirannya, terganggu oleh linux-user-chroot.
Pemelihara alat ini percaya bahwa, bahkan ketika digunakan dalam kombinasi dengan perangkat lunak khas yang diinstal dalam distribusi itu, itu tidak memungkinkan eskalasi hak istimewa. Namun, itu dapat meningkatkan kapasitas pengguna yang telah masuk untuk melakukan serangan penolakan layanan.
Secara khusus, BubblewRap digunakan PR_SET_NO_NEW_PRIVS untuk menonaktifkan Binary Setuid, yang merupakan cara tradisional untuk keluar dari hal -hal seperti chroots.
Program ini dapat dibagikan oleh semua alat kontainer yang tidak mengarahkan operasi, seperti:
Flatpak RPM-Ostree tanpa hak istimewa BWRAP-OCI kami juga ingin ini tersedia di kluster Kubernetes / onshift. Memiliki kemampuan bahwa pengguna tanpa hak istimewa menggunakan fungsi wadah akan secara signifikan memfasilitasi realisasi skenario pemurnian interaktif dan serupa.
Bubblewrap bekerja dengan menciptakan ruang nama perakitan baru yang benar -benar kosong, di mana root berada dalam TMPFS yang tidak terlihat oleh host, dan akan dibersihkan secara otomatis ketika proses terakhir berakhir. Selanjutnya, Anda dapat menggunakan opsi baris perintah untuk membangun sistem file root dan lingkungan proses dan perintah untuk mengeksekusi di ruang nama.
Ada urutan perintah demonstrasi yang lebih besar dalam kode sumber, tetapi di sini ada versi kecil yang mengeksekusi shell baru yang menggunakan kembali file /usr.
BWRAP --RO-BIND /USR /USR-SYMLINK USR /LIB64 /LIB64 --PROC /PROC --DEV /DEV-SHARE-PID BASH Ini adalah contoh yang tidak lengkap, tetapi berguna untuk tujuan ilustrasi. Lebih sering, alih -alih membuat wadah menggunakan pohon sistem file host, Anda ingin mendaftar untuk chroot. Di sana, alih -alih membuat tautan simbolik lib64 -> usr/lib64, TMPF mungkin sudah membuatnya di rootf tujuan.
Tujuan BubblewRap adalah untuk menjalankan aplikasi dalam kotak pasir, di mana ia telah membatasi akses ke bagian -bagian dari sistem operasi atau data pengguna, seperti direktori awal.
BubblewRap selalu membuat ruang nama perakitan baru, dan pengguna dapat menentukan dengan tepat bagian mana dari sistem file yang harus terlihat di kotak pasir. Direktori ini yang ditentukan akan dipasang oleh bentuk yang telah ditentukan dan hanya dapat dilakukan.
Selain itu, Anda dapat menggunakan fungsi kernel ini:
Spasi Nama Pengguna (Clone_Newuser): Ini menyembunyikan semuanya kecuali UID dan kotak pasir saat ini. Ini juga dapat mengubah apa nilai UID / GID seharusnya di kotak pasir.
IPC Names Spaces (Clone_Newipc): Kotak pasir akan mendapatkan salinannya sendiri dari semua bentuk CPI yang berbeda, seperti memori bersama SYSV dan lampu lalu lintas.
Spaces Nama PID (clone_newpid): Sandbox tidak akan melihat proses apa pun di luar kotak pasir. Selain itu, BubblewRap akan menjalankan PID1 sepele dalam wadahnya untuk menangani persyaratan menuai anak -anak di kotak pasir. Ini menghindari apa yang sekarang dikenal sebagai masalah Docker PID 1.
Spaces dehttp: //linux.die.net/man/2/clone nama jaringan (clone_newnet): Sandbox tidak akan melihat jaringan. Sebaliknya, Anda akan memiliki ruang nama jaringan sendiri dengan hanya perangkat loop terbalik.
Ruang nama UTS (clone_newuts): Kotak pasir akan memiliki nama host sendiri.
Filter SECCOMP: Filter SECCOMP yang membatasi panggilan ke sistem yang dapat dilakukan di zona pengujian dapat lulus. Untuk informasi lebih lanjut, lihat SECCOMP.
FireJail mirip dengan Flatpak sebelum BubblewRap dibagi menjadi beberapa pengertian bahwa ia menggabungkan alat setuid dengan banyak fungsi sandboxing desktop spesifik. Misalnya, Firejail tahu Pulseaudio, sementara Bubblewrap no.
Penulis BubblewRap percaya bahwa jauh lebih mudah untuk mengaudit program setuid kecil dan mempertahankan karakteristik seperti penyaringan pulseaudio sebagai proses tanpa hak istimewa, seperti halnya sekarang di Flatpak.
Selain itu, @cgwalters berpikir bahwa mencoba memasukkan rute file dalam daftar putih adalah ide yang buruk mengingat cara -cara yang tak terhitung banyaknya di mana pengguna harus memanipulasi rute dan cara -cara yang tak terhitung banyaknya di mana administrator sistem dapat mengkonfigurasi sistem. Pendekatan BubblewRap adalah hanya mempertahankan beberapa kemampuan Linux spesifik seperti CAP_SYS_ADMIN, tetapi selalu mengakses sistem file seperti Doa UID. Ini sepenuhnya menutup serangan Tocttou dan lainnya.
Sandstorm.io membutuhkan ruang untuk nama pengguna tanpa hak istimewa untuk mengonfigurasi kotak pasirnya, meskipun dapat dengan mudah beradaptasi untuk beroperasi dalam mode setuid. @Cgwalters percaya bahwa kodenya cukup bagus, tetapi masih masuk akal untuk menyatukan di Bubblewrap. Namun, @kentonv (dari Sandstorm) merasa bahwa meskipun ini masuk akal pada prinsipnya, biaya perubahan melebihi manfaat praktis untuk saat ini. Keputusan ini dapat dinilai kembali di masa depan, tetapi hari ini tidak diterapkan secara aktif.
RUNC saat ini sedang mengerjakan dukungan kontainer tanpa root, tanpa perlu hak istimewa lainnya selama pemasangan RUNC (menggunakan ruang nama pengguna tanpa hak istimewa alih -alih setuid), pembuatan dan administrasi kontainer. Namun, mode standar menggunakan RUNC mirip dengan SystemD Nspawn di mana ia dirancang untuk dipanggil oleh root.
Penulis BubblewRap percaya bahwa RUNC dan SystemD-Nspawn tidak dirancang untuk menjadi Setuid, dan jauh dari mengakui cara seperti itu. Namun, dengan wadah tanpa root, RUNC dapat mematuhi kasus penggunaan tertentu yang diakui oleh BubblewRap (dengan manfaat tambahan menjadi waktu eksekusi OCI yang lengkap dan terstandarisasi).
Binctr hanyalah amplop untuk RUNC, jadi dia mewarisi semua kompensasi desainnya.