Осталось подытожить, какие операционные системы могут подвергаться технологии переполнения буфера. Явно или неявно, но мы предполагали, что:
• параметры функций передаются через стек;
• адрес возврата также помещается в стек;
• локальные переменные располагаются в стеке;
• стек «растет» вниз;
• данные в стеке могут интерпретироваться как команды;
• должны существовать процессы или программы, имеющие уязвимый код, подобный функции process_data;
• некоторые процессы или функции должны иметь высокие привилегии.
Очевидно, что этим условиям удовлетворяет большинство ОС, в том числе UNIX и Windows NT.
И напоследок – переполнение буфера в стеке является тривиально используемой уязвимостью. Однако, если пытаться избавиться от таких уязвимостей простым переписыванием строк кода типа
char buf[FIXED];
на
static char buf[FIXED];
или
buf = (char *) malloc (FIXED);