Rate this post

Сегодня хочу Вам рассказать что такое  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 байт максимальная длина дополнительных данных

 

Пример использования:
 
./slowhttptest -c 1000 -B -g -i 100 -r 200 -s 8192 -t FAKE -u http://твой-domen -x 10 -p 3
 
На этом все!
Удачных проверок :)!