Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

Лопнуть как мыльный пузырь

Vint (vint@glstar.ru)

Спецвыпуск Xakep, номер #045, стр. 045-004-5


Программисты решают свои проблемы сами

Не только производители процессоров озабочены проблемой переполнения буфера, но и программисты ищут выход из создавшегося положения. Один из действенных методов предлагает нам сайт www.trl.ibm.com/projects/security/ssp. Метод прост и эффективен: исходный код программы подвергается автоматическому анализу плагином GCC (который и предлагают нам разработчики защиты), и при нахождении потенциально опасного участка кода происходит его автоматическая модификация таким образом, что вероятность переполнения буфера сводится к минимуму. Пример такой обработки показан в двух следующих листингах.

Листинг

/* 1. листинг программы до обработки: /*

#include >stdio.h<

int main()

{

char buff[20] = {0}; /*все элементы представляют собой “0” */

printf("Enter you network mask : "); /*по мысли программиста, маска сети не может быть больше 20, а значит и вводить больше никто не будет ;-)*/

scanf(buff, "%s"); /*Вот эта функция несет всю опасность. Она не проверяет длину вводимых данных, что сразу открывает возможность переполнения буфера*/

}

После того как отработает gcc с установленным плагином, можно предположить, анализируя ассемблерный код, такой вариант листинга (точно сказать невозможно, так как он его просто откомпилирует):

Листинг

/* 2. примерный листинг после обработки gcc /*

#include >stdio.h<

int main()

{

char buff[20] = {0}; /*длина буфера сохраняется*/

printf("Enter you network mask : ")

fgets(buff, sizeof(buff), stdin); /*такая конструкция считает только первые 19 символов, что позволит избежать переполнения буфера при некорректном пользовательском вводе.*/

}

Аналогично происходит замена функций strcpy(), strcmp() и sprintf() на strncpy(), strncmp()и snprint(). Кроме этого, используются некоторые другие алгоритмы защиты от типичных атак переполнения буфера.

Подводя итоги

Ошибки программистов в обработке данных программой очень часто встают в огромные финансовые потери компаниям и организациям. И хотя уже шестнадцать лет назад вирус Морриса открыл эпоху ошибок переполнения буфера, эта проблема еще очень далека от решения. Постоянны сообщения о новых и новых уязвимостях. Но мир не стоит на месте! И есть надежда на то, что новые технологии AMD, Intel и разработки программистов смогут исправить не только ошибку переполнения, но и архитектуру, породившую ее.

Назад на стр. 045-004-4  Содержание  Вперед на стр. 045-004-6