35
Завалить в один запрос: уязвимости веб- приложений, приводящие к DoS Иван Новиков, ONsec

Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Завалить в один запрос: уязвимости веб-

приложений, приводящие к DoS

Иван Новиков, ONsec

Page 2: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Откуда ноги растут?

• ONsec – аудиты информационной безопасности с 2009• Только веб, только хардкор• Анализ более 1000 веб-приложений, включая ресурсы, на

которые вы заходите каждый день• Программы вознаграждения за обнаруженные уязвимости (bug-

bounty и reward-программы)• http://lab.onsec.ru – технический блог (EN)

Page 3: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Что такое DoS для веба?

• Отказ в обслуживании• Функционал веб-приложения или его часть перестают работать• У сайта была возможность делать что-либо, а теперь нет• «Не логинит», «не показывает», «не добавляет», и другие «не …»

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

Page 4: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

DoS не DDoS

• Качество против количества• Мы говорим о логических атаках, а не сетевых• Представьте, что существует всего один запрос, который может

вызвать отключение какой-то функции веб-приложения на какое-то время

• Проблема DDoS решается сторонними мерами• Логические уязвимости DoS можно исправить только в коде веб-

приложения

Page 5: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Немного очевидной теории

•CGI/mod_*/FastCGI/AppServer (Tomcat)•N обработчиков (workers) выполняют код

приложения•Отличия между CGI/mod_(php|…)/FastCGI/Tomcat

только на уровне инициализации интерпретатора/вирт. машины перед исполнением запроса

Page 6: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Имеем N обработчиков, исполняющих логику веб-приложения

===>

Минимальное число запросов, чтобы занять их всех «делом» = N

Page 7: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

НЕТ

Page 8: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

ПОТОМУ ЧТООТКАЗОУСТОЙЧИВОСТЬ

Page 9: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Немного менее очевидной практики• Веб – он такой веб…• Что сделает фронт (балансер), если поймет, что бэкэнд (фронт) не

отвечает на запрос время T?• Перешлет тот же самый запрос другому бэкэнду (фронту)!• А если причина ответа больше времени T в самом запросе?

Page 10: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Первопричины• Исчерпан не дискретный системный

ресурс• CPU – квантуется тиками, в случае большой

нагрузки со стороны одного процесса, ресурса достанется мало, но всем• Дисковая подсистема – iops, SSD спасает• PID, количество соединений с базой,

inodes – квантуются большими значениями• Нужный ресурс залочен• Искусственное ограничение с целью

сохранить консистентность данных

Page 11: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Причины

• уязвимости обработки форматов данных• классические уязвимости• уязвимости логики работы приложений• уязвимости архитектуры/администрирования

Page 12: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Обработка форматов данных

•А какой у вашего парсера порог вложенности?•XML/SOAP bombs

Page 13: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

НЕТ

Page 14: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

у меня REST ;)

Page 15: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Обработка форматов данных

•А какой у вашего парсера порог вложенности?

/rest/api/is/pretty/good/also/for/logic/bombs?a[][][][][][][][][][][][][][][]=123&b[1][2][3][4][][][][7][8][][][]…

Page 16: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Обработка форматов данных

•XML, JSON, CSV и многие другие…•Проще проверить векторами атак, чем вычитывать

код• ZIP и другие архивы – распакуй мне

папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/СИМЛИНК

Page 17: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

И ЕЩЕ

Page 18: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS
Page 19: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Ресайзь меня полностью!

Не стоит давать возможность задавать любоые размеры пользователю при ресайсе:/resize.me?width=99999999&height=9999999

Важно проверять не только вес загружаемой картинки перед обработкой, но и ее линейные размеры:1.png - 1kb - 1x999999 px

Page 20: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Пример с реварда

Page 21: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Классические уязвимости

• SQL-инъекции•XXE• SSRF

•И почти все остальные серверные уязвимости•Могут отправить сервер куда-нибудь, например,

читать /dev/urandom до EOF

Page 22: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS
Page 23: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Классические уязвимости

•Почему не спасет max_execution_time?

•не распространяется на сокетные операции и другое чтение!

•Сервер может «цедить» вашему приложению по байту, удерживая сокет

Page 24: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Уязвимости логики работы приложения•В простонародье – тормозящий поиск• Также известны как «сунь мне в LIKE процентов»

•Более интересные случаи атаки на классификаторы «человечных» поисковых механизмов

красное, но синее, шоколад, быстрый, для девушки

Page 25: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Уязвимости логики работы приложения• Типичная ошибка при проектировании защиты –

положиться на ограничение поисковой строки для LIKE по длине

•СУБД все-равно:AND word LIKE ‘%’AND word LIKE ‘%%%%%%%%%’

Page 26: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Уязвимости логики работы приложения• Типичная ошибка при проектировании защиты –

фильтровать только символ %

• Siri, help me: “LIKE operator wildcards”[^gasddsd][!abcgfsdt]_a_b_c_d_e

Page 27: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Уязвимости администрирования

•Разработчики пишут код•Админы этот код обслуживают•Кто отвечает за баги на стыке этих процессов?

Page 28: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

АРХИТЕКТОР

Page 29: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Классика – кончились соединения с базойПул соединений в случае с сервером приложений

Что сделает приложение, когда каждое из соединений пула будет читать/писать что-то в момент, когда новый воркер тоже хочет к базе?

Ничего не сделает – будет ждать

Page 30: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Сессии в файловой системе

/tmp/sess_ag6YTFfrsdsyRT2sS• сколько файлов может быть создано в tmpfs?

nr_inodes = The maximum number of inodes for this instance. The default is half of the number of your physical RAM pages, or (on a machine with highmem) the number of lowmem RAM pages, whichever is the lower

Page 31: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Сессии в файловой системе

RAM i-nodes4Gb 512k8Gb 1М16Gb 2М32Gb 4М48Gb 6М64Gb 8М

Page 32: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

НЕТ

Page 33: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

У МЕНЯ MEMCACHED

Page 34: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Memcached хранилище сессий

Дело не в том, какое у вас хранилищеДело в том, ЧТО вы там храните :)User-agent, login, историю посещенных страниц – а сколько это может занимать ГИГАБАЙТ ?

Размер memcached всегда ограничен памятьюКак обработано истощение памяти?

Злоумышленник может держать весь пул на своих сессиях и не давать никому установить новые

Page 35: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS

Вопросы?

Спасибо за внимание!

@d0znpphttp://lab.onsec.ru