Layer 7 DoS: атаки на отказ от обслуживания веб-приложения


    Распределенные атаки на отказ в обслуживании, которым подвергаются популярные сайты обычно происходят с тысяч и тысяч взломанных устройств. Эти атаки в основном направлены на подавление целевой системы масштабным трафиком, забиванием канала связи. Эти атаки относятся к layer 3 (сетевой уровень модели ISO/OSI) DoS/DDoS и характеризуются большим количеством пакетов, которыми атакуется ресурс. Layer 7 (прикладной уровень модели ISO/OSI) DoS/DDoS обычно направлен на "слабые" места веб-приложения.


    Для начала приведу немного статистики из исследования компании Incapsula — начиная с 2016 года DoS/DDoS атаки на прикладном уровне превалируют над классическими атаками на отказ от обслуживания на сетевом уровне:


    image

    Сложность в определении таких атак в том, что веб-приложение не может легко отличить атаку от обычного трафика. Есть много факторов, которые способствуют этой трудности, но одним из наиболее важных является то, что по ряду причин IP-адреса не могут быть полезны в качестве идентификационных данных. При сетевой атаке можно различить нелегитимный трафик и заблокировать атакующие IP-адреса, в случае атак на уровень приложений это сделать затруднительно: необходимо определить именно атакующие признаки, не заблокировав легитимных пользователей. Также, простое использование ресурса (без атак), может привести к исчерпанию его ресурсов — это может быть известный здесь многим Хабраэффект.


    Основные типы DoS/DDoS атак:


    Volumetric: объемные атаки нацелены на переполнение полосы пропускания веб-приложения хостинговой инфраструктуры, направляя большие объемы сетевого трафика. Обычно такой трафик представлен UDP/ICMP флудом.


    Layer 3: эти атаки нацелены на недостатки архитектуры стека протоколов TCP. Атакующий отсылает пакеты, предназначенные для переполнения, искажения или разрушения информация о состоянии соединения, вызывающие дополнительную работу для функций сетевой обработки на целевом устройстве и замедлении ответов. Наиболее распространенными векторами таких атак является TCP SYN flood, фрагментация TCP, teardrop и т.д.


    Layer 7: эти атаки ориентированы на логику веб-приложения и нацелены на исчерпание ресурсов веб-сервера при обработке "тяжелых" запросов, интенсивных функций обработки или памяти.


    Ресурсы приложения


    Большинство веб-серверов могут обрабатывать несколько сотен одновременных пользователей при нормальном использовании ресурса. Проблема заключается в том, что один атакующий может генерировать достаточный трафик с одного хоста для отказа в обслуживании веб-приложения. Балансировка нагрузки в таком случае не поможет от слова "совсем".


    Основные проблемы выглядят следующим образом: утилизация CPU — использование 99% CPU заставляет другие критические процессы останавливаться; RAM — недопустимое распределение памяти, утечки, исчерпание памяти — недостаток для других критичных процессов; процессы и потоки — deadlock (заморозка процессов), форки, race condition (состояние гонки); диск — переполнение диска.


    Одним из важных ресурсов веб-сервера является RAM. Атаками на исчерпание этого ресурса могут быть следующие:


    Рекурсия. Вот неплохой пример рекурсивного кода — include('current_file.php'). PHP выделяет новую память для каждого включения и повторяет процесс до тех пор, пока не останется памяти. Эту уязвимость можно обнаружить в виде классического LFI (local file inclusion).


    Zip-бомбы. Веб-приложения, которые позволяют загружать сжатые файлы и извлекать содержимое, могут быть восприимчивы к такой атаке, особенно если приложение (или библиотека, которая обрабатывает декомпрессию) не проведет надлежащую проверку файла.


    XML-бомбы. Именованные сущности могут раскрываться не только в символьные строки, но и в последовательности других сущностей. Рекурсия запрещена стандартом, но ограничений на допустимую глубину вложенности нет. Это позволяет добиться компактного представления очень длинных текстовых строк (аналогично тому, как это делают архиваторы) и составляет основу атаки «billion laughs».


    Десереализация. Сравнительно новый тип атак, но достаточно серьезный, что внесен в OWASP TOP 10 2017 A8-Insecure Deserialization. Представляет из себя процесс восстановление начального состояния структуры данных из битовой последовательности. При ненадлежащем контроле пользовательского ввода может привести к исчерпанию ресурсов.


    Файловые заголовки. Манипулирование значениями файловых заголовков может привести к исчерпанию ресурсов. Если вычисление выполняется во входном файле, где размер файла находится в его заголовке. Это могут быть изображения, видеофайлы, документы и т.д. Пример — pixel flood attack.


    Чтение бесконечных потоков данных. Чтение /dev/zero или /dev/urandom через LFI, использование 1TB speedtest и т.д.


    Немаловажным параметром веб-сервера является CPU, атаки на исчерпание процессорных мощностей могут привести к неработоспособности веб-приложения.


    reDOS — Regular Expression Denial of Service. Сравнительно свежий тип атаки, впервые был выявлен на Stackoverflow. Это была не атака злоумышленника, а действия пользователя, который включил 20 000 пробельных символов в фрагмент кода. Регулярное выражение было написано таким образом, что оно заставляло систему проверять строку из 20000 символов на в 200.010.000 шагов (20 000 + 19 000, +… + 2 + 1). Если веб-приложение позволяет использовать регулярные выражения — стоит тщательно проверять входящие данные.


    SQL-инъекции. Эксплуатация SQL-инъекций может значительно снизить работоспособность веб-приложения, особенно при использовании функций типа sleep, benchmark и т.д.


    Форк-бомбы. Процессы, которые повторяются снова и снова, используя все ресурсы системы. Наиболее известной является :(){ :|:& };:.


    Злоупотребление ресурсами/функциями. Злоумышленник может выявить ресурсоемкую операцию на веб-приложении и послать множество запросов исчерпание ресурсов. Таким примером может служить злоупотребление функциями хэширования паролей.


    SSRF. Эксплуатация server side request forgery уязвимостей может позволить злоумышленнику исчерпать ресурсы атакуемого веб-сервера.


    Дисковое пространство также является критичным параметром веб-сервера.


    Загрузка больших файлов. Наиболее очевидным способом заполнения системы данными является загрузка больших файлов на сервер. Если приложение не применяет надлежащие ограничения, злоумышленник может загружать в систему данные до того момента, пока веб-сервера не исчерпает ресурсы.


    Переполнение системных журналов. При отсутствии функций ротации логов атакующий может "забить" системные журналы или послужить катализатором создания огромного количества этих журналов, что приведет к исчерпанию ресурсов дискового пространства.


    Утилиты для тестирования веб-приложений:


    Я намеренно не буду рассматривать узкоспециализированные утилиты типа LOIC/HOIC, нацеленные как правило на дестабилизацию работу определенных веб-приложений.


    Вредоносное использование данных инструментов запрещено и может преследоваться законодательными мерами страны, резидентом который вы являетесь. Используйте данные инструменты для тестирования исключительно собственных серверов, либо серверов, тестирование которых согласовано с их владельцем на законном основании.


    Slowloris — довольно известная утилита для тестирования. Существует nse скрипт для nmap.


    HULK (HTTP Unbearable Load King) — генерирует большой поток уникальных запросов, который максимально потребляет ресурсы веб-сервера. Чтобы осложнить задачу по фильтрации потока, HULK для каждого запроса подставляет разные user agent, обфусцирует referrer, использует в запросах атрибуты no-cache и keep-alive, а также уникальные URL.


    OWASP DoS HTTP POST — утилита от консорциума OWASP для генерации "медленных" http запросов.


    GoldenEye HTTP Denial of Service Tool — эксплуатирует векторы HTTP Keep Alive + NoCache.


    Превентивные меры защиты


    Хорошей практикой превентивной защиты веб-приложения будет нагрузочное тестирование веб-ресурса. Для исследования времени отклика системы на высоких или пиковых нагрузках производится "стресс-тестирование", при котором создаваемая на систему нагрузка превышает нормальные сценарии её использования.


    Основная цель нагрузочного тестирования заключается в том, чтобы, создав определённую ожидаемую в системе нагрузку (например, посредством виртуальных пользователей или их действий), наблюдать за показателями производительности системы. Это позволит выявить и усилить узкие/слабые места вашего веб-приложения и избежать возможных рисков недоступности приложения в будущем.

    OWASP
    Open Web Application Security Project
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 1

      +1
      Дополню, пожалуй, список утилит для тестирования самой, на мой взгляд, удобной — slowhttptest.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое