Облака против тесака, или Хроника DDoS-атак на cvk2012.org

от автора

Блог Highload Lab на Хабрахабре обновляется нечасто — интересных DDoS-атак, на примере которых каждый может чему-то научиться, мало, а раздражать читателей бесконечными историями успеха не хочется. Тем ценнее действительно занимательные прецеденты, к числу которых, несомненно, относится нападение на сайты Центрального Выборного Комитета Координационного Совета оппозиции.

В предыдущих выпусках бортового журнала сети фильтрации трафика Qrator (обязательная рекламная ссылка — http://qrator.net/) мы выяснили, что в преддверии серьёзных мероприятий в Рунете лучше заранее озаботиться защитой от атак. Сегодня я расскажу вам, как можно, даже выполнив это требование, заработать себе пару бессонных ночей на рабочем админском месте.

Предыстория

Сотрудники ЦВК подошли к проблеме отказоустойчивости фронтенда системы голосования со всей академической серьёзностью и не стали складывать все яйца в одну корзину. «Морда» системы голосования была размещена в облаке Microsoft Azure, рекомендуемом для приложений на платформе Windows. Параллельно домен election.cvk2012.org был зарегистрирован в Qrator практически за месяц до описываемых событий и всё это время находился под профилактической защитой, что позволило накопить необходимую базу для обучения. Всё это позволяло рассчитывать, что выборный уик-энд в плане работоспособности сайтов оппозиции пройдёт так же спокойно и беспроблемно, как и несколько предыдущих митингов.

18 октября

Первый звоночек прозвучал в четверг. К этому времени маломощная атака на сайт регистрации избирателей шла уже 3 дня, однако в тот момент она впервые создала проблемы. Схема атаки — типичный JS LOIC: на предположительно устойчивом хостинге размещается страница с ECMAScript-кодом, который раз в 200 мс обновляет псевдоизображение с URL атакуемого сервиса. Аналогичную схему в апреле использовал сервис Вконтакте для «предупреждения» сайта antigate.com. Пикантность нынешней ситуации — в том, что вначале атакующий скрипт располагался на сайте hellotesak.narod.ru, фактически — на серверах Яндекса (позднее он был оттуда убран).

Выяснилось, что при некоторых условиях атакующий код создаёт серьёзные проблемы для базы данных. Так как времени на оптимизацию общения фронтенда с СУБД уже не оставалось, а запаса производительности у сайта для анализа истории всех входящих запросов не было, после консультации с техподдержкой Qrator заказчик решил тесно проинтегрировать приложение с системой фильтрации, предоставив ей обратную связь относительно трудоёмкости запроса к БД.

Таким образом, сайт был защищён от напастей до субботы.

20 октября

В субботу вечером злоумышленники переключили своё внимание на расположенный в Microsoft Azure сайт голосования — election.democratia2.ru. Само по себе облако продолжало работать, однако расположенный в другом месте сервер голосований был успешно убит таргетированной LOIC-атакой — на этот раз с сайта cvkhello.do.am. Вначале команда разработчиков попыталась побороть беду изменением архитектуры, потом ввела капчу, однако в полночь сайт голосования всё же был поставлен под защиту Qrator… без HTTPS — про него впопыхах забыли. Когда Qrator получил доступ к SSL, вдобавок сказалось отсутствие накопленной истории поведения легитимных пользователей.

Работа election.democratia2.ru/ была восстановлена к часу ночи воскресенья, 21 октября, после обучения системы фильтрации.

21 октября

Само собой, срочный отказ от Azure и масштабные изменения в коде не могли не повлиять негативно на общую производительность сайта. А в воскресенье злоумышленники наконец-то пришли к использованию, наряду с LOIC, полноценного ботнета с IP-адресами из азиатских и европейских стран. Суммарное число ботов, участвовавших в атаке, составило немногим более 130 тыс. без учёта NAT. Всё это вкупе привело к необходимости превентивно блокировать ряд потенциально подозрительных IP-адресов, допуская их на сайт поодиночке и анализируя историю поведения каждого из них в отдельности. Ближе к вечеру, когда самые узкие места в производительности защищаемого сайта были ликвидированы, доступ к сайту был предоставлен всем легитимным пользователям.

Сухие технические подробности атаки

  • Тип атаки: комбинированная, SYN-флуд + атака прикладного уровня (ботнет + LOIC)
  • Пиковая мощность SYN-флуда: 150 тыс. пакетов/с
  • Пиковая мощность атаки прикладного уровня: 3,8 тыс. HTTP-запросов/с
  • Число IP-адресов, участвовавших в атаке: ориентировочно 135 тыс.

Мораль?

  • Облачная архитектура приложения не есть панацея от всех бед. Даже при благоприятном стечении обстоятельств вам грозит многозначный счёт за ресурсы, израсходованные облаком на полноценную обработку паразитного трафика. Менее оптимистичный прогноз — серьёзные проблемы с устойчивостью и производительностью и, в результате, даунтайм в самый ответственный момент.
  • Никакое высоконагруженное приложение не может быть избавлено от нагрузочного тестирования. Ни размещение в облаке, ни репутация серверной платформы и фреймворка, ни предварительно закупленный гигабитный канал не гарантируют отсутствия узких мест в скриптах, в схеме базы данных, в логике обработки запросов. Нагруженное приложение должно иметь запас в производительности и выдерживать, по крайней мере, нагрузку в 115% от расчётной или штатной — только это позволит обеспечить качественную фильтрацию при минимуме ложных срабатываний.
  • К слову, о производительности. Если ваш сервер часто думает над ответом больше секунды, крайне вероятно, что у вас большие проблемы, которые нужно решать до вывода системы на продакшн!
  • Если сайт уже недоступен извне, сохраняйте спокойствие и трезво оценивайте свои возможности. Hot patching сайта прямо на продакшене, возможно, закроет одну дыру, но откроет три новые и отрежет вам путь назад. Рассмотрите все имеющиеся в наличии возможности к спасению и выберите из них оптимальный по соотношению цены и качества.
  • Повторюсь: чем раньше ваше приложение окажется под защитой, тем больше свободного времени останется у вас и ваших системных администраторов для работы, отдыха и борьбы за свои идеалы.

ссылка на оригинал статьи http://habrahabr.ru/company/highloadlab/blog/155667/


Комментарии

Добавить комментарий

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