Ia dirancang untuk memindahkan mekanisme pengasingan ikrar ke Linux

Baru-baru ini, pengarang pustaka standard C Cosmopolitan dan platform Redbean mengumumkan pelaksanaan mekanisme pengasingan pledge() untuk Linux.

Pada asalnya dibangunkan oleh projek OpenBSD , pledge membolehkan anda melarang aplikasi secara selektif daripada mengakses panggilan sistem yang tidak digunakan (mencipta senarai putih panggilan sistem untuk aplikasi dan melarang panggilan lain). Tidak seperti mekanisme kawalan akses syscall yang tersedia dalam Linux, seperti seccomp, pledge direka bentuk dari bawah ke atas untuk menjadi semesra pengguna yang mungkin.

Inisiatif yang gagal untuk mengasingkan aplikasi dalam persekitaran asas OpenBSD menggunakan mekanisme systrace menunjukkan bahawa pengasingan pada tahap panggilan sistem individu adalah terlalu rumit dan memakan masa.

Secara alternatif, pledge telah dicadangkan, yang membolehkan penciptaan peraturan pengasingan tanpa memperincikan dan memanipulasi kelas akses yang disediakan.

Sebagai contoh, kelas yang ditawarkan ialah stdio (input/output), rpath (fail baca sahaja), wpath (tulis fail), cpath (buat fail), tmppath (bekerja dengan fail sementara), inet (rangkaian soket), unix (soket unix ), dns (resolusi DNS), getpw (akses baca ke pangkalan data pengguna), ioctl (panggilan ioctl), proc (kawalan proses), exec (proses permulaan), dan id (kawalan kebenaran).

Peraturan untuk bekerja dengan panggilan sistem dinyatakan dalam bentuk anotasi yang merangkumi senarai kelas panggilan sistem yang dibenarkan dan tatasusunan laluan fail di mana akses dibenarkan. Selepas menyusun dan menjalankan aplikasi yang diubah suai, kernel mengambil alih tugas memantau pematuhan dengan peraturan yang ditentukan.

Secara berasingan, pelaksanaan ikrar untuk FreeBSD sedang dibangunkan, yang dibezakan dengan keupayaan untuk mengasingkan aplikasi tanpa membuat perubahan pada kod mereka, manakala dalam OpenBSD panggilan ikrar bertujuan untuk penyepaduan yang ketat dengan persekitaran asas dan penambahan anotasi pada kod setiap satu.

Ikrar adalah seperti buah terlarang yang kita semua idamkan apabila bos mengatakan kita harus menggunakan perkara seperti Linux. Mengapa perkara itu penting? Ini kerana ikrar() sebenarnya menjadikan keselamatan boleh difahami. Linux tidak pernah benar-benar mempunyai lapisan keselamatan yang boleh difahami oleh manusia biasa.

Pembangun port pledge Linux telah mengikut jejak langkah FreeBSD dan, daripada membuat perubahan kod, mereka telah menyediakan utiliti tambahan daripada pledge.com yang membolehkan anda mengenakan sekatan tanpa mengubah kod aplikasi anda. Contohnya, untuk menjalankan utiliti curl dengan akses hanya kepada kelas panggilan sistem stdio, rpath, inet dan threadstdio, jalankan sahaja `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.

Utiliti ini berfungsi pada semua pengedaran Linux dari RHEL6 dan seterusnya dan tidak memerlukan akses root. Selain itu, berdasarkan pustaka kosmopolitan, API disediakan untuk mengurus sekatan dalam kod program C, yang membolehkan, antara lain, penciptaan enklaf untuk menyekat akses secara selektif kepada fungsi aplikasi tertentu.

Terdapat beberapa pembangun pada masa lalu yang telah mencuba ini. Saya tidak akan menamakan nama, kerana kebanyakan projek ini tidak pernah disiapkan. Mengenai SECOMP, tutorial dalam talian hanya menerangkan cara menyenarai putihkan panggilan sistem, jadi kebanyakan orang kehilangan minat sebelum memikirkan cara menapis hujah. Projek yang bergerak ke hadapan juga mempunyai kesilapan seperti membenarkan bit setuid/setgid/sticky ditukar. Oleh itu, tiada alternatif semasa harus digunakan. Saya fikir usaha ini membawa kita lebih dekat untuk mempunyai ikrar() berbanding sebelum ini.

Pelaksanaan tidak memerlukan perubahan kernel: kekangan utiliti diterjemahkan ke dalam peraturan SECCOMP BPF dan diproses menggunakan mekanisme pengasingan panggilan sistem asli Linux. Contohnya, memanggil promise("stdio rpath", 0) akan ditukar kepada penapis BPF

Akhir sekali, jika anda berminat untuk mengetahui lebih lanjut, anda boleh mendapatkan butiran lanjut di pautan berikut.


Tambahkan sebagai sumber pilihan dalam Google