Topik temu duga representatif

Temu bual Linux: Bagaimanakah anda membina sandbox Landlock yang boleh diturunkan tarafnya (degradable)?

UmumSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Satu alat perlu membaca beberapa fail input, menulis ke direktori output dan menjalankan pemalam (plugin) yang tidak dipercayai tanpa keistimewaan tambahan. Bagaimanakah anda menggunakan Landlock, mengendalikan perbezaan ABI dan fail yang sedia dibuka, serta mentakrifkan tingkah laku sandaran (fallback) yang selamat?

Gesaan dan konteks

Satu alat baris perintah mesti membaca set kecil fail input, menulis ke direktori output yang ditetapkan dan menjalankan pemalam yang tidak dipercayai. Pelaksanaan tidak boleh memberikan keistimewaan tambahan, dan kernel mungkin hanya mendedahkan ABI Landlock yang lebih lama. Bagaimanakah anda mereka bentuk sandbox, mengesahkan bahawa peraturan berfungsi dan mengelak daripada menganggap set peraturan yang lebih ketat sebagai bukti bahawa keseluruhan sistem adalah selamat?

Soalan ini sesuai untuk peranan Linux, keselamatan, sistem binaan dan pelaksanaan multi-tenant. Isyarat yang dinilai adalah memahami Landlock sebagai mekanisme sekatan diri proses tanpa keistimewaan yang boleh disusun bertindih (stackable), bukan sekadar menghafal satu struktur C.

Perkara yang diuji oleh penemu bual

  • Sama ada anda membezakan domain peraturan, jenis peraturan, hak akses dan skop proses.
  • Sama ada anda memeriksa (probe) ABI kernel sebelum membina set kebenaran yang disokong.
  • Sama ada anda mengetahui bahawa deskriptor fail yang dibuka sebelum sekatan memerlukan audit berasingan.
  • Sama ada anda meneliti tentang fork, exec, thread dan pewarisan proses anak.
  • Sama ada pengendalian kegagalan, kebolehlihatan (observability), pengunduran (rollback) dan ujian adalah sebahagian daripada pelancaran.

Soalan untuk dijelaskan terlebih dahulu

  • Laluan manakah yang memerlukan keupayaan membaca, mencipta, memadam, melaksanakan dan rangkaian?
  • Bolehkah pemalam melakukan fork, exec, mencipta thread atau menerima deskriptor fail yang diwarisi?
  • Apakah versi minimum kernel dan penurunan taraf (downgrade) keselamatan yang boleh diterima?
  • Adakah log, fail input, soket atau peranti dibuka sebelum proses disekat?
  • Adakah akses fail merupakan satu-satunya sempadan, atau adakah seccomp, bekas (containers) atau MAC juga diperlukan?

Jawapan tiga puluh saat

“Saya akan memeriksa ABI Landlock terlebih dahulu, mencipta domain peraturan, memberikan akses baca sahaja kepada pepohon input dan akses cipta/tulis kepada pepohon output, kemudian menyekat proses semasa supaya keturunannya mewarisi dasar tersebut. Deskriptor fail yang dibuka sebelum sekatan memerlukan audit yang jelas kerana ia mungkin kekal boleh digunakan. Saya akan membina set kebenaran sepunya terkecil untuk ABI yang lebih lama; jika keupayaan pengasingan mandatori tidak tersedia, alat tersebut enggan dijalankan atau memasuki mod baca sahaja berisiko rendah yang dilog dengan jelas dan bukannya berjalan secara senyap tanpa sandbox.”

Penyelaman mendalam langkah demi langkah

Langkah 1: Tentukan model ancaman dan hak minimum

Senaraikan perkara yang boleh dilakukan oleh pemalam: membaca fail hos, menulis ganti output, melaksanakan program lain, memadam direktori, mengakses rangkaian atau menyalahgunakan deskriptor yang diwarisi. Petakan setiap tindakan kepada hak sistem fail yang disokong oleh Landlock. Berikan hanya bacaan yang diperlukan di bawah pepohon input dan penulisan atau ciptaan di bawah pepohon output. Biarkan setiap hak yang tidak diberikan ditolak dan bukannya membuka punca (root) dan bergantung pada pemeriksaan aplikasi.

Langkah 2: Periksa ABI

Landlock menambah hak akses merentas versi ABI. Semasa permulaan, baca ABI yang tersedia dan bahagikan dasar yang diingini kepada hak mandatori dan pilihan. Tambah hak pilihan hanya apabila disokong. Hak yang tidak diketahui boleh menyebabkan penciptaan peraturan gagal, jadi pembina dasar mesti peka terhadap keupayaan (capability-aware). Log ABI yang dikesan, versi dasar dan hak berkesan sebagai medan berstruktur.

Langkah 3: Bina domain peraturan dan ikat laluan

Cipta domain peraturan, buka deskriptor direktori yang dipercayai semasa permulaan dan ikat peraturan laluan dengan hak terkecil yang diperlukan untuk setiap pepohon. Membuka deskriptor tersebut sebelum kod pemalam berjalan menghalang persediaan dasar daripada menghuraikan laluan yang dikawal oleh penyerang. Selepas menggabungkan peraturan, sekat proses semasa dan uji tingkah laku pewarisan thread dan panggilan exec seterusnya.

Langkah 4: Audit sumber terbuka dan pewarisan

Landlock mengekang permintaan akses seterusnya; deskriptor yang dibuka sebelum sekatan mungkin masih boleh digunakan. Tutup deskriptor yang tidak diperlukan, tandakan yang diperlukan sebagai sumber terkawal dan halang deskriptor yang tidak berkaitan daripada diserahkan. Semak input dan output standard, log, soket, pemegang direktori dan deskriptor yang dibekalkan kepada pemalam. Uji fork, exec, thread dan anak secara berasingan.

Langkah 5: Tentukan kegagalan dan pertahanan secara mendalam (defense in depth)

Landlock tidak secara automatik mengekang setiap panggilan sistem, operasi rangkaian atau keupayaan yang telah dipegang oleh proses. Tambah seccomp, bekas, ruang nama pengguna (user namespaces) atau MAC sistem apabila model ancaman memerlukannya. Jika domain peraturan mandatori tidak boleh dicipta, pilih penolakan, mod baca sahaja atau gerbang kelulusan. Setiap penurunan taraf mesti mengeluarkan amaran dengan sebabnya; ia tidak boleh sekali-kali melaksanakan pemalam yang tidak dipercayai secara senyap tanpa sempadan tersebut.

Langkah 6: Sahkan, perhati dan undurkan (rollback)

Gunakan lekapan CI untuk merangkumi matriks benarkan/tolak (allow/deny): pembacaan input berjaya, penulisan output berjaya, pembacaan di luar pepohon yang dibenarkan gagal, dan operasi padam atau laksana gagal seperti yang direka bentuk. Ulangi pemeriksaan dalam proses anak. Rekod ABI, hash dasar, kiraan operasi yang ditolak dan sebab keluar. Semasa pelancaran kenari (canary), ukur penolakan palsu; apabila pemalam memerlukan hak lain, kemas kini senarai dibenarkan dan ujian dan bukannya membuka direktori induknya. Rollback boleh melumpuhkan pemalam atau memulihkan pelari yang lebih lama sambil mengekalkan amaran kegagalan sandbox.

Contoh jawapan berkualiti tinggi

Saya akan bermula dengan inventori kebenaran untuk keperluan fail, pelaksanaan dan pewarisan pemalam, kemudian memeriksa ABI Landlock pada kernel sasaran. Domain peraturan memberikan kebenaran baca pada pepohon input serta cipta dan tulis pada pepohon output; hak pilihan didayakan satu demi satu, manakala keupayaan mandatori yang hilang menjadikan pelaksanaan tidak tersedia. Sebelum sekatan, saya menutup deskriptor yang tidak perlu dan mengaudit aliran standard, log, soket dan deskriptor yang disediakan oleh pemalam, kemudian mengesahkan tingkah laku fork, exec, thread dan anak.

Selepas menyekat proses, saya akan menjalankan matriks allow/deny dengan pemalam sebenar dan merekodkan ABI, versi dasar, operasi yang ditolak dan sebab penurunan taraf. Landlock membekalkan sempadan sistem fail yang boleh disusun bertindih, bukan sandbox keistimewaan atau rangkaian yang lengkap, jadi seccomp, bekas, user namespaces atau MAC mungkin masih diperlukan. Jika dasar teras tidak dapat diwujudkan, pelari akan menolak atau memasuki mod baca sahaja dengan amaran yang jelas; ia tidak pernah memintas dasar secara senyap.

Kesilapan biasa

  • Menganggap Landlock sebagai pengasingan keistimewaan → Ia terutamanya mengekang akses terkawal yang terkemudian → gabungkan kawalan mengikut model ancaman.
  • Mengabaikan perbezaan ABI → Hak baharu mungkin tidak diketahui pada kernel yang lebih lama → periksa dan bina dasar sepunya yang terkecil.
  • Membuka segalanya sebelum meletakkan dalam sandbox → Deskriptor sedia ada mungkin kekal boleh digunakan → tutup, audit dan hentikan pewarisan deskriptor yang tidak berkaitan terlebih dahulu.
  • Membenarkan pepohon induk dan mempercayai pemeriksaan aplikasi → Pemalam boleh merentasi lebih banyak laluan → berikan hak mengikut pepohon dan mengikut operasi.
  • Meneruskan secara senyap selepas kegagalan persediaan → Pengendali tidak dapat melihat bahawa pengasingan tiada → tolak, gunakan mod baca sahaja atau perlukan kelulusan dengan amaran.
  • Menguji proses utama sahaja → fork, exec dan thread mengubah sempadan → uji setiap laluan pewarisan dengan kes penolakan.

Soalan susulan

Bolehkah Landlock menyekat fail yang telah dibuka sebelumnya?

Ia tidak boleh dianggap sebagai mekanisme penutupan automatik. Deskriptor yang dibuka sebelum sekatan mungkin kekal boleh digunakan, jadi tutup deskriptor yang tidak perlu sebelum menggunakan dasar, kawal penyerahan deskriptor dan sertakan pemegang yang dikekalkan dalam audit dan ujian.

Bagaimana jika kernel kekurangan satu hak akses yang diminta?

Asingkan hak mandatori daripada hak pilihan. Periksa ABI, tambah hak pilihan yang disokong dan tolak permulaan atau masuk ke mod selamat dengan amaran yang jelas apabila hak mandatori tiada. Jangan abaikan kegagalan penciptaan peraturan atau menulis hak yang tidak diketahui ke dalam peraturan.

Mengapa perlu menambah seccomp atau bekas?

Kekuatan Landlock ialah sekatan diri tanpa keistimewaan yang berskop sistem fail. Ia tidak meliputi setiap panggilan sistem, laluan rangkaian atau dasar hos. Seccomp, user namespaces, bekas dan MAC boleh mengisi sempadan panggilan, identiti dan peringkat sistem tersebut; reka bentuk gabungan masih memerlukan ujian pewarisan dan laluan kegagalan.

Sumber awam

Soalan berkaitan