Защита памяти
Защита памяти реализована с использованием механизмов PaX.
Главная особенность состоит в реализации механизма MPROTECT, который блокирует одновременный доступ к памяти на запись и исполнение (W^X).
Данный механизм может блокировать работу некоторого ПО. В случае необходимости, он может быть выборочно или полностью отключен.
Для полного отключения MPROTECT необходимо добавить в командную строку ядра параметр mprotect=off.
- Для отключения до перезагрузки добавить mprotect=off в командной строке ядра в grub, работает для всех ядер кроме hardened.
- Для постоянного отключения в конфигурационном файле /etc/default/grub с дописать в строку GRUB_CMDLINE_LINUX_DEFAULT="quiet mprotect=off" с последующим вызовом sudo update-grub (работает для всех ядер кроме hardened).
Для выборочного отключения используется утилита paxrat, ее конфигурация находится в файле /etc/paxrat/paxrat.conf, и во всех файлах каталога /etc/paxrat/conf.d/ (предпочтительно настройки сохранять в отдельных файлах). Утилита проставляет флаги исключений в расширенные атрибуты исполняемых файлов. Утилита запускается автоматически при установке новых пакетов, но может быть вызвана и вручную командой sudo paxrat.
Возможна и ручная установка флагов в расширенные атрибуты файла командой:
Дополнительно, возможно управление флагами и политикой PaX через модуль безопасности NESS (пример).
На ядре hardened дополнительно реализован механизм RANDMMAP, увеличивающий рандомизацию адресного пространства.
Все версии ядер ОСновы (не только hardened) в конфигурации по умолчанию проходят тест paxtest.
PaXtest - Copyright(c) 2003-2014 by Peter Busser <peter@adamantix.org> and Brad Spengler <spender@grsecurity.net>
Released under the GNU Public Licence version 2 or later
Writing output to paxtest.log
It may take a while for the tests to complete
Test results:
PaXtest - Copyright(c) 2003-2014 by Peter Busser <peter@adamantix.org> and Brad Spengler <spender@grsecurity.net>
Released under the GNU Public Licence version 2 or later
Mode: 1
Blackhat
Kernel:
Linux onyx2 5.4.0-0.bpo.4.2-amd64 #1 SMP Debian 5.4.66-1~bpo10+1.osnova144 (2020-11-17) x86_64 GNU/Linux
Relase information:
Distributor ID: Osnova
Description: OSNova Linux (Onyx 2.0)
Release: 2.0
Codename: onyx
Test results:
Executable anonymous mapping : Killed
Executable bss : Killed
Executable data : Killed
Executable heap : Killed
Executable stack : Killed
Executable shared library bss : Killed
Executable shared library data : Killed
Executable anonymous mapping (mprotect) : Killed
Executable bss (mprotect) : Killed
Executable data (mprotect) : Killed
Executable heap (mprotect) : Killed
Executable stack (mprotect) : Killed
Executable shared library bss (mprotect) : Killed
Executable shared library data (mprotect): Killed
Writable text segments : Killed
Anonymous mapping randomization test : 32 quality bits (guessed)
Heap randomization test (ET_EXEC) : 32 quality bits (guessed)
Heap randomization test (PIE) : 32 quality bits (guessed)
Main executable randomization (ET_EXEC) : 32 quality bits (guessed)
Main executable randomization (PIE) : 32 quality bits (guessed)
Shared library randomization test : 32 quality bits (guessed)
VDSO randomization test : 20 quality bits (guessed)
Stack randomization test (SEGMEXEC) : 30 quality bits (guessed)
Stack randomization test (PAGEEXEC) : 30 quality bits (guessed)
Arg/env randomization test (SEGMEXEC) : 22 quality bits (guessed)
Arg/env randomization test (PAGEEXEC) : 22 quality bits (guessed)
Randomization under memory exhaustion @~0: 32 bits (guessed)
Randomization under memory exhaustion @0 : 32 bits (guessed)
Return to function (strcpy) : paxtest: return address contains a NULL byte.
Return to function (memcpy) : Killed
Return to function (strcpy, PIE) : paxtest: return address contains a NULL byte.
Return to function (memcpy, PIE) : Killed