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


На одном проекте для финтех-компании мы согласовали стресс-тест на 50k RPS, запустили генерацию трафика с пяти нод - и через 40 секунд получили звонок от upstream-провайдера. Он отключил канал целиком: наш трафик не отличался от реальной атаки. Тест продолжался меньше минуты, разбор инцидента с провайдером - три дня. Причина банальна: никто не предупредил провайдера и неправильно замаршрутизировали тестовый трафик.

С тех пор каждое DDoS стресс тестирование у нас начинается не с выбора инструмента, а с юридического и организационного пакета. Эта статья - для тех, кто понимает, зачем нужна нагрузочная проверка, но хочет провести её без последствий для бизнеса и для собственной свободы.

Юридическая граница между стресс-тестом и атакой​

Разница между легальным нагрузочным тестированием DDoS и уголовно наказуемым деянием - один документ. Без подписанного Rules of Engagement (ROE) любая генерация аномального трафика в адрес чужого IP формально подпадает под статью 272 или 273 УК РФ. Даже если "чужой" IP принадлежит вашему заказчику.

Минимальный пакет ROE:
  1. Перечень целевых IP-адресов и доменов - только то, что входит в scope. Поддомены, CDN-адреса, API-шлюзы перечисляются явно. Что не указано - не тестируется.
  2. Временное окно - конкретные даты и часы. Провайдеры и SOC заказчика должны знать точное расписание.
  3. Максимальные параметры нагрузки - потолок по RPS, Mbps, количество одновременных соединений. Превышение = нарушение scope.
  4. Процедура экстренной остановки (Kill Switch) - кто принимает решение, по какому каналу связи, за сколько секунд трафик должен прекратиться.
  5. Уведомление третьих сторон - upstream-провайдер, облачный хостинг, CDN-вендор. Без уведомления провайдер имеет полное право заблокировать канал - как в кейсе из вступления.
По данным EN-обзора DDoS-платформ от UZCert, облачные провайдеры (AWS, Azure, GCP) требуют отдельной авторизации перед любым нагрузочным тестированием. AWS предлагает форму "Simulated Events" для согласования стресс-тестов на инфраструктуре клиента. Проигнорировали этот шаг - получите автоматическую блокировку аккаунта средствами AWS Shield. Без предупреждения и без разговоров.

Отдельная история - Cloudflare и аналогичные CDN. Если тестируемый ресурс стоит за CDN, а вы генерируете трафик на edge-сервер без уведомления вендора, вы фактически атакуете инфраструктуру третьей стороны. Это уже выходит за рамки ROE, даже если заказчик подписал разрешение на свой домен.

Архитектура стенда и подготовка к тесту​

Требования к окружению​

Прежде чем запускать первый пакет, убедитесь, что инфраструктура тестирования тянет:
  • Генераторы трафика: минимум 2-5 виртуальных машин (4 vCPU, 8 ГБ RAM, SSD, сетевой интерфейс 1 Gbps каждый). Для волюметрических тестов свыше 10 Gbps - выделенные bare-metal серверы или облачные инстансы c10-класса.
  • ОС: Ubuntu 22.04 LTS или Debian 12 - стабильные ядра с предсказуемым поведением сетевого стека.
  • Сетевая связность: генераторы в отдельном сегменте от production, с маршрутизацией трафика через контролируемый канал. Тестировать "через интернет" можно, но только после уведомления всех транзитных провайдеров.
  • Мониторинг: отдельный стек (Prometheus + Grafana или аналог) для сбора метрик с целевой инфраструктуры в реальном времени. SIEM заказчика настроен на запись всех событий в период теста.
  • Канал связи с заказчиком: отдельный чат или голосовая линия для экстренной координации. Не email - время реакции на kill switch не должно превышать 30 секунд.
Стенд моделирует поведение ботнета - распределённые источники с разными IP-адресами. В терминологии MITRE ATT&CK это техника Botnet (T1583.005, Resource Development): злоумышленник арендует вычислительные ресурсы для генерации трафика. На стенде - та же архитектура, но в контролируемых условиях.

Базовые замеры (baseline)​

Согласно NIST CSF 2.0 (DE.AE-01), перед любым стресс-тестом нужно зафиксировать baseline - нормальное состояние инфраструктуры: латентность, утилизацию CPU и RAM, пропускную способность, количество активных соединений, среднее время отклика приложения. Без baseline вы не сможете оценить деградацию - только зафиксируете момент полного отказа. А это куда менее информативно.

Baseline снимается в рабочие часы с реальной пользовательской нагрузкой. Идеально - 24-часовой срез с разбивкой по часам.

L3/L4: волюметрическое и протокольное тестирование​

1782787687859.webp

Тестирование на сетевом уровне моделирует два класса атак из MITRE ATT&CK:
  • Direct Network Flood (T1498.001, Impact) - прямое насыщение канала объёмом трафика: UDP flood, ICMP flood, фрагментированные пакеты.
  • Reflection Amplification (T1498.002, Impact) - отражённые атаки через DNS, NTP, SSDP, Memcached. На стенде вы не используете чужие рефлекторы, а эмулируете amplified-трафик напрямую.
[Применимо: внешний и внутренний пентест; тестирование upstream-каналов, балансировщиков, межсетевых экранов]

Инструменты и команды:

Для SYN flood - hping3, утилита из стандартного набора Kali Linux (последнее обновление: 2014, проект неактивен, но стабилен и используется повсеместно):
Bash:
# SYN flood на порт 80 с рандомизацией source IP
hping3 -S --flood -V -p 80 --rand-source <target_ip>
# SYN flood с контролируемой скоростью (100 пакетов/сек)
hping3 -S -p 443 -i u10000 --rand-source <target_ip>
# UDP flood на DNS-порт
hping3 --udp -p 53 --flood --rand-source <target_ip>
Тут есть подвох: флаг --rand-source генерирует spoofed source IP. Для реалистичности - отлично. Но работает только в средах без BCP38 (anti-spoofing) на маршрутизаторах. В облаке spoofing заблокирован на уровне гипервизора - тест с --rand-source на AWS EC2 просто не отправит пакеты. Для облака используйте реальные IP нескольких генераторов без спуфинга.

Для более тонкого контроля над пакетами - Scapy (Python-библиотека). Scapy позволяет конструировать произвольные пакеты: фрагментированные UDP, malformed TCP с нестандартными флагами, пакеты с определённым TTL для тестирования поведения маршрутизаторов.

Ограничения L3/L4-тестирования​

Волюметрический тест показывает поведение сетевой инфраструктуры, но у него есть фундаментальные ограничения, и о них нужно знать заранее:
  • Stateful firewall (Palo Alto, FortiGate, Check Point) - отбрасывает SYN flood до приложения. Тест покажет предел самого firewall, но не приложения за ним.
  • Cloud-based Anti-DDoS (Cloudflare, AWS Shield Advanced, Qrator) - scrubbing-центры поглощают волюметрический трафик на периметре. Тестировать L3/L4 на ресурсе за scrubbing-центром без координации с вендором бессмысленно: вы увидите предел канала до scrubbing-центра, а не защищённую инфраструктуру.
  • Пропускная способность тестового стенда - 5 машин по 1 Gbps = потолок около 5 Gbps. Рекордная DDoS-атака 2025 года достигла 31.4 Tbps (по данным UZCert). Для тестирования на таких объёмах нужны коммерческие платформы с собственной инфраструктурой.

L7: тестирование прикладного уровня​

1782787711865.webp

Прикладной уровень - самый опасный в реальных атаках и самый информативный при тестировании. Здесь моделируются техники MITRE ATT&CK:
  • Endpoint Denial of Service (T1499, Impact) - общий класс.
  • Service Exhaustion Flood (T1499.002) - исчерпание пула соединений, переполнение очередей.
  • Application Exhaustion Flood (T1499.003) - атака на логику приложения: тяжёлые запросы к БД, запросы к ресурсоёмким endpoint'ам (поиск, фильтрация, генерация отчётов).
[Применимо: внешний пентест - web-приложения, API-шлюзы; внутренний пентест - микросервисы, внутренние API]

Главное отличие от L3/L4: для Application Exhaustion Flood (T1499.003) не нужна огромная полоса. Достаточно найти эндпоинт, обращение к которому вызывает тяжёлый SQL-запрос или ресурсоёмкие вычисления. Один запрос в секунду может положить сервис, который спокойно выдерживает 10 Gbps чистого SYN flood. Я видел такое на трёх проектах - и каждый раз проблема была в неиндексированном полнотекстовом поиске.

Инструменты:

k6
(Grafana Labs, активный проект, последний релиз - 2025) - генератор HTTP-нагрузки с JavaScript-описанием сценариев:
JavaScript:
import http from 'k6/http';
import { check } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 500 },   // ramp-up до 500 VU
    { duration: '5m', target: 5000 },   // удержание 5000 VU
    { duration: '1m', target: 0 },      // ramp-down
  ],
};

export default function () {
  const res = http.get('https://target.example.com/api/search?q=test');
  check(res, { 'status 200': (r) => r.status === 200 });
}
stages реализует градуальное наращивание нагрузки - один из ключевых принципов безопасного DDoS стресс тестирования. Вы не бьёте максимумом сразу, а поднимаете трафик ступенчато, фиксируя деградацию на каждом шаге.

Locust (Python, активный проект) - альтернатива k6 для тех, кто предпочитает Python. Удобен для сложных сценариев с авторизацией и многоступенчатой логикой. Мне он нравится за читаемость сценариев, но k6 быстрее в чистой генерации RPS.

Slowloris-подход - удержание максимального количества открытых соединений с минимальным трафиком. slowhttptest моделирует это: slowhttptest -c 5000 -H -g -o results -i 10 -r 200 -t GET -u https://target.example.com. Техника работает против серверов без ограничений на количество keep-alive соединений - Apache с mod_prefork в дефолте, nginx без limit_conn.

Когда L7-тест не даёт реальной картины​

  • WAF с rate limiting (ModSecurity, Cloudflare WAF, AWS WAF) - фильтрует однотипные запросы. Для обхода нужно варьировать User-Agent, query-параметры, пути. Но это уже не стресс-тест, а проверка WAF-правил - другая задача.
  • CDN-кеширование - если endpoint кешируется на edge, нагрузка не доходит до origin. Для проверки origin-сервера тестируйте некешируемые эндпоинты: POST-запросы, страницы с авторизацией, API с динамическим ответом.
  • Автоскейлинг (Kubernetes HPA, AWS Auto Scaling) - инфраструктура масштабируется под нагрузку, и тест покажет стоимость масштабирования, а не точку отказа. Тоже полезная информация, но отвечает на другой вопрос. (На одном проекте заказчик узнал, что его автоскейлинг при DDoS жрёт $12k/час в AWS - после этого резко захотел настроить rate limiting.)

Метрики мониторинга во время DDoS стресс теста​

Согласно NIST CSF 2.0 (RS.AN-01), каждое уведомление от систем детекции должно быть зафиксировано и расследовано. Во время стресс-теста мониторинг ведётся по двум осям: инфраструктура цели и поведение защитных средств.

Инфраструктурные метрики:

МетрикаЧто показываетКритический порог
CPU utilizationИсчерпание вычислительных ресурсов>90% устойчиво более 60 секунд
RAM utilizationУтечка памяти под нагрузкой>85% с трендом роста
Время отклика (p95, p99)Деградация для конечного пользователя>3x от baseline
Packet lossПотеря пакетов на уровне сети>1%
Количество активных соединенийИсчерпание пула соединений>80% от max_connections
Ошибки 5xxОтказ приложения>5% от общего числа ответов

Метрики защитных средств:
  • False positive rate - сколько легитимных запросов заблокировано WAF/Anti-DDoS во время теста. Если false positive > 2%, защита настроена слишком агрессивно.
  • Время детекции - через сколько секунд после начала теста сработал алерт в SIEM/SOC. Если SIEM не зафиксировал аномалию за 60 секунд - проблема с правилами детекции. Это, кстати, один из самых ценных результатов стресс-теста: не "выдержал ли сервер", а "заметил ли SOC".
  • Время автоматической митигации - для систем с автоматическим реагированием (Cloudflare Under Attack Mode, AWS Shield Advanced auto-mitigation): сколько секунд от начала аномалии до активации фильтрации.
Отдельно фиксируйте пропускную способность - сколько данных в секунду сервер продолжает отдавать легитимным пользователям во время теста. Полный отказ vs деградация с сохранением обслуживания - принципиально разные результаты.

Open-source и коммерческие платформы: что выбрать​

Выбор инструмента определяется масштабом теста, бюджетом и требуемым реализмом. Trade-off таблица:

КритерийOpen-source (hping3, k6, Locust)Коммерческие (BreakingPoint, Red Button, RedWolf)
Максимальный объём трафикаОграничен мощностью ваших серверов (типично до 10 Gbps)Десятки-сотни Gbps с глобально распределённых нод
Реализм multi-vector атакТребует ручной оркестрации нескольких инструментовГотовые сценарии с комбинацией L3/L4/L7
СтоимостьБесплатно (+ стоимость инфраструктуры)От $5,000 за разовый тест до $50,000+ за годовую подписку
Kill SwitchРучной (kill процесса, SIGTERM)Аппаратный / программный с гарантированным временем
ОтчётностьРучная сборка из логов и метрикАвтоматический отчёт с графиками и рекомендациями
Когда достаточноВнутренняя проверка, тест конкретного endpoint, small/medium бизнесCompliance-тестирование, финтех, критическая инфраструктура, страховые требования
Когда не подходитВолюметрические тесты > 10 Gbps, регуляторные требования к отчётностиБюджет < $5,000, ad-hoc проверка одного сервиса

По данным обзора UZCert, среди коммерческих платформ для DDoS-симуляции в 2026 году выделяются Red Button (управляемые тесты с экспертной поддержкой), RedWolf Security (self-service с крупномасштабной инфраструктурой), NimbusDDOS (обучение SOC-команд), Keysight BreakingPoint / CyPerf (лабораторное тестирование) и Cyttack.ai (SMB-сегмент). Keysight BreakingPoint - аппаратная платформа, которую я использую на стендах для тестирования пограничных устройств: она генерирует трафик на уровне line rate (40/100 Gbps) с точным контролем протоколов. Дорого, но для тестирования NGFW ничего лучше пока не встречал.

Для большинства задач нагрузочного тестирования DDoS на L7 связки k6 + Grafana + Prometheus хватает за глаза. L3/L4 с реалистичным объёмом - территория коммерческих решений.

Структура отчёта по результатам тестирования​

Отчёт - единственный артефакт, который останется после теста. Без структурированного отчёта стресс-тест превращается в потраченные деньги без actionable выводов.

Минимальная структура:
  1. Резюме для руководства - 1 страница. Цель теста, ключевой результат (например: "приложение деградирует до неприемлемого уровня при 3,200 RPS на endpoint /api/search"), критичность (высокая/средняя/низкая).
  2. Параметры тестирования - scope, временное окно, используемые инструменты, максимальные параметры нагрузки.
  3. Результаты по сценариям - для каждого вектора (SYN flood, HTTP flood, Slowloris, multi-vector): графики деградации, точки отказа, поведение защитных средств, время детекции.
  4. Обнаруженные уязвимости - конкретные weak points с привязкой к компоненту: "балансировщик nginx: пул соединений исчерпан при 12,000 одновременных TCP-сессий, конфигурация worker_connections=1024". Привязка к OWASP A05:2021 (Security Misconfiguration) - если проблема в конфигурации, а не в архитектуре.
  5. Рекомендации - приоритизированный список. Формат: проблема -> рекомендация -> ожидаемый эффект. Пример: "увеличить worker_connections до 16384, настроить limit_conn_zone в nginx -> повысит порог отказа с 12,000 до ~50,000 одновременных соединений".
  6. Baseline-сравнение - таблица "было до теста / стало под нагрузкой / стало после восстановления". Время восстановления (recovery time) - критически важный показатель, который упускают в большинстве отчётов.
Если администратор прочитал отчёт и не понимает, что конкретно исправлять - отчёт бесполезен. Проверяйте это до отправки заказчику.

Непрерывное тестирование vs разовые проверки​

Разовый стресс-тест даёт snapshot устойчивости на конкретную дату. Через месяц деплоится новый микросервис, меняется конфигурация nginx, обновляется WAF-правило - и результаты теста теряют актуальность. Red Button прямо указывает: configuration drift между ежегодными тестами - основная причина, по которой инфраструктура, прошедшая тест в январе, ложится от реальной атаки в сентябре.

Для критичных систем (финтех, e-commerce, SaaS):
  • L7-тесты - после каждого значимого деплоя (автоматизируются через CI/CD с k6 или Locust).
  • L3/L4-тесты - ежеквартально или после изменений сетевой топологии.
  • Полный multi-vector тест - раз в 6–12 месяцев, с привлечением коммерческой платформы для реалистичного объёма.
По данным IBM X-Force Threat Intelligence Index 2025, 70% атак затрагивают критическую инфраструктуру. Для этой категории организаций проверка устойчивости к DDoS - не разовое мероприятие, а часть операционного цикла.

Чеклист перед запуском DDoS стресс теста​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Пункт 7 пропускают чаще всего - и зря. На одном из проектов kill switch представлял собой SSH-сессию на генератор с командой killall hping3. Когда понадобилось экстренно остановить тест, SSH-сессия отвалилась из-за перегрузки того же канала, по которому шёл тестовый трафик. С тех пор kill switch у нас всегда работает через out-of-band канал: отдельный VPN, мобильная сеть, IPMI. Без вариантов.

Семь лет в нагрузочном тестировании научили одной вещи: инженеры обожают обсуждать инструменты - hping3 vs Scapy, k6 vs Locust, BreakingPoint vs Red Button. Но 80% провалов стресс-тестов, которые я видел, не связаны с выбором инструмента. Никто не уведомил провайдера, не настроил kill switch, не зафиксировал baseline, не согласовал scope с юристами. Инструмент - последние 20% задачи.

Ещё один неудобный факт: большинство компаний, которые заказывают стресс-тест, хотят не проверить устойчивость, а получить бумагу для комплаенса. И когда тест показывает, что приложение ложится при 2,000 RPS на эндпоинт поиска, реакция чаще всего - "давайте не будем включать это в отчёт". Полноценное DDoS стресс тестирование имеет смысл только когда заказчик готов действовать по результатам, а не прятать их. Проверьте свой kill switch прямо сейчас - если он работает через тот же канал, что и тестовый трафик, у вас та же проблема, что была у нас.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab