Подготовил студент группы 3881 Рамзайцев А.В. Руководитель: Федоров Д.Ю.
Что такое фаззинг (fuzzing) и зачем он нужен Обзор инструментов для фазз тестирования Фаззинг файлов Фаззинг протоколов Фаззинг веб-приложений Какие баги можно найти при помощи фаззинга Фаззинг в процессе тестирования Полезные ссылки и литература
Технология тестирования программного обеспечения
Смысл такой проверки сводится к тому, что программист не знает, какие данные будут переданы приложению/пр отоколу/функци и, поэтому его задача предусмотреть и проверить как можно больше вариантов.
Файлы Драйверы Приложения Веб-приложения Протоколы API
1) Генерация - случайные данные (dumb) - входные данные, сформированные по моделям (smart) 2) Мутация - изменение существующих входных данных
1. Выбираем входные данные 2. Фаззер искажает эти данные 3. Фаззер запускает приложение с передачей ему искаженных данных 4. Фаззер перебирает входные данные 5. В случае возникновения ошибки, записываем данные и анализируем результаты
Создание (или получение) достаточно представительного набора корректных файлов исходных данных (этот набор является эталонным – template files set) Фаззер случайным образом выбирает файл из эталонного набора Фаззер сохраняет выбранный файл во временном каталоге (создает временный файл) Фаззер искажает временный файл Фаззер загружает тестируемое приложение и передает ему имя временного файла с искаженными данными как аргумент командной строки Фаззер запускает приложение с использованием возможностей отладчика Windows, что позволяет ему определить и перехватить ошибки, возникающие при выполнении приложения Если приложение выполняется без сбоев на протяжении определенного промежутка времени (По-умолчанию 2 сек.), то фаззер завершает приложение и удаляет временный файл. Если при выполнении приложения возник сбой, то информация об ошибке и временный файл сохраняются либо в каталоге файлов, либо базе данных Team Foundation Server (bug tracking database) Возврат на шаг 2
1)Выбираем фаззер (свой или сторонний) 2) Создаем модели данных 3) Описываем параметры модели в входном файле 4) Запускаем фаззер 5) В случае возникновения ошибки, записываем данные и анализируем результаты
1)Выбираем какими запросами будем фазить 2)Подбираем фаззер 3) Создаем скрипт для фаззинга 4) Запускаем фаззер 5) В случае возникновения ошибки, записываем данные и анализируем результаты
Утечки памяти Переполнение буфера Неверные коды ошибок Ошибки обработки входных данных Отказ в обслуживании
Часть процесса тестирования безопасности Стоит попробовать с другими видами тестирования Необходимо знание протоколов и форматов данных Документирование Это не очень сложно(Да ладно!)
us/library/cc aspx Педрам Амини, «Fuzzing. Исследование уязвимостей методом грубой силы», Символ-Плюс, 2009 г.