ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ OpenPaX Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Grsecurity/PaX для ядра Linux

Компания Edera, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ инфраструктуры Kubernetes ΠΈ AI-систСм, прСдставила ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ OpenPaX, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΊ ядру Linux с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² противодСйствия эксплуатации уязвимостСй, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… ошибками ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. OpenPaX позиционируСтся ΠΊΠ°ΠΊ распространяСмый Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΎΠ³ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°Ρ‡Ρ‚Π΅ΠΉ PaX ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Grsecurity, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с 2017 Π³ΠΎΠ΄Π° поставляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² составС ΠΏΠ»Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Наработки OpenPaX ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ дистрибутива Alpine Linux Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ выпускС 3.21 ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ сборку ядра с ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ OpenPaX, Π° Π² выпускС 3.22 пСрСвСсти Π΅Ρ‘ Π² разряд ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ. OpenPaX Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован дистрибутивами Gentoo ΠΈ Arch Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ядра Linux с ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ PaX. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ OpenPaX Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π΄Π΅ΡŽΡ‚ΡΡ Π½Π° пСрСнос Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π² основной состав ядра.

Из Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² OpenPaX возмоТностСй ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π΅ страниц памяти ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° W^X (write XOR execute), Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΌ созданиС страниц памяти, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ доступных Π½Π° запись ΠΈ исполнСниС, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ смСну Ρ‚ΠΈΠΏΠ° ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° страниц с записи Π½Π° исполнСниС. Π’Π°ΠΊΠΆΠ΅ Π² OpenPaX присутствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ эмуляции, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стСк ΠΈ ΠΊΡƒΡ‡Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ исполнСниС ΠΊΠΎΠ΄Π°, с функциями-Ρ‚Ρ€Π°ΠΌΠΏΠ»ΠΈΠ½Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ libffi ΠΈΠ»ΠΈ GCC (ΡΡƒΡ‚ΡŒ Ρ‚Ρ€Π°ΠΌΠΏΠ»ΠΈΠ½ΠΎΠ² Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ для Π²Ρ‹Π·ΠΎΠ²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСски создаётся ΠΈ выполняСтся Π² стСкС). Эмуляция Ρ‚Ρ€Π°ΠΌΠΏΠ»ΠΈΠ½ΠΎΠ² производится Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (page fault) ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ запуска ΠΊΠΎΠ΄Π° Π² нСисполняСмой памяти ΠΈ эмуляции ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ JIT-компиляторов, прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования xattr ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ paxmark для Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ управлСния Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ возмоТностСй OpenPaX Π² привязкС ΠΊ исполняСмым Ρ„Π°ΠΉΠ»Π°ΠΌ. Π’Π°ΠΊΠΆΠ΅ доступСн Ρ€Π΅ΠΆΠΈΠΌ мягкой Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ OpenPaX (sysctl kernel.pax.softmode=1), ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ OpenPaX ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ выпуск модуля ядра LKRG 0.9.9, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Openwall ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для выявлСния ΠΈ блокирования Π°Ρ‚Π°ΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдотвращСния Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ цСлостности структур ядра. НапримСр, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚ нСсанкционированного внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ядро ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ измСнСния ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… процСссов (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ примСнСния эксплоитов). ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ эксплоитов ΡƒΠΆΠ΅ извСстных уязвимостСй ядра Linux (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ситуациях ΠΊΠΎΠ³Π΄Π° Π² систСмС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ядро), Ρ‚Π°ΠΊ ΠΈ для противостояния эксплоитам для Π΅Ρ‰Ρ‘ нСизвСстных уязвимостСй. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2. Об особСнностях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ LKRG ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ анонсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии обСспСчСна ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ядрами Linux 5.10.220+, 6.10.10+, 6.11 ΠΈ 6.12-rc, Π° Ρ‚Π°ΠΊΠΆΠ΅ с ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ с ядром 5.14.0-470.el9+, поставляСмыми Π² CentOS Stream 9 ΠΈ RHEL 9. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ядрами собранными Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ «CONFIG_JUMP_LABEL» Π½Π° систСмах с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ARM64.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru