Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Защита стека.

Рубрика: Безопасность -> Укрепляем Linux
Метки:
Понедельник, 1 июня 2009 г.
Просмотров: 4947

Stack-Smashing Protector (известный как ProPolice) - это GCC-патч, сделанный компанией IBM. SPP использует технику проверочных значений, как и StackGuard. SPP дает ряд существенных улучшений этой техники по сравнению со StackGuard.

     Во-первых, изменилось месторасположение проверочного значения. Теперь оно находится не после адреса возврата, как в случае с StackGuard, а после указателя кадра (Frame Pointer, FP). Если проверочное значение помещается сразу после RET, указатель FP и локальные переменные функции могут быть перезаписаны без изменения проверочного зна­чения (оно применяется только для защиты RET). SPP помещает проверочное значение после FP, чем обеспечивает его защиту, а также изме­няет порядок буфера и локальных переменных


Структура стека при использовании SPP

     При переполнении буфера проверочное значение сразу же увеличивается. Невозможно переполнить стек, чтобы не быть обнаруженным.

     Установка SPP.

     GCC-патч SPP доступен по адресу: http://www.research.ibm.com/trl/projects/security/spp/ - последний раз были доступны патчи для версий GCC: 2.95.3, 3.3.2, 3.4.2.

     Также будет нужен исходный код компилятора GCC соответствующей версии. Список сайтов, с которых можно скачать код GCC, можно найти здесь: http : //www.gnu.org/order/ftp.html.

     Архив SPP содержит два патча: protector.dif - дает возможность включить защиту стека с помощью флага компилятора и protectonly.dif - защи­та стека включится по умолчанию.

     Распакуем архивы SPP и GCC, скопируем четыре файла, содержащихся в SPP-архиве, в только что разработанный каталог gcc-х.х.х и применим патч командой:

$ patch -p < protector.dif

     Для включения защиты по умолчанию:

$ patch -рО < protector.dif

$ patch -рО < protectonly.dif

     Теперь откомпилируем GCC. Последовательность его компиляции немного отличается от стандартной ./configure; make; make install, так как доступно очень много дополнительных опций.

     Перед установкой первым делом нужно прочитать файл INSTALL. Лучше все­го иметь две различные версии GCC, поэтому будет употребляться опция prefix, задающая каталог, в который будет установлена SPP-версия GCC. Стандартная последовательность команд такая:

$ mkdir obj

$ cd obj

$ ../configure -prefix=/usr/spp

$ make bootstrap-lean

# make install prefix=/usr/spp

     Использование.

     Чтобы защитить программу, надо при ее компиляции указать флаг -fstack-protector. Нужно сразу установить защиту по умолчанию.

Если же для компиляции программы применяется команда make, нужно изменить переменную CFLAGS, которая находится в Makefile - добавить опцию -fstack-protector. Также нужно установить переменную CFLAGS гло­бально, добавив команду

export CFLAGS="$CFLAGS: -fstack-protector"

в файл /etc/profile.