CWE-120: Копирование в буфер без проверки размера входных данных

Характеристика ошибки

Распространенность  Высокая Последствия Выполнение кода, отказ в обслуживании, потеря данных
Стоимость восстановления Низкая Простота обнаружения Просто
Частота атаки Часто Осведомлённость атакующего Высокая

 

Переполнение буфера – небольшое  напоминание о законе физики, в котором сказано: в контейнер невозможно запихнуть больше, чем он может вместить. Бич приложений на языке Си на протяжении десятилетий, переполнение буфера удивительно устойчиво к искоренению. Тем не менее, копирование недоверенных входных данных без проверки их размера – простейшая из возможных ошибка, в то время, когда есть гораздо более интересные ошибки, которых нужно  остерегаться. Вот почему этот тип переполнения буфера часто называют «классическим». Возраст этой ошибки исчисляется десятилетиями, и это, как правило, одна из первых вещей, которую вы узнаете из 101 Принципа безопасного программирования.

Программа копирует  данные из буфера ввода в буфер вывода без проверки того, что размер буфера входных данных больше размера буфера выходных данных, что приводит к его переполнению.

 

Возможность возникновения ошибки:

  • При внедрении

 

Языки: C, C++, Assembly

Вероятность возникновения: от высокой к очень высокой

Общие последствия

выполнение неавторизованного кода или команд: переполнение буфера зачастую может использоваться для выполнения произвольного кода, обычно не охваченного предполагаемой политикой безопасности программы. Обычно это используется для обхода какого-то другого сервиса безопасности;

отказ обслуживания: выход из строя / выход из системы / перезагрузка; отказ обслуживания: потребление ресурсов (ЦП): переполнение буфера обычно приводит к выходу из строя. Другие атаки также могут приводить к недоступности, например ввод программы в бесконечный цикл.

Способы обнаружения

Автоматический статический анализ

Эта уязвимость зачастую может обнаруживаться инструментами автоматического статического анализа. Многие из них используют анализ потока данных или методики на основе ограничений для минимизации числа ложных срабатываний.

Автоматический статический анализ обычно не принимает во внимание особенности среды при сообщении о запрещенных операциях с памятью. Это может создать трудности для пользователя при выборе приоритета анализа тревожных сообщений.

Например, инструмент анализа может сообщить о переполнении буфера, вызванном аргументами командной строки в программе, от которой не ожидается выполнение с специальными привилегиями.

Эффективность – высокая.

Способы обнаружения ошибок, связанных с буфером, наиболее отработаны по сравнению с другими типами уязвимостей.

 

Автоматический динамический анализ

Данная уязвимость также может быть обнаружена инструментами автоматического динамического анализа, которые взаимодействуют с ПО через большие пакеты тестовых программ с большим количеством разнообразных входных данных, например, подготовкой входных данных определенного вида, тестированием надежности и вводом ошибок.  Это может замедлить выполнение ПО, но не должно привести к его неустойчивости, выходу из строя или генерации неправильных результатов.

 

Ручной анализ

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