Установка и настройка PaX.
Установка.
РаХ не требует пересборки приложений, но, так как реализован в виде патча ядра, требует пересборки самого ядра. РаХ-патч можно загрузить с сайта: http://pax.grsecurity.net/, на этом сайте доступны версии для ядер 2.4 и 2.6. Загрузите соответствующее ядро с сайта kernel.org, распакуйте его, перейдите в только что созданный каталог и примените РаХ-патч:
# patch -p0 < pax-linux-2.6.7-200406252135.patch
Для конфигурации самого РаХ применяется пользовательское приложение paxctl. Paxctl должен быть установлен после компиляции ядра, поэтому рассмотрим сначала сборку ядра.
Конфигурация ядра.
Если для конфигурирования опций ядра используется команда make n\enuponfig, то опции РаХ можно найти в меню Security Options. Для включения РаХ включите опцию Enable Various РаХ Features (CONFIG_PAX).
Управление РАХ-ом.
Следующие опции ядра позволяют указать, как РаХ будет употребляться в системе:
- Support Soft Mode (CONFIGPAX SOFTMODE) - по умолчанию защита РаХ включена для всех процессов. Софт-режим выключает ее, но тогда администратору можно вручную указать (используя утилиту paxctl), какие программы можно защищать. Данный режим включает поддержку софт-режима, но не активизирует его. Для активизации данного режима ядру надо передать параметры pax_softmode=1. Включите эту опцию.
- Use Legacy ELF Header Marking (CONFIG PAX_EI PAX) - неиспользуемый ныне метод управления РаХ-ом. Здесь он представлен для обратной совместимости.
- Use ELF Program Header Marking (CONFIG_PAX_PT PAX FLAGS) - эта опция применяет неиспользуемые части ELF-заголовка исполнимого файла для хранения управляющих флагов. Эти флаги могут быть установлены и просмотрены с помощью утилиты paxctl. Включите эту опцию.
- MAC System Integration (CONFIG PAX [NO|HAVE|HOOK] _ACL_FLAGS) - предназначена только для разработчиков, данная опция позволяет интегрировать РаХ в принудительную систему управления доступом (Mandatory Access Control system).
НЕВЫПОЛНЯЕМЫЕ СТРАНИЦЫ.
Невыполняемые страницы памяти были рассмотрены в предыдущей статье, поэтому нам уже знакомы методы PAGEEXEC и SEGMEXEC, и трамплины. Рассмотрим опции, которые можно включить:
- Enforce Nonexecutable Pages (CONFIG_PAX NOEXEC) - включите эту опцию для принудительного использования NOEXEC.
- Paging-based Nonexecutable Pages (CONFIGPAX PAGEEXEC) — использует метод PAGEEXEC, включите эту опцию.
- Segmentation-based Nonexecutable Pages (CONFIGPAX SEGMEXEC) — использует метод SEGMEXEC, включите эту опцию.
- Default Nonexecutable Page Method(CONFIG_PAX_DEFAULT_[PAGEEXEC|SEGMEXEC] - поддержка обоих NOEXEC-методов включена, теперь нужно выбрать метод по умолчанию. Рекомендуется использовать метод SEGMEXEC.
- Emulate Trampolines (CONFIGPAX EMUTRAP) Включение этой опции позволяет администратору применить эмуляцию трамплинов. Эмуляция будет распространяться не на все исполнимые файлы, а только на те, которые указаны с помощью утилиты paxctl. Если эта опция выключена, программы, использующие трамплины, требуют отключения функции NOEXEC. Включите эту опцию.
- Restrict mprotect() (CONFIGPAXMPROTECT) - Опция запрещает процессам изменять права доступа к странице памяти, то есть процесс не сможет сделать страницу, доступную только для чтения, доступной для записи и невыполняемую страницу сделать выполняемой. Тоже процессу запрещено создавать исполнимые страницы из неиспользуемых страниц памяти.
Утилита paxctl.
Утилита paxctl применяется для настройки различных аспектов поведения РаХ. Утилита paxctl доступна по адресу: http://pax.grsecurity.net и должна быть установлена только после того, как ядро собрано с поддержкой РаХ.
Paxctl позволяет администратору установить и просмотреть опции РаХ для каждого исполнимого файла в вашей системе. Запустим Paxctl без аргументов:
-v: view flags -z: restore default flags
-q: suppress error messages -Q: report flags in short format flags
Назначение флагов понятно и без комментариев. Например:
РаХ control vO.2
Copyright 2004 РаХ Team <pageexec@f reemai 1. . hu>
- PaX flags: -M--ER- [ /usr/XllR6/bin/Xf ree86]
MPROTECT is enabled EMUTRAMP is enabled RANDMMAP is enabled
С целью эксперимента можно запустить систему в софт-режиме и включить РаХ только для нескольких сервисов. Ведь при загрузке в обычном режиме РаХ включает защиту для всех исполнимых файлов. Нужно помнить, что установки РаХ хранятся в заголовках ELF-файлов, поэтому они не изменяются при перезапуске системы.