Skip to content
 

некоторый опыт отражения DDOS-атаки

Не так страшен ДДОС, как им пугают

Довелось тут одному сайту дружественной организации вызвать гнев власть придержащих. На грозный начальственный окрик "Убрать!" они не отреагировали, законных причин закрытия естественно нет - так что на сайт началась массированная DDOS-атака. И как только началась - так сразу положила сервер. Как обычно, пришлось мне этим заниматься. При ближайшем знакомстве ситуация на первый взгляд выглядела безнадежно - Apache в режиме prefork и тяжелая CMS, употребляющая кучу памяти на соединение, в результате на приличном сервере 30 подключений съедали всю память. Менять что-либо на сервере нельзя - все и так с трудом работает, не приведи Господи совсем упадет.

Для борьбы с нехорошими деятелями была поставлена отдельная машина в качестве шлюза и кэша, настроен SQUID в роли акселератора с принудительным кэшированием всего контента на 10 минут, а также настроен iptables под высокую нагрузку.

После этого сервер перестал "вешаться", но полностью лег канал:


Тут на помощь пришел парсер логов сквида, написаный "на коленке". Первая его версия раз в 10 секунд банила тех, кто сильно присосался, занося их адрес в таблицу ipset. Через час атака затихла - все атакующие оказались сосчитаны и забанены. Мы вздохнули с облегчением...

Как оказалось - ненадолго. Заказчики ДДОС-атаки были явно неудовлетворены, ибо ее исполнители через сутки изменили тактику: если сначала запросы шли просто к корню сайта, то теперь стали идти к случайной странице, и первая версия анализатора перестала считать их роботами. Приходится переписать анализатор, на этот раз в нем 3 уровня обороны в виде роботов, анализирующих логи с интервалами 1 секунда, 10 секунд и 10 минут, в каждом из которых проверяется  несколько критериев. Ежесекундный предназначен для быстрого снятия нагрузки путем временного "выпиливания" активистов, а 10-минутный - для "вдумчивого" анализа с построением гистограммы запросов с каждого адреса, и принимающий окончательное решение, забанить или помиловать.

Новая версия шутя справилась с атакой и держала сайт "на плаву" несколько дней, так что некоторое время назад атака прекратилась. Было понятно что не надолго, что враг накапливает силы - и точно, в один прекрасный момент на сайт навалилась целая толпа ботов. Почему этот момент прекрасный? - потому что было радостно наблюдать борьбу фильтра собственного сочинения с превосходящими силами противника :)

За первые 10 секунд атаки секундным роботом было отбито 95% нападавших - блоками по 30 штук,  и сайт поднялся, но канал еще был перегружен. А спустя 10 минут пришел 10-минутный робот и добил оставшихся, коих оказалось около 500. То есть почти суточное накопление сил противника было подавлено за менее чем 10 минут, сайт при этом не работал всего десяток секунд. Разве это не победа?

Постскриптум. Стоит особо отметить, во-первых, разработчиков замечательных сетевых инструментов iptables и ipset, а во-вторых производительность современных компьютеров - ее хватает чтобы на потоке в  десятки мегабит проверять адрес по списку из 8000+ элементов (именно таков сейчас объем бан-листа). При этом загрузка шлюза на таком потоке остается вполне разумной:





Постпостскриптум. Атака продолжается, так что технические детали намеренно опущены, дабы не дать злоумышленникам зацепок по мерам преодоления защиты.

Добавление.

Судя по некоторым высказываниям, типа "те кто по своей работе таким занимается прокомментировали подобную атаке как проделки школоты оказывается серьезные атаки с легкостью кладут гигабитный! канал.", ситуация оказалась до конца не понятой. Воистину, "частичное знание опасно" (С), особенно в режиме "испорченный телефон".

Попробую внести ясность. Вот так сейчас выглядит поток на интерфейсе:

Видно что основной трафик - входящий, а исходящего практически нет. Причем образован этот входящий маленькими пакетакми по ~500бит (60 байт). Это - так называемые пакеты SYN - начало TCP соединения. По стандарту в ответ на такой пакет можно отправить RST, завершив соединение ("сюда нельзя!"), или пакет ACK, подтвердив соединение ("добро пожаловать!").

Но TYT эти пакеты просто игнорируются. Почему? Для ответа на данный вопрос рассмотрим, что произойдет в случае следования стандарту.

В случае сброса соединения с сервера пойдет в точности такого же объема трафик пакетов RST, но самое худшее в том, что получив RST и завершив соединение, атакующий может тут же послать новый запрос, а при неполучении вынужден ждать некоторое время, предписываемое стандартом. (Конечно, можно и не ждать а просто посылать SYN один за другим - но это тогда называется SYN-флуд и обычно давится ближайшим провайдером). Грубый пример: стуча в дверь, надо иногда переставать чтобы услышать ответ, но если там ответили "не открою" то можно уже долбить без перерывов :) Так что корректное завершение соединения приводит к примерно 6-кратному росту входящего трафика и равному ему исходящему, проверено.

Если же принимать соединение - то есть пытаемся обслужить веб-сервером всех без разбора - то после отправки ACK идет пакет с данными к серверу - запрос GET с параметрами, объемом порядка 100-500 байт, на который сервер генерирует страницу и отправляет клиенту. Посчитаем: 25 000 запросов в секунду по 200 байт(1600бит) дадут дополнительный входящий трафик 40мбит (общий составит 50+ мбит), и исходящий трафик 70Кбайт (размер главной страницы) * 8 бит * 25 000 =  14.5 ГИГАБИТ.  То есть атака такой мощности способна уложить не только гигабитный, но и 10-гигабитный канал!

Однако, как известно, легче предотвратить чем потом исправлять - поэтому только правильно настроенный фильтр способен сдерживать поток, причем на довольно низком уровне.

Также можно почитать:

  1. Переделка маслосистемы (6.7)
  2. Вовремя регулируйте клапана! (5.9)
  3. Новые магнитные пробки в действии. (4.3)

9 комментариев

  1. Евгений (Нижневартовск) пишет:

    Отзыв: Thumb up 0 Thumb down 0

    [Новая версия шутя справилась с атакой и держала сайт "на плаву"]
    Очень заинтересовало, увлекаюсь расширением функционала рутера dir-320 (dd-wrt прошивка, ftp, ssh, samba, torrent, webserver - установлены), а так же, убунту, и т.д.
    Прочитав эту статью, решил поинтересоваться - можно ли получить так сказать инструкцию по реализации на мой е-майл ? Что-то вроде гайда по установке-настройке данной защиты.
     
    P.S.: Пришёл на ваш сайт после того, как увидел в одном из текстов про рутеры, что этот сайт стоит на рутере - порадовало.

    • admin admin пишет:

      Отзыв: Thumb up 0 Thumb down 0

      Вся инструкция вобщем-то изложена в самой статье: перенос сайта с динамики в статику, и отдельная машина на фильтрацию трафика по поведенческим критериям.

      Вот только у меня почему-то есть впечатление, что два компа на 3ггц I5 это не совсем то же самое, что и роутер на 300мгц ARMе :) Так что вряд ли изложенные тут меры окажутся сколь-либо полезны - про нагрузку ядра под 60% я вроде бы упомянул.

      PS. Информация про размещение сайта эээ... слегка устаревшая: с тех пор было аж три переезда (о коих упомянуто в разных местах, в том числе и TYT в разделе Новости), и в настоящее время сайт размещается на вполне приличном сервере, вместе с остальными проектами. Да и сам роутер с тех пор подрос, превратившись в комп на Атоме :)

  2. yarik42 (Москва) пишет:

    Отзыв: Thumb up 0 Thumb down 0

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

    • admin admin пишет:

      Отзыв: Thumb up 0 Thumb down 0

      Cпасибо, иногда заглядываю.

       

      PS. Мы победили - вчера атака прекратилась, и второй канал не понадобился. На момент завершения бан-лист включал в себя ~34000 ИП-адресов и диапазонов.

  3. Сергей (Краснодар) пишет:

    Отзыв: Thumb up 0 Thumb down 0

    И еще вопрос админу: Почему мое местоположение определяется как Краснодар? Я из Ростова-на-Дону. Это можно как-то исправить?

  4. Сергей (Краснодар) пишет:

    Отзыв: Thumb up 0 Thumb down 0

    Браво поздравляю!!! Желаю и дальше держатся и не сдаватся!!! Чтоб назло всем врагам свобода и-нета от контроля оставалась.
    А что за сайт? Что там такого написали? Можно ссылочку? Охота почитать.

Написать отзыв