Linux 5.4 yadrosi yadro ichki qismlariga ildiz kirishini cheklash uchun yamoqlarni oldi

Linus Torvalds qabul qildi Linux 5.4 yadrosining yaqinlashib kelayotgan versiyasiga yamoqlar to'plami kiritilgan "qulfini", taklif qilingan Devid Xouells (Qizil shapka) va Metyu Garret (Metyu Garret, Google da ishlaydi) yadroga ildiz foydalanuvchi kirishini cheklash uchun. Bloklash bilan bog'liq funksiya ixtiyoriy ravishda yuklangan LSM moduliga kiritilgan (Linux xavfsizlik moduli), bu UID 0 va yadro o'rtasida to'siq qo'yib, ma'lum bir past darajadagi funksionallikni cheklaydi.

Agar tajovuzkor ildiz huquqlari bilan kod bajarilishiga erishsa, u o'z kodini yadro darajasida bajarishi mumkin, masalan, kexec yordamida yadroni almashtirish yoki /dev/kmem orqali xotirani o'qish/yozish. Bunday faoliyatning eng aniq natijasi bo'lishi mumkin aylanma yo'l UEFI Secure Boot yoki yadro darajasida saqlangan nozik ma'lumotlarni olish.

Dastlab, ildizni cheklash funktsiyalari tasdiqlangan yuklash himoyasini kuchaytirish kontekstida ishlab chiqilgan va tarqatishlar ancha vaqtdan beri UEFI Secure Boot-ni chetlab o'tishni bloklash uchun uchinchi tomon yamoqlaridan foydalanmoqda. Shu bilan birga, bunday cheklovlar yadroning asosiy tarkibiga kiritilmagan kelishmovchiliklar ularni amalga oshirishda va mavjud tizimlarning buzilishidan qo'rqish. "Qulflash" moduli UEFI Secure Boot bilan bog'lanmagan alohida quyi tizim ko'rinishida qayta ishlab chiqilgan tarqatishda allaqachon ishlatilgan yamoqlarni o'zlashtirdi.

Bloklash rejimi /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, kprobes disk raskadrovka rejimi, mmiotrace, tracefs, BPF, PCMCIA CIS (Card Information Structure), baʼzi ACPI interfeyslari va protsessorlarga kirishni cheklaydi. MSR registrlari, kexec_file va kexec_load qo'ng'iroqlari bloklangan, uyqu rejimi taqiqlangan, PCI qurilmalari uchun DMA foydalanish cheklangan, EFI o'zgaruvchilardan ACPI kodini import qilish taqiqlangan,
I/U portlari bilan manipulyatsiyaga ruxsat berilmaydi, shu jumladan uzilish raqamini va ketma-ket port uchun kirish/chiqish portini o'zgartirish.

Odatiy bo'lib, blokirovka moduli faol emas, u SECURITY_LOCKDOWN_LSM parametri kconfig da ko'rsatilganda quriladi va yadro parametri "lockdown =", "/sys/kernel/security/lockdown" boshqaruv fayli yoki yig'ish opsiyalari orqali faollashtiriladi. LOCK_DOWN_KERNEL_FORCE_*, bu "yaxlitlik" va "maxfiylik" qiymatlarini qabul qilishi mumkin. Birinchi holda, foydalanuvchi maydonidan ishlaydigan yadroga o'zgartirishlar kiritish imkonini beruvchi funksiyalar bloklanadi, ikkinchi holatda esa yadrodan nozik ma'lumotlarni olish uchun ishlatilishi mumkin bo'lgan funksionallik ham o'chiriladi.

Shuni ta'kidlash kerakki, blokirovka faqat yadroga standart kirishni cheklaydi, ammo zaifliklardan foydalanish natijasida o'zgarishlardan himoya qilmaydi. Openwall loyihasi tomonidan ekspluatatsiyalardan foydalanilganda ishlaydigan yadrodagi o'zgarishlarni bloklash uchun rivojlanmoqda alohida modul LKRG (Linux Kernel Runtime Guard).

Manba: opennet.ru

a Izoh qo'shish