Блог Highload Lab на Хабрахабре обновляется нечасто — интересных DDoS-атак, на примере которых каждый может чему-то научиться, мало, а раздражать читателей бесконечными историями успеха не хочется. Тем ценнее действительно занимательные прецеденты, к числу которых, несомненно, относится нападение на сайты Центрального Выборного Комитета Координационного Совета оппозиции.
В предыдущих выпусках бортового журнала сети фильтрации трафика Qrator (обязательная рекламная ссылка — http://qrator.net/) мы выяснили, что в преддверии серьёзных мероприятий в Рунете лучше заранее озаботиться защитой от атак. Сегодня я расскажу вам, как можно, даже выполнив это требование, заработать себе пару бессонных ночей на рабочем админском месте.
Сотрудники ЦВК подошли к проблеме отказоустойчивости фронтенда системы голосования со всей академической серьёзностью и не стали складывать все яйца в одну корзину. «Морда» системы голосования была размещена в облаке Microsoft Azure, рекомендуемом для приложений на платформе Windows. Параллельно домен election.cvk2012.org был зарегистрирован в Qrator практически за месяц до описываемых событий и всё это время находился под профилактической защитой, что позволило накопить необходимую базу для обучения. Всё это позволяло рассчитывать, что выборный уик-энд в плане работоспособности сайтов оппозиции пройдёт так же спокойно и беспроблемно, как и несколько предыдущих митингов.
Первый звоночек прозвучал в четверг. К этому времени маломощная атака на сайт регистрации избирателей шла уже 3 дня, однако в тот момент она впервые создала проблемы. Схема атаки — типичный JS LOIC: на предположительно устойчивом хостинге размещается страница с ECMAScript-кодом, который раз в 200 мс обновляет псевдоизображение с URL атакуемого сервиса. Аналогичную схему в апреле использовал сервис Вконтакте для «предупреждения» сайта antigate.com. В данном случае вначале атакующий скрипт располагался на сайте hellotesak.narod.ru, при этом серверы Яндекса не принимали участия в атаке – скрипт исполнялся в браузерах пользователей. Позднее этот сайт был заблокирован.
Выяснилось, что при некоторых условиях атакующий код создаёт серьёзные проблемы для базы данных. Так как времени на оптимизацию общения фронтенда с СУБД уже не оставалось, а запаса производительности у сайта для анализа истории всех входящих запросов не было, после консультации с техподдержкой Qrator заказчик решил тесно проинтегрировать приложение с системой фильтрации, предоставив ей обратную связь относительно трудоёмкости запроса к БД.
Таким образом, сайт был защищён от напастей до субботы.
В субботу вечером злоумышленники переключили своё внимание на расположенный в Microsoft Azure сайт голосования — election.democratia2.ru. Само по себе облако продолжало работать, однако расположенный в другом месте сервер голосований был успешно убит таргетированной LOIC-атакой — на этот раз с сайта cvkhello.do.am. Вначале команда разработчиков попыталась побороть беду изменением архитектуры, потом ввела капчу, однако в полночь сайт голосования всё же был поставлен под защиту Qrator… без HTTPS — про него впопыхах забыли. Когда Qrator получил доступ к SSL, вдобавок сказалось отсутствие накопленной истории поведения легитимных пользователей.
Работа election.democratia2.ru была восстановлена к часу ночи воскресенья, 21 октября, после обучения системы фильтрации.
По информации от Meddy (сотрудника uCoz), cайт cvkhello.do.am просуществовал двое суток. Регистрация сайта происходила с IP-адреса, принадлежащего одному из крупнейших украинских кабельных провайдеров.
Само собой, срочный отказ от Azure и масштабные изменения в коде не могли не повлиять негативно на общую производительность сайта. А в воскресенье злоумышленники наконец-то пришли к использованию, наряду с LOIC, полноценного ботнета с IP-адресами из азиатских и европейских стран. Суммарное число ботов, участвовавших в атаке, составило немногим более 130 тыс. без учёта NAT. Всё это вкупе привело к необходимости превентивно блокировать ряд потенциально подозрительных IP-адресов, допуская их на сайт поодиночке и анализируя историю поведения каждого из них в отдельности. Ближе к вечеру, когда самые узкие места в производительности защищаемого сайта были ликвидированы, доступ к сайту был предоставлен всем легитимным пользователям.
В предыдущих выпусках бортового журнала сети фильтрации трафика 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 октября, после обучения системы фильтрации.
По информации от Meddy (сотрудника uCoz), cайт cvkhello.do.am просуществовал двое суток. Регистрация сайта происходила с IP-адреса, принадлежащего одному из крупнейших украинских кабельных провайдеров.
21 октября
Само собой, срочный отказ от Azure и масштабные изменения в коде не могли не повлиять негативно на общую производительность сайта. А в воскресенье злоумышленники наконец-то пришли к использованию, наряду с LOIC, полноценного ботнета с IP-адресами из азиатских и европейских стран. Суммарное число ботов, участвовавших в атаке, составило немногим более 130 тыс. без учёта NAT. Всё это вкупе привело к необходимости превентивно блокировать ряд потенциально подозрительных IP-адресов, допуская их на сайт поодиночке и анализируя историю поведения каждого из них в отдельности. Ближе к вечеру, когда самые узкие места в производительности защищаемого сайта были ликвидированы, доступ к сайту был предоставлен всем легитимным пользователям.
Сухие технические подробности атаки
- Тип атаки: комбинированная, SYN-флуд + атака прикладного уровня (ботнет + LOIC)
- Пиковая мощность SYN-флуда: 150 тыс. пакетов/с
- Пиковая мощность атаки прикладного уровня: 3,8 тыс. HTTP-запросов/с
- Число IP-адресов, участвовавших в атаке: ориентировочно 135 тыс.
Мораль?
- Облачная архитектура приложения не есть панацея от всех бед. Даже при благоприятном стечении обстоятельств вам грозит многозначный счёт за ресурсы, израсходованные облаком на полноценную обработку паразитного трафика. Менее оптимистичный прогноз — серьёзные проблемы с устойчивостью и производительностью и, в результате, даунтайм в самый ответственный момент.
- Никакое высоконагруженное приложение не может быть избавлено от нагрузочного тестирования. Ни размещение в облаке, ни репутация серверной платформы и фреймворка, ни предварительно закупленный гигабитный канал не гарантируют отсутствия узких мест в скриптах, в схеме базы данных, в логике обработки запросов. Нагруженное приложение должно иметь запас в производительности и выдерживать, по крайней мере, нагрузку в 115% от расчётной или штатной — только это позволит обеспечить качественную фильтрацию при минимуме ложных срабатываний.
- К слову, о производительности. Если ваш сервер часто думает над ответом больше секунды, крайне вероятно, что у вас большие проблемы, которые нужно решать до вывода системы на продакшен!
- Если сайт уже недоступен извне, сохраняйте спокойствие и трезво оценивайте свои возможности. Hot patching сайта прямо на продакшене, возможно, закроет одну дыру, но откроет три новые и отрежет вам путь назад. Рассмотрите все имеющиеся в наличии возможности к спасению и выберите из них оптимальный по соотношению цены и качества.
- Повторюсь: чем раньше ваше приложение окажется под защитой, тем больше свободного времени останется у вас и ваших системных администраторов для работы, отдыха и борьбы за свои идеалы.