От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
Fuzzing - автоматическое тестирование безопасности
1. Software quality assurance days
17 Международная конференция
по вопросам качества ПО
sqadays.com
Минск. 29–30 мая 2015
Катерина Овеченко
Itera. Киев, Украина
Fuzzing – автоматическое тестирование
безопасности
2. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
О себе
5+ лет в тестировании.
Специалист по ручному тестированию и
построению процесса тестирования на проектах.
2+ года в тестировании безопасности: от
построения компетенции до координации проектов
для внешних заказчиков.
Сейчас занимаю должность QA coordinator в
компании Itera.
Докладчик конференций, один из основателей
сообщества OWASP Украина, организатор
конференции QA Fest.
3. Fuzz тестирование (aka Fuzzing) – это подход к поиску уязвимостей, обычно полу-
или полностью автоматизированный, при котором невалидные, непредвиденные
или случайные данные подаются на вход в приложение.
Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Fuzzing – что это?
4. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Поиск уязвимостей
White-box подход
5. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Поиск уязвимостей
Black-box подход
7. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Какие баги находит
fuzzing?
Ошибки в обработке
входных данных
Переполнение буфера Отказ в обслуживании (DoS)
Атаки по обходу директорий
(directory traversal)
XSS и SQL инъекцииУтечки памяти
8. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Fuzzing: Основные шаги
Определяем
цель
Задаем
интерфейсы
ввода данных
Генерируем
тестовые
данные
Посылаем
данные в
приложение
Проверяем на
исключения
Определяем
уязвимость
9. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Шаг 1: Определяем цель
Что будем фаззить?
На каком уровне?
Есть ли известные
уязвимости?
Функциональность с
особым риском?
10. Шаг 2: Определяем интерфейсы
ввода данных
Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
На уровне кода приложения
На уровне интерфейса приложения
11. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Шаг 3: Генерируем тестовые данные
13. Автоматизация
Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Генерация данных используя model-based или попарное тестирование
Выбрать набор данных из продуктовой среды, учитывая code coverage
Использование существующей автоматизации
14. Шаг 4: Посылаем данные
в приложение
Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
15. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Шаг 5: Проверяем на исключения
Проверяем:
- Логи фаззера - Процессы
- HTML ответы (response) - Регистр
- Сообщения об ошибках - Статус коды
- Память - Системные логи
и т.д.
16. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Шаг 6: Определяем уязвимость
19. Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Pros:
•Легко
автоматизируется
•Выполняет много
проверок
•Множество вариаций
входящих данных
Cons:
•Простые ошибки
•Тяжело оценить
покрытие тестами
•Технические знания
для фаззинга (API,
протоколы и
драйвера)
20. Контакты
Fuzzing – автоматическое тестирование безопасности
Катерина Овеченко, Itera
Mail
kateryna.ovechenko@iteraconsulting.com
Skype
kateryna.ovechenko
Kateryna Ovechenko
Notes de l'éditeur
Vulnerability is identified, but it’s not enough. Need to analyze the risk of it and define potential impact. We communicate with business with the terms of risk, not vulnerability…
Skills
Disassembly
Debugging
Vulnerability types
Stack overflows
Heap overflows
Integer handling
Overflows
Signedness
DoS
Out of bounds reads
Infinite loops
NULL pointer dereferences
Logic errors
Windows WMF vulnerability (MS06-001)
Format strings
Race conditions
Skills
HTTP
HTML
Client side scripting
SQL
Vulnerability types
Denial of service
Cross site scripting (XSS)
SQL injection
Directory traversal/Weak access control
Weak authentication
Weak session management (cookies)
Buffer overflow
Improperly supported HTTP methods
Remote Command Execution
Remote Code Injection
Vulnerable Libraries
HTTP Request Splitting
Format Strings
FuzzDB — лишь набор текстовых файлов с шаблонами, отсортированных по платформам, типам атак, языкам. Использовать FuzzDB можно где угодно, например в самописном web-сканнере директорий или в профессиональном инструменте для проведения пен-тестов.
Protocols and file formats imply norms, which are sometimes blurry, very complicated or badly implemented : that's why developers sometimes mess up in the implementation process (because of time/cost constraints). That's why it can be interesting to take the opposite approach: take a norm, look at all mandatory features and constraints, and try all of them; forbidden/reserved values, linked parameters, field sizes. That would be conformance testing oriented fuzzing.
Фаззинг по своей сути является динамической технологией тестирования безопасности. Под статической технологией я подразумеваю любые программные средства, которые производят тестирование кода по каким-то определенным шаблонам. Средства статического анализа кода позволяют обрабатывать большее количество кода благодаря автоматизации, но результаты строго ограничены и могут быть ложными, что не есть гуд. Фаззинг же динамичен, он не имеет строгих шаблонов и критериев и может быть просто автоматизирован, выполняясь непрерывно, но он работает случайным образом и может иметь проблемы при работе с более глубокими частями кода. Поэтому наилучшим решением проблемы будет сочетание нескольких этапов проверки исходного кода:
1. Проверка на наличие багов человеком
2. Проверка средствами статического анализатора
3. Фаззинг
For summary
Fuzz testing can be combined with other testing techniques. White-box fuzzing uses symbolic execution and constraint solving.[16] Evolutionary fuzzing leverages feedback from an heuristic (E.g., code coverage in grey-box harnessing,[17] or a modeled attacker behavior in black-box harnessing[18]) effectively automating the approach of exploratory testing.
Фаззинг находит ошиьки, которые будут пропущены при обыном тестировании. Несмотря на трудности в настройке и использовании, эта техника очень эффективна для ....
Фаззер – средство (приложение или фреймворк), позволяющее проводить автоматизированный фаззинг исходного кода, файлов, приложений и прочего.
tools (standalone tools which were designed to fuzz a single program or protocol) and frameworks (have an api that can be used to easily create broken data and implement specific protocols)
http://www.infosecinstitute.com/blog/2005/12/fuzzers-ultimate-list.html
Идея: сделать свое фото со знаком live long and prosper