Выпуск модуля LKRG 0.8 для абароны ад эксплуатацыі ўразлівасцяў у ядры Linux

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

Сярод змен у новай версіі:

  • Зменена пазіцыянаванне праекту LKRG, які зараз не падзяляецца на асобныя падсістэмы для праверкі цэласнасці і азначэнні ўжывання эксплоітаў, а падаецца як суцэльны прадукт для выяўлення нападаў і розных парушэнняў цэласнасці;
  • Забяспечаная сумяшчальнасць з ядрамі Linux з 5.3 па 5.7, а таксама з ядрамі, сабранымі з агрэсіўнымі аптымізацыямі GCC, без опцый CONFIG_USB і CONFIG_STACKTRACE або з опцыяй CONFIG_UNWINDER_ORC, а таксама з ядрамі, у якіх адсутнічаюць перахоп
  • Пры зборцы забяспечана праверка некаторых абавязковых налад ядра CONFIG_* для фармавання асэнсаваных паведамленняў пра памылкі замест невыразных збояў;
  • Дададзена падтрымка які чакае (ACPI S3, suspend to RAM) і спячага (S4, suspend to disk) рэжымаў;
  • У Makefile дададзена падтрымка DKMS;
  • Рэалізавана эксперыментальная падтрымка 32-разрадных платформаў ARM (пратэставана на Raspberry Pi 3 Model B). Раней даступная падтрымка AArch64 (ARM64) дапоўнена забеспячэннем сумяшчальнасці з платай Raspberry Pi 4;
  • Дададзеныя новыя апрацоўшчыкі (hook), у тым ліку апрацоўшчык выкліку capable() для лепшага вызначэння эксплоітаў, якія маніпулююць.магчымасці“, а не ідэнтыфікатарамі працэсаў (даверчыя граматы);
  • Прапанавана новая логіка вызначэння спроб выхаду з абмежаванняў прастор імёнаў (напрыклад, з кантэйнераў Docker);
  • На сістэмах x86-64 забяспечана праверка і ўжыванне біта SMAP (Supervisor Mode Access Prevention), прызначанага для блакавання доступу да дадзеных у прасторы карыстача з прывілеяванага кода, выкананага на ўзроўні ядра. Абарона SMEP (Supervisor Mode Execution Prevention) была рэалізавана раней;
  • У працэсе працы забяспечана размяшчэнне налад LKRG у старонцы памяці, звычайна даступнай толькі для чытання;
  • Выснова ў логі звестак, якія могуць быць найболей карысныя для нападаў (напрыклад, інфармацыя аб адрасах у ядры), абмежаваны адладкавым рэжымам (log_level=4 і вышэй), адключаным па змаўчанні.
  • Павышана маштабаванасць БД адсочвання працэсаў - замест аднаго дрэва RB, які абараняецца адным spinlock, задзейнічана хэш табліца з 512 дрэў RB, абароненых адпаведна 512 блакіроўкамі чытання-запісы;
  • Рэалізаваны і ўключаны па змаўчанні рэжым, пры якім праверка цэласнасці ідэнтыфікатараў працэсу часта выконваецца толькі для бягучай задачы, а таксама апцыянальна для актываваных (які прачынаецца) задач. Для астатніх задач, змешчаных у стане сну ці якія працуюць без звароту кантраляванаму ў LKRG API ядра, праверка выконваецца радзей.
  • Дададзены новыя sysctl і параметры модуля для тонкай налады LKRG, а таксама два sysctl для спрошчанай налады шляхам выбару з падрыхтаваных распрацоўшчыкамі набораў тонкіх налад (profiles);
  • Налады па змаўчанні зменены для дасягнення больш узважанага балансу паміж аператыўнасцю выяўлення парушэнняў і эфектыўнасцю рэакцыі з аднаго боку, і ўплывам на прадукцыйнасць і рызыкай ілжывых спрацоўванняў з другога;
  • Unit-файл systemd перапрацаваны для загрузкі модуля LKRG на раннім этапе загрузкі (для адключэння модуля можа выкарыстоўвацца параметр каманднага радка ядра);

З улікам прапанаваных у новым выпуску аптымізацый зніжэнне прадукцыйнасці пры ўжыванні LKRG 0.8 ацэньваецца на ўзроўні 2.5% у рэжыме па змаўчанні ("heavy") і 2% у аблегчаным рэжыме ("light").

У нядаўна праведзеным даследаванні эфектыўнасці пакетаў для выяўлення руткітаў LKRG паказаў лепшыя вынікі, без ілжывых спрацоўванняў вызначыўшы 8 з 9 пратэставаных руткікаў, якія працуюць на ўзроўні ядра (былі выяўлены руткіты Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit і Sutekh я, але прапушчаны з кейлоггерам, а не руткітам у прамым сэнсе). Для параўнання, пакеты AIDE, OSSEC і Rootkit Hunter выявілі 2 руткіта з 9, а Chkrootkit не выявіў ніводнага. Пры гэтым LKRG не падтрымлівае вызначэнне руткітаў, якія размяшчаюцца ў прасторы карыстальніка, таму найбольшая эфектыўнасць дасягаецца пры выкарыстанні звязкі AIDE і LKRG, якая дазволіла выявіць 14 з 15 руткітаў усіх тыпаў.

Дадаткова можна адзначыць што распрацоўшчык дыстрыбутыва Whonix пачаў фарміраванне гатовых пакетаў з DKMS для Debian, Whonix, Qubes і Kicksecure, а пакет для Arch Linux ужо абноўлены да версіі 0.8. Пакеты з LKRG таксама прысутнічаюць у расейскіх Альтэрнатыўны Linux и AstraLinux.

Праверка цэласнасці ў LKRG выконваецца на аснове параўнання актуальнага кода і дадзеных ядра і модуляў, некаторых важных структур дадзеных і налад CPU з захаванымі хэшамі ці копіямі адпаведных абласцей памяці, структур дадзеных або рэгістраў. Праверкі актывуюцца як перыядычна па таймеры, так і пры надыходзе розных падзей.

Вызначэнне магчымага прымянення эксплоітаў і блакаванне нападаў вырабляецца на стадыі да прадастаўлення ядром доступу да рэсурсаў (напрыклад, да адкрыцця файла), але пасля атрымання працэсам несанкцыянаваных паўнамоцтваў (напрыклад, змена UID). Пры выяўленні несанкцыянаваных паводзін працэсаў па змаўчанні выконваецца іх прымусовае завяршэнне, чаго дастаткова для блакіравання многіх эксплоітаў.

Крыніца: opennet.ru

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