Upload
sqalab
View
2.874
Download
6
Embed Size (px)
DESCRIPTION
Доклад на SQA Days-9, Казань, 22-23 апреля 2011
Citation preview
Применение fuzz тестирования
Очир Абушинов
WWPass Corporation
План
• Что такое фаззинг (fuzzing) и зачем он нужен• Обзор инструментов для фазз тестирования• Фаззинг файлов• Фаззинг протоколов• Фаззинг драйверов• Фаззинг веб-приложений• Пример фаззинга веб-приложения• Пример фаззинга сетевого приложения• Какие баги можно найти при помощи фаззинга• Фаззинг в процессе тестирования• Полезные ссылки и литература
Что такое фаззинг (fuzzing)
Фаззинг (fuzzing) – методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные
Что такое фаззинг (fuzzing)
Зачем он нужен?
• Файлы• Драйверы• Приложения• Веб-приложения• Протоколы• API
Что можно фаззить?
1) Генерация- случайные данные (dumb)- входные данные,
сформированные по моделям (smart)
2) Мутация- изменение существующих входных данных
Как можно фаззить?
Фаззинг файлов
1) Выбираем входные данные2) Фаззер искажает эти данные3) Фаззер запускает приложение с передачей ему искаженных данных4) Фаззер перебирает входные данные5) В случае возникновения ошибки, записываем данные и анализируем результаты
Фаззинг файлов
Фаззинг файлов
• MiniFuzz (Windows) • FileFuzz (Windows)• FileP (Python) • Zzuf (Linux, Mac)
Фаззинг протоколов
1) Выбираем фаззер (свой или сторонний)
2) Создаем модели данных3) Описываем параметры модели в входном файле4) Запускаем фаззер 5) В случае возникновения ошибки, записываем данные и анализируем результаты
Фаззинг протоколов
Фаззинг протоколов
Фаззинг протоколов
• PROTOS (WAP, HTTP-reply, LDAP, SNMP, SIP, ISAKMP) (Java)
• Peach и HotFuzz• SPIKE (Linux, C)
Фаззинг драйверов
IOCTL fuzzer
Фаззинг веб-приложений
1) Выбираем какими запросами будем фазить
2) Подбираем фаззер 3) Создаем скрипт для фаззинга4) Запускаем фаззер 5) В случае возникновения ошибки, записываем данные и анализируем результаты
Фаззинг веб-приложений
• Skyfish• SPIKE Proxy• OWASP WSFuzzer (SOAP)• Rfuzz • Fuzzops• PowerFuzzer• итд.
Фаззинг веб-приложений
Фаззинг исходного кода
• Jsfuzzer – фаззер JavaScript http://code.google.com/p/jsfuzzer/• JavaFuzz – фаззер Ява классов http://code.google.com/p/javafuzz/
• PFF – фаззер PHP http://www.setec.org/~calcite/code/pff/
• Sulley — фреймворк для создания сложных структур данных
• Fusil — библиотека на Python для написания фаззеров
• Bunny The Fuzzer – фаззер для протоколов на языке С
• Много фаззеров на http://code.google.com
Прочие фаззеры
Пример фаззинга веб-приложения
Пример фаззинга сетевогоприложения
Какие баги можно найти припомощи фаззинга
• Утечки памяти• Переполнение буфера• Неверные коды ошибок• Ошибки обработки входных данных• Отказ в обслуживании
Фаззинг в процессетестирования
• Часть процесса тестирования безопасности
• Стоит попробовать с другими видами тестирования
• Необходимо знание протоколов и форматов данных
• Документирование • Это не очень сложно
Полезные ссылки илитература
• http://en.wikipedia.org/wiki/Fuzz_testing• http://www.xakep.ru/post/52726/• http://www.fuzzing.org/• http://msdn.microsoft.com/en-us/library/cc162782.aspx
• Педрам Амини, «Fuzzing. Исследование уязвимостей методом грубой силы», Символ-Плюс, 2009 г.
Спасибо за внимание!Вопросы?
E-mail: [email protected]: ochir_abushinov