Fuzzing (L3-L7)
Плагин Fuzzing (L3-L7) используется для проверки устойчивости сетевых устройств к некорректным и случайно изменяемым полям UDP/TCP-трафика. Он помогает оценить, как тестируемое устройство обрабатывает пакеты с неверной чексуммой, изменяемыми IP/TCP-полями, случайной полезной нагрузкой и одновременно идущими L4-потоками.
Fuzzing не заменяет специализированные L7-сценарии. Проверки WAF на HTTP payload и воспроизведение CVE выполняются отдельными плагинами WAF и Сетевые уязвимости (CVE). Fuzzing (L3-L7) предназначен прежде всего для L3-L4 профиля: некорректные UDP/TCP-пакеты, TCP Flow и UDP Flow.
Используйте Fuzzing только в закрытом тестовом контуре. Некорректные пакеты могут намеренно вызывать отбрасывание, ошибки обработки, сбросы сессий и события на средствах защиты.
Табл. 188 – Модули Fuzzing (L3-L7)
| Модуль | Сторона | Что проверяет |
|---|---|---|
| UDP: неверная чексумма | Клиент | Отправку UDP-пакетов с некорректной L4-чексуммой |
| UDP: случайный IP TTL | Клиент | Обработку UDP-пакетов с TTL из заданного значения или диапазона |
| UDP: случайные DSCP/ECN | Клиент | Обработку UDP-пакетов с изменяемыми ToS-полями |
| UDP: случайный IP ID | Клиент | Обработку UDP-пакетов с изменяемым полем IP identification |
| UDP: случайный Payload Data | Клиент | Отправку UDP-пакетов со случайной полезной нагрузкой заданного размера |
| TCP: PSH/ACK без handshake | Клиент | Отправку TCP PSH/ACK-пакетов без предварительной сборки TCP-сессии |
| TCP: неверная чексумма | Клиент | Отправку TCP-пакетов с некорректной L4-чексуммой |
| TCP: случайный SEQ | Клиент | Обработку TCP-пакетов с sequence number из заданного значения или диапазона |
| TCP: случайный MSS | Клиент | Обработку TCP-пакетов с изменяемым MSS |
| TCP: случайный Window Scale | Клиент | Обработку TCP-пакетов с изменяемым Window Scale |
| TCP: случайное окно | Клиент | Обработку TCP-пакетов с изменяемым receive window |
| TCP: случайный Payload Data | Клиент | Отправку TCP-пакетов со случайной полезной нагрузкой заданного размера |
| TCP Flow: stateful-сессии | Клиент, сервер | Сборку валидных TCP-сессий с настраиваемыми TCP-полями |
| UDP Flow: stateful-потоки | Клиент, сервер | Генерацию валидных UDP flow с настраиваемыми IP-полями |
На серверной стороне доступны только flow-модули TCP Flow и UDP Flow. Модули с некорректной чексуммой, stateless TCP-пакетами и случайной полезной нагрузкой отправляются с клиентской стороны.
Настройка модулей
В форме Fuzzing (L3-L7) включите нужные модули переключателями. После включения модуля под ним появляются поля, которые относятся только к этому модулю. Значения можно задавать одним числом или диапазоном через дефис, например 64 или 64-128. Для UDP ECN можно выбрать один или несколько кодов: 00, 01, 10, 11.
Табл. 189 – Настраиваемые поля Fuzzing
| Поле | Где используется | Значение по умолчанию | Допустимое значение |
|---|---|---|---|
| Payload Data | Модули с фиксированной полезной нагрузкой | 256 байт | Число или диапазон 0-9000 |
| UDP TTL | UDP TTL, UDP Flow | 1-255 | Число или диапазон 0-255 |
| UDP DSCP | UDP DSCP/ECN, UDP Flow | 0-63 | Число или диапазон 0-63 |
| UDP ECN | UDP DSCP/ECN, UDP Flow | 00, 01, 10, 11 | Один или несколько ECN-кодов |
| UDP IP ID | UDP IP ID, UDP Flow | 0-65535 | Число или диапазон 0-65535 |
| UDP Payload Data | UDP random payload | 1-1400 байт | Число или диапазон 0-9000 |
| TCP SEQ | TCP SEQ, TCP Flow | 0-4294967295 | Число или диапазон 0-4294967295 |
| TCP MSS | TCP MSS, TCP Flow | 536-1460 | Число или диапазон 0-65535 |
| TCP Window Scale | TCP Window Scale, TCP Flow | 0-14 | Число или диапазон 0-255 |
| TCP window | TCP window, TCP Flow | 1-65535 | Число или диапазон 0-65535 |
| TCP Payload Data | TCP random payload | 1-1400 байт | Число или диапазон 0-9000 |
Если диапазон указан в обратном порядке, содержит неподдерживаемый код ECN или выходит за допустимые границы, задача не запускается и пользователь получает ошибку валидации.
Параметры нагрузки
Общий профиль нагрузки задается в стандартных блоках плагина:
| Параметр | Как используется в Fuzzing |
|---|---|
| Пакетов в секунду | Общий бюджет пакетов в секунду для всех включенных модулей Fuzzing |
| Общее количество сессий | Общий бюджет сессий для включенных flow-модулей |
| Подключений в секунду | Скорость открытия flow-сессий |
| Длительность | Время работы профиля |
При запуске значение Пакетов в секунду делится между всеми включенными модулями Fuzzing: отдельными UDP/TCP stateless-модулями, TCP Flow и UDP Flow. Если число не делится ровно, остаток получает первый модуль по порядку отображения в форме.
Пример: если включено 9 модулей и указано 1000 пакетов в секунду, первый модуль получает 112 пакетов/с, остальные 8 модулей получают по 111 пакетов/с. Если включен только один модуль, он получает весь указанный бюджет.
Параметры Общее количество сессий и Подключений в секунду делятся только между включенными flow-модулями. Если включены TCP Flow и UDP Flow, значение делится между ними поровну; при нечетном числе остаток получает первый flow-модуль. Если включен только один flow-модуль, он получает весь бюджет сессий и скорости открытия.
Для стабильной проверки flow-сессий задавайте нагрузку так, чтобы выбранного бюджета пакетов было достаточно для числа активных сессий. Слишком низкое значение пакетов в секунду при большом количестве сессий может давать редкий трафик на каждую отдельную сессию.
Рекомендации по применению
- Для проверки обработки некорректных пакетов начните с одного модуля, короткой длительности и небольшой скорости, затем увеличивайте набор модулей и нагрузку.
- Для проверки устойчивости сессий включайте TCP Flow или UDP Flow вместе с обычным прикладным трафиком, например HTTP, чтобы видеть, что валидные сессии продолжают работать во время Fuzzing.
- Для подтверждения состава пакетов используйте захват трафика (PCAP) на задаче и сверяйте поля пакетов с выбранными диапазонами.
- Для WAF payload и CVE-проверок используйте отдельные плагины WAF и CVE Replay: они дают прикладные HTTP/CVE-сценарии и собственные дашборды результатов.