Безопасность
Подписаться на эту рубрику по RSS
Обнаружение переполнения буфера.
Рубрика: Безопасность | Укрепляем LinuxМетки: ASLR | buffer overflow | PaX | Segvguard
Дата: 07/06/2009 09:28:52
Функции ASLR очень полезны, но они не гарантируют 100% защиты - несмотря на то, что применяется рандомизация, теоретически существует вероятность переполнения буфера.
Так как некорректное изменение памяти, сделанное хакером, приводит к краху приложения, сведения о частых перезапусках сервисов (которые после краха автоматически перезапускаются) говорят о том, что хакер пытается переполнить буфер.
Для предотвращения возможности изменения хакером размещения памяти в ASLR-защищенном процессе надо задать ограничение на количество перезапусков демона за определенный период времени.
Для данного может употребляться утилита Segvguard, доступная по адресу: ftp://ftp.pl.openwall.com/misc/segvguard/. Segvguard состоит из двух частей:
Установка и настройка PaX.
Рубрика: Безопасность | Укрепляем LinuxМетки: PaX | Paxctl
Дата: 05/06/2009 08:55:51
Установка.
РаХ не требует пересборки приложений, но, так как реализован в виде патча ядра, требует пересборки самого ядра. РаХ-патч можно загрузить с сайта: http://pax.grsecurity.net/, на этом сайте доступны версии для ядер 2.4 и 2.6. Загрузите соответствующее ядро с сайта kernel.org, распакуйте его, перейдите в только что созданный каталог и примените РаХ-патч:
# patch -p0 < pax-linux-2.6.7-200406252135.patch
Рандомизация размещения адресного пространства.
Рубрика: Безопасность | Укрепляем LinuxМетки: ASLR | PaX
Дата: 05/06/2009 08:43:25
Рандомизация адресного пространства применяется для усложнения процесса вычисления расположения в памяти стека и DLL. Вычислить адрес стека и DLL хакеру стало значительно сложнее, чем без рандомизации.
Если хакер неправильно «угадает» адрес памяти, то приложение будет аварийно завершено - как и без рандомизации. Но когда хакер вторично запустит приложение, адресное пространство будет вторично изменено.
Неисполнимая память.
Рубрика: Безопасность | Укрепляем LinuxМетки: Grsecurity | PaX
Дата: 03/06/2009 14:45:04
Проект РаХ представляется частью большого проекта Grsecurity. РаХ предоставляет защиту памяти, делая стек неисполнимым. В дополнение к этому РаХ предоставляет несколько других важных функций: например рандомизацию размещения адресного пространства.
Libsafe от Avaya Labs решает проблему переполнения буфера совершенно другим способом. Libsafe предоставляет абсолютно прозрачный метод, не требующий пересборки существующих программ, что представляется огромным преимуществом этого метода.
Кроме удобства (ведь можно не пересобирать всю систему), дополнительным преимуществом представляется то, что не обязательны исходные коды программы - ведь исходные коды некоторых программ просто невозможно достать, следовательно, их нельзя защитить предыдущим методом.
Libsafe - это, как понятно из названия, специальная динамически загружаемая библиотека, состоящая из двух частей: libsafe и libverify. Обе части могут употребляться независимо друг от друга или же одновременно друг с другом.
Проверка границ - это процесс проверки индекса массива: выходит ли индекс за пределы допустимого диапазона или нет. Например, массив может содержать всего десять значений - с номерами от 0 до 9, а индекс может быть равен 10 - тогда он выходит за пределы диапазона. Проверка границ позволяет определить возможные попытки переполнения буфера.
Stack-Smashing Protector (известный как ProPolice) - это GCC-патч, сделанный компанией IBM. SPP использует технику проверочных значений, как и StackGuard. SPP дает ряд существенных улучшений этой техники по сравнению со StackGuard.
Во-первых, изменилось месторасположение проверочного значения. Теперь оно находится не после адреса возврата, как в случае с StackGuard, а после указателя кадра (Frame Pointer, FP). Если проверочное значение помещается сразу после RET, указатель FP и локальные переменные функции могут быть перезаписаны без изменения проверочного значения (оно применяется только для защиты RET). SPP помещает проверочное значение после FP, чем обеспечивает его защиту, а также изменяет порядок буфера и локальных переменных