Landlock Menambahkan Pembatasan Tanpa Privilege pada Otoritas Proses Linux

Proses Linux biasanya memperoleh otoritas dari kredensial, izin filesystem, namespace, capability, descriptor yang terbuka, dan kebijakan keamanan tingkat sistem. Landlock menambahkan titik kontrol berbeda: proses dapat secara sukarela membatasi aksesnya sendiri pada masa berikutnya, bahkan tanpa privilege administratif. Kebijakan yang dihasilkan bersifat aditif. Landlock mempersempit tindakan yang diizinkan tanpa memberikan akses yang ditolak mekanisme keamanan lain.

Sifat tersebut membuat Landlock berguna sebagai lapisan confinement aplikasi. Batas mekanismenya juga jelas. Landlock bukan pengganti discretionary access control, Linux Security Module lain, seccomp, namespace, atau pengelolaan descriptor yang cermat. Landlock bekerja bersama kontrol tersebut.

Ruleset menyatakan akses yang dikendalikan

Kebijakan Landlock dimulai dari ruleset. Ruleset menyatakan access right yang ditangani, kemudian rule memberikan sebagian handled right kepada objek tertentu. Rule filesystem dikaitkan dengan hierarki file. Rule jaringan dapat membatasi operasi port TCP dan UDP yang didukung ketika ABI Landlock aktif menyediakan right tersebut.

Untuk access right yang dinyatakan sebagai handled, akses ditolak kecuali rule yang cocok memberikannya. Right di luar handled set tidak ditolak oleh ruleset itu. Pembuatan ruleset karena itu tidak otomatis mencakup setiap operasi saat ini maupun masa depan.

Pemisahan ini mendukung kompatibilitas ABI. Landlock berkembang melalui penambahan access right dan capability. Aplikasi dapat memeriksa ABI aktif lalu membentuk kebijakan dari subset yang didukung kernel. Binary yang dibangun dengan definisi lebih baru tidak semestinya mengklaim kernel lama menerapkan right yang belum tersedia.

Enforcement hanya dapat mempersempit posisi keamanan

Proses membuat ruleset melalui landlock_create_ruleset(), menambahkan rule dengan landlock_add_rule(), lalu menerapkannya menggunakan landlock_restrict_self(). Setelah thread masuk ke domain Landlock, kebijakan itu tidak dapat dilepas dari thread tersebut. Lapisan tambahan dapat memberi pembatasan lebih jauh, tetapi tidak dapat memulihkan otoritas yang sudah ditolak lapisan sebelumnya.

Perilaku monoton ini menjadi inti batas privilege. Proses tanpa privilege dapat melakukan sandbox terhadap dirinya karena Landlock tidak dapat dipakai untuk memperoleh akses. Akses efektif tetap melibatkan izin filesystem biasa dan kontrol aktif lainnya. Rule Landlock yang mengizinkan pembacaan suatu hierarki tidak mengesampingkan mode bit, ACL, pemeriksaan capability, atau LSM lain yang menolak operasi sama.

Penumpukan kebijakan mengikuti prinsip serupa. Di dalam satu lapisan, rule yang berlaku dapat memberikan handled right. Di antara seluruh lapisan yang sudah diterapkan, setiap lapisan harus mengizinkan akses. Child dapat menjadi lebih terbatas daripada parent, tetapi lapisan baru tidak dapat keluar dari pembatasan warisan.

no_new_privs menutup transisi privilege saat eksekusi

Untuk proses tanpa privilege, enforcement Landlock memerlukan perlindungan terhadap kenaikan privilege melalui eksekusi. Secara tradisional proses menetapkan no_new_privs sebelum landlock_restrict_self(). ABI Landlock yang lebih baru juga menyediakan flag pembatasan yang dapat mengikat no_new_privs dengan keberhasilan enforcement ruleset.

Tanpa batas ini, proses dapat membatasi dirinya lalu menjalankan program set-user-ID, set-group-ID, atau file-capability dalam lingkungan yang tidak diperkirakan program berprivilege tersebut. Program itu dapat berubah menjadi confused deputy di dalam domain yang dipaksakan pemanggil.

no_new_privs tidak dapat dibalik dan diwariskan melalui fork(), clone(), serta execve(). Kontrak execve() mencegah transisi tersebut memberikan privilege yang tidak tersedia sebelumnya. Flag itu sendiri tidak menghapus privilege yang sudah ada atau mencabut otoritas dari resource yang sudah dipegang proses.

Rule filesystem mengikuti hierarki, bukan teks pathname

Kebijakan filesystem Landlock menempelkan access right pada hierarki file. Hal ini berbeda secara material dari memfilter string pathname pada batas syscall. Kernel mengevaluasi akses terhadap objek filesystem dan hubungan hierarki, bukan mempercayai perbandingan string pada level aplikasi.

Handled right membedakan operasi seperti membaca file, membaca direktori, mengeksekusi file, membuat atau menghapus entry, melakukan truncate, serta mereferensikan objek lintas direktori jika didukung ABI aktif. Kebijakan dapat membuat satu subtree hanya dapat dibaca, subtree lain dapat ditulis, dan membiarkan handled access di tempat lain tetap ditolak.

Rename dan link memerlukan perhatian khusus karena keduanya mengubah hubungan namespace. Landlock memiliki penanganan khusus untuk operasi refer lintas direktori agar kebijakan dapat membatasi perpindahan antarhierarki. Hak yang asimetris pada direktori sumber dan tujuan perlu memperhitungkan semantik tersebut, bukan menganggap rename sebagai write biasa.

Descriptor yang sudah ada dapat mempertahankan otoritas lama

Waktu penerapan confinement memengaruhi hasil. Pemeriksaan Landlock tidak secara retroaktif membatalkan setiap file descriptor yang diperoleh sebelum domain diterapkan. Proses yang membuka file sensitif lalu baru masuk ke domain restriktif dapat tetap memiliki otoritas berguna melalui descriptor tersebut.

Kebijakan yang diterapkan setelah resource diperoleh tidak dapat diasumsikan menghapus capability sebelumnya. Aplikasi sebaiknya menetapkan confinement sebelum menerima pekerjaan tidak tepercaya dan sebelum membuka resource yang tidak semestinya dipertahankan pada fase terbatasi.

Pewarisan descriptor juga relevan. Landlock dapat membatasi akuisisi berbasis path pada masa berikutnya, sementara socket, directory descriptor, atau writable file descriptor yang diwariskan tetap menjadi jalur langsung ke resource yang sudah diperoleh. FD_CLOEXEC, penutupan descriptor secara eksplisit, arsitektur proses, dan kebijakan Landlock menangani bagian berbeda dari grafik otoritas yang sama.

Cakupan thread membuat urutan setup relevan bagi keamanan

Pembatasan Landlock dasar berlaku pada thread pemanggil. Turunan yang dibuat dari thread tersebut mewarisi domain Landlock. Existing sibling thread merupakan kasus berbeda: thread itu tidak otomatis berubah hanya karena satu thread membatasi dirinya.

Interface Landlock saat ini menyediakan dukungan sinkronisasi seluruh proses ketika ABI aktif mengimplementasikannya. Aplikasi yang berjalan pada beberapa generasi kernel tetap memerlukan strategi kompatibilitas eksplisit dan harus memeriksa hasil enforcement, bukan mengasumsikan setiap thread sudah masuk ke domain yang dimaksud.

Lifecycle yang terkendali mengurangi ambiguitas: inisialisasi resource yang diperlukan, bentuk kebijakan yang kompatibel dengan kernel aktif, terapkan confinement, periksa keberhasilannya, lalu buka fase terbatasi terhadap input tidak tepercaya atau komponen dengan tingkat kepercayaan lebih rendah.

Pembatasan jaringan mengendalikan otoritas port, bukan packet

Landlock telah berkembang melampaui akses filesystem. ABI yang didukung dapat membatasi operasi bind dan connect TCP, sedangkan ABI lebih baru menambahkan kontrol UDP. Rule tersebut mengendalikan operasi port, bukan inspeksi packet arbitrer.

Kebijakan jaringan Landlock karena itu tidak setara dengan stateful firewall, packet filter, mesin kebijakan DNS, atau network namespace lengkap. Landlock mempersempit operasi socket tertentu yang tersedia bagi proses, sementara routing, packet filtering, autentikasi peer, dan semantik protokol tetap diatur di tempat lain.

Deteksi ABI merupakan bagian dari correctness. Kebijakan yang bergantung pada network right dari ABI lebih baru tidak boleh menyatakan kernel lama menerapkan right tersebut. Kompatibilitas best-effort tetap dapat memberi hardening berguna, tetapi properti keamanan wajib membutuhkan capability minimum yang eksplisit.

Landlock dan seccomp membatasi boundary yang berbeda

Filter seccomp mengendalikan syscall entry berdasarkan metadata syscall dan action filter. Landlock membuat keputusan kontrol akses terhadap objek dan operasi kernel yang didukung. Kombinasi keduanya dapat mengurangi attack surface dengan cara yang saling melengkapi.

Proses dapat memakai seccomp untuk menolak keluarga syscall yang tidak diperlukan, sementara Landlock membatasi hierarki file dan port jaringan yang tetap dapat dicapai melalui syscall yang diizinkan. Tidak satu pun lapisan membawa jaminan milik lapisan lain. Mengizinkan openat() di seccomp tidak membuat setiap path dapat diakses ketika Landlock menolaknya; mengizinkan hierarki di Landlock tidak mewajibkan seccomp mengizinkan syscall yang dipakai untuk mencapainya.

Pemisahan ini mengurai klaim luas bahwa proses sudah di-sandbox menjadi pertanyaan konkret mengenai permukaan syscall, otoritas objek, descriptor warisan, kredensial, namespace, dan layanan eksternal.

Kebijakan kompatibilitas menentukan mode kegagalan

Landlock dirancang untuk aplikasi yang berjalan pada versi kernel dengan kemampuan ABI berbeda. Graceful degradation dimungkinkan, tetapi tidak otomatis menjadi pilihan aman.

Untuk defense in depth opsional, aplikasi dapat melanjutkan operasi dengan pembatasan Landlock yang lebih sedikit pada kernel lama. Jika batas Landlock tertentu wajib sebelum data berbahaya diproses, ketiadaan ABI yang diperlukan atau kegagalan landlock_restrict_self() mungkin perlu dianggap fatal. Keputusan itu berasal dari threat model aplikasi.

Integrasi yang kuat mencatat right yang diminta, ABI yang tersedia, dan keberhasilan enforcement. Integrasi tidak mengklaim perlindungan untuk right yang tidak didukung serta menjaga perilaku fallback tetap eksplisit. Setelah enforcement berhasil, lapisan Landlock hanya dapat mempersempit otoritas proses; kontrol akses Linux lainnya tetap berpartisipasi dalam keputusan yang relevan.