Иллюстрированный самоучитель по Secure Web


Удаленное проникновение: состояние DoS и переполнение буфера - часть 3


/p>

Контрмеры: защита от переполнения буфера


Лучшим ответом на атаки с применением переполнения буфера является профессиональное программирование. Упоминавшиеся выше статьи предоставляют опытному программисту некоторые идеи, реализация которых позволит избежать подобной угрозы при написании приложений (при их изучении пригодится знание языка С и низкоуровневого языка программирования Assembler). Однако поскольку создание программных продуктов, подобных системе Windows, выполняется практически без непосредственного участия пользователей, то ответственность за устранение выявленных проблем должна ложиться на плечи группы разработчиков.

Для разрешения проблемы переполнения буфера могут использоваться различные программные продукты. Одним из самых новых средств этой категории является программа BOWall Андрея Колишака (Andrey Kolishak). Программа BOWall предотвращает переполнение буфера двумя способами.

  •  Замещает библиотеки DLL их двоичными копиями, в которые включены процедуры мониторинга вызовов потенциально уязвимых функций (например, strcpy, wstrcpy, strncpy, wstrncpy, strcat, wcscat, strncat, wstrncat, memcpy, memmove, sprintf, swprintf, scanf, wscanf, gets, getws, fgets, fgetws). После этого вызовы таких функций проверяются на предмет целостности возвращаемого адреса стека (stack return address).
  •  Ограничивает выполнение функций динамических библиотек из сегмента данных и стека (data and stack memory).

Замещение системных динамически подключаемых библиотек для предотвращения переполнения буфера является несколько кардинальным, однако все же такой подход, очевидно, достоин внимания.

Программа eNTercept от компании ClickNet Software Corp. представляет собой систему предотвращения вторжений, которая может использоваться в качестве оболочки ядра системы NT, которая обеспечивает мониторинг всех вызовов. Это приложение хорошо подходит для выявления и предотвращения известных атак, направленных на переполнение буфера.

По адресу http://immunix.org/ можно получить улучшенную версию компилятора GNU С (gcc) StackGuard. С его помощью можно генерировать исполняемые файлы, которые более устойчивы к разрушению стека, чем обычные программы. Это достигается путем помещения слова-признака (canary word) за адресом возврата при вызове функции. Если после завершения выполнения функции это слово-признак оказалось другим, значит, была предпринята попытка переполнения буфера. При этом программа, скомпилированная с помощью StackGuard, помещает соответствующую запись в системный журнал. Поскольку в рассмотренном случае требуется использование компилятора gcc, то описанный подход неприменим в системе NT. Однако, возможно, некоторые из читателей все же будут вдохновлены...



Начало  Назад  Вперед