Установка и настройка PaX.
Установка.
РаХ не требует пересборки приложений, но, так как реализован в виде патча ядра, требует пересборки самого ядра. РаХ-патч можно загрузить с сайта: http://pax.grsecurity.net/, на этом сайте доступны версии для ядер 2.4 и 2.6. Загрузите соответствующее ядро с сайта kernel.org, распакуйте его, перейдите в только что созданный каталог и примените РаХ-патч:
# patch -p0 < pax-linux-2.6.7-200406252135.patch
Рандомизация размещения адресного пространства.
Рандомизация адресного пространства применяется для усложнения процесса вычисления расположения в памяти стека и DLL. Вычислить адрес стека и DLL хакеру стало значительно сложнее, чем без рандомизации.
Если хакер неправильно «угадает» адрес памяти, то приложение будет аварийно завершено - как и без рандомизации. Но когда хакер вторично запустит приложение, адресное пространство будет вторично изменено.
Неисполнимая память.
Проект РаХ представляется частью большого проекта Grsecurity. РаХ предоставляет защиту памяти, делая стек неисполнимым. В дополнение к этому РаХ предоставляет несколько других важных функций: например рандомизацию размещения адресного пространства.
Libsafe.
Libsafe от Avaya Labs решает проблему переполнения буфера совершенно другим способом. Libsafe предоставляет абсолютно прозрачный метод, не требующий пересборки существующих программ, что представляется огромным преимуществом этого метода.
Кроме удобства (ведь можно не пересобирать всю систему), дополнительным преимуществом представляется то, что не обязательны исходные коды программы - ведь исходные коды некоторых программ просто невозможно достать, следовательно, их нельзя защитить предыдущим методом.
Libsafe - это, как понятно из названия, специальная динамически загружаемая библиотека, состоящая из двух частей: libsafe и libverify. Обе части могут употребляться независимо друг от друга или же одновременно друг с другом.
Проверка границ.
Проверка границ - это процесс проверки индекса массива: выходит ли индекс за пределы допустимого диапазона или нет. Например, массив может содержать всего десять значений - с номерами от 0 до 9, а индекс может быть равен 10 - тогда он выходит за пределы диапазона. Проверка границ позволяет определить возможные попытки переполнения буфера.