Безопасный сайт: атаки на «отказ в обслуживании»

Kyle MayСовременный Интернет – среда довольно агрессивная: выставленные для публичного доступа веб-сайты постоянно подвергаются самым разным виртуальным атакам. Одной из характерных для современного положения дел в Интернете тенденций является рост числа атак типа «отказ в обслуживании» - так называемых DoS-атак. Причём растёт не только число таких атак, направленных на веб-сайты, но и масштабы каждой конкретной атаки. А кроме того, эволюционируют механизмы проведения атак.

DoS-атакой (от англ. Denial of Service – дословный перевод: отказ от обслуживания), в случае с веб-сайтом, принято называть действия злоумышленников, вызывающие перегрузку того или иного технологического элемента в цепочке, обеспечивающей связь интернет-пользователей с веб-сайтом. В результате таких действий веб-сайт оказывается не доступен для просмотра.

Утрированный пример DoS-атаки: злоумышленники непрерывно посылают веб-серверу очень большое число запросов на извлечение страниц. Так как всякий веб-сервер имеет ограничение на максимальное число посещений в единицу времени, которое он может обслужить, то при наличии достаточно большого числа «паразитных» запросов новые запросы перестают обрабатываться. Таким образом, для добросовестных посетителей сайт оказывается «отключен».

Зачем нужны атаки

Если отбросить «пробные атаки», иногда организуемые злоумышленниками с целью проверить новые «инструменты», то окажется, что за атакой стоит чьё-то желание сделать конкретный веб-сайт недоступным для его аудитории. Например, попытаться «отключить» коммерческий сайт могут злоумышленники, старающиеся нарушить нормальный ход бизнеса владельцев сайта. DoS-атаки могут использоваться в качестве инструмента давления на популярные Интернет-СМИ. Нередки случаи DoS-атак, проводящихся в качестве «меры устрашения» в ответ на публикацию каких-либо статей и материалов. Месть - вообще распространённая причина совершения атак на веб-сайты. Но каковы бы ни были причины спланированных DoS-атак, их исполнители и заказчики лишь в редких случаях открыто «берут на себя ответственность».

Нужно отдельно отметить «нечаянные» «DoS-атаки». Такие «атаки» возникают, когда на веб-сайт «обрушивается» неожиданно большое число вполне добропорядочных посетителей. Классический сценарий: коммерческая компания размещает в Интернете веб-сайт, используя недорогой хостинг; после того как сайт опубликован, заказывается мощная рекламная кампания, цель которой – привлечь посетителей на новый сайт. Если реклама оказывается эффективной, то на сайт одновременно приходит большое число посетителей, хостинг не выдерживает нагрузки и сайт «отключается». Итог: сайт недоступен, а рекламный бюджет, можно сказать, выброшен на ветер, потому что новые посетители не имеют возможности получить информацию с веб-сайта.

Механизмы атак

Самая примитивная DoS-атака на веб-сайт может быть выполнена при помощи одного компьютера, имеющего высокоскоростное подключение к Интернету. С помощью специальной программы такой компьютер начинает засыпать атакуемый веб-сайт запросами. В принципе, на роль «специальной программы» вполне годится обычный веб-браузер, который постоянно «обновляет» страницу по заданному адресу.
Впрочем, подобная примитивная DoS-атака имеет минимальны  шансы на успех в современном Интернете. Дело в том, что, в случае с веб-сайтами, используемые в Интернете протоколы передачи данных позволяют хостинг-провайдеру отфильтровать слишком интенсивный поток запросов по IP-адресу источника.

Нужно отметить, что для организации атаки злоумышленники могут использовать различные особенности протоколов передачи данных в Интернете, в том числе и те, которые позволяют подделать IP-адрес отправителя. В этом случае вредоносные пакеты могут преодолевать фильтры, настроенные хостинг-провайдером.

Среди самых опасных и трудных для блокирования на стороне хостинг-провайдера  типов DoS-атак – распределённые DoS-атаки (или DDoS – Distributed Denial of Service; в дословном переводе: распределённый отказ в обслуживании). В рамках DDoS-атаки, запросы на веб-сайт отправляет не один компьютер большим потоком, а множество компьютеров, каждый из которых вносит лишь малую лепту в общий поток.

Различных IP-адресов, участвующих в атаке, очень много, да и расположены они в самых разных сетях. Так как очередные «атакующие запросы» приходят с других IP-адресов, то фильтрация атаки по адресу источника не работает.

Для реализации DDoS-атак злоумышленники используют ботнеты – сети из заражённых программами-червями компьютеров, расположенных по всему миру. Крупные ботнеты могут включать в себя десятки и сотни тысяч компьютеров. Пользователи этих машин скорее всего не подозревают, что их компьютеры заражены вредоносными программами и используются злоумышленниками. Ботнеты создаются путем рассылки разными способами вредоносного программного обеспечения, а заражённые машины в дальнейшем регулярно получают команды от администратора ботнета, так что оказывается возможным организовать согласованные действия компьютеров-зомби по атаке веб-сайтов и других ресурсов.

Эффективным способом осуществления успешной DDoS-атаки является отправка машинами-зомби таких запросов к веб-серверу, которые потребуют существенных затрат вычислительных ресурсов на обработку. При этом запросы передаются по протоколу HTTP, что сильно затрудняет решение задачи автоматической фильтрации «вредоносных» запросов к серверу до их обработки.

Поэтому злоумышленники стараются выявить в используемом на сервере программном обеспечении функции, которые можно задействовать для создания дополнительной нагрузки на сервер. Часто такие функции содержат в себе CMS. Например, обработка данных форм регистрации посетителей, генерация изображений CAPTCHA, проверка авторизационной информации – все эти задачи требуют существенных вычислительных ресурсов, а значит могут быть использованы злоумышленниками для проведения DoS-атак.

Защита от DoS-атак

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

Простые контрмеры могут быть внедрены на уровне CMS: очень важно, чтобы программный код CMS был хорошо оптимизирован, публикуемый контент кешировался, а количество «точек создания нагрузки» было сведено к минимуму. Конечно, на уровне CMS можно внедрить фильтры, анализирующие «частотность» запросов, приходящих с различных IP-адресов. Однако вряд ли такое решение само по себе сильно повысит практическую защищённость сайта от DoS-атак. Дело в том, что «фильтруемый запрос» на момент поступления в CMS уже добрался до веб-сервера, а значит, использовал часть его ресурсов, так что дальнейшая обработка запроса CMS лишь будет увеличивать время обслуживания, способствуя успеху DoS-атаки. С другой стороны, фильтрацию «подозрительных запросов» в CMS можно рассматривать как элемент оптимизации программной архитектуры CMS, положительно сказывающийся на эффективности работы системы.

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

Для борьбы с DoS-атаками хостинг-провайдеры специальным образом настраивают программное обеспечение, управляющее маршрутизацией пакетов данных. Также используются программно-аппаратные комплексы, обнаруживающие атаки в автоматическом режиме и так же в автоматическом режиме применяющие контрмеры. Однако нужно иметь в виду, что пакеты данных, составляющие DoS-атаку, для их обработки всё равно должны быть доставлены, по крайней мере, до «фильтрующего оборудования» провайдера. И даже если это оборудование очень производительное, то достаточно мощная атака всегда может просто «затопить» каналы связи провайдера. Впрочем, сделать это сложнее, чем вызвать перегрузку единичного веб-сервера, работающего на виртуальном хостинге.