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

