DDOS — это семейство атак, которые перегружают ключевые системы в центре обработки данных, включая:
- Сетевое подключение хостинг-центра к Интернету
- Внутренняя сеть и маршрутизаторы хостинг-центра
- Ваш брандмауэр и балансировщики нагрузки
- Ваши веб-серверы, серверы приложений и базы данных.
Прежде чем приступить к построению защиты от DDOS, подумайте, какова наихудшая стоимость, подверженная риску. Для некритического бесплатного сервиса для небольшого сообщества общая сумма риска может быть мизерной. Для платной публичной критически важной системы для устоявшегося многомиллиардного бизнеса ценностью может быть ценность компании. В этом последнем случае вам не следует использовать StackExchange :) В любом случае, для защиты от DDOS вам нужен комплексный подход к защите:
- Обратитесь к своему хостинг-центру, чтобы понять, какие услуги они предлагают, включая фильтрацию IP-адресов и портов при их сетевых подключениях к Интернету и услуги брандмауэра, которые они предлагают. Это очень важно: многие сайты удаляются из Интернета хостинговой компанией, поскольку хостинговая компания занимается устранением сбоев в работе всего центра обработки данных, вызванных DDOS для одного клиента. Кроме того, во время DDOS-атаки вы будете очень тесно сотрудничать с персоналом хостинг-центра, поэтому знайте их номера экстренных служб и будьте с ними в хороших отношениях :) Они должны иметь возможность блокировать целые международные регионы, полностью блокировать определенные услуги или сеть. протоколы и другие защитные меры широкого спектра или, в качестве альтернативы, разрешить только IP-адреса из белого списка (в зависимости от вашей бизнес-модели)
- Находясь в хостинг-центре, используйте сеть доставки контента для распространения ( в основном статические) сервисы рядом с вашими конечными пользователями и скрывают ваши настоящие серверы от архитекторов DDOS. Полная CDN слишком велика для DDOS, чтобы вывести из строя все узлы во всех странах; если DDOS нацелен на одну страну, по крайней мере, другие пользователи все еще в порядке.
Держите все свои системы и программные пакеты обновленными с помощью последних исправлений безопасности — я имею в виду все из них:
- Managed switches - yup these sometimes need updating
- Маршрутизаторы
- Брандмауэры
- Балансировщики нагрузки
- Операционные системы
- Веб-серверы
- Языки и их библиотеки
Убедитесь, что у вас есть хороший брандмауэр или устройство безопасности, настроенное и регулярно проверяемое квалифицированным экспертом по безопасности. Строгие правила брандмауэра — хорошая защита от многих простых атак. Также полезно иметь возможность управлять пропускной способностью, доступной для каждой открытой службы.
Подготовьте хорошие инструменты мониторинга сети. Это поможет вам понять:
- That you're under attack rather than simply being under heavy load
- Откуда исходит атака (включая страны, с которыми вы обычно не ведете дела) и
- Что на самом деле представляет собой атака (порты, сервисы, протоколы, IP-адреса и содержимое пакетов)
Атака может заключаться в простом интенсивном использовании законных служб веб-сайта (например, попадание «легальных» URI, выполняющих запросы, или вставка/обновление/удаление данных) — тысячи или миллионы запросов, поступающих с десятков или миллионов различных IP-адресов, приведут сайт к его колени. В качестве альтернативы, запуск некоторых служб может быть настолько дорогим, что только несколько запросов вызывают DOS - подумайте о действительно дорогом отчете. Поэтому вам нужен хороший мониторинг происходящего на уровне приложений:
- Which services have been invoked and what arguments/data are sent (i.e. logging in your application)
- Какие пользователи выполняют вызовы и с каких IP-адресов (т.е. входят в ваше приложение)
- Какие запросы и вставки/обновления/удаления выполняет БД
- Средняя нагрузка, загрузка ЦП, дисковый ввод-вывод, сетевой трафик на всех компьютерах (и виртуальных машинах) в вашей системе.
- Убедитесь, что всю эту информацию легко получить и что вы можете сопоставить журналы с разных компьютеров и служб (т.е. убедитесь, что все компьютеры синхронизированы по времени с помощью ntp).
Разумные ограничения и ограничения в вашем приложении. Например, вы можете:
- Use a QoS feature in the load balancer to send all anonymous sessions to separate application servers in your cluster, while logged-on users use another set. This prevents an application-level anonymous DDOS taking out valuable customers
- Использование сильной CAPCHA для защиты анонимных сервисов
- Время ожидания сеанса
- Установите ограничение сеанса или ограничение скорости для определенных типов запросов, таких как отчеты. Убедитесь, что вы можете отключить анонимный доступ, если это необходимо
- Убедитесь, что у пользователя есть ограничение на количество одновременных сеансов (чтобы взломанная учетная запись не регистрировалась миллион раз)
- Имейте разных пользователей приложения базы данных для разных служб (например, использование транзакций или использование отчетов) и используйте управление ресурсами базы данных, чтобы не допустить, чтобы один тип веб-запроса подавлял все другие.
- Если возможно, сделайте эти ограничения динамическими или, по крайней мере, настраиваемыми. Таким образом, пока вы подвергаетесь атаке, вы можете установить агрессивные временные ограничения («дросселирование» атаки), например, только один сеанс для каждого пользователя и запретить анонимный доступ. Это, конечно, не очень хорошо для ваших клиентов, но намного лучше, чем отсутствие обслуживания вообще.
И последнее, но не менее важное: напишите документ План реагирования на DOS и проведите его внутреннюю проверку всеми соответствующими сторонами: бизнесом, руководством, командой разработчиков ПО, ИТ-группой и экспертом по безопасности. Процесс написания документа заставит вас и вашу команду обдумать проблемы и поможет вам подготовиться, если самое худшее произойдет в 3 часа ночи вашего выходного дня. Документ должен охватывать (среди прочего):
- What is at risk, and the cost to the business
- Меры, принятые для защиты активов
- Как обнаруживается атака
- Планируемый ответ и процедура эскалации
- Процессы для поддержания системы и этого документа в актуальном состоянии
Итак, преамбула в сторону, вот несколько конкретных ответов:
DDOS обычно блокируются на уровне сервера, верно?
На самом деле нет — большинство самых страшных DDOS-атак являются низкоуровневыми (на уровне IP-пакетов) и обрабатываются правилами маршрутизации, брандмауэрами и устройствами безопасности, разработанными для борьбы с DDOS-атаками.
Есть ли способ заблокировать его на уровне PHP или хотя бы уменьшить?
Некоторые DDOS-атаки нацелены на само приложение, отправляющее действительные URI и HTTP-запросы. Когда скорость запросов возрастает, ваши серверы начинают работать с перебоями, и у вас может возникнуть сбой в связи с соглашением об уровне обслуживания. В этом случае есть вещи, которые вы можете сделать на уровне PHP:
Мониторинг на уровне приложений: убедитесь, что каждая служба/страница регистрирует запросы таким образом, чтобы вы могли видеть, что происходит (чтобы вы могли предпринять действия для смягчения атаки). Некоторые идеи:
Имейте формат журнала, который можно легко загрузить в инструмент журнала (или Excel или аналогичный) и проанализировать с помощью инструментов командной строки (grep, sed, awk). Помните, что DDOS будет генерировать миллионы строк журнала. Вам, скорее всего, потребуется разрезать ваши журналы (особенно в отношении URI, времени, IP и пользователя), чтобы понять, что происходит, и вам нужно будет сгенерировать такие данные, как:
- What URIs are being accessed
- Какие URI чаще всего выходят из строя (вероятный показатель конкретных URI, которые атакуют злоумышленники)
- Какие пользователи получают доступ к сервису
- Со скольких IP-адресов каждый пользователь получает доступ к сервису?
- К каким URI обращаются анонимные пользователи
- Какие аргументы используются для данного сервиса
- Аудит конкретных действий пользователей
Запишите IP-адрес каждого запроса. НЕ реверсируйте DNS — по иронии судьбы, затраты на это облегчают атаку DDOS для злоумышленников.
- Зарегистрируйте весь URI и метод HTTP, например, «GET http://example.com/path/to/service?arg1=ddos"
- Зарегистрируйте идентификатор пользователя, если он есть
- Записывать важные аргументы HTTP
Разумные ограничения скорости: вы можете ввести ограничения на количество запросов, которые данный IP-адрес или пользователь может сделать за определенный период времени. Может ли законный клиент делать более 10 запросов в секунду? Могут ли анонимные пользователи вообще получать доступ к дорогостоящим отчетам?
CAPTCHA для анонимного доступа: внедрите CAPTCHA для всех анонимных запросов, чтобы убедиться, что пользователь является человеком, а не DDOS-ботом.
Какой самый быстрый и распространенный способ остановить DDOS-атаки?
Самое быстрое, наверное, поддаться на шантаж, хотя это может и нежелательно.
В противном случае первое, что вам нужно сделать, это связаться с вашим хостинг-провайдером и/или поставщиком CDN и работать с ними (если они уже не связались с вами и не спросили, что, черт возьми, происходит...). Когда происходит DDOS, это, вероятно, побочно затронет других клиентов хостинг-провайдера, и провайдер может оказаться под значительным давлением, чтобы закрыть ваш сайт просто для защиты своих ресурсов. Будьте готовы поделиться своими логами (любой и всей информацией) с провайдером; эти журналы в сочетании с их сетевыми мониторами могут предоставить достаточно информации, чтобы заблокировать/смягчить атаку.
Если вы ожидаете DDOS, очень хорошей идеей будет квалифицировать вашего хостинг-провайдера по уровню защиты, который он может предоставить. У них должен быть опыт DDOS и инструменты для его смягчения — понимать их инструменты, процессы и процедуры эскалации. Также узнайте, какую поддержку оказывает хостинг-провайдер от их вышестоящих провайдеров. Эти услуги могут означать более авансовые или ежемесячные затраты, но рассматривайте это как страховой полис.
Находясь под атакой, вам нужно будет захватить свои журналы и добыть их — попытайтесь определить схему атаки. Вам следует рассмотреть возможность отключения анонимного доступа и ограничения атакуемых сервисов (т. е. уменьшить ограничение скорости приложения для сервиса).
Если вам повезет, и у вас будет небольшая фиксированная клиентская база, вы сможете определить действительные IP-адреса клиентов. Если это так, вы можете ненадолго переключиться на подход с использованием белого списка. Убедитесь, что все ваши клиенты знают, что это происходит, чтобы они могли позвонить, если им понадобится доступ с нового IP :)
Дуг МакКлин дает отличный совет по адресу: https://stackoverflow.com/a/1029613/1395668
person
Andrew Alcock
schedule
30.01.2013