Завалить в один запрос: уязвимости веб-приложений,...
DESCRIPTION
TRANSCRIPT
![Page 1: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/1.jpg)
Завалить в один запрос: уязвимости веб-
приложений, приводящие к DoS
Иван Новиков, ONsec
![Page 2: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/2.jpg)
Откуда ноги растут?
• ONsec – аудиты информационной безопасности с 2009• Только веб, только хардкор• Анализ более 1000 веб-приложений, включая ресурсы, на
которые вы заходите каждый день• Программы вознаграждения за обнаруженные уязвимости (bug-
bounty и reward-программы)• http://lab.onsec.ru – технический блог (EN)
![Page 3: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/3.jpg)
Что такое DoS для веба?
• Отказ в обслуживании• Функционал веб-приложения или его часть перестают работать• У сайта была возможность делать что-либо, а теперь нет• «Не логинит», «не показывает», «не добавляет», и другие «не …»
• Функционал можно разделить на критически важный и остальной• Критически важный – приносит деньги или мешает их приносить• Оформление заказа (от выбора до оплаты) для магазина - пример
![Page 4: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/4.jpg)
DoS не DDoS
• Качество против количества• Мы говорим о логических атаках, а не сетевых• Представьте, что существует всего один запрос, который может
вызвать отключение какой-то функции веб-приложения на какое-то время
• Проблема DDoS решается сторонними мерами• Логические уязвимости DoS можно исправить только в коде веб-
приложения
![Page 5: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/5.jpg)
Немного очевидной теории
•CGI/mod_*/FastCGI/AppServer (Tomcat)•N обработчиков (workers) выполняют код
приложения•Отличия между CGI/mod_(php|…)/FastCGI/Tomcat
только на уровне инициализации интерпретатора/вирт. машины перед исполнением запроса
![Page 6: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/6.jpg)
Имеем N обработчиков, исполняющих логику веб-приложения
===>
Минимальное число запросов, чтобы занять их всех «делом» = N
![Page 7: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/7.jpg)
НЕТ
![Page 8: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/8.jpg)
ПОТОМУ ЧТООТКАЗОУСТОЙЧИВОСТЬ
![Page 9: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/9.jpg)
Немного менее очевидной практики• Веб – он такой веб…• Что сделает фронт (балансер), если поймет, что бэкэнд (фронт) не
отвечает на запрос время T?• Перешлет тот же самый запрос другому бэкэнду (фронту)!• А если причина ответа больше времени T в самом запросе?
![Page 10: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/10.jpg)
Первопричины• Исчерпан не дискретный системный
ресурс• CPU – квантуется тиками, в случае большой
нагрузки со стороны одного процесса, ресурса достанется мало, но всем• Дисковая подсистема – iops, SSD спасает• PID, количество соединений с базой,
inodes – квантуются большими значениями• Нужный ресурс залочен• Искусственное ограничение с целью
сохранить консистентность данных
![Page 11: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/11.jpg)
Причины
• уязвимости обработки форматов данных• классические уязвимости• уязвимости логики работы приложений• уязвимости архитектуры/администрирования
![Page 12: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/12.jpg)
Обработка форматов данных
•А какой у вашего парсера порог вложенности?•XML/SOAP bombs
![Page 13: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/13.jpg)
НЕТ
![Page 14: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/14.jpg)
у меня REST ;)
![Page 15: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/15.jpg)
Обработка форматов данных
•А какой у вашего парсера порог вложенности?
/rest/api/is/pretty/good/also/for/logic/bombs?a[][][][][][][][][][][][][][][]=123&b[1][2][3][4][][][][7][8][][][]…
![Page 16: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/16.jpg)
Обработка форматов данных
•XML, JSON, CSV и многие другие…•Проще проверить векторами атак, чем вычитывать
код• ZIP и другие архивы – распакуй мне
папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/папку/СИМЛИНК
![Page 17: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/17.jpg)
И ЕЩЕ
![Page 18: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/18.jpg)
![Page 19: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/19.jpg)
Ресайзь меня полностью!
Не стоит давать возможность задавать любоые размеры пользователю при ресайсе:/resize.me?width=99999999&height=9999999
Важно проверять не только вес загружаемой картинки перед обработкой, но и ее линейные размеры:1.png - 1kb - 1x999999 px
![Page 20: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/20.jpg)
Пример с реварда
![Page 21: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/21.jpg)
Классические уязвимости
• SQL-инъекции•XXE• SSRF
•И почти все остальные серверные уязвимости•Могут отправить сервер куда-нибудь, например,
читать /dev/urandom до EOF
![Page 22: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/22.jpg)
![Page 23: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/23.jpg)
Классические уязвимости
•Почему не спасет max_execution_time?
•не распространяется на сокетные операции и другое чтение!
•Сервер может «цедить» вашему приложению по байту, удерживая сокет
![Page 24: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/24.jpg)
Уязвимости логики работы приложения•В простонародье – тормозящий поиск• Также известны как «сунь мне в LIKE процентов»
•Более интересные случаи атаки на классификаторы «человечных» поисковых механизмов
красное, но синее, шоколад, быстрый, для девушки
![Page 25: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/25.jpg)
Уязвимости логики работы приложения• Типичная ошибка при проектировании защиты –
положиться на ограничение поисковой строки для LIKE по длине
•СУБД все-равно:AND word LIKE ‘%’AND word LIKE ‘%%%%%%%%%’
![Page 26: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/26.jpg)
Уязвимости логики работы приложения• Типичная ошибка при проектировании защиты –
фильтровать только символ %
• Siri, help me: “LIKE operator wildcards”[^gasddsd][!abcgfsdt]_a_b_c_d_e
![Page 27: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/27.jpg)
Уязвимости администрирования
•Разработчики пишут код•Админы этот код обслуживают•Кто отвечает за баги на стыке этих процессов?
![Page 28: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/28.jpg)
АРХИТЕКТОР
![Page 29: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/29.jpg)
Классика – кончились соединения с базойПул соединений в случае с сервером приложений
Что сделает приложение, когда каждое из соединений пула будет читать/писать что-то в момент, когда новый воркер тоже хочет к базе?
Ничего не сделает – будет ждать
![Page 30: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/30.jpg)
Сессии в файловой системе
/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](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/31.jpg)
Сессии в файловой системе
RAM i-nodes4Gb 512k8Gb 1М16Gb 2М32Gb 4М48Gb 6М64Gb 8М
![Page 32: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/32.jpg)
НЕТ
![Page 33: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/33.jpg)
У МЕНЯ MEMCACHED
![Page 34: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/34.jpg)
Memcached хранилище сессий
Дело не в том, какое у вас хранилищеДело в том, ЧТО вы там храните :)User-agent, login, историю посещенных страниц – а сколько это может занимать ГИГАБАЙТ ?
Размер memcached всегда ограничен памятьюКак обработано истощение памяти?
Злоумышленник может держать весь пул на своих сессиях и не давать никому установить новые
![Page 35: Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS](https://reader033.vdocuments.mx/reader033/viewer/2022061122/5470211eb4af9fc80a8b4641/html5/thumbnails/35.jpg)
Вопросы?
Спасибо за внимание!
@d0znpphttp://lab.onsec.ru