Завалить в один запрос:
уязвимости веб-приложений,
приводящие к DoS
Иван Новиков, ONsec
Откуда ноги растут?
• ONsec – аудиты информационной безопасности с 2009
• Только веб, только хардкор
• Анализ более 1000 в...
Что такое DoS для веба?
• Отказ в обслуживании
• Функционал веб-приложения или его часть перестают работать
• У сайта была...
DoS не DDoS
• Качество против количества
• Мы говорим о логических атаках, а не сетевых
• Представьте, что существует всег...
Немного очевидной теории
• CGI/mod_*/FastCGI/AppServer (Tomcat)
• N обработчиков (workers) выполняют код
приложения
• Отли...
Имеем N обработчиков, исполняющих
логику веб-приложения

===>
Минимальное число запросов, чтобы
занять их всех «делом» = N
НЕТ
ПОТОМУ ЧТО
ОТКАЗОУСТОЙЧИВОСТЬ
Немного менее очевидной практики
• Веб – он такой веб…
• Что сделает фронт (балансер), если поймет, что бэкэнд (фронт) не
...
Первопричины
• Исчерпан не дискретный системный
ресурс

• CPU – квантуется тиками, в случае
большой нагрузки со стороны од...
Причины
• уязвимости обработки форматов данных
• классические уязвимости
• уязвимости логики работы приложений
• уязвимост...
Обработка форматов данных
• А какой у вашего парсера порог вложенности?
• XML/SOAP bombs
НЕТ
у меня REST ;)
Обработка форматов данных
• А какой у вашего парсера порог вложенности?
/rest/api/is/pretty/good/also/for/logic/bombs?a[][...
Обработка форматов данных
• XML, JSON, CSV и многие другие…
• Проще проверить векторами атак, чем вычитывать
код
• ZIP и д...
И ЕЩЕ
Ресайзь меня полностью!
Не стоит давать возможность задавать любоые
размеры пользователю при ресайсе:
/resize.me?width=999...
Пример с реварда
Классические уязвимости
• SQL-инъекции
• XXE
• SSRF

• И почти все остальные серверные уязвимости
• Могут отправить сервер...
Классические уязвимости
• Почему не спасет max_execution_time?
• не распространяется на сокетные операции и
другое чтение!...
Уязвимости логики работы приложения
• В простонародье – тормозящий поиск
• Также известны как «сунь мне в LIKE процентов»
...
Уязвимости логики работы приложения
• Типичная ошибка при проектировании защиты –
положиться на ограничение поисковой стро...
Уязвимости логики работы приложения
• Типичная ошибка при проектировании защиты –
фильтровать только символ %
• Siri, help...
Уязвимости администрирования
• Разработчики пишут код
• Админы этот код обслуживают
• Кто отвечает за баги на стыке этих п...
АРХИТЕКТОР
Классика – кончились соединения с
базой
Пул соединений в случае с сервером приложений
Что сделает приложение, когда каждое...
Сессии в файловой системе
/tmp/sess_ag6YTFfrsdsyRT2sS
• сколько файлов может быть создано в tmpfs?
nr_inodes = The maximum...
Сессии в файловой системе
RAM
4Gb
8Gb
16Gb
32Gb
48Gb
64Gb

i-nodes
512k
1М
2М
4М
6М
8М
НЕТ
У МЕНЯ
MEMCACHED
Memcached хранилище сессий
Дело не в том, какое у вас хранилище
Дело в том, ЧТО вы там храните :)
User-agent, login, истор...
Вопросы?
Спасибо за внимание!
@d0znpp
http://lab.onsec.ru
Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS.
Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS.
Upcoming SlideShare
Loading in...5
×

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

4,097

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,097
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
36
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×