Сегодня хочу Вам рассказать что такое slowloris и slow HTTP Post и как их определить.
В августе 2011 года была написана програмка slowhttptestt, которая тестирует веб-серверы на наличие уязвимостей, связанных с обработкой медленных HTTP запросов, таких как slowloris и slow HTTP Post. Цель — создать конфигурируемый инструмент, облегчающий работу разработчиков и позволить им концентрироваться на создании эффективных защит, а не ковырянии в питоне, на котором написаны большинство proof-of-concept эксплоитов.
А потом разработчики решили попробовать, как реагируют серверы на медленное чтение клиентами HTTP респонсов. На удивление плохо реагируют. Дефолтные apache, nginx, lightpd, IIS отказывают в обслуживании на ура.
А суть такова:
если найти ресурс на веб сервере, который размером больше send buffer-a, который ядро выделило для соединения, в который серверная программа пошлет ресурс, то если каким то образом вынудить ядро не принимать все данные — сервер будет пытаться послать оставшийся кусок данных, занимая ограниченную в размере очередь соединений, процессорное время, память, и свободное время сисадмина. Если забить такими соединениями всю очередь — сервер, соответственно начнет отказывать в обслуживании быстрым клиентам.
Заставить ядро себя так вести довольно просто и описано было еще в 2008 году ребятами из Outpost24 в методе Sockstress например, посылать в TCP пакете размер окна равным 0, т.е. у клиента нет места для приема данных. Дизайн TCP правильно подразумевает, что приложение, а не ядро обязано контролировать медленные и мертвые соединения. Однако за 4 года никто не пошевелил пальцем.
Установка:
Скачать программу можно с сайта разработчиков: http://code.google.com/p/slowhttptest/wiki/InstallationAndUsage.
Утилита распространяется как portable package, так что просто скачайте последнюю версию архива из секции Download, распакуйте, сконфигурируйте, скомпилируйте, и установите:
tar -xzvf slowhttptest ….tar.gz
cd slowhttptest ….
./configure или ./configure -prefix=PREFIX (где PREFIX нужно заменить на абсолютный путь к месту инсталляции slowhttptest-а.)
make
make install
Полный список конфигурационных параметров:
-a значение | начальное значение заголовка диапазонов для теста диапазона |
-b байты | лимит значения заголовка диапазонов для теста диапазона |
-c количество соединений | лимит: 1024 |
-H, B, or R | указывает секцию HTTP запроса, которая будет замедляться -H заголовки, -B тело, -R тестирует диапазоны |
-g | генерирует статистику в формате CSV и HTML в файлы, формат имени которых slow_xxx.csv/html, где xxx время и дата |
-i секунды | интервал мехду замедленными данными в секундах |
-l секунды | продолжительность теста в секундах |
-o файл | путь и имя файлов статистики, работает при указании ключа -g |
-p секунды | интервал ожидания ответа с сервера, при истечении которого считается что отказ в обслуживании наступил |
-r соеднинений в секунду | скорость соединений |
-s байт | значение заголовка Content-Length, если тест в режиме -B |
-t метод | заголовок для использования в запросе, заданный пользователем |
-u URL | адрес ресурса в формате, используемом в браузере, например: https://host[:port]/ |
-v уровень | уровень детализации истории 0-4 |
-x байт | максимальная длина дополнительных данных |