DDoS-атака - это попытка перегрузить сайт или сервер множеством запросов с разных устройств, делая сервис недоступным. В статье рассмотрены механизмы атак, их виды, способы защиты, роль ботнетов и современные методы обнаружения и фильтрации вредоносного трафика.
DDoS-атака - это попытка сделать сайт, сервер или онлайн-сервис недоступным, создав для него нагрузку, которую инфраструктура не успевает обработать. Вместо взлома системы или кражи данных злоумышленники отправляют огромное количество запросов и занимают доступные сетевые или вычислительные ресурсы.
Главная особенность DDoS заключается в распределённости атаки. Трафик может одновременно поступать от тысяч и даже миллионов устройств, поэтому простая блокировка одного источника не решает проблему. Когда пропускная способность канала, процессор, память или лимит соединений оказываются исчерпаны, обычные пользователи начинают получать ошибки, сталкиваются с задержками или вообще не могут открыть сервис.
Дальше разберём, что такое DDoS-атака простыми словами, каким образом большое количество запросов перегружает сервер, какие виды таких атак существуют и как современные системы защиты отделяют вредоносный трафик от обычного.
DDoS расшифровывается как Distributed Denial of Service - "распределённый отказ в обслуживании". Смысл атаки заключается в том, чтобы создать такую нагрузку на сайт, сервер или сетевое оборудование, при которой система перестанет нормально обслуживать обычных пользователей.
Представим интернет-магазин, который способен одновременно обрабатывать несколько тысяч посетителей. Если к нему внезапно обращаются сотни тысяч устройств и каждое начинает отправлять запросы, серверу приходится тратить ресурсы на их обработку. Когда доступные мощности заканчиваются, страницы начинают открываться медленно, появляются ошибки, а в некоторых случаях сайт полностью перестаёт отвечать.
Главное отличие DDoS от обычного DoS - количество источников трафика. При классической DoS-атаке нагрузка может исходить от одного устройства или небольшого числа систем. В случае DDoS запросы поступают одновременно из множества разных точек сети. Именно поэтому такая атака называется распределённой.
При этом DDoS не обязательно означает, что злоумышленник взломал сервер. Основная цель - нарушить доступность сервиса. База данных и пользовательские файлы могут остаться нетронутыми, но воспользоваться сайтом, приложением или API в момент атаки будет сложно или невозможно.
Перегружаться могут разные элементы инфраструктуры. Иногда атакующий стремится заполнить весь доступный интернет-канал, иногда - заставить сетевое оборудование поддерживать слишком много соединений, а иногда отправляет запросы, обработка которых требует заметных ресурсов процессора, памяти или базы данных.
Со стороны пользователя результат выглядит примерно одинаково: сайт долго загружается, соединение обрывается, сервер возвращает ошибки или вообще перестаёт отвечать. Однако внутри инфраструктуры причины такой недоступности могут сильно различаться, поэтому и способы защиты от разных видов DDoS-атак отличаются.
Любой сервер имеет ограниченный запас ресурсов. Он может обработать определённое количество запросов в секунду, поддерживать конечное число соединений и передавать данные только в пределах пропускной способности сетевого канала. DDoS-атака пытается превысить один или сразу несколько этих лимитов.
Когда пользователь открывает сайт, его устройство отправляет запрос, который проходит через сеть и попадает на инфраструктуру сервиса. Сервер принимает его, определяет нужный ресурс, при необходимости обращается к приложению или базе данных и формирует ответ.
Каждый такой запрос требует времени и ресурсов. Даже если обработка одной операции занимает доли секунды, одновременно сервер может обслуживать лишь ограниченное их количество. Остальные запросы временно попадают в очередь или ожидают освобождения нужных ресурсов.
При DDoS поток резко увеличивается. Например, вместо нескольких тысяч обращений в секунду инфраструктура начинает получать сотни тысяч или миллионы. Очереди растут, соединения остаются занятыми, нагрузка на процессор и память повышается, а сетевой канал может оказаться полностью заполнен.
В результате запрос обычного пользователя технически ничем не отличается от остальных: ему тоже приходится ждать свободных ресурсов. Если сервер уже работает на пределе, соединение может завершиться по тайм-ауту или пользователь получит ошибку вроде 502, 503 или 504.
Иногда сам сервер ещё способен продолжать работу, но запросы до него практически не доходят. Такое происходит, если атакующий трафик заполняет пропускную способность интернет-канала. Условно, если инфраструктура подключена по каналу 10 Гбит/с, а входящий поток достигает 50 Гбит/с, лишний трафик приходится отбрасывать ещё до полноценной обработки приложением.
Чтобы перегрузить сервис, необязательно отправлять запросы, которые выглядят необычно или используют какую-либо уязвимость. Иногда достаточно огромного количества самых обычных обращений к сайту.
Особенно заметна нагрузка, если запрос запускает ресурсоёмкие операции: поиск по большой базе данных, формирование сложной страницы, обращение сразу к нескольким внутренним сервисам или вычисление динамического ответа. Один такой запрос может потреблять значительно больше ресурсов, чем загрузка небольшого статического файла.
Другой вариант - создание большого количества одновременных соединений. Даже если по каждому из них передаётся немного данных, серверу или сетевому оборудованию приходится хранить информацию о состоянии соединений и выделять под них ресурсы.
Поэтому перегрузить инфраструктуру можно по-разному: занять весь доступный сетевой канал, исчерпать число соединений либо заставить приложение выполнять слишком много операций одновременно. От того, какой именно ресурс становится узким местом, зависит тип DDoS-атаки и способ защиты от неё.
DDoS-атаки различаются по тому, какой ресурс инфраструктуры злоумышленник пытается исчерпать. Одни создают огромный поток данных и забивают интернет-канал, другие перегружают сетевое оборудование, а третьи заставляют само приложение выполнять слишком много операций.
Главная цель объёмной атаки - заполнить доступную пропускную способность канала. На сервер или его сетевую инфраструктуру направляется настолько большой поток данных, что обычному трафику просто не остаётся места.
В такой ситуации веб-сервер может продолжать работать нормально, но пользователи всё равно не смогут открыть сайт, потому что канал связи до него уже перегружен. Нагрузка обычно измеряется в битах в секунду: чем выше объём атакующего трафика, тем больше пропускной способности требуется инфраструктуре для его обработки.
Для подобных атак особенно важна фильтрация трафика до того, как он достигнет непосредственно сервера. Если канал до дата-центра уже полностью занят, блокировка запросов внутри самого приложения практически не поможет.
Другой класс DDoS направлен не столько на объём передаваемых данных, сколько на ограниченные ресурсы сетевого стека и оборудования.
Для установления и поддержки соединений маршрутизаторы, межсетевые экраны, балансировщики и серверы хранят определённую служебную информацию. Если количество новых соединений становится слишком большим, таблицы состояний и очереди могут заполниться.
В результате устройство перестаёт нормально обслуживать новые подключения даже тогда, когда общий объём трафика не выглядит экстремальным. Поэтому небольшое количество данных при определённых условиях способно создать серьёзную нагрузку на инфраструктуру.
На прикладном уровне атакующий трафик может внешне выглядеть почти как действия обычных пользователей. Например, сервер получает большое количество HTTP- или HTTPS-запросов к страницам, поиску, API или другим функциям сайта.
Проблема возникает тогда, когда обработка каждого обращения требует заметных ресурсов. Серверу приходится запускать код приложения, обращаться к базе данных, выполнять вычисления и формировать динамический ответ.
Если таких запросов становится слишком много, процессор, память, пул соединений с базой данных или другие компоненты начинают работать на пределе. При этом объём сетевого трафика может оставаться относительно небольшим, поэтому обнаружить подобную атаку только по скорости передачи данных сложнее.
Разделение DDoS на эти категории важно для защиты. Механизм, который хорошо справляется с перегрузкой сетевого канала, не обязательно остановит поток внешне корректных запросов к приложению. Поэтому современные системы защиты анализируют сразу несколько уровней - от общего объёма трафика и сетевых соединений до поведения отдельных HTTP-запросов.
Одна из причин, по которой DDoS сложно остановить простой блокировкой, - большое количество источников трафика. Для этого злоумышленники нередко используют ботнет - сеть устройств, которыми можно удалённо управлять без ведома их владельцев.
В ботнет могут входить заражённые компьютеры, серверы, роутеры, камеры видеонаблюдения, сетевые хранилища и другие IoT-устройства. По отдельности каждое из них способно отправлять сравнительно небольшой объём трафика, но при одновременной работе тысяч устройств их нагрузка складывается.
Например, если одно устройство создаёт всего несколько десятков запросов в секунду, крупный ботнет уже способен сформировать поток из сотен тысяч или миллионов обращений. Для атакуемого сервера они приходят с множества разных IP-адресов и из разных сетей, поэтому отличить их от обычных пользователей значительно сложнее.
Именно распределённость делает блокировку по одному адресу малоэффективной. Даже если система защиты отсеет часть источников, остальные устройства продолжат генерировать трафик. Более того, слишком агрессивная фильтрация может случайно заблокировать настоящих пользователей, которые находятся в тех же сетях или регионах.
Сам ботнет обычно создаётся заранее. Уязвимые устройства заражаются вредоносным ПО и подключаются к инфраструктуре управления. После этого оператор может одновременно передавать им команды, в том числе заставлять отправлять трафик в сторону выбранного ресурса.
Подробнее о том, как формируются такие сети и каким образом заражённые устройства становятся частью общей инфраструктуры злоумышленника, можно прочитать в материале "Ботнет: что это такое, как работает и чем опасен для устройств".
При этом ботнет - не обязательное условие любой DDoS-атаки. Нагрузка может формироваться и другими способами, однако именно большое количество распределённых источников хорошо показывает главное отличие DDoS от обычного отказа в обслуживании: атакующий трафик поступает одновременно из множества независимых точек сети.
Защита от DDoS строится не вокруг одной технологии, а сразу нескольких уровней. Задача системы - как можно раньше заметить аномальную нагрузку, отделить подозрительный трафик от обычного и не допустить перегрузки основной инфраструктуры.
Первый этап - понять, что резкий рост нагрузки связан именно с атакой, а не с обычным наплывом пользователей. Для этого системы мониторинга отслеживают количество запросов, число новых соединений, распределение трафика по IP-адресам, регионам и другим признакам.
Важна не только абсолютная нагрузка, но и изменение поведения. Например, если сайт обычно получает несколько тысяч запросов в минуту, а затем их количество внезапно увеличивается в десятки раз, это может быть признаком DDoS.
При этом одного показателя недостаточно. Резкий рост посещаемости может быть вполне легитимным - например, после крупного анонса или публикации ссылки на популярном ресурсе. Поэтому современные системы сравнивают множество параметров и пытаются определить, насколько текущий поток похож на нормальное поведение пользователей.
После обнаружения подозрительного трафика часть запросов можно отбрасывать ещё до того, как они попадут на основной сервер. Для этого используются сетевые фильтры, правила ограничения частоты запросов и системы анализа поведения клиентов.
Один из базовых механизмов - rate limiting. Он ограничивает количество обращений, которое один источник или группа источников может выполнить за определённое время. Если заданный порог превышается, последующие запросы временно блокируются или обрабатываются с более низким приоритетом.
Для атак на уровне веб-приложений может использоваться WAF - межсетевой экран для HTTP- и HTTPS-трафика. Он анализирует запросы к сайту и помогает отсеивать подозрительную активность ещё до передачи данных приложению.
Главная сложность состоит в том, чтобы не заблокировать настоящих пользователей вместе с атакующим трафиком. Поэтому эффективная защита редко строится только на жёстких лимитах или списках IP-адресов.
Ещё один важный принцип - не заставлять один сервер принимать весь входящий поток. Нагрузка может распределяться между несколькими серверами, дата-центрами и узлами сети.
Для этого применяются CDN, балансировщики нагрузки и распределённая сетевая инфраструктура. Чем больше ресурсов и точек присутствия доступно системе, тем сложнее перегрузить её одним концентрированным потоком трафика.
С технологией распределения запросов напрямую связан материал "Балансировщик нагрузки: как работает и зачем нужен вашему сервису".
Для крупной сетевой инфраструктуры также используется Anycast. При таком подходе один IP-адрес может обслуживаться сразу несколькими узлами в разных точках сети, а входящий трафик направляется к наиболее подходящему из них. Это позволяет распределять нагрузку и снижать вероятность того, что весь атакующий поток попадёт в одну точку.
Подробнее этот механизм разобран в материале "Anycast DNS: ускорение сайтов и защита от DDoS-атак".
Абсолютной защиты от DDoS не существует, потому что любая инфраструктура имеет физические пределы по пропускной способности и вычислительным ресурсам. При достаточно большой нагрузке можно перегрузить даже очень мощную систему.
Поэтому цель защиты - не сделать атаку невозможной, а максимально повысить объём нагрузки, который система способна выдержать, и отфильтровать вредоносный поток до того, как он повлияет на обычных пользователей.
На практике наиболее устойчивые решения сочетают постоянный мониторинг, автоматическую фильтрацию, ограничение запросов, распределение нагрузки и внешние сервисы очистки трафика. Такой многоуровневый подход позволяет продолжать обслуживать легитимных пользователей даже во время крупной атаки.
DDoS-атака нарушает доступность сайта или сервиса за счёт перегрузки ограниченных ресурсов инфраструктуры. Поток запросов может забить сетевой канал, исчерпать число доступных соединений или заставить приложение выполнять слишком много операций одновременно.
Особенно сложными становятся распределённые атаки, когда трафик поступает от большого количества устройств. В этом случае простая блокировка отдельных IP-адресов малоэффективна, а защита должна анализировать поведение запросов и распределять нагрузку между несколькими узлами.
Практическая защита от DDoS строится в несколько уровней: мониторинг помогает вовремя заметить аномалию, фильтрация и rate limiting отсекают часть вредоносных запросов, а CDN, Anycast и балансировщики уменьшают нагрузку на отдельные серверы. Чем раньше атакующий трафик отделяется от обычного, тем выше вероятность сохранить доступность сервиса даже во время серьёзной атаки.