Классическое распространение DDOS ботов происходит постоянно, в автоматизированном или даже можно сказать, автоматическом режиме, без непосредственного вмешательства владельца. Инструментом служит тот-же самый ботнет.
Все начинается с того, что обычный пользователь заходит на инфицированный сайт. Причиной может стать спам рассылка по email или icq, но чаще всего это сайт adult направленности, который привлекает любителей «клубнички», а в это время заражает компьютеры посетителей.
Почему сайт стал инфицированным? Этому может быть несколько причин, наиболее обыденные из которых – воровство ftp доступа к сайту и последующее его заражение, использование уязвимости в правах файловой системы виртуального хостинга для заражения «соседей», и вебмастера, клюнувшие на предложение разместить у себя на сайте «безвредный iframe».
Почему компьютер пользователя заразился? Как правило зараженные компьютеры работают под взломанной MS Windows, на которую, по причине взлома, обновления не устанавливаются, а антивирусные программы, если и есть, то не могут распознать специально написанные программы «загрузчики», которые не несут в себе никакой угрозы, срабатывают не всегда, тем самым обманывая эвристический анализ, и служат для загрузки остальных частей DDOS бота.
Программа начинает закачивать части, которые могут выполнять следующие действия, которыми конечно, весь список возможностей не ограничивается:
ожидание команды от координатора DDOS
воровство emqil адресов, паролей от ftp доступов, сохраненных на компьютере пользователя
рассылка спама по icq листу контактов и списку email, якобы от имени пользователя
инфицирование сайтов при загрузке файлов на ftp (на компьютере пользователя все выглядит чисто, а на хостинге уже лежат инфицированные страницы)
Таким образом, зараженный компьютер уже выступает не только как пассивная зомби-машина, ожидающая команды, но еще может выполнять автономные действия, которые ведут к дальнейшему распространению ботнета.
Получив в свое распоряжение несколько тысяч, а то и десятков тысяч зараженных зомби-машин, владелец может управлять ими через координатор DDOS атак. Координатор представляет собой несложный PHP скрипт, который связан с базой данных IP адресов и открывает для владельца форму, где можно указать сайт и тип атаки.
Скрипт начинает посылать запросы ботнету и «пробуждает» его для атаки на сайт. При этом владелец больше себя никак не проявляет. В некоторых случаях, ботнеты сами могут периодически запрашивать у координаторов какие действия им нужно предпринять. Например BlackEnergy именно так и поступает, посылая POST запросы файлу stat.php
Компьютеры пользователей, выступающие в роли DDOS ботов начинают постоянно обращаться к атакуемому сайту. Если при обычной посещаемости на сайт идет 5-10 запросов в секунду, то ботнет поднимает эту частоту в несколько порядков и сервер не может их всех обработать. Заказчик атаки получил желаемое – сделал сайт недоступным.
Ситуация с атакой еще усугубляется тем, что DDOS бот может сделать так называемый time_wait запрос, который представляет собой соеденение с окном нулевого размера, который только держит соединение открытым, но информации не передает. Это позволяет атакующим забивать сервера, защищенные файрволом.
Что же делать для предотвращения распространения ботнета?
Пользователям – следить за обновлениями для свой ОС и антивируса, использовать менее уязвимый браузер -FireFox, Opera. Конечно, это легче написать, чем сделать, но тем не менее, может быть после прочтения этой заметки вы смените браузер.
Хостинг провайдерам – более внимательно отслеживать логи запросов к сайтам, выявляя IP зомби-машин и владельца ботнета. Зараженные IP отсылать к ISP провайдерам, а IP владельцев – в соответствующие организации. При этом все должно быть максимально унифицировано, автоматизированно и безбумажно.
ISP провайдерам и организациям по борьбе с к интернет-терроризмом – размещать на сайте формы, куда можно внести жалобы на IP адреса, замешанные в DDOS атаках
Сейчас перейдем к более практическим занятиям и посмотрим, каким образом можно защитить сервер от DDOS.
В качестве сервера будет взят обычный компьютер с x86 архитектурой и ОС Linux и веб-сервером apache.
Почему не FreeBSD? На FreeBSD, насколько мне известно, аналога модуля iptables string нет.
Почему не nginx или lighttpd? Эти веб-сервера будут рассмотрены в следующих заметках. В этой заметке nginx выступает как фронтенд, а не как основной.
Важно знать! Для работы модуля iptables string, iptables должен быть не ниже версии 1.3.5, а ядро – не ниже 2.6.18, собранным с опцией CONFIG_NETFILTER_XT_MATCH_STRING=m
Рекомендую! Эти эти примеры помогут сохранить веб-сервер атак:
Лимит на 20 запросов в секунду для интерфейса eth0
iptables --new-chain car
iptables --insert OUTPUT 1 -p tcp --destination-port 80 -o eth0 --jump car
iptables --append car -m limit --limit 20/sec --jump RETURN
iptables --append car --jump DROP
Максимум 10 одновременных соединений с одного IP
iptables -A INPUT-p tcp --dport 80 -m iplimit --iplimit-above 10 -j REJECT
Блокировка более 10 SYN
iptables -I INPUT -p tcp --syn --dport 80 -j DROP -m iplimit --iplimit-above 10
20 соединений на сеть класса С
iptables -p tcp --dport 80 -m iplimit --iplimit-above 20 --iplimit-mask 24 -j REJECT
Если на сервере предоставлен хостинг для множества сайтов
Наша задача - спасти все остальные сайты, потому что то все сайты, которые размещены на общем IP адресе с жертвой, будут недоступны.
Почему? На этот вопрос даст ответ алгоритм атаки ботнета:
бот получает от координатора домен-жертву
бот производит преобразование домена в IP
бот отсылает по данному IP запрос "GET / HTTP/1.0" на веб-сервер жертвы
Как только замечены симптомы DDOS атаки, проверьте access_log веб-сервера apache. Если он забит записями вида "GET / HTTP/1.0", то это значит, что атака идет на IP адрес.
Что делать? Прежде всего временно отключите атакуемый IP адрес, лучше всего через iptables, командой iptables -A FORWARD -p tcp -s <атакуемый IP> --dport 80 -j REJECT. Это даст хоть какой-то шанс, что ботнет не успеет забить весь канал к серверу, после чего связь с ним будет потеряна. После отключения атакуемого домена доступ можно будет открыть обратно.
Для поиска атакуемого домена необходимо, чтоб его NS сервера находились на вашем сервере!
Почему? Так как атака идет по IP адресу, то единственным способом нахождения домена-жертвы может быть только анализ запросов к dns.
Как? С помощью утилиты ngrep. Эта утилита позволяет применить регулярные выражения к трафику. В нашем случае команда будет ngrep port 53. На 53 порт идут запросы на преобразование домена в IP. В течении нескольких десятков секунд визуально можно будет определить домен-жертву.
Другой вариант – настроить bind на запись всех запросов в лог и проверить, какой домен чаще всех запрашивается.
Следующее действие – это отключение домена. Наиболее простым и действенным методом будет блокировка запросов с именем домена. Это запретит преобразование домена, и боты не смогут получить IP домена-жертвы. Снова iptables поможет сделать это:
iptables -I INPUT 1 -p tcp --dport 53 -m string --string "domain.com" --algo kmp -j DROP
iptables -I INPUT 2 -p udp --dport 53 -m string --string "domain.com" --algo kmp -j DROP
Обратите внимание – блокируются TCP и UDP порты.
Другой вариант – вписать для домена-жертвы IP 127.0.0.1 и подождать пока запись разойдется, это зависит от настроек TTL, обычно 15 минут.
После отключения атакуемого домена все остальные сайты будут работать нормально.
Если на сервере предоставлен хостинг только для одного сайта (dedicated или vps хостинг)
Задача меняется – цель уже известна, а вот методы нужны иные. Цель защиты от DDOS на сайт – сохранить его работоспособность.
Проявите сразу заботу о защите своего сайта. Сделайте главную страницу сайта вида http://hostinghelp.biz/node с редиректом на нее при запросе вида http://hostinghelp.biz/
Почему? Это поможет защитить главную страницу сайта, отфильтровав все запросы от ботнета, так как боты не выполняют заход при редиректе и будут продолжать упорно долбить "GET / HTTP/1.0"
Как? Лучше всего поставить перед веб-сервером apache быстрый и легкий nginx и отдавать им статичные файлы. Создать статичный файл index.html в котором написать о том, что будет сделан переход на другую страницу и установите редирект с помощью метатега html.
Когда начнется DDOS атака, то nginx сможет выдержать намного больше запросов к статичному файлу по сравнению с apache.
Если nginx не помогает, и сервер не выдерживает столько запросов - забивается канал, то на помощь нам снова приходит iptables.
Так как главная страница сайта известна посетителям и поисковым системам, то можно просто заблокировать страницу-редирект, и тем самым сделав недоступным сайт для запросов вида "GET / HTTP/1.0", оставить его работоспособным по всем остальным.
Как? iptables -I INPUT 1 -p tcp --dport 80 -m string --string "GET / HTTP/1.0" --algo kmp -j DROP
Таким образом сайт защищен от DDOS атаки и сохраняет работоспособность, пусть и ценой временного отключения страницы редиректа.
Джерело: http://www.antiddos.org/index.php/2008-04-22-11-38-15/34-2008-04-22-13-12-41/83-ddos-------linux---ddos-