Layer 4 vs Layer 7 DDoS-атаки - в чём разница и почему это важно

Layer 4 vs Layer 7 DDoS-атаки - в чём разница и почему это важно

Если вы когда-нибудь разбирались с DDoS-защитой для своего Minecraft-сервера, вы наверняка сталкивались с терминами "Layer 4" и "Layer 7". Некоторые защиты заявляют фильтрацию на L4, другие хвастаются L7-анализом. Звучит красиво, но что конкретно за этим стоит?

Давайте разберёмся без академической нудятины. Что это за слои, какие атаки на каком уровне работают и почему для нормальной защиты нужны оба.

Что такое OSI-модель (коротко и по делу)

OSI (Open Systems Interconnection) - это теоретическая модель, которая разбивает сетевое взаимодействие на 7 уровней. Её придумали в 80-х для стандартизации, и она до сих пор используется как общий язык, когда люди обсуждают сети.

Вот все 7 уровней, от нижнего к верхнему:

  1. Physical - провода, оптика, радиоволны. Физическая передача битов.
  2. Data Link - Ethernet-фреймы, MAC-адреса. Передача данных между соседними узлами.
  3. Network - IP-адреса, маршрутизация. Как пакет находит путь от точки А к точке Б.
  4. Transport - TCP и UDP. Как данные надёжно (или быстро) доставляются между приложениями.
  5. Session - управление сессиями. На практике почти не встречается как отдельный уровень.
  6. Presentation - кодирование, шифрование. TLS живёт примерно здесь.
  7. Application - HTTP, DNS, Minecraft-протокол. То, с чем работают конечные приложения.

На практике из этих 7 уровней для DDoS-атак и защиты важны три: Layer 3 (Network), Layer 4 (Transport) и Layer 7 (Application). Уровни 3 и 4 обычно группируют вместе как "L3/L4" или просто "L4", потому что атаки на этих уровнях похожи по природе - они работают с сырыми пакетами.

L3/L4 атаки: грубая сила

Атаки на уровнях 3 и 4 - это классический DDoS в его самой простой форме. Идея элементарная: завалить канал или ресурсы сервера огромным количеством трафика. Здесь не нужна хитрость - нужен объём.

SYN Flood

Одна из самых старых и до сих пор одна из самых распространённых атак. Работает так: когда вы подключаетесь к серверу по TCP, происходит трёхсторонний handshake - SYN, SYN-ACK, ACK. При SYN flood атакующий отправляет тысячи SYN-пакетов, но никогда не завершает handshake. Сервер выделяет память под каждое полуоткрытое соединение и в какой-то момент просто захлёбывается.

Для Minecraft-серверов SYN flood особенно неприятен, потому что каждое новое подключение игрока начинается с TCP handshake. Когда таблица полуоткрытых соединений переполнена, настоящие игроки просто не могут подключиться - сервер не способен обработать их SYN.

UDP Flood

UDP - протокол без установления соединения. Нет handshake, нет подтверждений. Отправил пакет - и всё. Это делает UDP идеальным инструментом для объёмных атак: атакующий генерирует гигабайты UDP-трафика в секунду, забивая входящий канал сервера.

Minecraft использует TCP для основного игрового трафика, но многие серверы также слушают UDP (query port, Voice Chat, плагины). Даже если ваш сервер не использует UDP, атака всё равно забьёт канал - пакеты-то приходят на сетевой интерфейс, и полоса расходуется до того, как ваш файрвол их отбросит.

Подробнее о разнице между протоколами - в статье про TCP vs UDP атаки.

Amplification-атаки

Это хитрая вариация UDP flood. Атакующий отправляет маленький запрос на промежуточный сервер (DNS, NTP, memcached), подставляя IP-адрес жертвы как адрес отправителя. Промежуточный сервер отвечает жертве ответом, который в десятки раз больше исходного запроса.

DNS amplification даёт коэффициент усиления примерно 50x. Memcached - до 51000x. Это значит, что атакующий с каналом 100 Мбит может генерировать атаку в 5 Гбит через DNS или буквально террабиты через memcached.

ICMP Flood и прочее

ICMP flood (он же Ping flood), TCP RST flood, ACK flood - это всё вариации одной темы. Завалить сервер или канал пакетами определённого типа. Отличаются деталями реализации, но суть одна: объём, объём, объём.

Общие черты L3/L4 атак

  • Объёмные. Измеряются в Gbps (гигабиты в секунду) или Mpps (миллионы пакетов в секунду).
  • Тупые (в хорошем смысле). Не нужно знать ничего о приложении - просто лить трафик.
  • Относительно легко детектируются. Аномальный всплеск трафика виден на графиках.
  • Атакуют инфраструктуру. Цель - канал, сетевое оборудование, стек TCP на сервере.

L7 атаки: умная война

Layer 7 - это уровень приложений. Здесь живут HTTP, DNS, и - что важно для нас - протокол Minecraft. L7 атаки кардинально отличаются от L4: вместо грубой силы они используют хитрость.

HTTP Flood

Классическая L7 атака для веб-серверов. Атакующий отправляет тысячи полностью валидных HTTP-запросов. С точки зрения сети это легитимный трафик - правильные TCP-соединения, корректные HTTP-заголовки. Но каждый запрос заставляет сервер выполнять работу: читать из базы, рендерить страницу, тратить CPU.

Для Minecraft это менее актуально (веб-панель и API обычно не под таким давлением), но если у вас есть Dynmap, Plan или другая веб-панель на том же сервере - HTTP flood может его перегрузить.

Slowloris

Красивая атака, названная в честь медленного лори. Идея: открыть множество HTTP-соединений и отправлять данные очень медленно, не давая серверу закрыть соединение. Каждое соединение занимает слот на сервере, и в какой-то момент легитимные пользователи не могут подключиться, потому что все слоты заняты медленными "зомби"-соединениями.

Это атака с минимальным трафиком. Буквально килобиты в секунду. Но эффект разрушительный - сервер становится недоступен.

Bot Joins - бот-джойны в Minecraft

Вот здесь начинается самое интересное для владельцев Minecraft-серверов. Bot join - это L7 атака, специфичная для Minecraft-протокола. Атакующий запускает тысячи фейковых клиентов, которые подключаются к серверу, проходят handshake, иногда даже авторизуются - и тратят ресурсы сервера.

Каждый бот-джойн заставляет сервер:

  • Принять TCP-соединение
  • Обработать Minecraft handshake
  • Проверить никнейм в системе авторизации
  • Возможно загрузить чанки вокруг спавна
  • Выделить память под игрока

Когда ботов тысячи, сервер уходит в ступор. TPS падает до нуля, настоящие игроки лагают или вылетают. При этом на уровне L4 всё выглядит нормально - это же обычные TCP-соединения на порт 25565.

Crafted Packets - невалидные пакеты

Ещё один вид L7 атаки: отправка специально сконструированных пакетов, которые формально соответствуют Minecraft-протоколу, но содержат неожиданные данные. Например, слишком длинные строки, отрицательные значения в полях, где ожидаются положительные, или пакеты в неправильном порядке.

Цель - вызвать exception в серверном коде, спровоцировать утечку памяти или просто заставить сервер тратить CPU на обработку мусора. Некоторые эксплойты такого типа могут вообще крашнуть сервер с одного пакета - если в коде есть необработанная ошибка.

Протокол-специфичные атаки

Minecraft-протокол имеет свои особенности, которые атакующие активно эксплуатируют:

  • Status ping flood - массовые запросы статуса сервера (мотд, онлайн). Каждый запрос легитимен, но в массе перегружает.
  • Login flood - множественные попытки входа, которые заставляют сервер обращаться к Mojang API для проверки.
  • Chunk exploit - манипуляции с запросами чанков, которые заставляют сервер генерировать и отправлять огромные объёмы данных.

Общие черты L7 атак

  • Низкий трафик. Могут работать на мегабитах или даже килобитах в секунду.
  • Мимикрия. Выглядят как легитимный трафик. Каждый отдельный запрос неотличим от реального.
  • Сложно детектируются. Нельзя просто посмотреть на объём трафика - нужно анализировать содержимое.
  • Атакуют логику приложения. Цель - CPU, память, специфичные слабости в коде.
  • Требуют знания протокола. Атакующий должен понимать, как работает целевое приложение.

Как отличается защита на каждом уровне

Раз атаки разные, логично что и защита должна быть разной. И это действительно так - L4 и L7 защита используют фундаментально разные подходы.

L3/L4 защита

На этом уровне всё про скорость. Пакеты нужно анализировать и отбрасывать до того, как они достигнут приложения. Основные инструменты:

XDP/eBPF. Фильтрация на уровне сетевого драйвера, ещё до того, как пакет попадёт в стек TCP/IP ядра. Это самый быстрый способ фильтрации - работает на линейной скорости, миллионы пакетов в секунду. MineGuard использует именно эту технологию для L4-фильтрации.

SYN cookies. Механизм, который позволяет обрабатывать SYN-пакеты без выделения памяти. Вместо того чтобы запоминать каждое полуоткрытое соединение, сервер кодирует информацию в sequence number. Если клиент реальный и пришлёт ACK - соединение установится. Если нет - никакие ресурсы не потрачены.

Rate limiting. Ограничение количества пакетов с одного IP или подсети. Простой, но эффективный метод - если один IP шлёт 100 000 пакетов в секунду, это явно не легитимный игрок.

Blackhole / null-route. Крайняя мера: весь трафик на атакуемый IP отправляется "в никуда". Атака прекращается, но и сервер становится недоступен. Используется провайдерами, когда атака угрожает другим клиентам.

Traffic scrubbing. Трафик перенаправляется через очистительный центр, где плохие пакеты отсеиваются, а хорошие пропускаются к серверу. Это дорого, но позволяет обрабатывать атаки в сотни гигабит.

L7 защита

Здесь нужен совсем другой подход. Нельзя просто считать пакеты - нужно понимать, что внутри.

Протокол-валидация. Проверка что каждый пакет соответствует протоколу Minecraft. Правильная структура, корректные значения полей, правильная последовательность пакетов. Невалидные пакеты отбрасываются мгновенно.

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

Challenge-response. Перед тем как пропустить клиент к серверу, защита задаёт ему "вопрос" - что-то, что настоящий клиент обработает автоматически, а простой бот не сможет. Для Minecraft это может быть модификация handshake или проверка определённых данных при подключении.

Bot detection. Комбинация эвристик для определения, является ли подключение ботом: скорость отправки пакетов, версия клиента, поведение при подключении, IP-репутация.

Connection throttling. Ограничение скорости подключений с анализом контекста. Не просто "не больше N подключений в секунду", а "не больше N подключений в секунду от клиентов с подозрительным поведением".

Почему нужны оба уровня защиты

Это ключевой момент, который многие пропускают. Защита только на L4 или только на L7 - это как запирать входную дверь, но оставлять окна нараспашку.

Только L4 защита

Вы отлично справитесь с SYN flood и UDP flood. Амплификация? Не проблема. Но когда к вашему серверу подключаются 5000 ботов через полностью легитимные TCP-соединения - L4 защита их даже не заметит. Каждый бот прошёл handshake, отправил корректный SYN, получил SYN-ACK, ответил ACK. Всё чисто на уровне транспорта. А сервер лежит, потому что 5000 фейковых Minecraft-клиентов сожрали всю память.

Только L7 защита

Вы будете блокировать бот-джойны и невалидные пакеты. Но когда на вас льётся 50 Gbps UDP flood, ваша L7 защита даже не увидит этот трафик - он забьёт канал до того, как дойдёт до вашего приложения. L7-анализ работает с данными внутри пакетов, но если пакеты вообще не доходят из-за забитого канала - анализировать нечего.

Правильный подход: многослойная защита

Трафик сначала проходит через L3/L4 фильтр, который отсекает объёмные атаки, мусорный трафик, пакеты с поддельных IP. То, что прошло через первый фильтр, попадает на L7-анализатор, который проверяет содержимое - валидность протокола, поведение клиента, rate limiting на уровне приложения.

Это как аэропорт: сначала проверяют паспорт (L4 - есть ли у вас право вообще сюда зайти), потом проверяют багаж (L7 - что именно вы несёте). Если убрать любую из проверок, безопасность рушится.

Реальные примеры из гейминга

Пример 1: Classix UDP flood

Классический сценарий. Конкурирующий сервер заказывает DDoS на Minecraft-проект. Атака - чистый UDP flood на 30-40 Gbps. Хостер сервера видит перегрузку канала и ставит null-route на IP. Сервер уходит в офлайн на час-два, пока владелец разбирается с хостером. Решение: L4 защита через прокси с достаточной полосой пропускания. Трафик проходит через фильтр, UDP мусор отсеивается, легитимный TCP-трафик Minecraft проходит к серверу.

Пример 2: Bot join атака

Сервер с хорошей L4-защитой. UDP и SYN flood фильтруются. Но атакующий переключается на бот-джойны: 3000 фейковых Minecraft-клиентов подключаются одновременно. Каждый проходит TCP handshake (L4 фильтр пропускает - соединение легитимное), отправляет Minecraft handshake packet, начинает процесс авторизации. Сервер пытается обработать 3000 одновременных логинов, TPS падает до 1-2, игроки лагают и вылетают. Решение: L7 фильтр, который анализирует Minecraft handshake, определяет ботов по поведению и блокирует их до того, как они нагрузят сервер.

Пример 3: Комбинированная атака

Самый неприятный вариант. Атакующий одновременно запускает UDP flood на 20 Gbps (чтобы нагрузить L4 фильтр), SYN flood (чтобы забить таблицу соединений) и бот-джойны (чтобы нагрузить сервер на уровне приложения). Каждая атака по отдельности может быть не критичной, но вместе они создают давление на всех уровнях. Без многослойной защиты хотя бы один вектор пробьётся.

Пример 4: Crafted packet exploit

Атакующий находит специфичную уязвимость в плагине на сервере. Отправляет один (!) специально сконструированный пакет, который вызывает бесконечный цикл в обработчике. Сервер крашится. Здесь не нужны ни гигабиты, ни тысячи ботов - достаточно одного пакета, но правильно собранного. L4 защита его пропустит (это обычный TCP-пакет с данными). Только L7-валидация протокола может поймать такое - проверка что содержимое пакета корректно и безопасно.

На что смотреть при выборе защиты

Когда выбираете DDoS-защиту для игрового сервера, задайте несколько вопросов:

Какой объём L4-фильтрации? Измеряется в Gbps и Mpps. Для небольшого сервера 10-20 Gbps достаточно. Для серьёзного проекта нужно 100+ Gbps. Смотрите не только на пиковую ёмкость, но и на гарантированную.

Есть ли L7-анализ? Конкретно для Minecraft-протокола. Общий WAF (Web Application Firewall) для этого не подходит - нужна защита, которая понимает протокол Minecraft.

Какая задержка? Фильтрация добавляет latency. Для игр это критично. Хорошая защита добавляет 1-5 мс. Плохая - 20-50 мс. Разница огромна для PvP.

Как обрабатываются ложные срабатывания? Если защита блокирует настоящих игроков - это хуже, чем вообще не иметь защиты. Спросите про false positive rate.

Есть ли защита от комбинированных атак? Как система справляется, когда L4 и L7 атаки идут одновременно?

Итого

Layer 4 и Layer 7 - это не два варианта одного и того же. Это разные категории атак, которые работают на разных принципах и требуют разных методов защиты.

L3/L4 атаки - это грубая сила. Гигабиты трафика, миллионы пакетов. Защита работает на уровне сети: фильтрация пакетов, rate limiting, XDP/eBPF.

L7 атаки - это точечное оружие. Мало трафика, но каждый запрос бьёт по логике приложения. Защита работает на уровне протокола: валидация, поведенческий анализ, challenge-response.

Для нормальной защиты Minecraft-сервера нужны оба уровня. Не "или-или", а "и-и". L4 отсекает мусор, L7 фильтрует то, что прошло через первый слой и пытается атаковать на уровне приложения.

Если ваша текущая защита работает только на одном из уровней - вы защищены только наполовину. И атакующие это знают.


Proteja Seu Servidor de Ataques DDoS

Proteção gratuita com configuração em 5 minutos. 1 TB de tráfego incluso.

Experimentar Grátis


Artigos Relacionados