Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентация по статье.pptx
Скачиваний:
3
Добавлен:
09.04.2023
Размер:
1.19 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО

ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ.

М.А.БОНЧ-БРУЕВИЧА»

ФАКУЛЬТЕТ ИНФОКОММУНИКАЦИОННЫХ СЕТЕЙ И СИСТЕМ КАФЕДРА ЗАЩИЩЕННЫХ СИСТЕМ СВЯЗИ

ОСНОВЫ НАУЧНЫХ И ЭКСПЕРИМЕНТАЛЬНЫХ ИССЛЕДОВАНИЙ

ИССЛЕДОВАНИЕ АТАК ТИПА ПЕРЕПОЛНЕНИЯ БУФЕРА

Выполнили студенты II курса ИКБ-95:

Преподаватель: Штеренберг С.И.

Актуальность темы

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

2

Цели и задачи

Цель: Исследовать атаки типа «переполнение буфера.

Задачи:

1.Дать определение переполнению буфера и рассмотреть способы его обнаружения.

2.Рассмотреть способы предотвращения переполнения буфера.

3.Рассмотреть способы уменьшения переполнения буфера.

3

Что такое переполнение буфера и как его обнаружить.

Как следует из названия, уязвимости переполнения буфера связаны с буферами или распределением памяти в языках, которые предлагают прямой низкоуровневый доступ к памяти для чтения и записи. В случае таких языков, как C и Assembly, чтение или запись в один из этих распределений не влечет за собой автоматической проверки границ. Другими словами, нет никакой проверки того, что количество байтов, подлежащих записи или чтению, действительно поместится в рассматриваемый буфер. Таким образом, программа может "переполнить" емкость буфера. Это приводит к тому, что данные записываются мимо своего конца и перезаписывают содержимое последующих адресов в стеке или куче, или дополнительные данные считываются.

4

Что такое переполнение буфера и как его обнаружить.

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

5

Что такое переполнение буфера и как его обнаружить.

Глядя на код, становится ясно, что проверка границ не выполняется. Если пользователь вводит “возможно", то программа, скорее всего, выйдет из строя, а не попросит пользователя дать правильный ответ и не предложит вопрос повторно. Ответ пользователя просто записывается в буфер, независимо от его длины. В этом примере, поскольку user_answer является единственной объявленной переменной, следующими значениями в стеке будет значение адреса возврата или расположение в памяти, к которому программа вернется после выполнения функции askQuestion. Это означает, что если пользователь вводит четыре байта данных (достаточно, чтобы заполнить память, специально отведенную для буфера), а затем действительный адрес в памяти, то обратный адрес программы будет изменен. Это позволяет пользователю заставить программу выйти из функции в другой точке кода, чем предполагалось изначально, что потенциально может привести к опасному и непреднамеренному поведению программы.

6

Как предотвратить переполнение буфера

1. Использовать язык, который их не допускает.

Язык «C» допускает эти уязвимости благодаря прямому доступу к памяти и отсутствию строгой типизации объектов. Языки, которые не разделяют эти аспекты, обычно невосприимчивы. Java, Python

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

2. Безопасные методы для обработки буферов.

В случае функций обработки строк было много дискуссий о том, какие методы доступны, какие из них безопасны для использования, а каких следует избегать. Функции strcopy и strcat копируют строку в буфер и добавляют содержимое одного буфера в другой, соответственно. Эти двое демонстрируют небезопасное поведение, не проверяя никаких границ целевого буфера, и будут записывать за пределы буфера, если им будет предоставлено достаточно байтов для этого.

7

Как предотвратить переполнение буфера

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

8

Как уменьшить переполнение буфера

В настоящее время предпринимаются шаги по обнаружению этих уязвимостей во время компиляции и выполнения. При запуске программы компиляторы часто создают случайные значения, известные как канарейки, и помещают их в стек после каждого буфера. Подобно шахтерским птицам, в честь которых они названы, эти канарейки знаменуют опасность. Проверка значения канарейки относительно ее исходного значения может определить, произошло ли переполнение буфера. Если значение было изменено, программа может быть закрыта или перейти в состояние ошибки вместо того, чтобы продолжить работу с потенциально измененным обратным адресом.

9

Как уменьшить переполнение буфера

Иногда первым признаком наличия переполнения буфера может быть успешная эксплуатация. В этой ситуации необходимо решить две важнейшие задачи. Во-первых, уязвимость должна быть идентифицирована, и кодовая база должна быть изменена, чтобы решить эту проблему. Во- вторых, цель состоит в том, чтобы обеспечить замену всех уязвимых версий кода новой, исправленной версией. В идеале это начнется с автоматического обновления, которое достигнет всех подключенных к интернету систем, работающих с программным обеспечением.

10