У ядро ​​Linux 5.4 прыняты патчы для абмежавання доступу root да вантроб ядра

Лінус Торвальдс прыняў у склад будучага выпуску ядра Linux 5.4 набор патчаўблакаваннямі», прапанаваны Дэвідам Хоуэлсам (David Howells, працуе ў Red Hat) і Мэцью Гарэтам (Мэцью Гарэт, працуе ў Google) для абмежавання доступу карыстальніка root да ядра. Звязаная з «lockdown» функцыянальнасць вынесена ў апцыянальна загружаны LSM-модуль (Linux Security Module), які ўсталёўвае бар'ер паміж UID 0 і ядром, абмяжоўваючы пэўную нізкаўзроўневую функцыянальнасць.

Калі зламыснік у выніку напады дамогся выкананні кода з правамі root, то ён можа выканаць свой код і на ўзроўні ядра, напрыклад, праз замену ядра пры дапамозе kexec або чытанні/запісы памяці праз /dev/kmem. Найбольш відавочным следствам падобнай актыўнасці можа стаць абыход UEFI Secure Boot або выманне канфідэнцыйных дадзеных, якія захоўваюцца на ўзроўні ядра.

Першапачаткова функцыі абмежавання root развіваліся ў кантэксце ўзмацнення абароны верыфікаванай загрузкі і дыстрыбутывы ўжо досыць даўно ўжываюць іншыя патчы для блакавання абыходу UEFI Secure Boot. Пры гэтым у асноўны склад ядра падобныя абмежаванні не ўключаліся з-за рознагалоссяў у іх рэалізацыі і асцярог парушэнні працы існуючых сістэм. Модуль "lockdown" увабраў у сябе ўжо выкарыстоўваныя ў дыстрыбутывах патчы, якія былі перапрацаваны ў форме асобнай падсістэмы, не прывязанай да UEFI Secure Boot.

У рэжыме lockdown абмяжоўваецца доступ да /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, адладкавага рэжыму kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS (Card Information Structure), некаторых інтэрфейсаў ACPI і MSR-рэгістрам CPU, блакуюцца выклікі kexec_file і kexec_load, забараняецца пераход у спячы рэжым, лімітуецца выкарыстанне DMA для PCI-прылад, забараняецца імпарт кода ACPI са зменных EFI,
не дапушчаюцца маніпуляцыі з партамі ўводу/высновы, у тым ліку змена нумара перапынення і порта ўводу/высновы для паслядоўнага порта.

Па змаўчанні модуль lockdown не актыўны, збіраецца пры ўказанні ў kconfig опцыі SECURITY_LOCKDOWN_LSM і актывуецца праз параметр ядра "lockdown=", кіравальны файл "/sys/kernel/security/lockdown" або зборачныя опцыі LOCK_DOWN_KERNEL_FORCE_*, якія могуць прымаць значэння "integrity" і "confidentiality". У першым выпадку блакуюцца магчымасці, якія дазваляюць уносіць змены ў працавальнае ядро ​​з прасторы карыстача, а ў другім выпадку апроч гэтага адключаецца функцыянальнасць, якую можна выкарыстаць для вымання канфідэнцыйнай інфармацыі з ядра.

Пры гэтым важна адзначыць, што lockdown толькі абмяжоўвае штатныя магчымасці доступу да ядра, але не абараняе ад мадыфікацый у выніку эксплуатацыі ўразлівасцяў. Для блакавання занясення змен у працавальнае ядро ​​пры ўжыванні эксплоітаў праектам Openwall развіваецца асобны модуль LKRG (Linux Kernel Runtime Guard).

Крыніца: opennet.ru

Дадаць каментар