Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг?...

40
Web Application Fuzzing best practice

Transcript of Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг?...

Page 1: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Web Application Fuzzing best practice

Page 2: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

whoami

• Константин Педан

• Пентестер в SRC Security Research & Consulting GmbH

• 10+ лет опыта работы в ИТ, 5+ лет опыта в ИБ

• GIAC GPEN, GIAC GXPN, PCI DSS ASV

Page 3: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Краткое содержание

• Что такое фаззинг?

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

• Продвинутый веб фаззинг

• Автоматизация продвинутого фаззинга

Page 4: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Что такое фаззинг?

• техника тестирования путем передачи на вход приложения неправильных, случайных или неожиданных данных

• важная часть SDLC при разработке безопасных приложений

• исследовательский инструмент с высоким уровнем идентификации уязвимостей

Page 5: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Причины популярности

• Фаззинг эффективнее чем анализ исходного кода • утечка исходного кода «Windows 2000» и «NT 4.0», в 2004 не дала взрывного роста найденных уязвимостей

• CVE-2014-6278 (Shellshock), CVE-2016-6309 (statem/statem.c in OpenSSL 1.1.0a), CVE-2017-5340 (RCE in PHP < 7.0.15)

• Низкий порог вхождения

• Практически полная автоматизация процесса

Page 6: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Типы фаззинга

• «Глупый» фаззинг • случайные данные

• статические данные

• мутации данных

• «Умный» фаззинг • генерация данных

• умные мутации

Page 7: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Типы фаззинга

• Фаззинг случайными данными • самый не эффективный подход

• Фаззинг путем мутации • берем валидные данные и вносим аномалии

• быстрый старт, результативность зависит от качества аномалий

• Фаззинг путем генерации • создаем тестовые запросы на основе документации

• медленный старт, требует знания протокола, высокая эффективность

Page 8: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Критерии эффективности

• Максимальная глубина тестирования кода приложения при минимальном количестве итераций

• Реализуемо с любым подходом, глубину тестирования можно измерить, позволяет проверить эффективность фаззинга

Page 9: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Инструментарий

• Фреймворки • Radamsa, Sulley, Peach, SPIKE, American Fuzzy Lop …

• Оценка эффективности • Pai Mei, Valgrind, DynamoRIO, DTrace …

Page 10: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Работы которые стоит почитать

• Fuzzing for Software Security Testing and Quality Assurance, Charlie Miller, 2008, ISBN 13: 978-1-59693-214-2

• Fuzzing: Brute Force Vulnerability Discovery, Michael Sutton, 2007, ISBN 0-32-144611-9

• Babysitting an Army of Monkeys, Charlie Miller, 2010

Page 11: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

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

Page 12: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Особенности веб фаззинга

• Ограниченый набор точек куда можно передать данные: • URI, Header, Cookies, Post data

• Непредсказуемая архитектура приложения и сетевой доступ

• Отсутствие стандартного ответа об ошибке

• Невозможность оценить глубину тестирования

Page 13: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Типичный веб фаззинг #1

GET / HTTP/1.1 Accept: */* Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cache-Control: no-cache Pragma: no-cache Connection: close

HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 8 Cache-Control: no-cache, no-store, must-revalidate Date: Mon, 09 Oct 2017 20:12:29 GMT Connection: close

—> стандартный запрос

<— стандартный ответ

Page 14: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Типичный веб фаззинг #2

GET /AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA HTTP/1.1 Accept: */* Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cache-Control: no-cache Pragma: no-cache Connection: close

HTTP/1.1 404 Not Found Content-Type: text/html Content-Length: 349 Connection: close Date: Mon, 09 Oct 2017 20:14:15 GMT Server: ECSF (dca/53FA)

—> запрос с ошибкой

<— стандартная ошибка

Page 15: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Типичный веб фаззинг #3

GET /%00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA HTTP/1.1 Accept: */* Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cache-Control: no-cache Pragma: no-cache Connection: close

HTTP/1.1 500 Internal Server Error Content-Type: text/plain Content-Length: -1 Cache-Control: no-cache, no-store, must-revalidate Date: Mon, 09 Oct 2017 20:14:29 GMT Connection: close

—> запрос с payload

<— аномальная ошибка

Page 16: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Стратегия веб фаззинга

• Мы не можем оценить эффективность как в обычном фаззинге

• Но можем построить эффективную стратегию ответив на следующие вопросы: • что тестируем?

• чем тестируем?

• что пытаемся обнаружить?

• когда останавливаем тестирование?

Page 17: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Что мы тестируем?

• Тип приложения • форма поиска, парсер данных, профайл пользователя …

• В каком виде передаются данные? • текст, бинарный формат

• Дополнительный особенности • end-to-end шифрование, сжатие данных, обязательные параметры, валидация данных, подпись …

Page 18: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Чем тестируем?

• Сканеры • IBM AppScan, Acunetix, Burp Suite, Arachni, Nikto …

• Intruders • Burp Suite, Zed Attack Proxy …

Page 19: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Сканер уязвимостей

• Минимальное участие пен.тестера

• Плохо работает если часть логики в браузере клиента

• Полная зависимость результата от качества сканера

Page 20: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Веб фаззинг != поиск инъекций

• Сканеры фокусируются на разнообразные инъекции • SQL, JS (XSS), XML, JSON, LDAP, OS Command

• Другие уязвимости тестируют поверхностно • Buffer overflow, Directory Traversal, Race condition, обход бизнес логики …

Page 21: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Ручной подход / Intruder

• Эффективнее тестирует бизнес логику и сложные уязвимости

• Вносится человеческий фактор

• Полная зависимость результата от опыта пен.тестера

Page 22: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Что пытаемся обнаружить?

• Аномалий в ответах • HTTP коды

• различия в длине ответов

• различия во времени ответа

• сообщения об ошибках

• обрывы сессии и конекта

• Повторяемость аномалии

Page 23: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Когда останавливаем тестирование?

• При достаточном количестве итераций можно найти все баги (теоретически)

• Каждый последующий баг найти сложнее чем предыдущий

• Тестирование стоит остановить как только выходим на «плато» графика: количество багов/количество итераций

точка остановкибаги

итерации

Page 24: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Ошибка выжившего в фаззинге

• Payload’ы для сканеров и Intruder’ов на основе известных уязвимостей

• Известные векторы атаки позволяют найти только известные уязвимости

• Как искать неизвестные?

Total vulns

C

B A

M

Page 25: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Продвинутый веб фаззинг

Page 26: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Расширяем векторы атаки

• Добавляем к существующим данным новые мутации

• Мутации создают новые payloads

• Новые payloads == потенциально новые уязвимости

Page 27: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Мутации

• Набор мутаций ограничен только фантазией

• Потенциально полезные мутации • понижение или повышение ID

• добавление случайного байта

• null - мутация

• повторение последовательности байтов

Page 28: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Мутации ID

• GET /account_info?id=58782• 58832, 57856, -12541, 0, 15896332

• POST {«method»:»get_order","order_id":"A6528432"}• A1, A65535, A170141183460469231731687303715884105728

• Cookie: _ga=GA1.2.185633756.1488912637; UID=22134• 5273289, -22006, 9223372036854775809, 21354

Page 29: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Пример #1

POST /api/getaccountdetails

{"AgreementId":0,"Device":"iPhone","AccountId":9161179,"PasswordHash":"***********************************","Language":"2","Login":"testuser"}

Page 30: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Добавление случайного байта

_q=true&id=38736463233323&page=1&sid=id&sort=true&query=status%255B%255D%3D9%26keyword%3D%26keyword_similar%3D-1%26is_test%3D-1%26country_list%3D%26country%3D%26react_from%3D%26react_to%3D%26reg_from%3D%26reg_to%3D%26stat_from%3D%26stat_to%3D%26is_editing_needed%3D-1%26search_perset%3D0%26search_configuration_title%3D

Page 31: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Пример #2

POST /admin/get_users/

_q=true&id=38736463233323&page=1&sid=id&sort=true&query=status%255B%255D%3D9[%26keyword%3D%2$6keyword_similar%3D-1%26is_test%3D-1%26country_list%3D%26country%3D%26react_from%3D%26react_to%3D%26reg_from%3D%26reg_to%3D%26stat_from%3D%26stat_to%3D%26is_editing_needed%3D-1%26search_perset%3D0%26search_configuration_title%3D

Page 32: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Пример #2

{"error_type":"","errors":"A Database Error Occurred"}

Page 33: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Null - мутация

• Повторение одного и того же запроса без внесения модификаций

• Несколько параллельных потоков и общее количество запросов >2000

• Позволяет идентифицировать проблемы с утечками памяти и CPU, обнаружить «состояние гонки»

Page 34: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Пример #3

POST /BankBackEnd/changepassword

sid=2120834214354325434&passwordField=WrongPassword123&confirmPasswordField=WrongPassword123

при 20 потоках запросов и >2000 обращений к серверу появляется состояние гонки (race condition) и система изменяет пароль пользователя

Page 35: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Повторение последовательности байтов

• GET /user_info?name=hacker• hackeckeckeckeckeckeckeckeckeckeckeckeckeckeckeckeckkkkkkkkkkk

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkker

• POST {«method»:»get_order»,"order_id":"A6528432"}• A6526526526526526526526526526526526526526526526526526526526

526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526526528432

Page 36: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Инструментарий

• Можно использовать практически любой фреймворк для фаззинга

• Radamsa a general-purpose fuzzer • https://github.com/aoh/radamsa

• Sulley fuzzing engine • https://github.com/OpenRCE/sulley

Page 37: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Burp Intruder + Radamsa

Burp плагин Radamsa

Burp Intruder

http

burp API

bd: drop a byte bf: flip one bit bi: insert a random byte br: repeat a byte bp: permute some bytes bei: increment a byte by one bed: decrement a byte by one ber: swap a byte with a random one sr: repeat a sequence of bytes ld: delete a line lr2: duplicate a line li: clone and insert it nearby lr: repeat a line ls: swap two lines lp: swap order of lines td: delete a node tr2: duplicate a node ts1: swap one node with another one ts2: swap two nodes pairwise tr: repeat a path of the parse tree uw: try to make a code point too wide ui: insert funny unicode num: modify a textual number ft: jump to a similar position in block fn: likely clone data between similar positions fo: fuse previously seen data elsewhere

Page 38: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Web fuzzer плагин:

• Отправка статических payloads

• Определение оптимальной мутации

• Генерация новых payload используя radamsa

Page 39: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

ToDo:

• Добавить анализ ответов от сервера • статистика размера, времени ответа, количества тегов, валидация

HTML и т.д. и т.п.

• Реализовать автоматическую маркировку подозрительных ответов

• Добавить дополнительные кодировки для payloads • url encode, double url encode, js encode, html encode, unicode, unicode

2, unicode 2 + utf-8

Page 40: Pedan Web Application fuzzing - UISGCON 13web-application... · Что такое фаззинг? • техника тестирования путем передачи на вход

Спасибо!

Константин Педан

[email protected]