МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

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

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ООБРАЗОВАНИЯ

«ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

ИНСТИТУТ МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК

КАФЕДРА ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ

Допустить к защите в ГАК

Заведующий кафедрой информационной безопасности

д. т.н. профессор

       

(подпись)

«___» ________20__ г.

РАЗРАБОТКА РАСПРЕДЕЛЕННОЙ СИСТЕМЫ АВТОМАТИЗИРОВАННОГО ОБНАРУЖЕНИЯ УЯЗВИМОСТЕЙ В ПРОГРАММНОМ ОБЕСПЕЧЕНИИ

(Выпускная квалификационная работа)

Научный руководитель:

д. т.н. профессор

__________________//

(подпись)

Автор работы:

__________________ //

(подпись)

Оглавление

Введение        4

Глава 1.        Обзор существуюих технологий выявления уязвимостей в программном обеспечении.        8

1.1.        Основные типы уязвимостей.        8

1.1.1.        Ошибки повреждения памяти.        8

1.1.2.        Состояние гонки.        12

1.1.3.        Отказ в обслуживании.        12

1.1.4.        Уязвимости веб-приложений.        13

1.2.        Методы обнаружения уязвимостей.        15

1.2.1.        Принцип «белого ящика».        15

НЕ нашли? Не то? Что вы ищете?

1.2.2.        Принцип «черного ящика».        18

1.2.3.        Принцип «серого ящика».        20

1.3.        Фаззинг.        23

1.3.1.        Определение.        23

1.3.2.        Этапы фаззинга.        23

1.3.3.        Методы фаззинга.        25

1.3.4.        Типы фаззеров.        26

Глава 2.        РАЗРАБОТКА РАСПРЕДЕЛЕННОЙ СИСТЕМЫ ПОИСКА УЯЗВИМОСТЕЙ.        28

2.1.        Обоснование выбора технологии.        28

2.2.        Требования к системе.        28

2.3.        Модель системы.        29

2.4.        Реализация сервера.        29

2.4.1.        Общие сведения.        29

2.4.2.        Структура базы данных.        30

2.4.3.        Веб-интерфейс управления системой.        31

2.4.4.        API для взаимодействия с клиентами.        33

2.5.        Разработка клиента.        33

2.6.        Разработка фаззера.        34

2.6.1.        Общие сведения.        34

2.6.2.        Основные структуры фаззера.        34

2.6.3.        Сценарий работы.        35

2.7.        Оценка эффективности системы.        36

2.7.1.        Методика испытаний.        36

2.7.2.        Результаты.        36

ЗАКЛЮЧЕНИЕ        38

СПИСОК ЛИТЕРАТУРЫ        39

Введение

Актуальность темы дипломной работы. Задача поиска уязвимостей в программном обеспечении возникает в процессе разработки средств получения несанкционированного доступа специалистами государственных или частных разведывательных организаций, специальных служб либо киберпреступниками. Об актуальности этой задачи можно судить благодаря появляющимся в открытом доступе данным о вознаграждениях, которые предлагаются на «черном» рынке в обмен на информацию об уязвимостях - для наиболее популярных программных продуктов эта сумма может достигать сотен тысяч долларов США.[1][2]

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

Стремление обнаружить уязвимость раньше, чем это удастся злоумышленникам, побуждает такие компании, как PayPal, Facebook или Google, организовывать собственные программы вознаграждения исследователей ИБ в обмен на данные об ошибках, причем бюджет наиболее крупных программ превышает миллион долларов.

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

Степень разработанности проблемы. Вопросы контроля качества и поиска уязвимостей в ПО становились предметом изучения многих отечественных исследователей, таких как , ,

Однако используемый в данной работе метод обнаружения ошибок (фаззинг) достаточно подробно рассмотрен лишь иностранными авторами, среди которых Ари Таканен, Джаред ДеМотт, Чарльз Миллер и Скот Ламберт.

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

Поставленная цель обусловила следующие задачи дипломной работы:

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

Объектом исследования выступает процесс обнаружения уязвимостей в ПО.

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

В качестве методологической и теоретической основой дипломной работы выступили работы отечественных и иностранных исследователей, посвященные динамическому анализу ПО и фаззингу в частности.

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

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

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

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

Наиболее существенные результаты, полученные в процессе исследования, состоят в следующем:

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

- разработан фаззер, позволяющий оценить безопасность таких компонентов веб-браузера, как объектная модель, визуализация и прикладной интерфейс;

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


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

Использование уязвимостей, связанных с повреждением памяти, является наиболее распространенным и эффективным методом проведения атак на локальную или удаленную систему. Если содержимое оперативной памяти может быть повреждено (например, адрес возврата, указатель на функцию и т. д.), часто поток выполнения может быть перенаправлен на код, предоставленный злоумышленником.[3]

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

Переполнение стека.

Переполнение стека представляет собой повреждение памяти в стеке в результате некорректно реализованной проверки выхода за границы области. Уязвимость демонстрирует следующий код на языке Си:

void func(char* str)

{

  char buffer[10];

  strcpy(buffer, str);

}

Если длина строки в параметре str превысит 9 символов, возможна подмена адреса возврата на значение, контролируемое атакующим.

Благодаря использованию технологий противодействия атакам для современных операционных систем подобный код не представляет угрозы. Однако все еще опасны менее тривиальные варианты данной уязвимости.

Ошибки форматной строки.

Данный вид ошибок получил наибольшее распространение в 1990-е годы.

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5