Hai semua. Kami sedang giat bekerja dan sedang menyediakan banyak pelancaran hebat pada bulan Januari. Antara lain, pendaftaran telah diumumkan untuk aliran baharu kursus kegemaran semua orang.
Kebenaran fail menawarkan alternatif yang selamat kepada boleh laku SUID, tetapi boleh kelihatan agak mengelirukan pada mulanya.
Kita semua tahu bahawa binari
Saya akan menjimatkan masa anda jika anda ingin mengelak daripada membaca artikel di atas secara terperinci: Pada asasnya, kebenaran fail membenarkan proses yang dijalankan sebagai akar dan oleh itu dibenarkan melakukan sesuatu untuk mengekalkan keupayaan tertentu, terhad
Keizinan bagus untuk perkhidmatan yang biasanya sentiasa dijalankan sebagai root, tetapi bagaimana pula dengan utiliti baris arahan? Nasib baik, ini juga disokong dengan syarat anda mempunyai utiliti yang betul dipasang. Jika anda menggunakan Ubuntu, contohnya anda memerlukan pakej tersebut libcap2-bin
. Anda juga perlu menjalankan kernel bukan kuno (dari versi 2.6.24).
Fungsi ini membenarkan kebenaran untuk dikaitkan dengan fail boleh laku, sama seperti menetapkan bit SUID, tetapi hanya untuk set kebenaran tertentu. Utiliti setcap
digunakan untuk menambah dan mengalih keluar kebenaran daripada fail.
Langkah pertama ialah memilih kebenaran yang anda perlukan. Demi artikel ini, saya mengandaikan bahawa terdapat alat diagnostik rangkaian yang dipanggil tracewalk
, yang sepatutnya boleh digunakan CAP_NET_RAW
.
Dengan mengandaikan anda berada dalam direktori di mana binari berada tracewalk
, anda boleh menambah kebenaran ini seperti ini:
sudo setcap cap_net_raw=eip tracewalk
Abaikan akhiran buat masa ini =eip
untuk penyelesaian, saya akan bercakap tentang perkara itu dalam beberapa saat. Ambil perhatian bahawa nama kebenaran adalah dalam huruf kecil. Anda kini boleh menyemak sama ada anda telah mengkonfigurasi kebenaran dengan betul dengan:
setcap -v cap_new_raw=eip tracewalk
Atau anda boleh menyenaraikan semua kebenaran yang ditetapkan untuk boleh laku yang diberikan:
getcap tracewalk
Untuk rujukan, anda juga boleh mengalih keluar semua kebenaran daripada boleh laku dengan:
setcap -r tracewalk
Pada ketika ini, anda sepatutnya boleh menjalankan boleh laku sebagai pengguna yang tidak mempunyai hak istimewa, dan ia sepatutnya boleh berfungsi dengan soket mentah, tetapi tidak mempunyai sebarang keistimewaan lain yang dimiliki oleh pengguna root.
Jadi apakah maksud akhiran pelik ini? =eip
? Ini memerlukan sedikit pemahaman tentang sifat kebenaran. Setiap proses mempunyai tiga set kebenaran β berkesan, boleh diwarisi dan dibenarkan:
- Berkesan Kebenaran ialah yang menentukan perkara yang sebenarnya boleh dilakukan oleh sesuatu proses. Sebagai contoh, ia tidak boleh berurusan dengan soket mentah jika
CAP_NET_RAW
tiada dalam set berkesan. - Tersedia kebenaran adalah yang dibenarkan untuk dimiliki oleh proses jika ia memintanya menggunakan panggilan yang sesuai. Mereka menghalang proses daripada benar-benar melakukan apa-apa melainkan ia ditulis secara khusus untuk meminta kebenaran tersebut. Ini membolehkan proses ditulis untuk menambah kebenaran kritikal pada set berkesan hanya untuk tempoh apabila ia sebenarnya diperlukan.
- Boleh diwarisi kebenaran ialah kebenaran yang boleh diwarisi dalam set boleh diakses proses anak bertelur. Semasa pembedahan
fork()
atauclone()
proses anak sentiasa diberi salinan kebenaran proses induk kerana proses itu masih menjalankan boleh laku yang sama pada ketika itu. Set yang boleh diwarisi digunakan apabilaexec()
(atau setara) dipanggil untuk menggantikan fail boleh laku dengan yang lain. Pada ketika ini, set proses yang tersedia disembunyikan oleh set boleh diwarisi untuk mendapatkan set boleh diakses yang akan digunakan untuk proses baharu.
Jadi utiliti setcap
membolehkan kami menambah kebenaran ketiga-tiga set ini secara bebas untuk boleh laku yang diberikan. Ambil perhatian bahawa makna kumpulan ditafsirkan sedikit berbeza untuk kebenaran fail:
- Ada kebenaran fail ialah yang sentiasa tersedia untuk fail boleh laku, walaupun proses induk yang memanggilnya tidak mempunyainya. Mereka pernah dipanggil permit "terpaksa".
- diwarisi kebenaran fail menentukan topeng tambahan yang juga boleh digunakan untuk mengalih keluar kebenaran daripada set proses panggilan. Ia digunakan sebagai tambahan kepada set warisan proses panggilan, jadi kebenaran diwarisi hanya jika ia wujud dalam kedua-dua set.
- Berkesan kebenaran fail sebenarnya hanyalah satu bit, bukan satu set, dan jika ditetapkan, ini bermakna keseluruhan set yang tersedia juga disalin ke dalam set berkesan proses baharu. Ini boleh digunakan untuk menambah kebenaran kepada proses yang tidak ditulis secara khusus untuk memintanya. Oleh kerana ia adalah sedikit, jika anda menetapkannya untuk sebarang kebenaran, ia mesti ditetapkan untuk semua kebenaran. Anda boleh menganggapnya sebagai bit warisan kerana ia digunakan untuk membenarkan kebenaran digunakan oleh aplikasi yang tidak menyokongnya.
Apabila menyatakan kebenaran melalui setcap
tiga huruf e
, i
ΠΈ p
rujuk berkesan, boleh diwarisi dan boleh diakses set masing-masing. Jadi, spesifikasi awal:
sudo setcap cap_net_raw=eip tracewalk
... menunjukkan bahawa resolusi CAP_NET_RAW
mesti ditambah kepada set yang tersedia dan boleh diwarisi dan bit berkesan juga mesti ditetapkan. Ini akan mengatasi mana-mana kebenaran yang ditetapkan sebelum ini pada fail. Untuk menetapkan berbilang kebenaran serentak, gunakan senarai yang dipisahkan koma:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
Pertama, keupayaan fail tidak berfungsi dengan pautan sym - anda perlu menggunakannya pada fail binari itu sendiri (iaitu sasaran symlink).
Kedua, mereka tidak berfungsi dengan skrip yang ditafsirkan. Sebagai contoh, jika anda mempunyai skrip Python yang ingin anda berikan kebenaran, anda mesti menyerahkannya kepada penterjemah Python itu sendiri. Jelas sekali ini adalah isu keselamatan yang berpotensi kerana kemudian semua skrip yang dilaksanakan dengan penterjemah itu akan mempunyai kebenaran yang ditentukan, walaupun ini masih jauh lebih baik daripada menjadikannya SUID. Penyelesaian yang paling biasa nampaknya ialah menulis boleh laku yang berasingan dalam C atau setara yang boleh melaksanakan operasi yang diperlukan dan memanggilnya daripada skrip. Ini sama dengan pendekatan yang digunakan oleh Wireshark yang menggunakan binari /usr/bin/dumpcap
untuk melaksanakan operasi istimewa:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
Ketiga, kebenaran fail dilumpuhkan jika anda menggunakan pembolehubah persekitaran LD_LIBRARY_PATH
atas sebab keselamatan yang jelas(1). Perkara yang sama berlaku untuk LD_PRELOAD
, setakat yang saya tahu.
1. Memandangkan penyerang jelas boleh menggantikan salah satu perpustakaan standard dan penggunaan LD_LIBRARY_PATH
untuk memaksa perpustakaannya dipanggil mengikut keutamaan kepada sistem satu, dan oleh itu mempunyai kod sewenang-wenangnya sendiri yang dilaksanakan dengan keistimewaan yang sama seperti aplikasi panggilan.
Itu sahaja. Butiran lanjut tentang program kursus boleh didapati di
Sumber: www.habr.com