„Linux 5.4“ branduolys gavo pataisas, skirtas apriboti šakninę prieigą prie branduolio vidinių elementų

Linas Torvaldsas priimtas Į būsimą Linux 5.4 branduolio leidimą įtrauktas pataisų rinkinys "Lockdown", pasiūlė Davidas Howellsas („Red Hat“) ir Matthew Garrettas (Matthew garrettas, dirba „Google“), kad apribotų šakninio vartotojo prieigą prie branduolio. Su užraktu susijusios funkcijos įtrauktos į pasirinktinai įkeliamą LSM modulį (Linux saugos modulis), kuris sudaro barjerą tarp UID 0 ir branduolio, ribojantį tam tikras žemo lygio funkcijas.

Jei užpuolikas pasiekia kodo vykdymą su root teisėmis, jis gali vykdyti savo kodą branduolio lygiu, pavyzdžiui, pakeisdamas branduolį naudodamas kexec arba skaitydamas / rašydamas atmintį per /dev/kmem. Akivaizdžiausia tokios veiklos pasekmė gali būti Apeiti UEFI saugus įkrovimas arba slaptų duomenų, saugomų branduolio lygiu, gavimas.

Iš pradžių šakninių apribojimų funkcijos buvo sukurtos siekiant sustiprinti patikrintos įkrovos apsaugą, o platintojai jau ilgą laiką naudoja trečiųjų šalių pataisas, kad blokuotų UEFI saugaus įkrovos apėjimą. Tuo pačiu metu tokie apribojimai nebuvo įtraukti į pagrindinę branduolio sudėtį dėl nesutarimų jų įgyvendinimo ir baimės, kad gali sutrikti esamos sistemos. „Užrakinimo“ modulis absorbavo platinimuose jau naudojamas pataisas, kurios buvo perkurtos į atskirą posistemį, nesusietą su UEFI Secure Boot.

Užrakinimo režimas apriboja prieigą prie /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, kprobes derinimo režimo, mmiotrace, tracefs, BPF, PCMCIA CIS (kortelės informacijos struktūros), kai kurių ACPI sąsajų ir procesoriaus MSR registrai, kexec_file ir kexec_load iškvietimai blokuojami, miego režimas draudžiamas, DMA naudojimas PCI įrenginiams ribojamas, ACPI kodo importas iš EFI kintamųjų draudžiamas,
Manipuliacijos su I/O prievadais neleidžiamos, įskaitant nuosekliojo prievado pertraukimo numerio ir I/O prievado keitimą.

Pagal numatytuosius nustatymus blokavimo modulis nėra aktyvus, jis sukuriamas, kai kconfig nurodyta parinktis SECURITY_LOCKDOWN_LSM ir aktyvuojama naudojant branduolio parametrą „lockdown=“, valdymo failą „/sys/kernel/security/lockdown“ arba surinkimo parinktis. LOCK_DOWN_KERNEL_FORCE_*, kuris gali turėti vertybes „vientisumas“ ir „konfidencialumas“. Pirmuoju atveju blokuojamos funkcijos, leidžiančios keisti veikiantį branduolį iš vartotojo erdvės, o antruoju atveju taip pat išjungiamos funkcijos, kuriomis galima išgauti jautrią informaciją iš branduolio.

Svarbu pažymėti, kad užrakinimas riboja tik standartinę prieigą prie branduolio, bet neapsaugo nuo pakeitimų, atsirandančių dėl pažeidžiamumų išnaudojimo. Užblokuoti veikiančio branduolio pakeitimus, kai Openwall projektas naudoja išnaudojimus vystosi atskiras modulis LKRG („Linux Kernel Runtime Guard“).

Šaltinis: opennet.ru

Добавить комментарий