Информационная безопасность

       

StackGuard


StackGuard, по-видимому, был первым инструментарием предотвращения использования уязвимых мест [10]. Это дополнение к компилятору GCC (GNU Compiler Collection; gcc.gnu.org), который генерирует программы, устойчивые к такой разновидности переполнения буфера, как «разрушение стека» [11].

Рис. 1. StackGuard защищает от атак, разрушающих стек

StackGuard выявляет дефект «разрушение стека» в процессе его возникновения за счет проверок целостности в записях активации вызовов функций, используя для этого метод проверки целостности canary («осведомитель») (рис. 1). Компилятор генерирует код, который вставляет специальный фрагмент в записи активации при вызовах функций, и проверяет их при возврате функций. Если происходит переполнение буфера типа «разрушение стека», специальный фрагмент будет искажен; код возврата при этом прекращает работу программы, а не передает управление на адрес, указываемый в искаженной записи активации.

StackGuard широко применяется с лета 1998 года. Разработчики используют его для создания полных версий Immunix Linux на основе Red Hat 5.2, 6.2 и 7.0. Однако StackGuard 2 (текущая версия) базируется на GCC 2.91.66, а в период подготовки статьи был практически завершен перенос на GCC 3.2. Распространяется на условиях лицензии GPL.



Содержание раздела