PaX
В комп'ютерній безпеці PaX (вим. «Пакс») — це патч до ядра Linux, який надає можливість налаштувати мінімальні права доступу додатків до сторінок пам'яті. Таким чином забезпечується досить тонка настройка, з допомогою якої програмами дозволяється виконувати тільки ті дії, які необхідні, виходячи з наданої ними функціональності, але не більше. PaX був вперше випущений в 2000 році.
PaX позначає сегмент даних програм в пам'яті як недоступний для виконання (через те, що він за визначенням не може містити програмних директив, які необхідно виконати), а сегмент коду — як не перезаписуваний, і, на додачу, при кожному запиті виділяє пам'ять програмі з довільних місць (рандомізація сторінок пам'яті). Ця методика ефективна проти застосування різних експлойтів, які використовують, наприклад, вразливість, засновану на переповненні буфера пам'яті. Такий захист спочатку повністю запобігає прямому виконанню коду з пам'яті, і одночасно, з прикладної точки зору, робить, так звані, return-to-libc (ret2libc) атаки складними для виконання (їх починають використовувати швидше навмання, без заздалегідь передбачуваного результату). Однак, разом з тим, PaX не запобігає помилкам, що призводять до можливості зміни змінних та значень покажчиків.
PaX був написаний однойменною командою розробників. Засновник PaX нині воліє залишатися анонімним з невідомих громадськості причин.
Досить велика частина від загального числа вразливостей в комп'ютерних системах викликана помилками в програмах, які допускають можливість перевизначати свої функції, переписуючи їх «на льоту» (безпосередньо в оперативній пам'яті). Принцип роботи багатьох черв'яків, вірусів, а також численні методики безпосередніх спроб злому систем засновані на зміні вмісту пам'яті з подальшим впровадженням виконання шкідливого коду, на виконання частини вмісту області пам'яті через навмисну зміну покажчиків і т. п. Якщо подібні дії заблокувати яким-небудь чином, то загальний збиток стає досить незначним, або його може не бути зовсім, навіть якщо вірус і проник в систему. До того ж багато черв'яків (наприклад, такі як Sasser) в цьому випадку не зможуть проникнути в систему взагалі.
PaX був створений для того, щоб запобігати подібним атакам і робити це якомога більш узагальненим способом, тобто не допускати виконання нелегітимного коду, контролюючи доступ до пам'яті (читання, запис, виконання та їх можливі комбінації), причому, при цьому не торкаючись безпосередньо самого виконуваного коду. Настільки малою ціною PaX забезпечує більшу стійкість системи до злому, знижує кількість експлойтів, що призводять до відмови додатка в обслуговуванні (DoS) або віддалено відстежують процес виконання коду; експлойтів, які використовують подібні вразливості для надання атакуючому прав суперкористувача, доступу до інформації в системі або можуть заподіяти ще якоїсь шкоди. Замість цього справа може обмежитися припиненням функціонування будь-якого процесу або програми, з мінімальними наслідками для всієї системи.
Найчастіше, шкода, що наноситься DoS атакою, полягає у втраті часу і ресурсів через відмову функціональності об'єкта, що атакується. Однак, в цьому випадку, PaX запобігає нелегітимному доступі й поширенні конфіденційних даних системи внаслідок атаки, а не перешкоджає самому нападу. Між тим, прямі наслідки DoS також дуже небажані, особливо для систем, де критична будь-яка перерва в обслуговуванні, і проникнення зламувача свідомо завдає менше шкоди, ніж припинення функціонування сервісів. У цьому випадку, PaX буде не найкращим рішенням, але з усім тим, це досить таки прийнятний метод захисту важливої інформації.
Багато хто (але звичайно далеко не всі) помилки розробників призводять до неправильного поводження їхніх програм до пам'яті. Це надає гіпотетичну можливість змусити програму виконувати те, що вона не повинна робити за задумом (наприклад видавати привілейований шелл). Мета PaX — не знаходження і виправлення подібних уразливостей, а, швидше, запобігання їх використання атакуючими додатками. Наслідки помилок будуть зведені до мінімуму — виконання програми буде перервано, що з точки зору PaX краще, ніж її скомпрометований функціонал.
Слід розуміти, що PaX безпосередньо не запобігає переповненню буфера, а лише намагається ефективно присікти потенційні, пов'язані з ним, помилки розробників, які можуть призвести, наприклад, до надання небажаного доступу до системи. Проте, існують такі розробки, як Stack-Smashing Protector і StackGuard, які намагаються визначити безпосередньо саме переповнення буфера і зупинити виконання компрометуючих систему програм. Така методика називається stack-smashing protection. Вона орієнтована на безпосереднє блокування прямих атак, в разі, якщо це можливо. Хоча і PaX, і stack-smashing protection, по суті, мають на меті, вони не взаємозамінні. Однак, впровадження обох технологій, безумовно, зробить систему більш захищеною. Деякі дистрибутиви Linux вже мають в своєму складі обидва компоненти відразу (PaX і Stack Smash Protection)[1].
За станом на жовтень 2006 року PaX ще не включений в основну гілку ядра, оскільки розробники патча вважають, що він все ще недостатньо готовий. Але, попри те, що PaX успішно використовується на багатьох архітектурах, він все ще залишається лише частково, або взагалі не підтримується, в ряді інших. Так, PaX успішно застосовується на IA-32 (x86), AMD64, IA-64, Alpha, PA-RISC, 32 і 64 bit MIPS, PowerPC і SPARC.
- ↑ about | Alpine Linux. www.alpinelinux.org. Архів оригіналу за 15 січня 2016. Процитовано 19 січня 2016.
- Документація PaX [Архівовано 30 вересня 2018 у Wayback Machine.]