Лекция: Самым переполнив любой из потенциальных буферов. Дело в том, что начиная с некоторой длины такие
строки могут не вызывать необходимого переполнения буфера, ' а приводить к другим ошибкам и
Иногда вообще никак не проявляться в работе программы. Иначе говоря, хакер, готовя переполнение
Буфера, ограничен максимальным размером кода, который он сможет выполнить. Тем не менее
Разумно подбирать длину буфера, начиная с больших величин.
— -------------------------------------------------------------
Осталось подытожить, какие операционные системы могут подвергаться технологии переполнения
буфера. Явно или неявно, но мы предполагали, что:
_ параметры функций передаются через стек;
_ адрес возврата также помещается в стек; ' локальные переменные располагаются в стеке;
_ стек <растет> вниз;
_ данные в стеке могут интерпретироваться как команды;
_ должны существовать процессы или программы, имеющие уязвимый
Код, подобный функции process_data();
' некоторые процессы или функции должны иметь высокие привилегии. Очевидно, что этим условиям
Удовлетворяет большинство ОС, в том числе UNIX и Windows NT.
И напоследок — переполнение буфера в стеке является тривиально используемой уязвимостью. Однако,
Если пытаться избавиться от таких уязвимостей простым переписыванием строк кода типа
char buf[FIXED]; на
static char buf[FIXED], или
buf= (char *)malloc (FIXED);
(то есть убирая буферы из стека, чтобы невозможно было перезаписать адрес возврата), это не приведет к