1 of 14

Фаззинг

Б19-505 Алексей Голигузов

2 of 14

Задачи

  1. Понять технику фаззинга
  2. Написать свой фаззер
  3. Испытать удачу и попробовать пофаззить open-source проекты

3 of 14

Фаззинг

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

4 of 14

Плюсы

  1. Тестирует маленькие кусочки кода
  2. Может быть автоматизировано
  3. Легко написать
  4. Поиск новых багов
  5. Поиск уязвимостей

5 of 14

Vocabulary

  • Корпус

Может быть получен фаззером

Набор плохих и хороших входных данных

  • Цель

Получает массив байтов на вход

Вызывает код, который нужно протестировать

  • Фаззер

Инструмент, подающий рандомные входные данные в цель

6 of 14

Алгоритм работы

7 of 14

Пример

8 of 14

Ход работы

  1. Выбрать целевую функцию
  2. Написать фаззер
  3. Подождать какое-то время
  4. Посмотреть логи и надеяться, что найден баг
  5. Возможно, переписать фаззер и повторить
  6. Повторить для разных целей

9 of 14

  1. Выбор функции

10 of 14

2. Написание фаззера

11 of 14

3. Ждем

12 of 14

4. Смотрим логи

13 of 14

Результаты

  1. Изучен процесс работы и разработки фаззера
  2. Написано больше 10 фаззеров, багов не найдено

14 of 14

Выводы

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

Тем не менее, разработчики должны использовать больше инструментов для тестирования своего кода (не только тесты UIRAP).

Весь код и корпусы могут быть найдены на https://github.com/MyLibh/fuzzing и использованны.