Linux ядросындағы осалдықтарды пайдаланудан қорғау үшін LKRG 0.8 модулінің шығарылымы

Openwall жобасы жарияланған ядро модулінің шығарылымы LKRG 0.8 (Linux Kernel Runtime Guard), шабуылдарды және ядро ​​құрылымдарының тұтастығын бұзуды анықтауға және блоктауға арналған. Мысалы, модуль жұмыс істеп тұрған ядроға рұқсат етілмеген өзгерістерден және пайдаланушы процестерінің рұқсаттарын өзгерту әрекеттерінен қорғай алады (эксплейттерді пайдалануды анықтау). Модуль Linux ядросы үшін бұрыннан белгілі эксплойттерден қорғауды ұйымдастыру үшін де (мысалы, жүйеде ядроны жаңарту қиын болған жағдайларда) және әлі белгісіз осалдықтардың эксплойттеріне қарсы тұру үшін де қолайлы. Жоба коды таралады GPLv2 бойынша лицензияланған.

Жаңа нұсқадағы өзгерістердің ішінде:

  • LKRG жобасының позициясы өзгертілді, ол енді тұтастықты тексеру және эксплуаттарды пайдалануды анықтау үшін бөлек ішкі жүйелерге бөлінбейді, бірақ шабуылдар мен әртүрлі тұтастықты бұзуды анықтауға арналған толық өнім ретінде ұсынылады;
  • Үйлесімділік 5.3-тен 5.7-ге дейінгі Linux ядроларымен, сондай-ақ CONFIG_USB және CONFIG_STACKTRACE опциялары жоқ немесе CONFIG_UNWINDER_ORC опциялары жоқ агрессивті GCC оңтайландыруларымен құрастырылған ядролармен, сондай-ақ LKR функциясы жоқ ядролармен қамтамасыз етілген. бас тарту;
  • Құру кезінде кейбір міндетті CONFIG_* ядро ​​параметрлері түсініксіз бұзылулардың орнына мағыналы қате туралы хабарларды жасау үшін тексеріледі;
  • Күту режимі (ACPI S3, жедел жадқа тоқтата тұру) және ұйқы (S4, дискіге тоқтату) режимдеріне қолдау қосылды;
  • Makefile файлына DKMS қолдауы қосылды;
  • 32-биттік ARM платформаларына эксперименттік қолдау енгізілді (Raspberry Pi 3 Model B-де сыналған). Бұрын қол жетімді AArch64 (ARM64) қолдауы Raspberry Pi 4 тақтасымен үйлесімділікті қамтамасыз ету үшін кеңейтілді;
  • Жаңа ілгектер қосылды, оның ішінде манипуляция жасайтын эксплуаттарды жақсырақ анықтау үшін capable() қоңырау өңдеушісі бар.мүмкіндіктері", өңдеу идентификаторлары емес (куәлік);
  • Атау кеңістігінің шектеулерінен құтылу әрекеттерін анықтау үшін жаңа логика ұсынылды (мысалы, Docker контейнерлерінен);
  • x86-64 жүйелерінде ядро ​​деңгейінде жұмыс істейтін артықшылықты кодтан пайдаланушы кеңістігінің деректеріне кіруді блоктауға арналған SMAP (Супервизор режиміне кіруді болдырмау) биті тексеріледі және қолданылады. SMEP (Supervisor Mode Execution Prevention) қорғауы бұрын енгізілген;
  • Жұмыс барысында LKRG параметрлері әдетте тек оқуға арналған жад бетіне орналастырылады;
  • Шабуылдар үшін ең пайдалы болуы мүмкін ақпаратты тіркеу (мысалы, ядродағы мекенжайлар туралы ақпарат) әдепкі бойынша өшірілген отладтау режимімен (log_level=4 және одан жоғары) шектеледі.
  • Процесті қадағалау деректер қорының масштабталатындығы ұлғайтылды - бір спинлокпен қорғалған бір RB ағашының орнына 512 оқу-жазу құлыптарымен қорғалған 512 RB ағашының хэш кестесі пайдаланылады;
  • Режим әдепкі бойынша енгізілді және қосылды, онда процесс идентификаторларының тұтастығы тек ағымдағы тапсырма үшін, сондай-ақ белсендірілген (ояту) тапсырмалар үшін жиі тексеріледі. Ұйқы күйіндегі немесе LKRG басқаратын API ядросына қатынаусыз жұмыс істейтін басқа тапсырмалар үшін тексеру сирек орындалады.
  • LKRG дәл баптау үшін жаңа sysctl және модуль параметрлері, сондай-ақ әзірлеушілер дайындаған дәл баптау параметрлері (профильдер) жинағынан таңдау арқылы жеңілдетілген конфигурацияға арналған екі жүйе қосылды;
  • Әдепкі параметрлер бір жағынан бұзушылықтарды анықтау жылдамдығы мен жауап беру тиімділігі, екінші жағынан өнімділікке әсер ету және жалған позитивтердің пайда болу қаупі арасындағы теңгерімді теңгерімге қол жеткізу үшін өзгертілді;
  • Жүйелік блок файлы LKRG модулін жүктеудің басында жүктеу үшін қайта жасалды (модульді өшіру үшін ядро ​​​​пәрмен жолы опциясын пайдалануға болады);

Жаңа шығарылымда ұсынылған оңтайландыруларды ескере отырып, LKRG 0.8 пайдалану кезінде өнімділіктің төмендеуі әдепкі режимде («ауыр») 2.5%-ға және жеңіл режимде («жеңіл») 2%-ға бағаланады.

Жақында өткізілген зерттеу LKRG руткиттерін анықтау пакеттерінің тиімділігі көрсетті жалған позитивсіз ядро ​​деңгейінде жұмыс істейтін тексерілген 8 руткиттің 9-ін анықтайтын ең жақсы нәтижелер (rootkits Diamorphine, Honey Pot Bear, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit және Sutekh анықталды, бірақ Keysniffernel болып табылады. модуль, сөзбе-сөз мағынада руткит емес, кейлоггер арқылы өткізіп алынды). Салыстыру үшін, AIDE, OSSEC және Rootkit Hunter пакеттері 2 руткиттің 9-ін анықтады, ал Chkrootkit бірде-біреуін анықтаған жоқ. Бұл ретте LKRG пайдаланушы кеңістігінде орналасқан руткиттерді анықтауды қолдамайды, сондықтан AIDE және LKRG комбинациясын пайдалану кезінде ең жоғары тиімділікке қол жеткізіледі, бұл барлық түрдегі 14 руткиттерден 15-ін анықтауға мүмкіндік берді.

Сонымен қатар, таратушы әзірлеуші ​​екенін атап өтуге болады Whonix басталды қалыптастыру Debian, Whonix, Qubes және Kicksecure үшін DKMS бар дайын пакеттер және Arch Linux 0.8 нұсқасына дейін жаңартылған. LKRG бар пакеттер орыс тілінде де қол жетімді ALT Linux и AstraLinux.

LKRG-де тұтастықты тексеру ядро ​​мен модульдердің нақты коды мен деректерін, кейбір маңызды деректер құрылымдарын және орталық процессор параметрлерін сақталған хэштермен немесе сәйкес жад аумақтарының, деректер құрылымдарының немесе регистрлердің көшірмелерімен салыстыру арқылы жүзеге асырылады. Тексерулер таймер арқылы мерзімді түрде де, әртүрлі оқиғалар орын алған кезде де белсендіріледі.

Эксплойттердің ықтимал пайдалануын анықтау және шабуылдарды блоктау ядро ​​ресурстарға қол жеткізуді қамтамасыз еткенге дейінгі кезеңде (мысалы, файлды ашқанға дейін), бірақ процесс рұқсат етілмеген рұқсаттарды алғаннан кейін (мысалы, UID өзгерту) жүзеге асырылады. Рұқсат етілмеген әрекет анықталған кезде, процестер әдепкі бойынша тоқтатылады, бұл көптеген эксплуаттарды блоктау үшін жеткілікті.

Ақпарат көзі: opennet.ru

пікір қалдыру