среда, 14 октября 2009 г.

Трюк который еще работает. Защита от DDoS на уровне javascript

Кто бы сомневался, что ботоводы - люди ленивые, иногда даже очень, очень. Вы думаете, что если у них много ботов, превосходный софт и предостаточно классных модулей к ботам то они будут это все сразу таки использовать, отнюдь - нет. Обычно, все начинается с простых GET запросов, даже не рандомных, на главную страницу и еще на несколько других тяжелых страниц, например - форум, фотогалерея и т.д. И только при неудаче, могут быть задействованы другие методы, рандомизация всего чего только можно, SYN flood, атака POST запросами, ICMP flood . . .

Предположим, что у нас есть сайт http://www.example.gov, его атакуют, по логам видно, что громадное количество GET запросов идет на:

http://www.example.gov/
http://www.example.gov/foto/
http://www.example.gov/forum/

В большинстве таких случаев можно обмануть ботов используя js-редирект. Старые и не профессионально написанные боты не содержат в себе js интерпретатора. Поэтому такой метод срабатывает лучше, чем можно было ожидать. Мы добьемся того, что боты не смогут нагружать базу данных, трафика будет в разы меньше.

Создаем index.html в корне сайта и в корне foto, forum каталогов.
прописываем туда наш простой js-редирект
И так с каждым разделом который атакуют GET запросом прямо в корень.Размер файла получится всего 90 байт, что гораздо лучше чем когда бот соприкасается к ~20кб странице и подтягивает ~10 SQL запросов. Легитимные пользователи у которых не отключен javascript в браузере будут перенаправлены на index.php. Единственное, что плохо, так это то, что поисковые-боты тоже не оборудованы js-интерпретаторами и точно так же как атакующие боты будут утопать в js редиректе.

Если рассмотреть конкретно этот случай защиты, то сразу просматривается уязвимость, защиту можно легко обойти если добавить боту функцию парсинга window.location.
И не нужен никакой js-интерпретатор.
Что бы избежать таких умных ботов с функцией парсера зашифруйте js-код, благо онлайн сервисов в интернете достаточно. 


Защита от DDoS с помощью утилиты tcpdump

tcpdump это мощнейшая утилита UNIX, позволяющая перехватывать и анализировать сетевой трафик, проходящий через сетевые интерфейсы. Об установке читайте в документации утилиты или на сайте разработчика, в FreeBSD она есть в портах, в Debian Linux в репозиториях.

Приведу пример как можно использовать tcpdump. Например, на сервере отключены логи, идет легкая ddos атака, происходит что-то не ладное, вы хотите быстро посмотреть масштабность или убедиться, что это DDoS-атака, а не DoS или может это вообще никак не связано с внешним миром? Давайте посмотрим:
tcpdump -v -i eth0 dst port 80
После выше набранной команды вы сможете наблюдать список подключений к 80-у порту, чем больше повторных подключений с одинаковых хостов тем вероятнее мы столкнулись с DoS или DDoS атакой. Как вы уже наверное догадались, изменив порт можно проверить есть ли атака на FTP, SSH или другие сервисы которые крутятся на сервере. Добавив ключ -n имена хостов преобразуются в IP адреса.

Глазами все не уследить, при атаке на веб-сервер вывод tcpdump-a сумасшедшей скоростью будет двигаться вдоль окна вывода терминала :) Поэтому, мы сначала запишем вывод tcpdump-a в файл. пакетов 200-300 хватит.
tcpdump -v -n -w attack.log dst port 80 -c 250
-v самый простой уровень логирования, без изысканности.
-n преобразуем имена хостов в IP адреса
-w записываем анализ трафика в файл
-c  количество захваченных пакетов

Приступим к анализу полученных данных через tcpdump, отпарсим лог следующей командой:
tcpdump -nr attack.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn
Результат будет - 2 столбца, в первом количество подключений, во втором IP. Чем больше подключений для одного IP тем вероятнее что это бот.

Если список очень длинный можно ограничить его указав нужное количество выводимых строк
tcpdump -nr attack.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn | head -20
Что бы получить только IP адреса, без первого столбца, нужно убрать ключ -c после uniq
Вывод парсинга можно перенаправить в файл, а затем простым bash-скриптом, заблокировать все IP со списка.

#!/bin/bash
BLOCKDB="ips.txt"
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
iptables -A INPUT -s $i -j DROP
Очень похожие трюки иногда проделывают с помощью утилиты netstat.

Пока это все, что я хотел написать о tcpdump. До скорых встреч!

вторник, 8 апреля 2008 г.

Защита от DoS и DDoS. Оптимизация конфигурации Apache

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

Цель данной заметки - как лучше всего оптимизировать конфигурацию веб сервера Apache что бы снизить нагрузку на веб сервер когда ваш-сервер находится под DDoS атакой. Рекомендуется использовать такой тип настроек только при обнаружении что ваш веб сервер атакуют злостные кибер-преступники, ботоводы.
Зачастую наиболее эффективным анти DDoS инструментом будет являться установленный брандмауэр. Например, большинство брандмауэров могут быть сконфигурированы так чтобы ограничивать число одновременных соединений от любых индивидуальных IP-адресов или сетей, тем самым предотвращая ряд простых атак. Конечно, это не поможет если будет мощная DDoS атака.

Давайте приступим к настройке параметров Apache, которые помогут избежать некоторых проблем вызванных DDoS атакой.

TimeOut - указывайте как можно меньшее значение для данной директивы (веб сервера который поддвержен DDoS атаке).

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

Директивы LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine, LimitXMLRequestBody должны быть тщательно настроены на ограничение потребления ресурсов, вызванных запросами клиентов.

Убедитесь что вы используете директиву AcceptFilter (на ОС которые поддреживают ее).По умолчанию она включена в конфигурации Apache httpd, но для своей работы может потребовать пересборку с новыми настройками ядра вашей ОС (*nix, *bsd).

Используйте директиву MaxClients чтобы указать максимальное количество клиентов которые смогут
быть одновременно подключены к серверу, уменьшив значение директивы вы можете снизить нагрузку на web-сервер.

Выбор другого mpm-модуля может позволить вам обрабатывать больше одновременных соединений, тем самым смягчить (D)DoS атаку. По умолчанию в *nix системах устанавливается mpm - prefork, он наиболее прожорлив, и наимение производителен. Обзор mpm модулей выходит за рамки данной заметки, подробности смотрите сдесь : сдесь
и сдесь

Есть ряд сторонних модулей к Apache которые могут ограничивать определенные модели поведения клиента и тем самым смягчить DDoS атаки. Один из таких модулей я описывал в одной из своих заметок - Защита от легкой flood и ddos атаки по HTTP-протоколу используя mod_dosevasive

пятница, 4 апреля 2008 г.

Защита от DDoS с помощью (D)DoS Deflate

Защита от DDoS на программном уровне.

Что такое (D)DoS Deflate?
Это бесплатный скрипт с помощью которого можно избавится от детского флуда и ddos. Скрипт использует команду "netstat" что бы обнаружить ddos и флуд, после обнаружения блокирует ай-пи адреса откуда идет атака, делает это с помощью фаервола iptables или apf (работает только на APF v 0.96 или выше). Проверен мною на Linux Debian Etch 4.0. Скрипт написан на sh.

Установка и настройка (D)DoS Deflate.
Установка проходит очень быстро :
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh

Удалить скрипты из системы можно используя следующие команды:
wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
chmod 0700 uninstall.ddos
./uninstall.ddos

Конфигурационный файл для (D)DOS-Deflate называется ddos.conf, по умолчанию выглядит так:
FREQ=1
NO_OF_CONNECTIONS=50
APF_BAN=1
KILL=1
EMAIL_TO=”root”
BAN_PERIOD=600

понедельник, 31 марта 2008 г.

Защита от легкой flood и ddos атаки по HTTP-протоколу используя mod_dosevasive

Защита от ddos
mod_evasive - (mod_dosevasive) HTTP DoS or DDoS attack or brute force attack
Apache модуль для организации защиты от DDoS атак.

Преамбула
Не стоит думать, что слабый ddos не сможет нанести ущерба вашему серверу. Например, атакующих зомби-машин всего 50-150, все они с толстыми каналами, а вы уехали в командировку или у вас 10-ки серверов и вы не успеваете физически мониторить все. В таком случае, даже не большое количество машин, смогут зафлудить канал или заставить выйти из строя веб сервер apache, mysql, etc. Другое дело когда администратор 24 часа в сутки мониторит сервер и с легкостью обнаруживает атаки, далее с легкостью и в считанные секунды заносит несколько правил в таблицу фаервола при этом спокойно попивая кофе, продолжает заниматься своими делами. Но такое бывает редко, смотреть сутками и мониторить вывод комманд netstat, top, mtop убийственно для вашего мозга, и глаза устанут, будем непосебе :), поэтому нужно автоматизировать процесс блокировки атакующих зомби-машин.

Один из методов как защитить свой сервер от флуд атак и слабого ddos-a по http протоколу это установить модуль для веб-сервера Apache - mod_dosevasive.

Установка и настройка mod_dosevasive

Debian Linux (только для Apache 1.3.x):
apt-get install libapache-mod-dosevasive


Или же вы можете скачать архив с сайта:
http://www.zdziarski.com/projects/mod_evasive/
Распаковываете архив
tar zxvf mod_dosevasive_1.10.tar.gz
cd mod_dosevasive


Компилируем mod_dosevasive для Apache 2:
/usr/local/apache/bin/apxs2 -i -a -c mod_dosevasive20.c

Если у вас apache 1.3 тогда так:
/usr/local/apache/bin/apxs -i -a -c mod_dosevasive.c


(!) Замените /usr/local/apache на ваш путь к apache

Редактируем httpd.conf (Чаще всего он находится в /usr/local/apache/conf/httpd.conf):

Убедитесь, что нечто подобное присутствует в настройках:
LoadModule evasive20_module lib/apache2/modules/mod_evasive20.so


Добавляем в конец файла следующие строки:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 15
DOSEmailNotify email@for-notify.com
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"



-- DOSHashTableSize: это размер хэш-таблицы которая обрабатывает запросы к WWW-серверу.
-- DOSPageCount: число запросов к одной странице от одного и того же IP в течение указаного интервала времени.
-- DOSSiteCount: число запросов ко всем страницам домена, т.е если поступило более 50-ти запросов с одного ай-пи на разные страницы домена - тогда такой ай-пи будет заблокирован.
-- DOSPageInterval: Интервал для директивы DOSPageCount (в секундах)
-- DOSSiteInterval: Интервал для директивы DOSSiteCount (в секундах)
-- DOSBlockingPeriod: На сколько заблокировать ай-пи (в секундах)
-- DOSEmailNotify: может быть использован для уведомления, будет отправлять сообщение по электронной почте о том что такой-то IP был заблокирован.
-- DOSSystemCommand: эта директива используется для выполнения какой-нибудь вашей команды когда IP блокируется. Вы можете использовать это для добавления IP-адреса в таблицу фаервола.
(пример: "/sbin/iptables -A INPUT -p tcp --dport 80 -s %s -j REJECT" В %s передается от модуля IP)
-- DOSWhiteList: список белых IP адресов, можно и по маскам (напр. 127.0.0.*)

Также этот модуль позволяет защитить ваши сайты от brute force атак.

воскресенье, 30 марта 2008 г.

Видео. DDos атака на RB.ru

Как выглядит DDOS атака на примере RB.RU :)

понедельник, 25 февраля 2008 г.

Открытие блога.

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