Уязвимости к переполнению буфера

BUFFER OVERFLOW. Данная уязвимость возникает, если существует возможность записи в буфер информации больше, чем позволяет область памяти, выделенная под буфер. Существует несколько вариантов переполнения буфера, все они потенциально опасны для приложения и могут привести к аварийному завершению приложения либо к выполнению злоумышленного кода в атакуемой системе. Если приложение выполняется от имени привилегированной учетной записи, такой как system или root, последствия для атакуемой системы могут быть катастрофическими. Эксплуатация данной уязвимости в основном осуществляется при недостаточной проверке входных данных.

Следующие особенности приложения могут свидетельствовать о наличии уязвимости переполнения буфера:

  • входные данные не проверяются перед тем, как будут скопированы в буфер;
  • некорректное использование небезопасных функций;
  • некорректное определение необходимых размеров буфера;
  • некорректное вычисление размера индексных массивов.

Основным методом обнаружения уязвимости является анализ исходных текстов программ и fuzz testing. Чтобы минимизировать вероятность возникновения данной уязвимости, следует придерживаться следующих правил:

  • для проверки текстов программ использовать инструментальные средства анализа, обладающие низкой вероятностью ошибок 2-го рода для уязвимостей данного типа;
  • проверять все полученные извне данные перед обработкой, разрешая только заведомо корректные данные;
  • не использовать заведомо небезопасные функции (такие как strcpy, strcat, lstrcat, sprintf, fprintf и другие), заменяя их безопасными;
  • тщательно проверить все алгоритмы вычисления размера буфера;
  • при компиляции использовать опции компилятора для контроля переполнения буфера. Например, в компиляторе Visual C++ 2005 Service Pack 1 и более поздних следует использовать опции /GS, /SAFESEH, /NXCOMPAT и /DYNAMICBASE. В компиляторе gcc 4.1.2-25 и более поздних используйте опцию -stack-protector.

Часто сидите на Твиттере? Тогда вам знакомо соробщение типа Твиттер перегружен. Как в него все-таки зайти рассказывает другой блог, но а вот сами проблемы входа могут быть причиной наличия уязвимостей, в следствии которых Твиттер блокируется. Правда это лишь предположение, а как на самом деле знаю только разработчики.

Широкое распространение распределенных информационных систем, Internet-технологий существенно увеличило множество точек доступа к приложениям и, как следствие, расширило возможности злоумышленников атаковать информационные системы. Большинство таких атак становится возможным в силу наличия уязвимостей в приложениях, обрабатывающих данные из внешних источников. К сожалению, традиционные методы защиты периметра (firewalls, email filters и пр.) не способны полностью решить задачу защиты от внешних атак. Разработчики приложений должны знать характерные признаки уязвимостей и уметь таким образом строить код приложения, чтобы исключить возможность атак, эксплуатирующих такие уязвимости. В статье рассматриваются популярные виды уязвимостей, описываются их признаки и даются рекомендации по устранению уязвимостей.

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.