#3 — Переполнение буфера

Главная Форумы Уязвимости Уязвимости сервисов #3 — Переполнение буфера

В этой теме 0 ответов, 1 участник, последнее обновление  CTFAdmin 1 год, 7 мес. назад.

  • Автор
    Сообщения
  • #1817

    CTFAdmin
    Хранитель

    Суть:
    Переполнение буфера — это уязвимость, возникающая при записи в память массива данных, превышающего по размеру выделенный для этой операции участок памяти. В результате происходит повреждение памяти, прилегающей к выделенному блоку, что может привести к различным последствиям — от DoS до выполнения произвольного кода. Различают несколько разновидностей уязвимости, в зависимости от расположения переполняемого буфера:
    — переполнение в стеке
    — переполнение в «куче»
    — переполнение в секции данных программы
    Как правило, уязвимости подвержены сервисы, написанные на языках, напрямую работающих с памятью — C, C++ и т.п.

    Обнаружение уязвимости:
    В исходных кодах сервиса следует проанализировать работу с памятью, массивами данных. Особое внимание следует обращать на использование функций, не осуществляющих проверку размера данных при операциях с памятью (например, strcpy, sprintf, gets и т.п.). Анализу должен быть подвергнут весь пользовательский ввод в сервисе на предмет возможности переполнения выделенных буферов ввода.
    В случае отсутствия исходных кодов, для поиска уязвимости можно применить «ручное» тестирование или фаззинг. Следует обращать внимание на неожиданные падения и прерывания сетевого соединения при передаче в пользовательском вводе больших массивов данных.

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

Для ответа в этой теме необходимо авторизоваться.