Переполняющиеся буфера - активные средства защиты

         

Stack-guard


Первым, кто бросил вызов переполняющимся буферам, был Stack-Guard, представляющий собой заплатку для компиляторов gcc и egs, распространяемую по лицензии GPL. Раньше его было можно скачать с www.cse.ogi.edu/DISC/projects/immunix/StackGuard или immunix.org, но сейчас эти ссылки мертвы, а проект заброшен. Исходный код сохранился только у "коллекционеров", как например: www.packetstormsecurity.org/UNIX/utilities/stackguard.

Возьмем следующую программу, с умышленно допущенной ошибкой переполнения, и посмотрим, сможет ли Stack-Guard ее защитить.

// дочерняя функция

f(char *msg)

{

       // объявляем локальные переменные

       int a; char buf[0x66];

      

       // копируем аргумент в буфер без контроля длины,

       // что на определенном этапе приводит к его переполнению

       a = *strcpy(buf, msg);

      

       // выходим из функции

       return a;

}

// материнская функция

int main(int argv, char **argc)

{

       int x; x = f(argc[1]);

}



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