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

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

  • Upload
    sqalab

  • View
    2.874

  • Download
    6

Embed Size (px)

DESCRIPTION

Доклад на SQA Days-9, Казань, 22-23 апреля 2011

Citation preview

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

Применение fuzz тестирования

Очир Абушинов

WWPass Corporation

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

План

• Что такое фаззинг (fuzzing) и зачем он нужен• Обзор инструментов для фазз тестирования• Фаззинг файлов• Фаззинг протоколов• Фаззинг драйверов• Фаззинг веб-приложений• Пример фаззинга веб-приложения• Пример фаззинга сетевого приложения• Какие баги можно найти при помощи фаззинга• Фаззинг в процессе тестирования• Полезные ссылки и литература

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

Что такое фаззинг (fuzzing)

Фаззинг (fuzzing) – методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные

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

Что такое фаззинг (fuzzing)

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

Зачем он нужен?

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

• Файлы• Драйверы• Приложения• Веб-приложения• Протоколы• API

Что можно фаззить?

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

1) Генерация- случайные данные (dumb)- входные данные,

сформированные по моделям (smart)

2) Мутация- изменение существующих входных данных

Как можно фаззить?

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

Фаззинг файлов

1) Выбираем входные данные2) Фаззер искажает эти данные3) Фаззер запускает приложение с передачей ему искаженных данных4) Фаззер перебирает входные данные5) В случае возникновения ошибки, записываем данные и анализируем результаты

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

Фаззинг файлов

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

Фаззинг файлов

• MiniFuzz (Windows) • FileFuzz (Windows)• FileP (Python) • Zzuf (Linux, Mac)

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

Фаззинг протоколов

1) Выбираем фаззер (свой или сторонний)

2) Создаем модели данных3) Описываем параметры модели в входном файле4) Запускаем фаззер 5) В случае возникновения ошибки, записываем данные и анализируем результаты

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

Фаззинг протоколов

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

Фаззинг протоколов

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

Фаззинг протоколов

• PROTOS (WAP, HTTP-reply, LDAP, SNMP, SIP, ISAKMP) (Java)

• Peach и HotFuzz• SPIKE (Linux, C)

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

Фаззинг драйверов

IOCTL fuzzer

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

Фаззинг веб-приложений

1) Выбираем какими запросами будем фазить

2) Подбираем фаззер 3) Создаем скрипт для фаззинга4) Запускаем фаззер 5) В случае возникновения ошибки, записываем данные и анализируем результаты

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

Фаззинг веб-приложений

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

• Skyfish• SPIKE Proxy• OWASP WSFuzzer (SOAP)• Rfuzz • Fuzzops• PowerFuzzer• итд.

Фаззинг веб-приложений

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

Фаззинг исходного кода

• Jsfuzzer – фаззер JavaScript http://code.google.com/p/jsfuzzer/• JavaFuzz – фаззер Ява классов http://code.google.com/p/javafuzz/

• PFF – фаззер PHP http://www.setec.org/~calcite/code/pff/

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

• Sulley — фреймворк для создания сложных структур данных

• Fusil — библиотека на Python для написания фаззеров

• Bunny The Fuzzer – фаззер для протоколов на языке С

• Много фаззеров на http://code.google.com

Прочие фаззеры

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

Пример фаззинга веб-приложения

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

Пример фаззинга сетевогоприложения

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

Какие баги можно найти припомощи фаззинга

• Утечки памяти• Переполнение буфера• Неверные коды ошибок• Ошибки обработки входных данных• Отказ в обслуживании

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

Фаззинг в процессетестирования

• Часть процесса тестирования безопасности

• Стоит попробовать с другими видами тестирования

• Необходимо знание протоколов и форматов данных

• Документирование • Это не очень сложно

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

Полезные ссылки илитература

• 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 г.

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

Спасибо за внимание!Вопросы?

E-mail: [email protected]: ochir_abushinov