Очир Абушинов - Применение fuzz-тестирования

Preview:

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: ochir.abushinov@gmail.comSkype: ochir_abushinov

Recommended