20
Software quality assurance days 17 Международная конференция по вопросам качества ПО sqadays.com Минск. 29–30 мая 2015 Катерина Овеченко Itera. Киев, Украина Fuzzing – автоматическое тестирование безопасности

Fuzzing - автоматическое тестирование безопасности

  • Upload
    sqalab

  • View
    374

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Fuzzing - автоматическое тестирование безопасности

Software quality assurance days17 Международная конференция по вопросам качества ПОsqadays.com

Минск. 29–30 мая 2015

Катерина ОвеченкоItera. Киев, Украина

Fuzzing – автоматическое тестирование безопасности

Page 2: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

О себе

5+ лет в тестировании.Специалист по ручному тестированию и построению процесса тестирования на проектах.

2+ года в тестировании безопасности: от построения компетенции до координации проектов для внешних заказчиков.

Сейчас занимаю должность QA coordinator в компании Itera.

Докладчик конференций, один из основателей сообщества OWASP Украина, организатор конференции QA Fest.

Page 3: Fuzzing - автоматическое тестирование безопасности

Fuzz тестирование (aka Fuzzing) – это подход к поиску уязвимостей, обычно полу- или полностью автоматизированный, при котором невалидные, непредвиденные или случайные данные подаются на вход в приложение.

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Fuzzing – что это?

Page 4: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Поиск уязвимостей White-box подход

Page 5: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Поиск уязвимостей Black-box подход

Page 6: Fuzzing - автоматическое тестирование безопасности

Приложение

Файлы

Протоколы

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Уровни fuzzing

Память

Драйвера

URL адреса

Импорт-экспорт

UI и Формы

Запросы

Page 7: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Какие баги находит fuzzing?

Ошибки в обработке входных данных

Переполнение буфера Отказ в обслуживании (DoS)

Атаки по обходу директорий (directory traversal)

XSS и SQL инъекцииУтечки памяти

Page 8: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Fuzzing: Основные шаги

Определяем цель

Задаем интерфейсы

ввода данных

Генерируем тестовые данные

Посылаем данные в

приложение

Проверяем на исключения

Определяем уязвимость

Page 9: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Шаг 1: Определяем цельЧто будем фаззить?

На каком уровне?

Есть ли известные уязвимости?

Функциональность с особым риском?

Page 10: Fuzzing - автоматическое тестирование безопасности

Шаг 2: Определяем интерфейсы ввода данных

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

На уровне кода приложенияНа уровне интерфейса приложения

Page 11: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Шаг 3: Генерируем тестовые данные

Page 12: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Пример модели

TFTP PACKET STRUCTURE----------------------------------------------

| \x00\x01 | Filename | 0 | Mode | 0 |

----------------------------------------------

FUZZ TEMPLATE<DataModel name="tftprrx">

<Blob name="opcode" valueType="hex" value="00 01" token="true"/><String name ="filename" value="filename.txt" nullTerminated="true" /><String name="mode" value="NETASCII" token="true" nullTerminated="true"/>

</DataModel>

<StateModel name="State1" initialState="Initial"><State name="Initial">

<Action type="output"><DataModel ref="tftprrx" />

</Action></State>

</StateModel>…

Page 13: Fuzzing - автоматическое тестирование безопасности

Автоматизация

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Генерация данных используя model-based или попарное тестирование

Выбрать набор данных из продуктовой среды, учитывая code coverage

Использование существующей автоматизации

Page 14: Fuzzing - автоматическое тестирование безопасности

Шаг 4: Посылаем данные в приложение

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Page 15: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Шаг 5: Проверяем на исключения

Проверяем:- Логи фаззера - Процессы- HTML ответы (response) - Регистр- Сообщения об ошибках - Статус коды- Память - Системные логи

и т.д.

Page 16: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Шаг 6: Определяем уязвимость

Page 17: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Fuzzers

vs

Page 18: Fuzzing - автоматическое тестирование безопасности

Демо

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Page 19: Fuzzing - автоматическое тестирование безопасности

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Pros:•Легко автоматизируется•Выполняет много проверок •Множество вариаций входящих данных

Cons:•Простые ошибки•Тяжело оценить покрытие тестами•Технические знания для фаззинга (API, протоколы и драйвера)

Page 20: Fuzzing - автоматическое тестирование безопасности

Контакты

Fuzzing – автоматическое тестирование безопасностиКатерина Овеченко, Itera

Mail kateryna.ovechenko@iteraconsulting.

com

Skypekateryna.ovechenko

Kateryna Ovechenko