Что вас ждет в статье:
Введение
1. Модель OSI и уязвимости нижних уровней
1.1. Канальный уровень (L2)
1.2. Сетевой уровень (L3)
1.3. Транспортный уровень (L4)
2. Механизмы DDoS-атак: как это ломается на практике
2.1. Volumetric и Protocol: два способа убить сервер
2.2. Механика SYN-flood: исчерпание таблицы соединений
2.3. Механика ICMP-flood: Истощение ресурсов CPU
2.4. Уровень L2 и MAC-флуд: Переполнение CAM-таблицы коммутатора
3. Методология детектирования и подготовка к работе с IDS Suricata
4. Архитектура интеграции и логика написания правил
Заключение
Введение
Представьте, что вы открыли самый крутой в городе ресторан. Вы наняли шеф-повара, продумали меню и сделали идеальный сайт для бронирования столиков. Но в день открытия на улице перед дверью встает толпа нанятых кем-то людей. Они не заходят внутрь, ничего не покупают, они просто стоят плотной стеной. В итоге ваши реальные гости даже не могут подойти к дверям.Примерно так работает DDoS-атака. Цель — забить мусором каналы связи или перегрузить сетевое железо так, чтобы они просто было недоступно.
В этой статье мы простыми словами разберем, как устроены эти атаки изнутри, и заложим базу для того, чтобы во второй части поймать их с помощью полезного инструмента — Suricata.
1. Модель TCP/IP и уязвимости нижних уровней
Чтобы понять механику атак, достаточно представить стек протоколов TCP/IP. В этой структуре каждый уровень выполняет свою задачу, а процессы на верхних этажах полностью изолированы от технических деталей нижних. Например, веб-приложение обрабатывает пользовательские данные и не участвует в процессах кадрирования, маршрутизации или физической коммутации. Однако любая критическая аномалия на сетевом, транспортном (L3–L4) или канальном (L2) уровнях работает как цепная реакция: она мгновенно ломает доставку пакетов, из-за чего прикладной уровень со всей его логикой и интерфейсами полностью теряет связь с внешним миром.В этой статье мы спустимся на нижние уровни сетевого стека и пройдем последовательно снизу вверх.
| L4 | Транспортный (TCP / UDP) |
| L3 | Сетевой (IP / ICMP) |
| L2 | Канальный (Ethernet) |
Важная мысль для понимания: Каждый раз, когда вы отправляете сообщение в сеть, оно проходит процедуру инкапсуляции. Ваше сообщение оборачивается в TCP-сегмент (L4), тот упаковывается в IP-пакет (L3), а IP-пакет запечатывается в Ethernet-кадр (L2). На каждом из этих уровней есть методы для DDoS.
1.1. Канальный уровень (L2)
Уровень L2 — это ваша домашняя или офисная локальная сеть. Здесь устройства еще ничего не знают про глобальный интернет. Они общаются внутри одного помещения, используя вшитые заводские MAC-адреса.
Главный начальник на этом уровне — коммутатор. Это умный регулировщик. Когда компьютер А хочет отправить данные компьютеру Б, коммутатор смотрит в свою внутреннюю шпаргалку — CAM-таблицу — и перенаправляет пакет строго в нужный физический порт.
В чем уязвимость: Коммутаторы по своей природе невероятно доверчивы. У них нет паспортистов или фейсконтроля. Если в порт прилетает кадр, свитч безоговорочно верит тому, что написано в полях «Отправитель» и «Получатель». Кроме того, память для CAM-таблицы строго ограничена.
Главные векторы атак:
1. MAC-flood: при реализации этого вектора в порт коммутатора направляется высокоскоростной поток кадров со случайно сгенерированными, несуществующими MAC-адресами отправителя, и, соответственно, память коммутатора мгновенно забивается этим мусором. Что делает свитч, когда его таблица переполнена? Он переходит в режим защиты и превращается в глупый хаб (концентратор) — начинает транслировать вообще весь входящий трафик на вообще все свои порты. В итоге, это не только парализует локальную сеть лавиной паразитного трафика, но и позволяет злоумышленнику, находящемуся в том же сегменте, беспрепятственно перехватывать и анализировать чужие конфиденциальные данные.
2. ARP-spoofing: чтобы узнать MAC-адрес соседа по IP, устройства шлют в сеть запрос: «У кого IP 192.168.1.1? Отзовитесь!» - arp request. При атаке в сеть отправляется ложный ответ: «Этот IP у меня, вот мой MAC!». Вся сеть начинает отправлять пакеты на компьютер злоумышленника, думая, что шлет их на роутер, а в итоге трафик всей сети начинает идти через устройство злоумышленника, которое выдает себя за легитимный шлюз. Законные сервисы теряют связь, а личные данные перехватываются на лету.
3. STP-атаки: служебный протокол STP защищает сеть от опасных петель трафика. При атаке на этот протокол в сеть засылаются фейковые управляющие кадры с максимальным приоритетом. Остальное сетевое оборудование верит этой информации и начинает считать атакующий компьютер «самым главным коммутатором». Вся сеть замирает и начинает судорожно перестраивать маршруты с нуля. Пока железки разбираются в новой карте дорог, передача любых пользовательских данных полностью останавливается на несколько минут.
1.2. Сетевой уровень (L3)
Задача этого уровня — вытащить пакет из локальной сети и доставить его через тысячи километров и сотни чужих серверов прямо к цели.В чем уязвимость: Протокол IP создавался в эпоху, когда в интернете все друг друга знали. В заголовке IP-пакета есть поле «IP отправителя», но протокол не умеет проверять, действительно ли пакет отправлен с этого адреса. Это открывает дорогу для эксплуатации доверия.
Главные векторы атак:
1. IP Spoofing: Злоумышленник генерирует трафик, но в поле «Отправитель» прописывает IP-адрес своей жертвы. Зачем? Чтобы отправить короткие запросы на миллионы серверов по всему миру, и эти миллионы серверов одновременно ответили жертве. Жертву просто сдувает лавиной ответов, которые она не заказывала, если, конечно, на обратном пути не встретятся препятствия в виде ферволов.
2. ICMP-flood: Протокол ICMP нужен для диагностики (команда ping). Но если отправить на сервер не один пинг, а миллиард пакетов огромного размера с кучи зараженных компьютеров, сетевая карта сервера захлебнется.
3. IP Fragmentation Flood: если пакет слишком большой, роутеры режут его на кусочки (фрагменты). Атакующий узел намеренно отправляет куски пакетов со сломанной логикой — например, со смещением, которое накладывается друг на друга. Операционная система жертвы тратит колоссальные ресурсы процессора, пытаясь собрать этот безумный пазл, и в итоге может намертво зависнуть.
1.3. Транспортный уровень (L4)
На четвертом уровне данные превращаются в структурированный диалог. Здесь живут два главных протокола: TCP и UDP.Почему этот уровень — лакомый кусок для атак? Чтобы начать общение по TCP, клиент и сервер должны выполнить трехэтапное рукопожатие (3-way handshake). Сервер обязан быть вежливым: на каждый запрос на подключение он должен выделить кусочек своей оперативной памяти, чтобы помнить, с кем он сейчас пытается подружиться.
Как этим пользуются:
1. SYN-flood: посылается пакет SYN. Сервер выделяет память, записывает сессию в буфер и отвечает пакетом SYN-ACK. Однако финальный пакет ACK от клиента так и не поступает. Сервер вынужден удерживать выделенные ресурсы памяти в режиме ожидания. В условиях атаки поток таких незавершенных запросов исчисляется миллионами. В результате доступный буфер под новые подключения полностью исчерпывается, и система начинает отбрасывать запросы легитимных пользователей.
2. UDP-flood: В UDP нет рукопожатий. Хакер просто засыпает сервер миллионами UDP-пакетов на случайные порты. Серверу приходится тратить ресурсы: принять пакет, распаковать, посмотреть на порт, понять, что за этим портом ни одно приложение не следит, и сгенерировать ICMP-ответ об ошибке. Канал связи полностью забивается служебным мусором.
3. RST/ACK-flood: Хакер отправляет миллионы фальшивых пакетов с флагами сброса соединения (RST) или подтверждения (ACK). Межсетевые экраны на стороне жертвы вынуждены сверять каждый такой пакет со своей таблицей активных сессий. База данных фаервола перегружается, и он сам становится точкой отказа, блокируя весь трафик.
Схема трехэтапного рукопожатия TCP и атака SYN-flood
2. Механизмы DDoS-атак: разбор методов
По сути, есть два способа положить сервер — либо залить канал под завязку, либо заставить ядро ОС захлебнуться. Всё остальное — это вариации и комбинации этих двух принципов.2.1. Volumetric и Protocol: два способа убить сервер
Все атаки нижних уровней можно глобально разделить на два типа по характеру воздействия: объемные (Volumetric) и протокольные. Они преследуют разные цели и используют разные механизмы истощения ресурсов.Volumetric-атаки: это классическое оружие атакующих. Цель — тупо забить пропускную способность вашего интернет-канала. Представьте, что у вас труба шириной 1 Гбит/с, а вам туда заливают 10 Гбит/с. Абсолютно неважно, насколько мощный у вас сервер — пакеты легитимных пользователей просто физически дропаются еще на стороне провайдера, так как они не влезают в трубу.
Для таких атак идеально подходят уровни L3-L4, особенно протокол UDP с подменой IP. Здесь часто применяется метод усиления (Amplification):
Хакер отправляет короткий запрос к уязвимому серверу в интернете, а сервер-усилитель возвращает ответ, который в 50–100 раз превышает размер запроса.
Иногда хакеры идут другим путем. Они не забивают канал гигабитами трафика, а берут количеством пакетов. Эта метрика называется pps (packets per second — пакетов в секунду).
Если серверу прилетает миллион микроскопических пакетов по 64 байта, объем трафика составит всего около 64 Мбайт. Канал свободен. Но операционная система на сервере должна обработать каждый пакет. Процессор моментально уходит в 100% загрузки, обрабатывая сетевой шум, и сервер перестает отвечать на реальные запросы.
На схеме наглядно видно, как утилизация процессора сервера зависит от количества прилетающих пакетов, а не от их веса в мегабайтах. В зоне baseline сеть находится в покое: роутер и коммутатор передают обычный объем служебных кадров. В момент начала атаки (burst) график пакетной плотности уходит вверх, превращаясь в критический пик (peak). В этот момент счетчик на сетевом интерфейсе сервера фиксирует тысячи pps — ядро ОС перегружается аппаратными прерываниями, пытаясь обработать эту лавину, и сервер перестает отвечать.
2.2. Механика SYN-flood: исчерпание таблицы соединений
Протокол TCP — это джентльменское соглашение. Перед обменом данными клиент и сервер выполняют процедуру трехэтапного рукопожатия (3-way handshake). В штатном режиме это выглядит так:- Клиент ⭢ Сервер: отправляется пакет с установленным флагом SYN (Synchronize) — «Привет, я хочу открыть сессию, вот мой начальный порядковый номер пакета».
- Сервер ⭢ Клиент: сервер выделяет структуру памяти под это соединение, записывает его в специальную очередь полуоткрытых соединений (Backlog queue) и отвечает пакетом SYN-ACK — «Привет, запрос принял, выделил ресурсы, жду твоего подтверждения».
- Клиент ⭢ Сервер: клиент отправляет финальный пакет ACK (Acknowledge) — «Отлично, сессия установлена, начинаем передачу». Только после этого соединение переходит в статус ESTABLISHED.
При SYN-флуде злоумышленник отправляет лавину SYN-пакетов, но в поле IP-отправителя прописывает несуществующие или случайные адреса (IP Spoofing). Сервер послушно выделяет ресурсы под каждый запрос, отправляет SYN-ACK в пустоту и переводит соединение в статус SYN_RECEIVED.
По спецификации, сервер обязан ждать финального ACK от клиента довольно долго — обычно от 30 до 120 секунд (пока не сработает тайм-аут). Хакер успевает отправить сотни тысяч таких запросов за секунду. Размер очереди Backlog жестко ограничен операционной системой (например, параметром tcp_max_syn_backlog в Linux). Как только лимит очереди исчерпан, сервер начинает отбрасывать любые новые SYN-пакеты. Для внешнего мира сайт или сервис мгновенно умирает.
2.3. Механика ICMP-flood: Истощение ресурсов CPU
Протокол ICMP предназначен для передачи служебных сообщений и диагностики. Самый популярный тип ICMP-сообщения — Echo Request, который мы отправляем командой ping, и ответ на него — Echo Reply.В случае ICMP-флуда ботнет заваливает целевой IP-адрес непрерывным потоком запросов Echo Request. Уязвимость кроется в самой логике обработки протокола на уровне ядра ОС:
- Каждый прилетевший ICMP-пакет генерирует прерывание сетевой карты.
- Ядро ОС обязано приостановить текущие задачи процессора, переключить контекст, разобрать заголовок пакета, проверить контрольную сумму.
- Затем ядро должно сформировать зеркальный ответный пакет (Echo Reply), выделить под него ресурсы, вычислить новую контрольную сумму и отправить обратно.
Если хакер задействует метод отражения, он отправляет ICMP-запросы на широковещательные адреса сторонних сетей, подменив адрес отправителя на IP жертвы. Тогда тысячи компьютеров одновременно начинают отвечать жертве.
2.4. Уровень L2 и MAC-флуд: Переполнение CAM-таблицы коммутатора
Вернёмся в локальную сеть. Коммутаторы — это устройства уровня L2, и, чтобы не пересылать трафик на все порты подряд, коммутатор строит карту сети — CAM-таблицу. В ней записывается простое соответствие: Порт №1 ⭢ MAC-адрес компьютера.Механика переполнения таблицы:
Коммутатор конфигурируется динамически: он смотрит на поле "Source MAC" в каждом приходящем кадре и записывает его в таблицу. Хакер использует утилиту (например, macof) и начинает генерировать миллионы кадров в секунду, в каждом из которых генерируется абсолютно случайный, несуществующий MAC-адрес отправителя.
Память CAM-чипа на коммутаторе физически ограничена (обычно от нескольких тысяч до десятков тысяч записей). За пару секунд атаки таблица заполняется мусором полностью. Сетевая железка оказывается в тупике: ей нужно передать легитимный пакет, но в CAM-таблице нет места, чтобы проверить, где находится получатель.
В этот момент срабатывает встроенный алгоритм безопасности Fail-Open. Чтобы сеть не заблокировалась полностью, коммутатор откатывается к состоянию концентратора. Он начинает дублировать вообще каждый входящий пакет на вообще все свои физические порты.
Последствие 1: Сетевые интерфейсы всех подключенных устройств забиваются чужим трафиком.
Последствие 2: Хакер, находясь в этой же сети, включает режим promiscuous mode на своей сетевой карте и начинает беспрепятственно читать весь чужой трафик.
3. Методология детектирования и подготовка к работе с IDS Suricata
Чтобы выявить DDoS, не нужно смотреть на каждый пакет. Вычислить такую атаку можно, например, по трем ключевым вещам:1. В штатном режиме соотношение пакетов SYN к пакетам ACK или FIN стремится к балансу. Если график SYN улетает вертикально вверх, а остальные показатели лежат на нуле — идет SYN-flood.
2. Профили реальных клиентов всегда уникальны (разные размеры пакетов, значения TTL и Window Size). Если на сервер летит поток пакетов, у каждого из которых строго одинаковая длина (например, ровно 120 байт) — это признак работы автоматического генератора трафика.
3. Резкая смена структуры трафика, когда привычные и легитимные веб-запросы (TCP) за считанные секунды полностью вытесняются сплошным потоком мусорных пакетов ICMP или UDP, летящих на случайные порты.
Почему стандартного инструментария недостаточно?
При фиксации атаки администраторы часто совершают фатальную ошибку: запускают утилиты глубокого анализа вроде tcpdump или Wireshark. Снифферы предназначены для поштучного ручного разбора данных. Они пытаются перехватить, декодировать и сохранить на диск каждый пакет. Под нагрузкой в сотни тысяч pps сниффер мгновенно исчерпает ресурсы процессора и оперативной памяти, окончательно заблокировав сервер.
Для высокоскоростного анализа трафика отлично подойдет Suricata — классический представитель систем обнаружения вторжений (IDS, от англ. Intrusion Detection System). Она спроектирована под жесткий пакетный поток, имеет кольцевые буферы памяти и распределяет нагрузку напрямую по ядрам процессора. Suricata проверяет структуру заголовков на лету прямо в ОЗУ, не выводя сырые логи на экран. Ее логика совмещает сигнатурный анализ (поиск известных маркеров хакерских утилит в заголовках) и поведенческий анализ (фиксацию частотных аномалий, например, превышение лимита запросов с одного IP за секунду).
4. Архитектура интеграции и логика написания правил
Теперь — как это настроить и заставить работать. Для начала определимся, куда ставить Suricata в сети.Режим IDS (пассивный): на коммутаторе настраивается зеркалирование портов (SPAN). Копия трафика отправляется на выделенный интерфейс, где Suricata анализирует его в фоновом режиме. Плюс: если сервер с IDS упадёт, основная сеть продолжит работать.
Режим IPS (активный): Suricata встраивается в ядро Linux через NFQUEUE. Весь трафик проходит сквозь неё. Это позволяет мгновенно сбрасывать вредоносные пакеты, блокируя атаку на подлёте.
Синтаксическая структура правил Suricata:
Движку нужны базы знаний — глобальные сигнатуры (например, ET Open) или кастомные правила.
Заключение
Мы разобрали логику DDoS на L2-L4 сетевых уровнях, изучили метрики аномалий и поняли, как системы класса IDS концептуально подходят к перехвату пакетного флуда.Не забывайте про вторую часть! Там мы перейдем от теории к делу. Мы поднимем простой стенд прямо на вашем компьютере, создадим свои кастомные правила в файле local.rules и на пару минут побудем в роли злоумышленников. Только простые шаги и готовые команды.
Продолжение здесь
Последнее редактирование: