Direncanakan untuk mem-port mekanisme isolasi janji ke Linux

Baru-baru ini penulis perpustakaan standar Cosmopolitan C dan platform Redbean diumumkan melalui a mengumumkan, implementasi mekanisme isolasi janji() untuk Linux.

Itu tadi awalnya dikembangkan oleh proyek OpenBSD y memungkinkan Anda untuk secara selektif melarang bahwa aplikasi mengakses panggilan sistem yang tidak digunakan (semacam daftar putih panggilan sistem dibentuk untuk aplikasi dan panggilan lainnya dilarang). Tidak seperti mekanisme kontrol akses syscall yang tersedia di Linux, seperti seccomp, mekanisme janji dirancang dari bawah ke atas untuk menjadi ramah pengguna mungkin.

Inisiatif yang gagal untuk mengisolasi aplikasi di lingkungan dasar OpenBSD menggunakan mekanisme systrace menunjukkan bahwa isolasi pada tingkat panggilan sistem individual terlalu rumit dan memakan waktu.

Sebagai alternatif, janji diusulkan, yang diizinkan untuk membuat aturan isolasi tanpa merinci dan memanipulasi kelas akses yang disiapkan.

Misalnya kelas yang ditawarkan adalah stdio (input/output), rpath (hanya membaca file), wpath (menulis file), cpath (membuat file), tmppath (bekerja dengan file sementara), inet (jaringan soket), unix (soket unix ), dns (resolusi DNS), getpw (akses baca ke basis data pengguna), ioctl (panggilan ioctl), proc (kontrol proses), exec (proses startup), dan id (kontrol izin).

Aturan untuk bekerja dengan panggilan sistem ditentukan dalam bentuk anotasi yang menyertakan daftar kelas panggilan sistem yang diizinkan dan larik jalur file tempat akses diizinkan. Setelah mengkompilasi dan menjalankan aplikasi yang dimodifikasi, kernel mengambil alih tugas memantau kepatuhan terhadap aturan yang ditentukan.

Secara terpisah, implementasi janji untuk FreeBSD sedang dikembangkan, yang dibedakan dengan kemampuan untuk mengisolasi aplikasi tanpa membuat perubahan pada kode mereka, sedangkan di OpenBSD panggilan janji ditujukan untuk integrasi yang erat dengan lingkungan dasar dan penambahan anotasi ke kode dari masing-masing.

Ikrar seperti buah terlarang yang kita semua idamkan ketika bos mengatakan kita harus menggunakan hal-hal seperti Linux. Mengapa itu penting? Itu karena janji() sebenarnya membuat keamanan dapat dimengerti. Linux tidak pernah benar-benar memiliki lapisan keamanan yang dapat dipahami oleh manusia biasa.

Pengembang port janji Linux mengambil petunjuk dari FreeBSD dan alih-alih membuat perubahan kode, mereka menyiapkan utilitas tambahan dari janji.com yang memungkinkan Anda menerapkan batasan tanpa mengubah kode aplikasi. Misalnya, untuk menjalankan utilitas curl dengan akses hanya ke kelas panggilan sistem stdio, rpath, inet, dan threadstdio, cukup jalankan "./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .

Utilitas ini bekerja pada semua distribusi Linux sejak RHEL6 dan tidak memerlukan akses root. Selain itu, berdasarkan perpustakaan kosmopolitan, API disediakan untuk mengelola pembatasan dalam kode program bahasa C, yang memungkinkan, antara lain, membuat enklave untuk membatasi akses secara selektif terkait dengan fungsi aplikasi tertentu. .

Ada beberapa pengembang di masa lalu yang telah mencoba ini. Saya tidak akan menyebutkan nama, karena sebagian besar proyek ini tidak pernah selesai. Ketika membahas SECOMP, tutorial online hanya menjelaskan cara memasukkan panggilan sistem ke daftar putih, sehingga kebanyakan orang kehilangan minat sebelum mengetahui cara memfilter argumen. Proyek-proyek yang bergerak maju juga memiliki kekhilafan seperti mengizinkan bit setuid/setgid/sticky diubah. Oleh karena itu, tidak ada alternatif saat ini yang harus digunakan. Saya pikir upaya ini membawa kita lebih dekat untuk memiliki janji() daripada sebelumnya.

Implementasi tidak memerlukan perubahan kernel: batasan utilitas diterjemahkan ke dalam aturan SECCOMP BPF dan diproses menggunakan mekanisme isolasi panggilan sistem asli Linux. Misalnya, memanggil janji("stdio rpath", 0) akan dikonversi ke filter BPF

Akhirnya, jika Anda tertarik untuk mengetahui lebih banyak tentangnya, Anda dapat berkonsultasi dengan detailnya Di tautan berikut.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.